「Hugging Face Transformersを使用したBERT埋め込みの作成」
Hugging Face Transformersを使用したBERT埋め込みの作成 Creating BERT embeddings using Hugging Face Transformers
はじめに
Transformersはもともと、テキストを一つの言語から別の言語に変換するために作られました。BERTは、人間の言語を学習し作業する方法に大きな影響を与えました。それはテキストを理解する元々のトランスフォーマーモデルの部分を改良しました。BERTの埋め込みを作成することは、特に複雑な意味を持つ文章を把握するのに適しています。これは、文章全体を調べ、単語のつながり方を理解することで行います。Hugging Faceのtransformersライブラリは、ユニークな文章コードを作成し、BERTを導入するための鍵です。
学習目標
- BERTと事前学習モデルの理解を深める。これらが人間の言語との作業にどれだけ重要かを理解する。
- Hugging FaceのTransformersライブラリを効果的に使用する方法を学ぶ。これを使用してテキストの特殊な表現を作成する。
- 事前学習されたBERTモデルからこれらの表現を正しく削除する様々な方法を見つける。これは、異なる言語タスクには異なるアプローチが必要なため重要です。
- 実際にこれらの表現を作成するために必要な手順を実際に行い、実践的な経験を積む。自分自身でできることを確認する。
- 作成したこれらの表現を使用して、テキストのソートやテキスト内の感情の把握など、他の言語タスクを改善する方法を学ぶ。
- 特定の言語タスクにさらに適したように事前学習モデルを調整する方法を探索する。これにより、より良い結果が得られる可能性があります。
- これらの表現が言語タスクの改善にどのように使用され、言語モデルの正確性とパフォーマンスを向上させるかを調べる。
この記事はデータサイエンスブログマラソンの一部として公開されました。
パイプラインはトランスフォーマーのコンテキスト内で何を含むのか?
パイプラインは、トランスフォーマーライブラリに含まれる複雑なコードを簡素化するユーザーフレンドリーなツールと考えてください。言語の理解、感情分析、特徴の抽出、質問に対する回答などのタスクにモデルを使用することを簡単にします。これらの強力なモデルとの対話を簡潔な方法で提供します。
- プロンプトエンジニアリング:AIを騙して問題を解決する方法
- 「GPT-4 8つのモデルを1つに統合、秘密が明かされる」
- 「GPTQまたはbitsandbytes:LLMsのためにどの量子化方法を使用するか — Llama 2の例」
パイプラインにはいくつかの重要なコンポーネントが含まれます:トークナイザ(通常のテキストをモデルが処理するための小さな単位に変換するもの)、モデル自体(入力に基づいて予測を行うもの)、そしてモデルがうまく動作するようにするためのいくつかの追加の準備ステップ。
Hugging Face Transformersの使用の必要性は何ですか?
トランスフォーマーモデルは通常非常に巨大であり、トレーニングや実際のアプリケーションで使用するために取り扱うことは非常に複雑です。Hugging Face transformersは、このプロセス全体を簡単にすることを目指しています。どれほど巨大であっても、どんなTransformerモデルでも、ロード、トレーニング、保存するための単一の方法を提供します。モデルのライフサイクルの異なる部分に異なるソフトウェアツールを使用することはさらに便利です。一連のツールでトレーニングを行い、その後、手間をかけずに実世界のタスクに使用することができます。
高度な機能
- これらの最新のモデルは使いやすく、人間の言語の理解と生成、コンピュータビジョンや音声に関連するタスクにおいて優れた結果を提供します。
- また、コンピュータの処理能力を節約し、環境にとっても優れています。研究者はすでにトレーニングされたモデルを共有することができるため、他の人が再びトレーニングする必要がありません。
- わずか数行のコードで、モデルのライフサイクルの各ステップに最適なソフトウェアツールを選択することができます。トレーニング、テスト、実際のタスクに使用する場合でも同様です。
- さらに、各タイプのモデルについての多くの例が豊富に用意されており、オリジナルの作成者が行ったことに従って特定のニーズに合わせて使用するのが簡単です。
Hugging Faceチュートリアル
このチュートリアルはデータセットの操作の基本を学ぶためのものです。HuggingFace transformersの主な目的は、さまざまな形式やタイプのデータセットを簡単にロードできるようにすることです。
データセットの探索
通常、大きなデータセットほど良い結果が得られます。Hugging Faceのデータセットライブラリには、多くの公開データセットを迅速にダウンロードして準備する機能があります。データセットハブからデータセットの名前を使用して直接データセットを取得・保存することができます。結果は、名前でアクセスできるデータセットのすべての部分を含む辞書のようなものです。
Hugging Faceのデータセットライブラリの素晴らしい点は、コンピュータ上のストレージを管理し、Apache Arrowというものを使用していることです。これにより、大きなデータセットでもメモリをあまり使用せずに処理することができます。
データセットの内部を調べることで、データセットの特徴について詳しく学ぶことができます。必要のない部分は簡単に取り除くことができます。また、ラベルの名前を「labels」という名前に変更し、出力形式をtorch、TensorFlow、またはnumpyなどの異なるプラットフォームに設定することもできます。
言語翻訳
翻訳は、一組の単語を別の単語に変えることに関するものです。最初から新しい翻訳モデルを作成するには、2つ以上の言語で大量のテキストが必要です。このチュートリアルでは、英語からフランス語への翻訳においてMarianモデルをより優れたものにします。すでにフランス語と英語の大量のテキストコレクションから多くを学んでいるため、ヘッドスタートを得ています。作業が完了した後、より優れた翻訳モデルが得られます。
from transformers import pipeline
translator = pipeline("translation_en_to_fr")
translation = translator("What's your name?")
## [{'translation_text': "Quel est ton nom ?"}]
ゼロショット分類
これは、自然言語を理解するために訓練されたモデルを使用してテキストを分類する特別な方法です。ほとんどのテキスト分類器はカテゴリのリストを持っていますが、このモデルはテキストを読みながら使用するカテゴリを決定することができます。これにより、非常に適応性がありますが、少し遅くなるかもしれません。このモデルは、15種類の異なる言語でテキストの内容について推測することができます。また、事前に可能なカテゴリを知らなくても大丈夫です。このモデルは、ハブから簡単に取得して使用することができます。
感情分析
Hugging Face Transformersの「pipeline()」関数を使用してパイプラインを作成します。このシステムのこの部分は、感情を理解するためのモデルを簡単に訓練し、ハブで見つけることができる特定のモデルを使用して感情を分析するのに便利です。
ステップ1:実行したいタスクに適したモデルを取得します。この場合、感情分類についての蒸留BERTベースモデルを取得しています。
chosen_model = "distilbert-base-uncased-finetuned-sst-2-english"
distil_bert = pipeline(task="sentiment-analysis", model=chosen_model)
結果として、モデルは意図したタスクを実行できるように準備されます。
perform_sentiment_analysis(english_texts[1:])
このモデルは、提供されたテキストや文に表現された感情を評価します。
質問応答
質問応答モデルは、賢いツールのようなものです。テキストを与えると、そのテキスト内から回答を見つけることができます。異なる文書から情報を取得するのに便利です。このモデルのクールな点は、全ての背景情報を持っていなくても回答を見つけることができることです。
質問応答モデルとHugging Face Transformersライブラリを「question-answering pipeline」で簡単に使用することができます。
どのモデルを使用するかを指定しない場合、パイプラインは「distilbert-base-cased-distilled-squad」というデフォルトのモデルから始まります。このパイプラインは、質問とその質問に関連する文脈を取り、その文脈から回答を見つけ出します。
from transformers import pipeline
qa_pipeline = pipeline("question-answering")
query = "What is my place of residence?"
qa_result = qa_pipeline(question=query, context=context_text)
## {'answer': 'India', 'end': 39, 'score': 0.953, 'start': 31}
BERTワード埋め込み
BERTトークナイザを使用して、BERTを使用したワード埋め込みの作成は、入力テキストを個々の単語やパーツに分解することから始まります。その後、この処理された入力はBERTモデルを通じて隠れ状態のシーケンスを生成します。これらの状態は、入力テキストの各単語のワード埋め込みを作成します。これは、隠れ状態を学習した重み行列との積を用いて行われます。
BERTワード埋め込みの特徴は、コンテキストを理解していることです。つまり、文中での使用方法によって、単語の埋め込みが変化する可能性があるということです。他のワード埋め込みの方法では、同じ単語に対して文中のどこに出現しても同じ埋め込みが作成される場合があります。
BERTの埋め込みを使用する理由は何ですか?
BERTは、「双方向エンコーダー変換からのエンコーダー表現」という言葉の略称であり、言語理解のトレーニングに使用される賢いシステムです。これにより、関連する言語タスクに取り組む人々が、コストをかけずに使うことができる堅固な基盤が作られます。これらのモデルには、2つの主な用途があります。テキストデータからより有益な情報を取得するために使用することができますし、またはデータをファインチューニングして、特定の作業(ソート、名前の検索、質問に答えるなど)を行うために使用することもできます。
ある文、ドキュメント、または画像などの情報をBERTに入力すると、それが重要なビットをテキストから引き出すのに役立ちます。たとえば、単語や文の意味などの情報は、キーワードの検索、類似した事物の検索、情報の取得などのタスクに役立ちます。BERTの特徴的な点は、単語を単独ではなく、使用される文脈で理解することです。これにより、単語の周囲の文脈を考慮しないWord2Vecなどのモデルよりも優れています。さらに、BERTは単語の位置を非常にうまく扱うことができ、これは重要な要素です。
事前学習済みBERTのロード
Hugging Face Transformersを使用すると、簡単にPyTorchでBERTを使用することができます。このライブラリには、OpenAIのGPTやGPT-2などの他の高度な言語モデルと一緒に使用するためのツールもあります。
!pip install transformers
開始するには、PyTorch、事前学習済みのBERTモデル、およびBERT Tokenizerを使用する必要があります。
import torch
from transformers import BertTokenizer, BertModel
トランスフォーマーは、トークンのタイプやテキストのソートなど、さまざまなタスクでBERTを使用するための異なるクラスを提供しています。ただし、単語の表現を取得したい場合は、BertModelが最適な選択肢です。
# OPTIONAL: ロガーを有効にして情報を追跡する
import logging
import matplotlib.pyplot as plt
%matplotlib inline
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# 事前学習済みモデルのトークナイザーをロード
入力のフォーマット
人間の言語を理解するための事前学習済みBERTモデルを使用する場合、入力データが適切な形式になっていることが重要です。以下で詳しく説明します。
- 文の境界に特別なトークンを追加する:BERTは、入力を単語またはサブワードの部分のシリーズのように扱う必要があります。つまり、文をより小さい部分に分割する必要があります。各文の先頭と末尾に特別なトークンを追加する必要があります。
- 文の長さを同じに保つ:複数の入力データで効果的に作業するためには、すべての文の長さが同じになるようにする必要があります。これは、短い文には余分な「パディング」トークンを追加したり、長い文をカットしたりすることで実現できます。
- アテンションマスクの使用:文の長さを同じにするためにパディングトークンを追加する際に、アテンションマスクを使用します。これは、BERTが実際の単語(1とマークされる)とパディング(0とマークされる)の部分を認識するのに役立つマップのようなものです。このマスクは、BERTモデルに入力データを与える際に含まれます。
特別なトークン
以下に、これらのトークンの簡単な説明を示します。
- [SEP]:文の区切りを示す:文末に[SEP]を追加することは重要です。BERTは2つの文を見たとき、それらの関連性を理解する必要がある場合、[SEP]を使用して1つの文が終わり、次の文が始まる場所を認識します。
- [CLS]:主要なアイデアを示す:テキストを分類またはソートするタスクでは、[CLS]で始めることが一般的です。これにより、BERTに対してテキストの主要なポイントやカテゴリーがどこにあるかを示します。
BERTには12層があり、それぞれが与えられたテキストの要約を作成します。要約の部分の数は、入力した単語の数と同じです。ただし、これらの要約は出力されたときに少し異なります。
トークン化
Hugging Face Transformersライブラリの「encode」関数は、データの準備と整理を行います。この関数をテキストに使用する前に、追加の単語を追加したり、長い文をカットするために使用する最長の文の長さを決定する必要があります。
テキストのトークン化方法は?
tokenizer.encode_plus関数は、以下のプロセスを簡略化します:
- 文をトークンに分割すること
- 特別な[SEP]と[CLS]トークンを導入すること
- トークンをそれに対応するIDにマッピングすること
- パディングまたは切り詰めによって統一的な文の長さを確保すること
- 実際のトークンを[PAD]トークンから区別する注意マスクを作成すること
input_ids = []
attention_masks = []
# 各文について…
for sentence in sentences:
encoded_dict = tokenizer.encode_plus(
sentence,
add_special_tokens=True, # '[CLS]'と'[SEP]'を追加
max_length=64, # 文の長さを調整
pad_to_max_length=True, # 文をパディング/切り詰め
return_attention_mask=True,# 注意マスクを生成
return_tensors='pt', # PyTorchテンソルを返す
)
input_ids.append(encoded_dict['input_ids'])
# 注意マスク(パディング/非パディングを識別)を構築
attention_masks.append(encoded_dict['attention_mask'])
セグメントID
BERTでは、文のペアを見ています。トークン化されたテキストの各単語について、それが最初の文に属するか(0でマークされる)または2番目の文に属するか(1でマークされる)を決定します。
この文脈で文を扱う際には、最初の文のすべての単語に0の値を与え、'[SEP]’トークンを付け加え、2番目の文のすべての単語に1の値を与えます。
それでは、テキストと共にBERTを使用する方法について話しましょう:
BERTモデルは、英語の複雑な理解を学習するため、さまざまなタスクのためにテキストの異なる側面を抽出するのに役立ちます。
ラベル付きの文のセットがある場合、BERTモデルが生成した情報を入力(テキスト)として使用して通常の分類器をトレーニングすることができます。
TensorFlowでこのモデルを使用して特定のテキストの特徴を取得するには:
from transformers import BertTokenizer, TFBertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
model = TFBertModel.from_pretrained("bert-base-cased")
custom_text = "
You are welcome to utilize any text of your choice."
encoded_input = tokenizer(custom_text, return_tensors='tf')
output_embeddings = model(encoded_input)
結論
BERTは、Googleが作成したパワフルなコンピューターシステムです。それはテキストから学ぶことができるスマートな脳のようなものです。特定のタスク、例えば文の意味を理解することを教えることで、さらに賢くすることができます。一方、HuggingFaceは、言語処理に取り組むための有名なオープンソースライブラリです。事前学習済みのBERTモデルを提供し、特定の言語の作業に使用するのがはるかに簡単になります。
要点
- 簡単に言えば、事前学習済みのBERTモデルからの単語表現を使用することは、テキストのソート、テキストの感情の把握、物の名前の認識など、さまざまな自然言語タスクに非常に便利です。
- これらのモデルはすでに大規模なデータセットから多くのことを学んでおり、さまざまなタスクに対してうまく機能する傾向があります。
- これらのモデルを特定のジョブに適応することで、すでに獲得した知識を調整してさらに良くすることができます。
- さらに、これらのモデルから単語表現を取得することは、彼らが他の言語タスクで学んだことを使用するのに役立ち、他のモデルの性能を向上させることができます。全体として、事前学習済みのBERTモデルを単語表現に使用することは、言語処理における有望なアプローチです。
よくある質問
この記事に表示されているメディアはAnalytics Vidhyaの所有物ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles