📐

TransformerモデルをSentenceTransformersで使えるようにするには

2024/02/05に公開

SentenceTransformer上でContrieverを使えるようにしたよ!

Facebookの作成したContrieverをSentenceTransformerで使えるようにしました!リポジトリは以下です。

https://huggingface.co/nishimoto/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用に使用しました。対照学習で学習されていて学習データセットにないものでも良い成績を残すらしい。以下の記事に詳しい。

https://tech.acesinc.co.jp/entry/2023/03/31/121001

なお、KaggleのLLM Science examで使用したが、gte-base, tf-idf軍団に負けたためボツになった。とはいえアンサンブルの選択肢としては有用と思われる。お試しあれ。

https://www.kaggle.com/competitions/kaggle-llm-science-exam


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

Discussion