Google Colabでjina-embeddings-v2-base-enを使ってみた
jina-embeddings-v2-base-enというモデルを使ってみました。
Bertアーキテクチャに基づいており、8192シーケンス長をサポートしているとのことです。
また、このモデルは1億3700万パラメータでモデルサイズが小さいのも驚きです。
今回は、Hugging FaceにあるコードをGoogle Colabで実行してみます。
実行コードは、以下となります。
!pip install transformers
from transformers import AutoModel
from numpy.linalg import norm
cos_sim = lambda a,b: (a @ b.T) / (norm(a)*norm(b))
model = AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-en', trust_remote_code=True) # trust_remote_code is needed to use the encode method
embeddings = model.encode(['How is the weather today?', 'What is the current weather like today?'])
print(cos_sim(embeddings[0], embeddings[1]))
コードの内容は、How is the weather today?とWhat is the current weather like today?の文章がどれくらい似ているかを知るためにcos類似度を求めるコードとなります。
cos類似度は、より1に近ければ似ている文章で、0に近ければ似ていない文章となります。
他にも類似文章を見てみます。
embeddings = model.encode(['I like apples.', 'I love apples.'])
print(cos_sim(embeddings[0], embeddings[1]))
likeとloveの違いだけでしたので、より1に近いです。
embeddings = model.encode(['I like bananas.', 'I love apples.'])
print(cos_sim(embeddings[0], embeddings[1]))
bananasとapplesの違いがあっても似ている文章に分類されるんですね。
embeddings = model.encode(['I like OpenAI.', 'I like OpenAI.'])
print(cos_sim(embeddings[0], embeddings[1]))
同じ文章だと1になるかと思いきや、1.0000001となっています。1以上となるのが凄く気になります。バグですかな。