「multilingual-e5-large」の仕組みを技術的に理解する。Tursoの全文検索(FTS5)とは別物だった
「multilingual-e5-large」の仕組みを技術的に理解する。Tursoの全文検索(FTS5)とは別物だった
Fableに作ってもらったベクトル検索デモが、「multilingual-e5-large」というモデルで教材をベクトル化していた。これは自分が蔵書DB(Turso)で使っているFTS5全文検索と同じ技術なのか。気になったので、正体を確認することにした。
先に結論を書く。別の技術だった。FTS5は文字列を3文字単位に区切って並びの一致を探すインデックス方式で、言語モデルは一切介在しない。multilingual-e5-largeは、Transformerというニューラルネットワークが大量のテキストから「意味の近さ」を学習した結果を使う埋め込みモデルだった。
multilingual-e5-largeの正体
E5は、Microsoft ResearchのLiang Wangらが開発したテキスト埋め込みモデルのファミリー名。論文タイトルは「Text Embeddings by Weakly-Supervised Contrastive Pre-training」で、E5自体は「EmbEddings from bidirEctional Encoder rEpresentations」の略。5つのEの頭文字から取られている。
「multilingual」は多言語対応版という意味で、ベースにはXLM-RoBERTa-large(多言語対応のTransformerエンコーダ)が使われている。対応言語はXLM-RoBERTa由来の100言語で、公開されているモデルカードには「低リソース言語では性能が落ちる可能性がある」という注記もある。
「large」はモデルのサイズ区分。E5にはsmall・base・largeの3サイズがあり、largeが最も精度重視のサイズになる。パラメータ数はモデルカードに明記されていないが、出力するベクトルの次元数は1024と決まっている。
テキストが1024個の数字になるまで
テキストを渡すと、次の手順でベクトルが作られる。
- テキストを最大512トークンまでに区切る(トークナイズ)
- XLM-RoBERTa-largeのエンコーダに通し、各トークンごとの出力を得る
- パディング部分をマスクしたうえで、全トークンの出力を平均する(平均プーリング)
- できたベクトルの長さを1に揃える(L2正規化)
この4手順を経て、入力したテキスト1つにつき1024個の数字の並び(ベクトル)が1つできる。意味が近い文章どうしは、このベクトル空間上で近い位置に来る。デモ画面に出ていた「類似度0.861」のような数値は、2つのベクトルの向きがどれだけ揃っているか(コサイン類似度)を表している。
なぜ「意味の近さ」がわかるのか
ここが要になる。エンコーダに通すだけでは、意味の近い文章が自動的に近いベクトルになるわけではない。近くなるように、事前に大量のデータで学習させてある。
学習は2段階に分かれている。1段階目は弱教師あり対照学習と呼ばれる方法で、mC4・CC News・NLLBの翻訳ペア・Wikipediaなどから集めた約45億件のテキストペアを使う。似た意味のペアどうしのベクトルを近づけ、無関係なペアどうしのベクトルを遠ざける、という調整をひたすら繰り返す。2段階目は、複数言語の教科書やQ&Aデータセットなど、200万件以上のペアで教師あり微調整をかける。
この2段階を経ると、文字としては一致していなくても、意味が近い文章はベクトル空間上で近くなる。「なんとなく似た感じの文章」を検索できる理由は、モデルの構造そのものではなく、この学習プロセスにある。
「query: 」と「passage: 」を付ける理由
multilingual-e5-largeを使うときは、入力テキストの先頭に「query: 」または「passage: 」というプレフィックスを付けることになっている。省略できる飾りではなく、必須の使い方としてモデルカードに明記されている。
検索は非対称なタスクだ。検索する側の短い質問文と、検索される側の長い文書は、役割が違う。一方、文と文の類似度をそのまま比べるような対称タスクもある。このプレフィックスは、モデルに「今どちらの役割として埋め込みを作ってほしいか」を伝えるための仕組みになっている。
Tursoで使っているFTS5 trigramとは何が違うのか
自分が使っている蔵書DB(Turso)の全文検索は、FTS5のtrigram tokenizerを使っている。文字列を3文字ずつのn-gramに分割し、そのn-gramの並びが本文と一致するかどうかで検索する。この処理に学習済みのモデルは登場しない。文字の並びを機械的に照合しているだけだ。
multilingual-e5-largeは逆で、文字の並びそのものは直接見ていない。テキストをTransformerに通し、対照学習で調整された重みを使って、意味を表す1024次元のベクトルに変換する。検索は、そのベクトルどうしの距離(コサイン類似度)で行われる。
つまりFTS5 trigramは「文字列の一致」を高速に探す仕組みで、multilingual-e5-largeは「意味の近さ」をあらかじめ学習しておいた仕組みだ。同じ「全文検索」という言葉でくくれるように見えて、内部で動いているものはまったく別の技術だった。