【发布时间】:2022-08-14 07:47:18
【问题描述】:
我有一个带有 2 个文本句子列的熊猫数据框。我使用句子转换器来嵌入句子并生成文本嵌入并找到两个句子之间的余弦相似度。我的代码适用于较小的数据集,但是需要很长时间才能执行3M 句子.有什么办法可以优化代码
我确实尝试按照Speed up embedding of 2M sentences with RoBERTa 中的建议传递列表。但是没有解决问题,代码仍然运行缓慢。指针赞赏
data = { \'index\': [1, 2, 3],
\'Sentence1\': [\'This is a foo bar sentence\', \'What is this string ? Totally not related to the other two lines\', \'Jack is playing guitar\'],
\'Sentence2\': [\'This sentence is similar to a foo bar sentence\', \'Musical instrument are on display and can be played\', \'It is sunny outside\']}
df = pd.DataFrame(data)
我用于识别余弦相似度的代码
import numpy as np
import pandas as pd
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
from sentence_transformers import util
model = SentenceTransformer(\'sentence-transformers/all-mpnet-base-v2\')
import torch
def cosine_sim_emb(df):
#create sentence and theme embeddings
df[\'Sentence1_embeddings\'] = model.encode(df[\'Sentence1\']).tolist()
df[\'Sentence2_embeddings\'] = model.encode(df[\'Sentence2\']).tolist()
#extract cosine similarity score
cosine_similarity_score = []
for index, row in df.iterrows():
similarity_score = cosine_similarity(np.array(df[\'Sentence1_embeddings\'][index]).reshape(1,-1), np.array(df[\'Sentence2_embeddings\'][index]).reshape(1,-1))
similarity_score = similarity_score[0][0]
cosine_similarity_score.append(similarity_score)
df[\"cosine_similarity\"] = cosine_similarity_score
return df
df1 = cosine_sim_emb(df)
标签: python pandas nlp word-embedding sentence-transformers