Flair 0.6 Tutorial 5: ドキュメント埋め込み (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 09/28/2020 (0.6.1)
* 本ページは、Flair ドキュメントの以下のページを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ |
Facebook: https://www.facebook.com/ClassCatJP/ |
Tutorial 5: ドキュメント埋め込み
ドキュメント埋め込みは 単語埋め込み とは、それらがテキスト全体のために一つの埋め込みを与えるという点で異なります、その一方で単語埋め込みは個々の単語のために埋め込みを与えます。
このチュートリアルのためには、このライブラリの 基底型 と単語埋め込みがどのように動作するかに精通していることを仮定します。
埋め込み
総てのドキュメント埋め込みクラスは DocumentEmbeddings クラスから継承して embed() メソッドを実装します、これはテキストを埋め込むために呼び出す必要があります。これは Flair の殆どのユーザのためには、様々な埋め込みの複雑さはこのインターフェイスの後ろに隠れたままであることを意味します。
Flair には 4 つの主要なドキュメント埋め込みがあります :
- DocumentPoolEmbeddings、これは単純にセンテンスの総ての単語埋め込みに渡る平均を取ります。
- DocumentRNNEmbeddings、これはセンテンスの総ての単語埋め込みに渡り RNN を訓練します。
- TransformerDocumentEmbeddings、これは事前訓練されたトランスフォーマーを使用しそして殆どのテキスト分類タスクのために推奨されます。
- SentenceTransformerDocumentEmbeddings、これは事前訓練されたトランスフォーマーを使用しそしてセンテンスの良いベクトル表現が必要であるときに推奨されます。
これら 4 つの選択肢の一つを初期化してセンテンスを埋め込むために embed() を呼び出します。
以下で 4 つのドキュメント埋め込み総ての詳細を与えます :
ドキュメント・プール埋め込み
ドキュメント埋め込みの最も単純なタイプはセンテンス全体のための埋め込みを得るためにセンテンスの総ての単語埋め込みに渡りプーリング演算を行ないます。デフォルトは平均プーリングで、総ての単語埋め込みの平均が使用されることを意味します。
インスタンス化するには、それに渡りプールする単語埋め込みのリストを渡す必要があります。
from flair.embeddings import WordEmbeddings, DocumentPoolEmbeddings # initialize the word embeddings glove_embedding = WordEmbeddings('glove') # initialize the document embeddings, mode = mean document_embeddings = DocumentPoolEmbeddings([glove_embedding])
今は、サンプルセンテンスを作成して埋め込みの embed() メソッドを呼び出します。
# create an example sentence sentence = Sentence('The grass is green . And the sky is blue .') # embed the sentence with our document embedding document_embeddings.embed(sentence) # now check out the embedded sentence. print(sentence.embedding)
これはドキュメントの埋め込みをプリント出力します。ドキュメント埋め込みは単語埋め込みに由来しますので、その次元性は使用している単語埋め込みの次元性に依拠します。これらの埋め込みのより詳細については、こちら を確認してください。
DocumentPoolEmbeddings の 1 つの優位点はそれらが訓練される必要がないことです、貴方のドキュメントを埋め込むためにそれらを直ちに使用できます。
ドキュメント RNN 埋め込み
これらの埋め込みはセンテンスの総ての単語に渡り RNN を実行して RNN の最終状態をドキュメント全体のための埋め込みとして利用します。DocumentRNNEmbeddings を使用するためにはトークン埋め込みのリストをそれに渡すことによりそれらを初期化する必要があります :
from flair.embeddings import WordEmbeddings, DocumentRNNEmbeddings glove_embedding = WordEmbeddings('glove') document_embeddings = DocumentRNNEmbeddings([glove_embedding])
デフォルトでは、GRU-タイプの RNN がインスタンス化されます。今は、サンプル・センテンスを作成して埋め込みの embed() メソッドを呼び出します。
# create an example sentence sentence = Sentence('The grass is green . And the sky is blue .') # embed the sentence with our document embedding document_embeddings.embed(sentence) # now check out the embedded sentence. print(sentence.get_embedding())
これは完全な (= complete) センテンスのために単一の埋め込みを出力します。埋め込み次元性は使用している隠れ状態の数と RNN が双方向であるか否かに依拠します。これらの埋め込みの詳細については、こちら を確認してください。
この埋め込みを初期化するとき、RNN 重みはランダムに初期化されることに注意してください。従ってこの埋め込みが意味を持つためには訓練される必要があります。
TransformerDocumentEmbeddings
事前訓練された トランスフォーマー からセンテンス全体のための埋め込みを直接得ることができます。異なる識別子で異なるトランスフォーマーを得ながら、インスタンス化する総てのトランスフォーマー埋め込みのための単一クラスがあります。例えば、標準的な BERT トランスフォーマー・モデルをロードするには、次を行ないます :
from flair.embeddings import TransformerDocumentEmbeddings # init embedding embedding = TransformerDocumentEmbeddings('bert-base-uncased') # create a sentence sentence = Sentence('The grass is green .') # embed the sentence embedding.embed(sentence)
代わりに RoBERTa を使用することを望む場合には、次を行ないます :
from flair.embeddings import TransformerDocumentEmbeddings # init embedding embedding = TransformerDocumentEmbeddings('roberta-base') # create a sentence sentence = Sentence('The grass is green .') # embed the sentence embedding.embed(sentence)
ここ に総てのモデル (BERT, RoBERTa, XLM, XLNet 等) の完全なリストがあります。このクラスでこれらのモデルのどれでも利用できます。
SentenceTransformerDocumentEmbeddings
sentence-transformer ライブラリから幾つかの埋め込みを得ることもできます。これらのモデルはセンテンス(s) のための良い一般目的ベクトル表現を与えるために事前訓練されています。
from flair.data import Sentence from flair.embeddings import SentenceTransformerDocumentEmbeddings # init embedding embedding = SentenceTransformerDocumentEmbeddings('bert-base-nli-mean-tokens') # create a sentence sentence = Sentence('The grass is green .') # embed the sentence embedding.embed(sentence)
それらの事前訓練されたモデルの完全なリストを ここ で見つけられます。
Note: この埋め込みを利用するには、”pip install sentence-transformers” で sentence-transformers をインストールする必要があります。
以上