「Hugging Face LLMツールの完全初心者ガイド」

Hugging Face LLM Beginner's Guide

ハギングフェイスは、研究者、研究者、愛好家のコミュニティを築いたAI研究所およびハブです。わずかな時間で、ハギングフェイスはAIの領域で相当な存在感を持っています。Google、Amazon、Nvidiaなどのテックジャイアントは、AIスタートアップであるハギングフェイスに大規模な投資を行い、その評価額を45億ドルに押し上げました。

このガイドでは、トランスフォーマー、LLM、およびハギングフェイスライブラリがオープンソースのAIコミュニティの育成に重要な役割を果たしている方法を紹介します。また、パイプライン、データセット、モデルなど、ハギングフェイスの重要な機能について、Pythonの実践的な例を使用して説明します。

NLPにおけるトランスフォーマー

2017年、コーネル大学はトランスフォーマーを紹介する影響力のある論文を発表しました。これらはNLPで使用されるディープラーニングモデルです。この発見はChatGPTなどの大規模な言語モデルの開発を促進しました。

大規模言語モデルまたはLLMは、トランスフォーマーを使用して人間らしいテキストを理解し作成するAIシステムです。しかし、これらのモデルを作成するには多額の費用がかかり、大企業にしか利用できません。

2016年に始まったハギングフェイスは、NLPモデルを誰もが利用できるようにすることを目指しています。商業企業であるにもかかわらず、ハギングフェイスはオープンソースのリソースを提供し、人々や組織が手頃な価格でトランスフォーマーモデルを構築および使用できるよう支援しています。機械学習は、パターンを認識することによってコンピュータにタスクを実行させることですが、ディープラーニングは、独立して学習するネットワークを作成します。トランスフォーマーは、入力データを効果的かつ柔軟に使用するディープラーニングアーキテクチャの一種であり、トレーニング時間の要件が少ないため、大規模な言語モデルの構築には人気の選択肢です。

ハギングフェイスがNLPおよびLLMプロジェクトを支援する方法

ハギングフェイスは、LLMの使用を簡単にするために次のようなものを提供しています:

  1. 選択できる事前学習済みモデルの範囲。
  2. これらのモデルを特定のニーズに合わせて微調整するためのツールと例。
  3. さまざまな環境に対する簡単な展開オプション。

ハギングフェイスを通じて利用できる素晴らしいリソースの1つは、オープンLLMリーダーボードです。包括的なプラットフォームとして機能し、さまざまな大規模言語モデル(LLM)やチャットボットの効率を体系的に監視、ランク付け、評価し、オープンソース領域の進歩を見極める洞察力のある分析を提供します。

LLMベンチマークは、以下の4つの指標を使用してモデルを測定します:

  • AI2 Reasoning Challenge(25-shot)- 初等科学のカリキュラムに関する一連の質問。
  • HellaSwag(10-shot)- 人間にとって簡単な常識的な推論テストですが、最先端のモデルにとっては重要な課題です。
  • MMLU(5-shot)- 基本的な数学、法律、コンピュータサイエンスなど、57の異なるドメインを網羅する多面的な評価です。
  • TruthfulQA(0-shot)- オンラインで頻繁に遭遇する誤情報を反映する傾向をモデルが判定するためのツール。

「25-shot」、「10-shot」、「5-shot」、「0-shot」といった用語を使用して記述されるベンチマークは、モデルが評価プロセス中に与えられるプロンプトの例の数を示し、さまざまなドメインでのパフォーマンスと推論能力を評価するために使用されます。 「few-shot」パラダイムでは、モデルには少数の例が提供され、応答のガイドを支援しますが、「0-shot」の設定ではモデルに例が与えられず、既存の知識だけに頼る必要があります。

ハギングフェイスの構成要素

パイプライン

「パイプライン」は、Hugging Faceのトランスフォーマーライブラリの一部であり、Hugging Faceリポジトリで利用可能な事前学習済みモデルの簡単な利用を支援する機能です。感情分析、質問応答、マスクされた言語モデリング、固有表現認識、要約などのタスクの直感的なAPIを提供します。

パイプラインは、次の3つの中核的なハギングフェイスコンポーネントを統合しています:

  1. トークナイザ:テキストをモデルが理解できる形式に変換することで、テキストをモデルに準備します。
  2. モデル:これはパイプラインの中心であり、前処理された入力に基づいて実際の予測が行われます。
  3. ポストプロセッサ:モデルの生の予測を人間が読める形式に変換します。

これらのパイプラインは、豊富なコーディングを削減するだけでなく、さまざまなNLPタスクを達成するためのユーザーフレンドリーなインターフェースも提供します。

