AIツール 101

Hugging Face LLMツールの完全な初心者向けガイド

mm
Unite.AI を Google の優先ソースに追加
HUGGING FACE - COMPLETE GUIDE

Hugging Faceは、学者、研究者、愛好家のコミュニティを構築したAI研究ラボとハブです。短期間で、Hugging FaceはAIスペースで大きな存在感を得ています。テクノロジー大手であるGoogle、Amazon (AMZN ) 、Nvidiaなどが、Hugging FaceというAIスタートアップに大量の投資を行っており、その評価は$4.5 billionです。

このガイドでは、トランスフォーマー、LLM、Hugging FaceライブラリがオープンソースAIコミュニティを促進する上で重要な役割を果たしていることを紹介します。また、Hugging Faceの基本的な機能、パイプライン、データセット、モデルなどについても説明します。

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

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

大規模言語モデルまたはLLMは、トランスフォーマーを使用して人間のようなテキストを理解および生成するAIシステムです。しかし、これらのモデルを作成することは高価で、通常数百万ドルかかります。これにより、これらのモデルのアクセスが大企業に限定されます。

Hugging Faceは、2016年に設立され、NLPモデルをすべての人にアクセス可能にしようとしています。商業企業でありながら、Hugging Faceは、人や組織がトランスフォーマーモデルを安価に構築して使用できるように、オープンソースリソースを提供しています。機械学習は、コンピューターがパターンを認識することでタスクを実行することを教えることですが、ディープラーニングは、独立して学習するネットワークを作成する機械学習のサブセットです。トランスフォーマーは、入力データを効果的に柔軟に使用できるディープラーニングアーキテクチャの一種であり、大規模言語モデルの構築に最適です。

Hugging FaceがNLPとLLMプロジェクトを促進する方法

Hugging Faceエコシステム - モデル、データセット、メトリック、トランスフォーマー、加速、トークナイザー

Hugging Faceは、次の点でLLMの作業を簡素化しています。

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

Hugging Faceを通じて利用できる優れたリソースは、Open LLM Leaderboardです。これは、大規模言語モデルの効率性を体系的に監視、ランク付け、測定する包括的なプラットフォームであり、オープンソースドメインでの進歩についての微妙な分析を提供します。

LLM Benchmarksは、次の4つのメトリックを使用してモデルを測定します。

  • AI2 Reasoning Challenge (25-shot) — 小学校の理科カリキュラムを中心とした質問シリーズ。
  • HellaSwag (10-shot) — 人間にとっては単純なものの、最先端のモデルにとっては大きな挑戦となる、常識の推論テスト。
  • MMLU (5-shot) — 57の多様なドメインを網羅する、テキストモデルの多面的な評価。
  • TruthfulQA (0-shot) — モデルが頻繁にオンラインで出会う誤情報を反復する傾向を判断するツール。

ベンチマークは、「25-shot」、「10-shot」、「5-shot」、「0-shot」という用語を使用して、モデルに評価プロセス中に与えられるプロンプト例の数を示します。「少数shot」パラダイムでは、モデルはその応答を導くために少数の例が与えられます。一方、「0-shot」設定では、モデルは例が与えられず、事前に学習した知識にのみ頼る必要があります。

Hugging Faceのコンポーネント

パイプライン

‘パイプライン’は、Hugging Faceのトランスフォーマーライブラリの一部である機能で、リポジトリにある事前トレーニング済みモデルを簡単に利用できるようにします。センチメント分析、質問回答、masked言語モデリング、固有表現認識、要約などのタスクに対して、直感的なAPIを提供します。

パイプラインは、3つの主要なHugging Faceコンポーネントを統合します。

  1. トークナイザー: モデルが理解できる形式にテキストを変換します。
  2. モデル: 予測を行うパイプラインの核心です。
  3. ポストプロセッサー: モデルの生の予測を人間が読める形式に変換します。

これらのパイプラインは、広範なNLPタスクを実行するためのユーザーフレンドリなインターフェイスを提供し、コーディングを大幅に減らします。

Hugging Faceライブラリを使用したトランスフォーマーの応用

Hugging Faceライブラリの特徴は、トランスフォーマーライブラリです。これにより、モデルと必要な前処理および後処理ステージを接続して、NLPタスクを簡素化できます。ライブラリをインストールしてインポートするには、次のコマンドを使用します。

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)

出力

Elon Musk: PER, SpaceX: ORG

質問回答

質問回答には、特定の質問に対する正確な回答を特定のコンテキストから抽出することが含まれます。質問回答パイプラインを初期化し、質問とコンテキストを入力して回答を取得します。

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': 'New York'}

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とトークナイザーのRust

Hugging Face SafetensorsとトークナイザーのGitHubページ

Hugging Face (HF) エコシステムは、safetensorsやトークナイザーのようなライブラリでRustを使用し始めました。

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

Candleの主な目的は、サーバーレス推論を可能にし、軽量バイナリのデプロイを可能にし、Pythonをプロダクションワークロードから除去することです。これは、PyTorchなどの完全な機械学習フレームワークが大きくて遅いため、クラスターでインスタンスを作成する際に発生する問題を解決するためのソリューションです。

