Ahogrammer

Deep Dive Into NLP, ML and Cloud

Cohereの多言語用の埋め込みモデルを日本語で評価してみる

Cohereが提供を開始した多言語用のテキスト埋め込み用のモデルであるembed-multilingual-v3.0の性能を日本語の文類似度と検索のデータセットで評価してみました。

Cohere Embed v3とは

CohereのEmbed v3はテキストを埋め込むためのモデルです[1]。これまでもv2モデルがありましたが、それと比べた主な改良点は、単純に性能が向上していることに加えて、コンテンツの全体的な品質を評価する機能が挙げられます。この機能はノイズの多いデータセットを扱う場合に役立ち、品質の高い文書を上位にランク付けすることができとしています。さらに、圧縮を考慮した特別な学習方法を実装しており、ベクトルデータベースの実行コストを大幅に削減できるとしています。この機能の詳細については、近日中に公開とのことです。

画像はhttps://txt.cohere.com/introducing-embed-v3/より

Embed v3は1024または384次元の英語版と多言語のモデルを提供しています。384次元のモデルは軽量版とされており、ベンチマーク性能は非軽量版と比べると低くなっています。情報検索のベンチマークであるBEIR[2]や埋め込みのベンチマークであるMTEB[3]で評価されており、MTEBではOpenAIのtext-embedding-ada-002を上回る性能が報告されており、記事執筆時点ではすべてのモデルの中で最高性能となっています。一方、扱える入力長は512までなので、text-embedding-ada-0028191と比べると小さな値です。

モデル名 次元数 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を上回る性能を示しており、性能の高いモデルであることがわかります。

参考資料

  1. Introducing Embed v3 | Cohere Blog
  2. BEIR: A Heterogenous Benchmark for Zero-shot Evaluation of Information Retrieval Models
  3. MTEB: Massive Text Embedding Benchmark
  4. JGLUE: 日本語言語理解ベンチマーク
  5. FAQ Retrieval using Query-Question Similarity and BERT-Based Query-Answer Relevance
  6. Introducing a Free Developer Tier + Simplified Pricing | Cohere Blog