BERT自然言語modelによる意味的コサイン類似度 - end0tknr's kipple - web写経開発
以前、記載した上記entryの関連です。
インターネットで検索すると、LLMによるCOS類似度計算は、 モデルにBERTを使用したものが、殆どですが、 sentence_transformers for python + Llama2-7b の組合せで、 simpleに実現できるみたい。
#!python # -*- coding: utf-8 -*- from sentence_transformers import SentenceTransformer, util model_name = "elyza/ELYZA-japanese-Llama-2-7b-instruct" def main(): model = SentenceTransformer(model_name) base_text = "Spacyによれば、今日はweatherが良いですね。" embeddings_0 = model.encode(base_text, convert_to_tensor=True) target_texts = [ "spaCyは、pythonによる自然言語処理ライブラリです。", "spacyによれば、weatherは天気を表す名詞です。", "天気予報のとおり、今日は快晴ですね。", "天気予報によれば、今日の天気は雨になりそうですね。" ] for target_text in target_texts: embeddings_1 = model.encode(target_text, convert_to_tensor=True) cosine_scores = util.cos_sim(embeddings_0, embeddings_1) print( cosine_scores ) if __name__ == '__main__': main()
↑こう書くと、↓こう表示されます。
No sentence-transformers model found with name C:\Users\end0t/.cache\torch\sentence_transformers\elyza_ELYZA-japanese-Llama-2-7b-instruct. Creating a new one with MEAN pooling. Loading checkpoint shards: 100%|████████████████████| 2/2 [00:07<00:00, 3.72s/it] tensor([[0.7566]], device='cuda:0') tensor([[0.8957]], device='cuda:0') tensor([[0.7621]], device='cuda:0') tensor([[0.7864]], device='cuda:0')