Flair 0.6 : Tutorial 3: 単語埋め込み

Flair 0.6 Tutorial 3: 単語埋め込み (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 09/27/2020 (0.6.1)

* 本ページは、Flair ドキュメントの以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料セミナー開催中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマにウェビナー (WEB セミナー) を定期的に開催しています。スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/
Facebook: https://www.facebook.com/ClassCatJP/

 

Tutorial 3: 単語埋め込み

クラスのセットを提供していて、それによって様々な方法でセンテンスの単語を埋め込むことができます。このチュートリアルではそれがどのように動作するか説明します。このライブラリの 基底型 に精通していることを仮定しています。

 

埋め込み

総ての単語埋め込みクラスは TokenEmbeddings クラスから継承して embed() メソッドを実装します、これは貴方のテキストを埋め込みために呼び出す必要があります。これは Flair の殆どのユーザのためには、様々な埋め込みの複雑さはこのインターフェイスの後ろに隠れたままであることを意味します。必要な埋め込みクラスを単純にインスタンス化合してテキストを埋め込むために embed() を呼び出します。メソッドで生成される総ての埋め込みは PyTorch ベクトルですので、訓練や再調整のために直ちに利用できます。

このチュートリアルは幾つかの一般的な埋め込みを紹介してそれらをどのように利用するかを示します。これらの埋め込みと総てのサポートされる埋め込みの概要については、こちら を確認してください。

 

古典的単語埋め込み

古典的単語埋め込みは静的で単語レベルです、これは各個別の単語は一つの事前計算された埋め込みを正確に得ることを意味します。ポピュラーな GloVe or Komninos 埋め込みを含む殆どの埋め込みはこのクラスに分類されます。

単純に WordEmbeddings クラスをインスタンス化してロードしたい埋め込みの文字列識別子を渡します。そして、GloVe 埋め込みを利用することを望む場合、コンストラクタに文字列 ‘glove’ を渡します :

from flair.embeddings import WordEmbeddings

# init embedding
glove_embedding = WordEmbeddings('glove')

今は、サンプル・センテンスを作成して埋め込みの embed() メソッドを呼び出します。このメソッドにセンテンスのリストを渡すこともできます、何故ならば幾つかの埋め込み型は速度をあげるためにバッチ処理を活用しているからです。

# create sentence.
sentence = Sentence('The grass is green .')

# embed a sentence using glove.
glove_embedding.embed(sentence)

# now check out the embedded tokens.
for token in sentence:
    print(token)
    print(token.embedding)

これはトークンとそれらの埋め込みをプリント出力します。GloVe 埋め込みは次元性 100 の PyTorch ベクトルです。

適切な id 文字列を WordEmbeddings クラスのコンストラクタに渡すことによりどの事前訓練埋め込みをロードするか選択します。典型的には、埋め込みを初期化するために 2-文字言語コードを使用します、英語のために ‘en’ そしてドイツ語のために ‘de’ 等々。デフォルトでは、これは Wikipedia に渡り訓練された FastText 埋め込みを初期化します。’-crawl’ でインスタンス化することにより、Web クロールに渡る FastText 埋め込みを常に利用することもできます。従ってドイツ語の web クロールに渡り訓練された埋め込みを利用するには ‘de-crawl’ です :

german_embedding = WordEmbeddings('de-crawl')

総ての単語埋め込みモデルの完全なリストは、このクラスのより多くの説明と一緒に、ここ で確認してください。

より小さいモデルを望む場合には、一般的には FastText 埋め込み or GloVe を勧めます。

 

Flair 埋め込み

contextual string 埋め込みは標準的な単語埋め込みを超える パワフルな埋め込み で、潜在的な統語的-意味的 (= syntactic-semantic) 情報を捕捉します。主要な違いは : (1) それらは単語のどのような明示的な概念もなしで訓練されてそしてそのため基礎的には単語を文字のシークエンスとしてモデル化します。そして (2) それらはそれらを囲むテキストにより文脈化 (= contextualize) されます、これは同じ単語がその文脈的な使用方法に依拠して異なる埋め込みを持つことを意味します。

Flair では、標準的な単語埋め込みと同じように、適切な埋め込みクラスを単純にインスタンス化することによりこれらのい埋め込みを利用できます :

from flair.embeddings import FlairEmbeddings

# init embedding
flair_embedding_forward = FlairEmbeddings('news-forward')

# create a sentence
sentence = Sentence('The grass is green .')

# embed words in sentence
flair_embedding_forward.embed(sentence)

適切な文字列を FlairEmbeddings クラスのコンストラクタに渡すことによりロードする埋め込みを選択します。総てのサポートされる言語について、forward と backward モデルがあります。ある言語のためのモデルを、ハイフンと forwardbackward のいずれかが続く、2-文字言語コード を使用することでロードできます。

従って、ドイツ語のための forward と backward Flair モデルをロードすることを望む場合、このようにそれをします :

# init forward embedding for German
flair_embedding_forward = FlairEmbeddings('de-forward')
flair_embedding_backward = FlairEmbeddings('de-backward')

標準的な使用方法のより多くの情報とともに、事前訓練された FlairEmbeddings モデルの完全なリストは ここ で確認してください。

 

Stacked 埋め込み

stacked 埋め込みはこのライブラリの最も重要なコンセプトの一つです。それらを異なる埋め込みを一緒に結合するために使用できます、例えば伝統的な埋め込みを contextual string 埋め込みと一緒に両者を使用することを望む場合です。stacked 埋め込みは貴方に混合して適合させることを許容します。私達は埋め込みの組合せがしばしば最善の結果を与えることを見出します。

貴方が行なう必要のある総ては StackedEmbeddings クラスを使用して結合したい埋め込みのリストを渡すことによりそれをインスタンス化することです。例えば、古典的な GloVe 埋め込みを forward と backward Flair 埋め込みと結合させましょう。これは殆どのユーザに一般的に勧める組合せです、特にシークエンス・ラベリングのためにです。

最初に、結合したい 2 つの埋め込みをインスタンス化します :

from flair.embeddings import WordEmbeddings, FlairEmbeddings

# init standard GloVe embedding
glove_embedding = WordEmbeddings('glove')

# init Flair forward and backwards embeddings
flair_embedding_forward = FlairEmbeddings('news-forward')
flair_embedding_backward = FlairEmbeddings('news-backward')

今は StackedEmbeddings クラスをインスタンス化してそれにこれら 2 つの埋め込みを含むリストを渡します。

from flair.embeddings import StackedEmbeddings

# create a StackedEmbedding object that combines glove and forward/backward flair embeddings
stacked_embeddings = StackedEmbeddings([
                                        glove_embedding,
                                        flair_embedding_forward,
                                        flair_embedding_backward,
                                       ])

That’s it! 今はこの埋め込みを他の総ての埋め込みのように単に利用します、i.e. センテンス(s) に渡り method() メソッドを呼び出します。

sentence = Sentence('The grass is green .')

# just embed a sentence using the StackedEmbedding as you would with any single embedding.
stacked_embeddings.embed(sentence)

# now check out the embedded tokens.
for token in sentence:
    print(token)
    print(token.embedding)

単語は今では、3 つの異なる埋め込みの結合を使用して埋め込まれます。これは結果としての埋め込みベクトルは依然として単一の PyTorch ベクトルであることを意味します。

 

以上