nikkie-ftnextの日記

イベントレポートや読書メモを発信

『大規模言語モデル入門』8章で文埋め込みの理解を更新。単語埋め込みの平均じゃないんですね!

はじめに

色打掛は花嫁衣装、nikkieです

文埋め込み(文のベクトル)について、理解を更新したメモです

  • 文埋め込み同士の距離は意味の類似度を表す
  • (理解 NEW!!)文埋め込みは特徴量として使える
  • (理解 NEW!!)文埋め込みは、単語埋め込みの平均ではない

目次

文埋め込みの嬉しい点(2点)

紐解いたのは『大規模言語モデル入門』。

第8章が、ズバリ「文埋め込み」です。

文の意味を表現するベクトル(数字の並び)が文埋め込みです。
文埋め込みの嬉しい点(書籍だと目的)は、ベクトルの距離が文の意味的類似度を表す点。
意味が似ている文のベクトル同士は距離が近く、似ていない文のベクトル同士は距離が遠くなります。

以前触った記事がこちら

今回もう1つ嬉しい点があることを知りました。
文埋め込みは特徴量として使えるんです!

文埋め込みによって得られたベクトルを特徴量として用いることで、多層パーセプトロンのような単純なモデルでも下流タスクを解く (Kindle版 p.406)

OpenAI1のCookbook中に、文埋め込みを特徴量として、random forestで分類する例があります。

単語のベクトルの平均だと誤解していた

埋め込みは文のレベルだけでなく、文を構成する単語レベルでも得られます。
代表的な手法はword2vec2

文を構成する単語の埋め込みを平均3したら、文の埋め込みになると思っていたのですが、これは誤解でした。

文中の単語の順序や、文脈によって決まる単語の意味を考慮できない (Kindle版 p.411)

見事な例だなと思ったのがこちら

  • 会社の音楽を再生する
  • 音楽の会社を再生する

この2文、構成する単語は同じですよね。
「会社」と「音楽」が入れ替わっているだけです。
ですが、2文の意味は異なります。
「再生」の意味が違うんですよね。

この例で単語の埋め込みの平均を考えると、構成する単語が同じなので、同じベクトルになります。
同じベクトルというのは、構成する単語が同じだが2文の意味は異なるという私たちの感覚を反映できていませんね。

というわけで、単語の埋め込みの平均ではないと理解を改めました。

なお、BERTの出力も文埋め込みに向かない(あまり性能が高くない)と解説されています。

今後:どう作られるかを知りたい

『大規模言語モデル入門』では、SimCSEという文埋め込みモデルの訓練(対照学習)が解説されます4(宿題事項)。
https://github.com/ghmagazine/llm-book/blob/4990a3e69effd794847a6240b8386d3073d78ed4/chapter8/8-3-simcse-training.ipynb

SimCSE自体は聞いたことがありました(積ん読5

教師なしの文類似度タスクの場合、BERTを使って単語をベクトルに変換し、そのベクトルの平均を文のベクトルとするよりも、GloVeなどの単語ベクトルを使用して単語をベクトルに変換した方が良い

しかし、今回ご紹介するSimCSEを使うことで、従来の教師ありによる文ベクトルと同等の性能を発揮することが可能です。また、この論文の優れている点として、BERTを使用した場合に精度が悪化する原因まで明らかにした点があります。

SimCSE(対照学習)の先にOpenAIの埋め込み用APIがあると思うのですが、OpenAIが出しているこちらの論文も気になるところです。

ada-002のブログにて、比較対象の旧モデルとしてこの論文を見つけました。
New and improved embedding model



  1. embedding(埋め込み)を得られるAPIがいくつかありますね。
  2. 過去にこんなことをしました。
  3. 『大規模言語モデル入門』によると、ベースラインとしては有力とのことです(8.1.4)
  4. 8章はembeddingsの他にFaissも扱うので、RAGの要素技術が詰まった章だな〜と思います。
  5. こちらの記事、sentence-transformersに言及しており、こちらとつながりが見えた気がします。