[{"data":1,"prerenderedAt":126},["ShallowReactive",2],{"content-/multilingual-e5-large-vs-turso-fts5":3,"all-pages-for-dir":124,"og-image-/multilingual-e5-large-vs-turso-fts5":125},{"id":4,"title":5,"body":6,"category":103,"concepts":104,"description":105,"extension":106,"meta":107,"navigation":108,"ogImage":104,"path":109,"project_name":110,"published":111,"publishedAt":112,"seo":113,"stem":114,"tags":115,"todo":104,"unpublished":111,"updatedAt":104,"__hash__":123},"pages/2026-07/2026-07-08/multilingual-e5-large-vs-turso-fts5.md","「multilingual-e5-large」の仕組みを技術的に理解する。Tursoの全文検索（FTS5）とは別物だった",{"type":7,"value":8,"toc":94},"minimark",[9,13,17,20,24,27,30,33,36,39,55,58,62,65,68,71,75,78,81,85,88,91],[10,11,5],"h1",{"id":12},"multilingual-e5-largeの仕組みを技術的に理解するtursoの全文検索fts5とは別物だった",[14,15,16],"p",{},"Fableに作ってもらったベクトル検索デモが、「multilingual-e5-large」というモデルで教材をベクトル化していた。これは自分が蔵書DB（Turso）で使っているFTS5全文検索と同じ技術なのか。気になったので、正体を確認することにした。",[14,18,19],{},"先に結論を書く。別の技術だった。FTS5は文字列を3文字単位に区切って並びの一致を探すインデックス方式で、言語モデルは一切介在しない。multilingual-e5-largeは、Transformerというニューラルネットワークが大量のテキストから「意味の近さ」を学習した結果を使う埋め込みモデルだった。",[21,22,23],"h2",{"id":23},"multilingual-e5-largeの正体",[14,25,26],{},"E5は、Microsoft ResearchのLiang Wangらが開発したテキスト埋め込みモデルのファミリー名。論文タイトルは「Text Embeddings by Weakly-Supervised Contrastive Pre-training」で、E5自体は「EmbEddings from bidirEctional Encoder rEpresentations」の略。5つのEの頭文字から取られている。",[14,28,29],{},"「multilingual」は多言語対応版という意味で、ベースにはXLM-RoBERTa-large（多言語対応のTransformerエンコーダ）が使われている。対応言語はXLM-RoBERTa由来の100言語で、公開されているモデルカードには「低リソース言語では性能が落ちる可能性がある」という注記もある。",[14,31,32],{},"「large」はモデルのサイズ区分。E5にはsmall・base・largeの3サイズがあり、largeが最も精度重視のサイズになる。パラメータ数はモデルカードに明記されていないが、出力するベクトルの次元数は1024と決まっている。",[21,34,35],{"id":35},"テキストが1024個の数字になるまで",[14,37,38],{},"テキストを渡すと、次の手順でベクトルが作られる。",[40,41,42,46,49,52],"ol",{},[43,44,45],"li",{},"テキストを最大512トークンまでに区切る（トークナイズ）",[43,47,48],{},"XLM-RoBERTa-largeのエンコーダに通し、各トークンごとの出力を得る",[43,50,51],{},"パディング部分をマスクしたうえで、全トークンの出力を平均する（平均プーリング）",[43,53,54],{},"できたベクトルの長さを1に揃える（L2正規化）",[14,56,57],{},"この4手順を経て、入力したテキスト1つにつき1024個の数字の並び（ベクトル）が1つできる。意味が近い文章どうしは、このベクトル空間上で近い位置に来る。デモ画面に出ていた「類似度0.861」のような数値は、2つのベクトルの向きがどれだけ揃っているか（コサイン類似度）を表している。",[21,59,61],{"id":60},"なぜ意味の近さがわかるのか","なぜ「意味の近さ」がわかるのか",[14,63,64],{},"ここが要になる。エンコーダに通すだけでは、意味の近い文章が自動的に近いベクトルになるわけではない。近くなるように、事前に大量のデータで学習させてある。",[14,66,67],{},"学習は2段階に分かれている。1段階目は弱教師あり対照学習と呼ばれる方法で、mC4・CC News・NLLBの翻訳ペア・Wikipediaなどから集めた約45億件のテキストペアを使う。似た意味のペアどうしのベクトルを近づけ、無関係なペアどうしのベクトルを遠ざける、という調整をひたすら繰り返す。2段階目は、複数言語の教科書やQ&Aデータセットなど、200万件以上のペアで教師あり微調整をかける。",[14,69,70],{},"この2段階を経ると、文字としては一致していなくても、意味が近い文章はベクトル空間上で近くなる。「なんとなく似た感じの文章」を検索できる理由は、モデルの構造そのものではなく、この学習プロセスにある。",[21,72,74],{"id":73},"query-とpassage-を付ける理由","「query: 」と「passage: 」を付ける理由",[14,76,77],{},"multilingual-e5-largeを使うときは、入力テキストの先頭に「query: 」または「passage: 」というプレフィックスを付けることになっている。省略できる飾りではなく、必須の使い方としてモデルカードに明記されている。",[14,79,80],{},"検索は非対称なタスクだ。検索する側の短い質問文と、検索される側の長い文書は、役割が違う。一方、文と文の類似度をそのまま比べるような対称タスクもある。このプレフィックスは、モデルに「今どちらの役割として埋め込みを作ってほしいか」を伝えるための仕組みになっている。",[21,82,84],{"id":83},"tursoで使っているfts5-trigramとは何が違うのか","Tursoで使っているFTS5 trigramとは何が違うのか",[14,86,87],{},"自分が使っている蔵書DB（Turso）の全文検索は、FTS5のtrigram tokenizerを使っている。文字列を3文字ずつのn-gramに分割し、そのn-gramの並びが本文と一致するかどうかで検索する。この処理に学習済みのモデルは登場しない。文字の並びを機械的に照合しているだけだ。",[14,89,90],{},"multilingual-e5-largeは逆で、文字の並びそのものは直接見ていない。テキストをTransformerに通し、対照学習で調整された重みを使って、意味を表す1024次元のベクトルに変換する。検索は、そのベクトルどうしの距離（コサイン類似度）で行われる。",[14,92,93],{},"つまりFTS5 trigramは「文字列の一致」を高速に探す仕組みで、multilingual-e5-largeは「意味の近さ」をあらかじめ学習しておいた仕組みだ。同じ「全文検索」という言葉でくくれるように見えて、内部で動いているものはまったく別の技術だった。",{"title":95,"searchDepth":96,"depth":96,"links":97},"",2,[98,99,100,101,102],{"id":23,"depth":96,"text":23},{"id":35,"depth":96,"text":35},{"id":60,"depth":96,"text":61},{"id":73,"depth":96,"text":74},{"id":83,"depth":96,"text":84},"dev",null,"ベクトル検索デモで使われていたテキスト埋め込みモデル「multilingual-e5-large」の仕組みを、Hugging Faceのモデルカードと論文で確認した記録。Tursoで使っているFTS5 trigram全文検索とは、文字列のn-gram一致か学習済みニューラルネットワークによる意味表現かという点で、まったく別の技術だった。","md",{},true,"/multilingual-e5-large-vs-turso-fts5","book-knowledge-base",false,"2026-07-08T00:00:00.000Z",{"title":5,"description":105},"2026-07/2026-07-08/multilingual-e5-large-vs-turso-fts5",[116,117,118,119,120,121,122],"embedding","multilingual-e5-large","ベクトル検索","Turso","FTS5","対照学習","Transformer","4lNTRbcmGRfpyvM3R2hi61Qm8JBWO2AOdPxJ4DBFIps",[],"https://log.eurekapu.com/og/blog/multilingual-e5-large-vs-turso-fts5.png?v=2026-07-08T00%3A00%3A00.000Z&title=%E3%80%8Cmultilingual-e5-large%E3%80%8D%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%82%92%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AB%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%80%82Turso%E3%81%AE%E5%85%A8%E6%96%87%E6%A4%9C%E7%B4%A2%EF%BC%88FTS5%EF%BC%89%E3%81%A8%E3%81%AF%E5%88%A5%E7%89%A9%E3%81%A0%E3%81%A3%E3%81%9F&author=Kei%20Komatsu&sig=86c65cca2ba44819",1784001814454]