RustがPythonよりも優先される理由を探ってみましょう。

  1. 速度とパフォーマンス – Rustは、伝統的に機械学習で使用されるPythonよりも驚くほど高速です。Pythonのパフォーマンスは、グローバルインタープリターロック (GIL) により遅くなることがありますが、Rustにはこの問題がないため、タスクの実行が速くなり、パフォーマンスが向上します。
  2. 安全性 – Rustは、ガベージコレクタなしでメモリ安全性を保証します。これは、safetensorsのようなデータ構造の安全性が重要な分野で不可欠です。

Safetensors

Safetensorsは、Rustの速度と安全性の特性から利益を得ます。Safetensorsは、テンソルを操作する複雑な数学的エンティティを扱います。Rustを使用することで、操作は高速であり、メモリの悪用から生じる可能性のあるバグやセキュリティ問題を回避できます。

トークナイザー

トークナイザーは、文やフレーズを単語や用語などの小さな単位に分割するために使用されます。Rustは、このプロセスを高速化するのに役立ち、NLPタスクの効率性を高めます。

Hugging Faceのトークナイザーの核となる概念は、サブワードトークナイゼーションです。これは、単語レベルと文字レベルのトークナイゼーションを微妙にバランスさせ、情報を保持しながら語彙のサイズを最適化します。これは、サブトークン (「##ing」や「##ed」など) を生成することで機能し、意味の豊かさを保持しながら語彙を膨張させないようにします。

サブワードトークナイゼーションには、最も効果的なサブワードとワードレベルトークナイゼーションのバランスを特定するために、大規模なテキストコーパスを分析する必要があるトレーニングフェーズが含まれます。生成されたトークナイザーは、既知のサブワードに分割することで新しい単語を効果的に処理し、高いレベルの意味的理解を維持します。

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

トークナイザーライブラリは、トークナイゼーションプロセスをいくつかのステップに分割します。以下はこれらのコンポーネントです。

  • 正規化: 入力文字列に対して初期変換を適用し、必要な調整 (小文字変換、Unicode正規化、トリミングなど) を行います。
  • 事前トークナイゼーション: 入力文字列を事前セグメントに分割し、空白などの事前定義されたルールに基づいて分割を決定します。
  • モデル: サブトークンの発見と生成を担当し、入力データの特性に適応し、トレーニング機能を提供します。
  • ポストプロセッサー: BERTなどの多くのトランスフォーマーモデルと互換性を確保するために、構築機能を強化し、[CLS]や[SEP]などのトークンを追加します。

トークナイザーライブラリを使用するには、pip install tokenizersコマンドを使用してインストールし、Python環境にインポートします。ライブラリは、短時間で大量のテキストをトークナイゼーションできます。これにより、モデルトレーニングなどのより計算量の多いタスクのために貴重な計算リソースを節約できます。

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

データセット

データセットは、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は、事前トレーニング済みモデルを探索するための幅広い選択肢を提供します。以下は、事前トレーニング済みモデルをロードする方法を示すコードです。

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メソッドを使用してロードします。BertモデルをSQuADデータセットでファインチューニングしたモデルを選択します。

ここで、特定のテキストと質問に対する回答を抽出する関数の使用例を見てみましょう。

text = """
エッフェル塔は、フランスのパリに位置する、世界で最もアイコニックなランドマークの1つです。グスタフ・エッフェルによって設計され、1889年に完成しました。塔の高さは324メートルで、完成当時は世界で最も高い人工構造物でした。
"""

question = "エッフェル塔は誰が設計しましたか?"

# 質問の答えを取得
answer = get_answer(text, question)
print(f"質問の答えは:{answer}")
# 出力:質問の答えは:グスタフ・エッフェル

このスクリプトでは、get_answer関数を使用して、テキストから質問の答えを抽出します。これは、Hugging Faceのトランスフォーマーライブラリを使用して、シンプルで強力な質問回答システムを構築する実用的応用を示しています。概念を理解するには、Google Colab Notebook (GOOGL ) で実践的な実験を行うことをお勧めします。

結論

Hugging Faceは、幅広いオープンソースツール、事前トレーニング済みモデル、ユーザーフレンドリなパイプラインを提供することで、プロフェッショナルと初心者がAIの世界に入ることを容易にします。また、Rustの統合は、Hugging Faceが革新を促進しながらAIアプリケーションで効率とセキュリティを確保するというコミットメントを強調しています。Hugging Faceの変革的な仕事は、高水準のAIツールへのアクセスを民主化するだけでなく、AIスペースでの学習と開発のための共同環境も育みます。これにより、AIが誰でもアクセスできる将来が実現します。

私は過去5年間、機械学習とディープラーニングの魅力的世界に没頭してきました。私の情熱と専門知識は、AI/MLに特に焦点を当てた50以上の多様なソフトウェアエンジニアリングプロジェクトに貢献することになりました。私の継続的な好奇心は、自然言語処理という分野にも私を引き付け、さらに探求したいと思っています。