Hugging Faceライブラリを使用したTransformerの応用

Hugging Faceライブラリのハイライトは、NLPタスクを簡素化するTransformersライブラリです。このライブラリは、モデルを必要な前処理および後処理のステージと接続することで、分析プロセスを合理化します。ライブラリをインストールおよびインポートするには、次のコマンドを使用します:

pip install -q transformers
from transformers import pipeline

これを行った後、感情分析から始まるNLPタスクを実行することができます。感情分析では、テキストをポジティブまたはネガティブの感情に分類します。ライブラリの強力なpipeline()関数は、他のパイプラインを包括し、オーディオ、ビジョン、マルチモーダルドメインのタスク固有のアプリケーションを容易にするハブとして機能します。

実用的な応用

テキスト分類

Hugging Faceのpipeline()関数を使用すると、テキスト分類が簡単になります。次のようにテキスト分類パイプラインを初期化できます:

classifier = pipeline("text-classification")

実際の体験のために、文字列または文字列のリストをパイプラインに入力して予測結果を取得し、PythonのPandasライブラリを使用して整然と可視化できます。以下は、これを示すPythonのスニペットです:

sentences = ["AIの素晴らしい世界を紹介できてとても嬉しいです。",
"期待を裏切らないことを願っています。"]
# リスト内の各文に対して分類結果を取得
results = classifier(sentences)
# 各結果をループしてラベルとスコアを表示
for i, result in enumerate(results):
    print(f"結果 {i + 1}:")
    print(f" ラベル: {result['label']}")
    print(f" スコア: {round(result['score'], 3)}\n")

出力

結果 1: 
ラベル: POSITIVE 
スコア: 1.0 
結果 2: 
ラベル: POSITIVE 
スコア: 0.996 

固有表現抽出(NER)

NERは、テキストから「固有表現」と呼ばれる現実世界のオブジェクトを抽出する上で重要です。NERパイプラインを使用してこれらのエンティティを効果的に識別できます:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Elon MuskはSpaceXのCEOです。"
outputs = ner_tagger(text)
print(outputs)

出力

 {'score': 0.998, 'start': 51, 'end': 60, 'answer': 'ニューヨーク'} 

質問応答

質問応答は、与えられた文脈から特定の質問に対する正確な回答を抽出することを目的としています。質問応答パイプラインを初期化し、質問と文脈を入力して目的の回答を取得します:

reader = pipeline("question-answering")
text = "Hugging FaceはNLPのためのツールを作成する会社です。2016年に設立され、ニューヨークに拠点を置いています。"
question = "Hugging Faceの拠点はどこですか?"
outputs = reader(question=question, context=text)
print(outputs)

出力

 {'score': 0.998, 'start': 51, 'end': 60, 'answer': 'ニューヨーク'} 

Hugging Faceのpipeline関数には、テキスト分類、NER、質問応答以外のさまざまなタスクのためのプリビルトパイプラインの配列が用意されています。以下に利用可能なタスクの一部の詳細を示します:

テーブル:Hugging Faceパイプラインタスク

タスク 説明 パイプライン識別子
テキスト生成 与えられたプロンプトに基づいてテキストを生成する pipeline(task=“text-generation”)
要約 長文またはドキュメントを要約する pipeline(task=“summarization”)
画像分類 入力画像にラベルを付ける pipeline(task=“image-classification”)
オーディオ分類 オーディオデータをカテゴリ分けする pipeline(task=“audio-classification”)
ビジュアルクエスチョンアンサリング 画像と質問の両方を使用してクエリに答える pipeline(task=“vqa”)

 

詳細な説明とさらなるタスクについては、Hugging Faceのウェブサイトのパイプラインのドキュメントを参照してください。

Hugging FaceがRustに焦点を移している理由

Hugging Face SafetensorsとTokenizerのGitHubページ

Hugging Face(HF)のエコシステムは、safesensorsやtokenizersなどのライブラリでRustを利用するようになりました。

Hugging Faceは最近、Candleという新しい機械学習フレームワークもリリースしました。Candleは従来のPythonを使用する伝統的なフレームワークとは異なり、Rustで構築されています。Rustを使用することで、GPU操作をサポートしながらパフォーマンスを向上させ、ユーザーエクスペリエンスを簡素化することを目指しています。

