🚀 E5-base-unsupervised
このモデルは、e5-baseに似ていますが、教師ありの微調整は行われていません。
Text Embeddings by Weakly-Supervised Contrastive Pre-training
Liang Wang, Nan Yang, Xiaolong Huang, Binxing Jiao, Linjun Yang, Daxin Jiang, Rangan Majumder, Furu Wei, arXiv 2022
このモデルは12層で、埋め込みサイズは768です。
🚀 クイックスタート
モデルの概要
このモデルは、教師なしのコントラスト事前学習によって得られたテキスト埋め込みを生成します。
必要なパッケージのインストール
pip install sentence_transformers~=2.2.2
コードの実行
以下のコードを実行することで、MS-MARCOパッセージランキングデータセットからクエリとパッセージをエンコードすることができます。
💻 使用例
基本的な使用法
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]
input_texts = ['query: how much protein should a female eat',
'query: summit define',
"passage: As a general guideline, the CDC's average requirement of protein for women ages 19 to 70 is 46 grams per day. But, as you can see from this chart, you'll need to increase that if you're expecting or training for a marathon. Check out the chart below to see how much protein you should be eating each day.",
"passage: Definition of summit for English Language Learners. : 1 the highest point of a mountain : the top of a mountain. : 2 the highest level. : 3 a meeting or series of meetings between the leaders of two or more governments."]
tokenizer = AutoTokenizer.from_pretrained('intfloat/e5-base-unsupervised')
model = AutoModel.from_pretrained('intfloat/e5-base-unsupervised')
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'])
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:2] @ embeddings[2:].T) * 100
print(scores.tolist())
高度な使用法
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('intfloat/e5-base-unsupervised')
input_texts = [
'query: how much protein should a female eat',
'query: summit define',
"passage: As a general guideline, the CDC's average requirement of protein for women ages 19 to 70 is 46 grams per day. But, as you can see from this chart, you'll need to increase that if you're expecting or training for a marathon. Check out the chart below to see how much protein you should be eating each day.",
"passage: Definition of summit for English Language Learners. : 1 the highest point of a mountain : the top of a mountain. : 2 the highest level. : 3 a meeting or series of meetings between the leaders of two or more governments."
]
embeddings = model.encode(input_texts, normalize_embeddings=True)
📚 ドキュメント
トレーニングの詳細
トレーニングの詳細については、こちらの論文を参照してください。
ベンチマーク評価
BEIRおよびMTEBベンチマークでの評価結果を再現するには、unilm/e5を参照してください。
よくある質問 (FAQ)
1. 入力テキストに「query: 」と「passage: 」の接頭辞を付ける必要がありますか?
はい、このモデルはこのようにトレーニングされているため、付けない場合、パフォーマンスが低下する可能性があります。
以下はいくつかの経験則です:
- オープンQAのパッセージ検索やアドホック情報検索などの非対称タスクでは、それぞれ「query: 」と「passage: 」を使用します。
- 意味的類似性や言い換え検索などの対称タスクでは、「query: 」の接頭辞を使用します。
- 線形プロービング分類やクラスタリングなど、埋め込みを特徴として使用する場合は、「query: 」の接頭辞を使用します。
2. 再現した結果がモデルカードに報告されている結果とわずかに異なるのはなぜですか?
transformers
とpytorch
の異なるバージョンが、無視できないがわずかなパフォーマンスの違いを引き起こす可能性があります。
引用
もしこの論文やモデルが役に立った場合は、以下のように引用してください。
@article{wang2022text,
title={Text Embeddings by Weakly-Supervised Contrastive Pre-training},
author={Wang, Liang and Yang, Nan and Huang, Xiaolong and Jiao, Binxing and Yang, Linjun and Jiang, Daxin and Majumder, Rangan and Wei, Furu},
journal={arXiv preprint arXiv:2212.03533},
year={2022}
}
制限事項
このモデルは英語のテキストのみに対応しています。長いテキストは最大512トークンに切り捨てられます。
📄 ライセンス
このモデルはMITライセンスの下で提供されています。