📐
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