Candleの主な目的は、サーバーレス推論を容易にすることで、軽量なバイナリの展開を可能にし、Pythonをプロダクションワークロードから削除することです。Pythonはオーバーヘッドのため、プロセスの遅延を引き起こすことがあります。このフレームワークは、クラスタ上でインスタンスを作成する際に大きくて遅いPyTorchなどの完全な機械学習フレームワークで遭遇する問題を克服するための解決策として提供されます。

RustがPythonよりも好まれる選択肢になっている理由を探ってみましょう。

  1. スピードとパフォーマンス – Rustは、従来の機械学習フレームワークで使用されるPythonよりも驚異的な速度で知られています。Pythonのパフォーマンスは、グローバルインタプリタロック(GIL)によって遅延することがありますが、Rustはこの問題を抱えていません。そのため、実行タスクの高速化とそれに続くプロジェクトのパフォーマンス向上が約束されます。
  2. セーフティ – Rustは、ガベージコレクターなしでメモリセーフティを提供します。これは、並行システムの安全性を保証する上で重要な要素です。これは、safetensorsなどの領域でデータ構造の扱いにおける安全性が優先される場合に重要な役割を果たします。

Safetensors

Safetensorsは、Rustのスピードとセーフティ機能を活用しています。Safetensorsは、テンソルという複雑な数学的実体の操作を含み、Rustを使用することで、操作が高速でありながらも一般的なバグやメモリの誤処理から生じるセキュリティの問題を回避し、安全性を確保します。

Tokenizer

Tokenizerは、文やフレーズを単語や用語などのより小さい単位に分割する処理を担当します。Rustはこのプロセスを高速化し、トークン化プロセスが正確であるだけでなく、迅速であり、自然言語処理タスクの効率を向上させます。

Hugging Faceのトークナイザーの核心には、サブワードトークナイゼーションの概念があり、単語レベルと文字レベルのトークナイゼーションの適切なバランスを取ることで、情報の保持と語彙サイズの最適化を図っています。これは、「##ing」と「##ed」といったサブトークンの作成を通じて、意味の豊かさを保持しながら語彙を膨張させずに行います。

サブワードトークナイゼーションには、文字と単語レベルのトークナイゼーションの最適なバランスを見つけるためのトレーニングフェーズが必要です。これは、接頭辞や接尾辞の単純なルールを超えて、効率的なサブワードトークナイザーを設計するために広範なテキストコーパスの言語パターンの包括的な分析を必要とします。生成されたトークナイザーは、未知の単語を既知のサブワードに分割することで、高いレベルの意味理解を維持することができます。

トークナイゼーションのコンポーネント

トークナイザーライブラリは、トークナイゼーションプロセスをいくつかのステップに分割し、それぞれがトークナイゼーションの異なる側面を対応しています。これらのコンポーネントについて詳しく見ていきましょう:

  • 正規化:入力文字列に初期変換を行い、小文字変換、Unicode正規化、および削除などの必要な調整を行います。
  • プリトークナイザー:入力文字列を事前セグメントに分割し、スペース区切りなどの事前定義されたルールに基づいて分割を決定します。
  • モデル:サブトークンの発見と作成を監視し、入力データの特定の要件に適応し、トレーニング機能を提供します。
  • ポストプロセッサ:[CLS]や[SEP]などのトークンを追加することにより、BERTなどの多くのトランスフォーマーベースのモデルとの互換性を向上させるための構築機能を強化します。

Hugging Faceのトークナイザーを使うためには、以下のコマンドを使用してライブラリをインストールして、Pythonの環境にインポートしてください。このライブラリは非常に短い時間で大量のテキストをトークナイズすることができますので、モデルトレーニングなどのより集中的なタスクのために貴重な計算リソースを節約することができます。

トークナイザーライブラリは、C++の構文の類似性を受け継ぐRustを使用しており、プログラミング言語設計の新しい概念を導入しています。Pythonのバインディングと組み合わせることで、Pythonの環境で作業しながら低レベルの言語のパフォーマンスを楽しむことができます。

データセット

Hugging Faceデータセット

データセットはAIプロジェクトの基盤です。Hugging FaceはさまざまなNLPタスクなどに適したデータセットを豊富に提供しています。これらを効率的に利用するためには、データセットの読み込みや解析のプロセスを理解することが重要です。以下は、Hugging Faceで利用可能なデータセットを探索するためのよくコメントされたPythonスクリプトの例です。

from datasets import load_dataset
# データセットを読み込む
dataset = load_dataset('squad')
# 最初のエントリを表示する
print(dataset[0])

このスクリプトでは、load_dataset関数を使用してSQuADデータセットを読み込んでいます。SQuADは質問応答タスクにおいて人気のある選択肢です。

事前学習済みモデルの活用と統合

Hugging Faceモデル

