Sentence Transformers 2.2 : クイックスタート

Sentence Transformers 2.2 : クイックスタート (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 11/22/2022 (v2.2.2)

* 本ページは、UKPLab/sentence-transformers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

Sentence Transformers 2.2 : クイックスタート

SentenceTransformers をインストールすれば、使用方法は簡単です :

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')

#Our sentences we like to encode
sentences = ['This framework generates embeddings for each input sentence',
    'Sentences are passed as a list of string.', 
    'The quick brown fox jumps over the lazy dog.']

#Sentences are encoded by calling model.encode()
sentence_embeddings = model.encode(sentences)

#Print the embeddings
for sentence, embedding in zip(sentences, sentence_embeddings):
    print("Sentence:", sentence)
    print("Embedding:", embedding)
    print("")

SentenceTransformer(‘all-MiniLM-L6-v2’) によりどの sentence transformer モデルをロードしたいかを定義します。このサンプルでは、all-MiniLM-L6-v2 をロードします、これは 10 億以上の訓練ペアの大規模なデータセットで微調整された MiniLM モデルです。

BERT (そして他の transformer ネットワーク) は入力テキストの各トークンに対して埋め込みを出力します。これの固定サイズのセンテンス埋め込みを作成するためには、モデルは平均プーリングを適用します、i.e., 固定サイズのベクトルを生成するためにすべてのトークンに対する出力埋め込みの平均値が取られます。

 

センテンス類似度の比較

センテンス (テキスト) は類似の意味を持つセンテンスがベクトル空間で近接するようにマップされます。ベクトル空間の類似度を測る一つの一般的な方法は コサイン類似度 を使用することです。2 つのセンテンスに対して、これはこのように行なうことができます :

from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')

#Sentences are encoded by calling model.encode()
emb1 = model.encode("This is a red cat with a hat.")
emb2 = model.encode("Have you seen my red cat?")

cos_sim = util.cos_sim(emb1, emb2)
print("Cosine-Similarity:", cos_sim)

より多くのセンテンスを含むリストを持つ場合、以下のコードサンプルが使用できます :

from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')

sentences = ['A man is eating food.',
          'A man is eating a piece of bread.',
          'The girl is carrying a baby.',
          'A man is riding a horse.',
          'A woman is playing violin.',
          'Two men pushed carts through the woods.',
          'A man is riding a white horse on an enclosed ground.',
          'A monkey is playing drums.',
          'Someone in a gorilla costume is playing a set of drums.'
          ]

#Encode all sentences
embeddings = model.encode(sentences)

#Compute cosine similarity between all pairs
cos_sim = util.cos_sim(embeddings, embeddings)

#Add all pairs to a list with their cosine similarity score
all_sentence_combinations = []
for i in range(len(cos_sim)-1):
    for j in range(i+1, len(cos_sim)):
        all_sentence_combinations.append([cos_sim[i][j], i, j])

#Sort list by the highest cosine similarity score
all_sentence_combinations = sorted(all_sentence_combinations, key=lambda x: x[0], reverse=True)

print("Top-5 most similar pairs:")
for score, i, j in all_sentence_combinations[0:5]:
    print("{} \t {} \t {:.4f}".format(sentences[i], sentences[j], cos_sim[i][j]))

See on the left the Usage sections for more examples how to use SentenceTransformers.

 

事前訓練済みモデル

多くのタスクのために最適化された様々な事前訓練済みモデルがあります。完全なリストについては、事前訓練済みモデル をご覧ください。

 

貴方自身の埋め込みを訓練する

すべてのタイプのユースケースに対する貴方自身のセンテンス埋め込みモデルの訓練は簡単で、多くの場合最小限のコーディング作業を必要とするだけです。包括的なチュートリアルは、訓練/概要 をご覧ください。

既存のセンテンス埋め込みモデルを 更に多くの言語 に拡張することも簡単にできます。詳細は、多言語学習 をご覧ください。

 

以上