end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

sentence_transformers for python + Llama2-7b によるCOS類似度計算

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')