WordLlama: 超軽量の単語埋め込みモデル

WordLlamaとは?
WordLlamaは、大規模言語モデル(LLM)の部品を再利用して作られた、効率的でコンパクトな単語表現モデルです。LLMから抽出した単語の埋め込み情報を基に、様々な自然言語処理タスクで活用できる単語のベクトル表現を生成します。従来の単語埋め込みモデル(GloVe、Word2Vecなど)よりも高性能でありながら、モデルサイズが非常に小さい点が特徴です。
WordLlamaの特長
- 高性能: さまざまな自然言語処理タスクにおいて、従来のモデルよりも高い精度を実現。
- コンパクト: モデルサイズが非常に小さいため、メモリ使用量を抑え、高速な処理が可能。
- 柔軟性: 異なるタスクに合わせて、モデルのサイズや次元数を調整可能。
- 高速性: CPUでも高速に動作するため、様々な環境で利用可能。
WordLlamaは、単語の類似度計算、文章のクラスタリング、テキスト分類など、幅広い自然言語処理タスクに適用できます。また、LLMの評価や、複雑な自然言語処理パイプラインの構築にも役立ちます。
WordLlamaの技術的な背景
WordLlamaは、LLMのトークン埋め込み情報を再利用し、シンプルなニューラルネットワークで訓練することで実現されています。マトリョーシカ表現と呼ばれる手法により、モデルのサイズを柔軟に調整することが可能です。また、バイナリ化により、モデルサイズをさらに縮小し、高速な検索を可能にする研究も進められています。
MTEBベンチマーク結果
WordLlamaは、MTEBベンチマークにおいて、従来のモデルを大きく上回る性能を示しています。特に、クラスタリング、ランキング、分類タスクにおいて高い精度が確認されています。
Metric | WL64 | WL128 | WL256 (X) | WL512 | WL1024 | GloVe 300d | Komninos | all-MiniLM-L6-v2 |
---|---|---|---|---|---|---|---|---|
Clustering | 30.27 | 32.20 | 33.25 | 33.40 | 33.62 | 27.73 | 26.57 | 42.35 |
Reranking | 50.38 | 51.52 | 52.03 | 52.32 | 52.39 | 43.29 | 44.75 | 58.04 |
Classification | 53.14 | 56.25 | 58.21 | 59.13 | 59.50 | 57.29 | 57.65 | 63.05 |
Pair Classification | 75.80 | 77.59 | 78.22 | 78.50 | 78.60 | 70.92 | 72.94 | 82.37 |
STS | 66.24 | 67.53 | 67.91 | 68.22 | 68.27 | 61.85 | 62.46 | 78.90 |
CQA DupStack | 18.76 | 22.54 | 24.12 | 24.59 | 24.83 | 15.47 | 16.79 | 41.32 |
SummEval | 30.79 | 29.99 | 30.99 | 29.56 | 29.39 | 28.87 | 30.49 | 30.81 |
WordLlamaを使ってみる
WordLlama の実装については、GitHubのリポジトリを確認してください。ここでは、簡単な使い方だけ紹介します。
まずは、pip を使ってWordLlama をインストールします。
$ pip install wordllama
インストール後は、以下のサンプルコードのように、様々な機能を簡単使用することができます。
from wordllama import WordLlama # デフォルトのWordLlamaモデルをロード wl = WordLlama.load() # 2つの文の類似度を計算 similarity_score = wl.similarity("i went to the car", "i went to the pawn shop") print(similarity_score) # 出力: 0.06641249096796882 # クエリに対する類似度に基づいてドキュメントをランク付け query = "i went to the car" candidates = ["i went to the park", "i went to the shop", "i went to the truck", "i went to the vehicle"] ranked_docs = wl.rank(query, candidates) print(ranked_docs) # 出力: # [ # ('i went to the vehicle', 0.7441646856486314), # ('i went to the truck', 0.2832691551894259), # ('i went to the shop', 0.19732814982305436), # ('i went to the park', 0.15101404519322253) # ] # その他、推論メソッド wl.deduplicate(candidates, threshold=0.8) # あいまいな重複を排除 wl.cluster(docs, k=5, max_iterations=100, tolerance=1e-4) # kmeans/kmeans++初期化を使用してラベル付け wl.filter(query, candidates, threshold=0.3) # クエリに基づいて候補をフィルタリング wl.topk(query, candidates, k=3) # クエリに基づいて上位k個の文字列を返す
WordLlamaは、LLMの技術を応用して開発された、強力かつコンパクトな単語埋め込みモデルです。自然言語処理の様々な分野で活用されることが期待されます。