🚀 🦪⚪ PEARL-small
PEARL-smallは軽量な文字列埋め込みモデルです。文字列の意味的類似度計算に最適なツールであり、文字列マッチング、エンティティ検索、エンティティクラスタリング、ファジー結合などに優れた埋め込みを生成します。このモデルは、フレーズタイプ情報と形態素的特徴を組み込んでいるため、典型的な文章埋め込みモデルとは異なり、文字列の変化をよりよく捉えることができます。
🚀 クイックスタート
PEARL-smallは、E5-small のバリアントであり、構築した文脈フリーのデータセット で微調整されており、フレーズや文字列に対してより良い表現を得ることができます。
論文: Learning High-Quality and General-Purpose Phrase Representations
著者: Lihu Chen, Gaël Varoquaux, Fabian M. Suchanek
掲載誌: EACL Findings 2024
🤗 PEARL-small 🤗 PEARL-base
📐 PEARL Benchmark 🏆 PEARL Leaderboard
✨ 主な機能
- 文字列の意味的類似度計算に最適
- フレーズタイプ情報と形態素的特徴を組み込み、文字列の変化をよりよく捉える
- 文字列マッチング、エンティティ検索、エンティティクラスタリング、ファジー結合などに優れた埋め込みを生成
📚 ドキュメント
モデルの評価結果
モデル |
サイズ |
平均 |
PPDB |
PPDB フィルター済み |
Turney |
BIRD |
YAGO |
UMLS |
CoNLL |
BC5CDR |
AutoFJ |
FastText |
- |
40.3 |
94.4 |
61.2 |
59.6 |
58.9 |
16.9 |
14.5 |
3.0 |
0.2 |
53.6 |
Sentence-BERT |
110M |
50.1 |
94.6 |
66.8 |
50.4 |
62.6 |
21.6 |
23.6 |
25.5 |
48.4 |
57.2 |
Phrase-BERT |
110M |
54.5 |
96.8 |
68.7 |
57.2 |
68.8 |
23.7 |
26.1 |
35.4 |
59.5 |
66.9 |
E5-small |
34M |
57.0 |
96.0 |
56.8 |
55.9 |
63.1 |
43.3 |
42.0 |
27.6 |
53.7 |
74.8 |
E5-base |
110M |
61.1 |
95.4 |
65.6 |
59.4 |
66.3 |
47.3 |
44.0 |
32.0 |
69.3 |
76.1 |
PEARL-small |
34M |
62.5 |
97.0 |
70.2 |
57.9 |
68.1 |
48.1 |
44.5 |
42.4 |
59.3 |
75.2 |
PEARL-base |
110M |
64.8 |
97.3 |
72.2 |
59.7 |
72.6 |
50.7 |
45.8 |
39.3 |
69.4 |
77.1 |
コスト比較
FastTextとPEARLのコスト比較です。推定メモリはパラメータ数(float16)から計算されています。推論速度の単位は *ms/512 samples
です。ここでのFastTextモデルは crawl-300d-2M-subword.bin
です。
モデル |
平均スコア |
推定メモリ |
GPU速度 |
CPU速度 |
FastText |
40.3 |
1200MB |
- |
57ms |
PEARL-small |
62.5 |
68MB |
42ms |
446ms |
PEARL-base |
64.8 |
220MB |
89ms |
1394ms |
💻 使用例
基本的な使用法
Sentence Transformers
PEARLはSentence Transformersライブラリと統合されており、以下のように使用できます。
from sentence_transformers import SentenceTransformer, util
query_texts = ["The New York Times"]
doc_texts = [ "NYTimes", "New York Post", "New York"]
input_texts = query_texts + doc_texts
model = SentenceTransformer("Lihuchen/pearl_small")
embeddings = model.encode(input_texts)
scores = util.cos_sim(embeddings[0], embeddings[1:]) * 100
print(scores.tolist())
Transformers
transformers
を使用してPEARLを利用することもできます。以下はエンティティ検索の例であり、E5のコードを再利用しています。
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel
def average_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
last_hidden = last_hidden_states.masked_fill(~attention_mask[..., None].bool(), 0.0)
return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
def encode_text(model, input_texts):
batch_dict = tokenizer(input_texts, max_length=512, padding=True, truncation=True, return_tensors='pt')
outputs = model(**batch_dict)
embeddings = average_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
return embeddings
query_texts = ["The New York Times"]
doc_texts = [ "NYTimes", "New York Post", "New York"]
input_texts = query_texts + doc_texts
tokenizer = AutoTokenizer.from_pretrained('Lihuchen/pearl_small')
model = AutoModel.from_pretrained('Lihuchen/pearl_small')
embeddings = encode_text(model, input_texts)
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:1] @ embeddings[1:].T) * 100
print(scores.tolist())
📄 ライセンス
このプロジェクトはApache-2.0ライセンスの下で公開されています。
🔖 引用
もしこの研究が役に立った場合は、以下のように引用してください。
@inproceedings{chen2024learning,
title={Learning High-Quality and General-Purpose Phrase Representations},
author={Chen, Lihu and Varoquaux, Gael and Suchanek, Fabian},
booktitle={Findings of the Association for Computational Linguistics: EACL 2024},
pages={983--994},
year={2024}
}