[中級編]LLMへ至る道~文脈を考慮して単語を埋め込んでみるって?~[11日目]

2023.12.11

みなさんこんにちは!クルトンです!

前日は、LSTMモデルについてご紹介しました!単語の依存関係を長期間保持できるモデルでしたね。

本日ご紹介する内容はELMoと呼ばれるモデルでして、LSTMを複数使って実現しているモデルになります!

ELMoの中身とは

ELMoは前日ご紹介したLSTMを複数組み合わせたモデルです。

具体的には、順方向LSTMを複数重ねたものと、逆方向LSTMを複数重ねたもの、それらを使って、文章全体を持って単語の埋め込みをする(分散表現を獲得する)というモデルです。

文章だけだとイメージがしづらいでしょうし、図にしてみました。下の図をご覧ください。

road-to-llm-advent-calendar-2023-11-01

上の図は大まかな図となります。図の下部にある「くらにゃん は クラスメソッド の キャラクター です」という文を例として、分散表現を得る(文脈を考慮した単語埋め込みをする)様子を表しています。

多層・順方向LSTMと多層・逆方向LSTMの中身を表示したものを以下に図示します。

road-to-llm-advent-calendar-2023-11-02

それぞれのhはLSTMでの出力です。この図から、それぞれの単語は文全体を考慮して埋め込みをしていると言えます。どういう事か分かりますでしょうか。

文脈を考慮してるってどういう事だ?

例えば「クラスメソッド」を埋め込みする時を考えてみます。

まず順方向についてです。下の図をご覧ください。

road-to-llm-advent-calendar-2023-11-03

「クラスメソッド」の分散表現を獲得しているh3のLSTMでは、既に考慮済みの単語として「くらにゃん」と「は」の情報も含めて計算をしています。

つまり分散表現獲得のために、「クラスメソッド」より前の単語を考慮している状態です。

次に逆方向についてです。下の図をご覧ください。

road-to-llm-advent-calendar-2023-11-04

「クラスメソッド」の分散表現を獲得しているh3のLSTMでは、既に考慮済みの単語として「の」と「キャラクター」と「です」の情報も含めて計算をしています。

つまり分散表現獲得のために、「クラスメソッド」より後の単語を考慮している状態です。

上記内容の結果として「クラスメソッド」の分散表現を計算するときに、「クラスメソッド」以外の単語、つまりは文全体を使って分散表現を獲得しています。

これが文脈を考慮した単語埋め込みというものになります。

なお、2段にしているのは複雑な文脈を捉えられるようにという工夫ですが、重ねれば重ねるほど良いかというとそういう訳ではありません。 過学習と呼ばれる、学習時のデータに引っ張られすぎて、推論結果が振るわない状態になる可能性があるためです。

少し数学を絡めた説明

分散表現を出力している最後の部分では、3日目のブログでご紹介した活性化関数、ソフトマックス関数を使っています。 つまり確率を使っています。

そして損失関数ですが以下のようなものとなっています。

損失関数 = - k = 1 n log ( 自分よりも前の単語を考慮した確率 ) + log ( 自分よりも後の単語を考慮した確率 )

つまり確率を計算して、一番「それっぽい」と思われるものを出力するよう機械学習モデルの中では学習しているという訳です。

ELMoを動かしてみたい方向けの情報

実は過去にブログでPythonコードを公開した事がある内容でして、動作確認として実際に文脈を考慮できているのかを図示しております。よければご覧ください。

終わりに

本日はELMoについてイメージを掴んでいきました。最初のWord2Vecは単語を一意な分散表現で決めていたところから、ELMoでは文全体を使って文脈を考慮した単語の埋め込みができるようになりました。

明日は、文章の類似度とはどういうものかについてご紹介予定です。

本日はここまで。明日もよければご覧ください!

参考サイト

ELMoの論文です。