📐
TransformerモデルをSentenceTransformersで使えるようにするには
SentenceTransformer上でContrieverを使えるようにしたよ!
Facebookの作成したContrieverをSentenceTransformerで使えるようにしました!リポジトリは以下です。
READMEに記載がありますが、以下のようにSentenceTransformerライブラリ上でContrieverを使用することができます。
# !pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence", "Each sentence is converted"]
model = SentenceTransformer('nishimoto/contriever-sentencetransformer')
embeddings = model.encode(sentences)
print(embeddings)
おまけ:Contrieverについて
RAG用に使用しました。対照学習で学習されていて学習データセットにないものでも良い成績を残すらしい。以下の記事に詳しい。
なお、KaggleのLLM Science examで使用したが、gte-base, tf-idf軍団に負けたためボツになった。とはいえアンサンブルの選択肢としては有用と思われる。お試しあれ。
SentenceTransformersでTransformersモデルを使えるようにする方法
(以下は自分が他の人作成モデルをSentenceTransformers上で使うように試行錯誤したメモです。ドキュメントなどをちゃんと読んでおらず、正確性に欠けることをご了承ください。)
同様のモデルをportしている人がいたので参考にさせてもらいました。
以下のファイルが必要っぽい。それぞれのファイル名と役割は以下。
- 
config_sentence_transformers.json- ライブラリのバージョン指定
 
- 
modules.json- 行うことを指定
- 今回の場合、各tokenのEmbeddingを抽出 → Poolingという流れを指定した。
 
- 
sentence_bert_config.json- Transformerモデル自体のデフォルトConfig設定
- 
"max_seq_length": 509, "do_lower_case": falseだけ設定。
 
- 
1_Pooling/config.json- 
modules.jsonで指定されたPooling自体のConfig。
- Embeddingの次元数やPoolingの方式を指定する。
- 以下の sentence_transformers.models.Poolingで指定できるオプションが設定できると思われる。
 https://www.sbert.net/docs/package_reference/models.html#sentence_transformers.models.Pooling
 
- 以下の 
 
- 


Discussion