事前学習済みモデルは多くのディープラーニングプロジェクトの基盤となり、研究者や開発者がゼロから始めることなくイニシアチブを加速させることができます。Hugging Faceはさまざまな事前学習済みモデルの探索を容易にするためのコードを提供しています。

from transformers import AutoModelForQuestionAnswering, AutoTokenizer
# 事前学習済みモデルとトークナイザーを読み込む
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
# モデルのアーキテクチャを表示する
print(model)

モデルとトークナイザーを読み込んだ後、テキストと質問を入力として受け取り、テキストから抽出された回答を返す関数を作成することができます。トークナイザーを使用して入力テキストと質問をモデルと互換性のある形式に変換し、この変換された入力をモデルに入力して回答を取得します。

def get_answer(text, question):
    # 入力テキストと質問をトークナイズする
    inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
    outputs = model(**inputs)
    # 回答の開始と終了のスコアを取得する
    answer_start = torch.argmax(outputs.start_logits)
    answer_end = torch.argmax(outputs.end_logits) + 1
    answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
    return answer

このコードスニペットでは、transformersパッケージから必要なモジュールをインポートし、from_pretrainedメソッドを使用して事前学習済みモデルと対応するトークナイザーを読み込んでいます。SQuADデータセットで事前学習済みのBERTモデルを選択しました。

この関数の使用例を見てみましょう。テキストの段落があって、その中から特定の質問に対する回答を抽出したい場合です。

text = """
The Eiffel Tower, located in Paris, France, is one of the most iconic landmarks in the world. It was designed by Gustave Eiffel and completed in 1889. The tower stands at a height of 324 meters and was the tallest man-made structure in the world at the time of its completion.
"""
question = "Who designed the Eiffel Tower?"
# 質問に対する回答を取得する
answer = get_answer(text, question)
print(f"質問への回答は:{answer}")
# 出力:質問への回答は:Gustave Eiffel

このスクリプトでは、テキストと質問を受け取り、適切にトークナイズし、事前学習済みのBERTモデルを利用してテキストから回答を抽出するget_answer関数を構築しています。これはHugging Faceのtransformersライブラリを使用してシンプルでパワフルな質問応答システムを構築するための実用的なアプリケーションの例です。概念をより深く理解するためには、Google Colab Notebookを使用した実際の実験をお勧めします。

結論

豊富なオープンソースのツール、事前学習済みモデル、使いやすいパイプラインを通じて、経験豊富なプロフェッショナルから初心者まで、AIの広大な世界に簡単に理解しながら没頭できるようになります。さらに、速度と安全性の特徴によるRustの統合への取り組みは、Hugging Faceがイノベーションを促進し、AIアプリケーションの効率とセキュリティを確保するという取り組みを強調しています。Hugging Faceの変革的な業績は、高度なAIツールへのアクセスを民主化するだけでなく、AIの学習と開発のための協力的な環境を育成し、AIがアクセス可能な未来を促進しています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

「Zenの共同創設者兼CTO、イオン・アレクサンドル・セカラ氏によるインタビューシリーズ」

創業者兼CTOであるIon-Alexandru Secaraは、Zen(PostureHealth Inc.)の開発を牽引しており、画期的な姿勢矯正ソフトウェア...

データサイエンス

2023年にAmazonのデータサイエンティストになる方法は?

ほとんどのビジネスは現在、膨大な量のデータを生成し、編集し、管理しています。しかし、ほとんどのビジネスは、収集したデ...

データサイエンス

「David Smith、TheVentureCityの最高データオフィサー- インタビューシリーズ」

デビッド・スミス(別名「デビッド・データ」)は、TheVentureCityのチーフデータオフィサーであり、ソフトウェア駆動型のス...

人工知能

「ゲイリー・ヒュースティス、パワーハウスフォレンジクスのオーナー兼ディレクター- インタビューシリーズ」

ゲイリー・ヒュースティス氏は、パワーハウスフォレンジックスのオーナー兼ディレクターであり、ライセンスを持つ私立探偵、...

人工知能

「LeanTaaSの創設者兼CEO、モハン・ギリダラダスによるインタビューシリーズ」

モーハン・ギリダラダスは、AIを活用したSaaSベースのキャパシティ管理、スタッフ配置、患者フローのソフトウェアを提供する...

データサイエンス

「Seerの最高データオフィサーであるDr. Serafim Batzoglouによるインタビューシリーズ」

セラフィム・バツォグルはSeerのチーフデータオフィサーですSeerに加わる前は、セラフィムはInsitroのチーフデータオフィサー...