Cohereが提供を開始した多言語用のテキスト埋め込み用のモデルであるembed-multilingual-v3.0
の性能を日本語の文類似度と検索のデータセットで評価してみました。
Cohere Embed v3とは
CohereのEmbed v3はテキストを埋め込むためのモデルです[1]。これまでもv2モデルがありましたが、それと比べた主な改良点は、単純に性能が向上していることに加えて、コンテンツの全体的な品質を評価する機能が挙げられます。この機能はノイズの多いデータセットを扱う場合に役立ち、品質の高い文書を上位にランク付けすることができとしています。さらに、圧縮を考慮した特別な学習方法を実装しており、ベクトルデータベースの実行コストを大幅に削減できるとしています。この機能の詳細については、近日中に公開とのことです。
Embed v3は1024または384次元の英語版と多言語のモデルを提供しています。384次元のモデルは軽量版とされており、ベンチマーク性能は非軽量版と比べると低くなっています。情報検索のベンチマークであるBEIR[2]や埋め込みのベンチマークであるMTEB[3]で評価されており、MTEBではOpenAIのtext-embedding-ada-002
を上回る性能が報告されており、記事執筆時点ではすべてのモデルの中で最高性能となっています。一方、扱える入力長は512
までなので、text-embedding-ada-002
の8191
と比べると小さな値です。
モデル名 | 次元数 | MTEBの性能 | BEIRの性能 |
---|---|---|---|
embed-english-v3.0 | 1024 | 64.47 | 55 |
embed-english-light-3.0 | 384 | 62.01 | 51.34 |
embed-multilingual-v3.0 | 1024 | 64.01 | 53.84 |
embed-multilingual-light-v3.0 | 384 | 60.08 | 50.15 |
text-embedding-ada-002 | 1536 | 60.99 | 49.25 |
CohereのEmved v3とOpenAIのtext-embedding-ada-002
では扱える入力長に差がありますが、同じテキストに対するトークン数を調べてみましょう。以下のテキストを入力として、OpenAIのTokenizerでトークン数を調べると127
トークンになりました。一方、Cohereのembed-multilingual-v3.0のトークナイザーでトークン数を調べると63
トークンという結果になりました。今回のケースではCohereのモデルは半分程度のトークン数で済んでいます。
東京都と周辺7県で首都圏を構成している。特に東京圏(東京都・神奈川県・千葉県・埼玉県)の総人口は約3500万人に達し、日本の人口の約30%が集中している。東京都市圏としては世界最大級の人口を有する国際的大都市である。
Embed v3のモデルはAPIを通じて提供されており、Pythonからは以下のように使うことができます。
import cohere cohere_key = "{YOUR_COHERE_API_KEY}" # 取得したAPIキー co = cohere.Client(cohere_key) docs = [ "The capital of France is Paris", "PyTorch is a machine learning framework based on the Torch library.", "The average cat lifespan is between 13-17 years" ] # input typeに'search_document'を指定して文書を埋め込む doc_emb = co.embed( docs, input_type="search_document", model="embed-multilingual-v3.0" ).embeddings #input typeに'search_query'を指定してクエリを埋め込む query = "What is Pytorch" query_emb = co.embed( [query], input_type="search_query", model="embed-multilingual-v3.0" ).embeddings
新しいモデルにはinput_type
と呼ばれるパラメータがあり、以下の4つの値のいずれかを指定できます。対象としているタスクに合わせて適切な値を指定することで、最高の性能が発揮されるとのことです。
search_document
:ベクトルデータベースに保存したい文書向けsearch_query
:文書を検索するための検索クエリ向けclassification
:分類システムの入力向けclustering
:クラスタリング向け
日本語での評価
2つの多言語用モデルが公開されていますが、今回はembed-multilingual-v3.0
を使って日本語での性能を評価してみたいと思います。評価用のデータセットとしては文類似度タスクのJSTS[4]と検索タスクの尼崎市のQAデータ[5]を使用します。JSTS向けにはinput_type
としてsearch_document
を使用し、QAデータに対してはクエリにはsearch_query
、文書にはsearch_document
を使用します。
JSTSに対する評価結果は以下のとおりです。以前の記事で多言語E5モデルに対する性能を測定したことがあるので、E5の性能も載せています。結果を見ると、Cohereの多言語モデルとOpenAIのモデルでは、Cohereのモデルの性能が上回っていることがわかります。
モデル | スコア(Pearson/Spearman) |
---|---|
text-embedding-ada-002 |
0.8372/0.7902 |
embed-multilingual-v3.0 |
0.8554/0.8143 |
multilingual-e5-large |
0.8620/0.8185 |
尼崎市のQAデータに対する評価結果は以下のとおりです。評価指標は、こちらの記事に合わせてnDCG@10とRecall@100を使用しました。評価用のフレームワークとしてはranxを利用しました。結果としては、Cohereの多言語モデルの性能がOpenAIのモデルの性能を上回るという結果になりました。
モデル | NDCG@10 | Recall@100 |
---|---|---|
text-embedding-ada-002 |
0.5486 | 0.9123 |
embed-multilingual-v3.0 |
0.5655 | 0.9361 |
まとめ
先日Cohereから公開されたEmbed v3の多言語モデルに対して、日本語データの性能を測定しました。測定したデータセットにおいては、OpenAIのtext-embedding-ada-002
を上回る性能を示しており、性能の高いモデルであることがわかります。
参考資料
- Introducing Embed v3 | Cohere Blog
- BEIR: A Heterogenous Benchmark for Zero-shot Evaluation of Information Retrieval Models
- MTEB: Massive Text Embedding Benchmark
- JGLUE: 日本語言語理解ベンチマーク
- FAQ Retrieval using Query-Question Similarity and BERT-Based Query-Answer Relevance
- Introducing a Free Developer Tier + Simplified Pricing | Cohere Blog