我有两个.txt文件,一个包含200.000个单词,第二个包含100个关键字(每行一个)。我想计算100个关键字和我的200.000个单词中的每个单词之间的余弦相似度,并为每个关键字显示得分最高的50个单词
下面是我所做的,请注意,Bertclient是我用来提取向量的:
from sklearn.metrics.pairwise import cosine_similarity
from bert_serving.client import BertClient
bc = BertClient()
# Process words
with open("./words.txt", "r", encoding='utf8') as textfile:
words = textfile.read().split()
with open("./100_keywords.txt", "r", encoding='utf8') as keyword_file:
for keyword in keyword_file:
vector_key = bc.encode([keyword])
for w in words:
vector_word = bc.encode([w])
cosine_lib = cosine_similarity(vector_key,vector_word)
print (cosine_lib)
它一直在运行,但不会停止。你知道我该怎么纠正吗
我对伯特一无所知……但是导入和运行有些可疑。我觉得你没有把它安装好。我尝试pip安装它并运行以下程序:
它从未结束。看一下bert的dox,看看是否需要做其他事情
在您的代码中,通常最好先进行所有读取,然后进行处理,因此先导入两个列表,分别检查一些值,如:
此外,您需要寻找一种不同的方法来进行比较,而不是嵌套循环。您现在意识到,您每次都在为每个关键字转换
words
中的每个单词,这不是必需的,而且可能非常慢。我建议您要么使用字典将单词与编码配对,要么制作一个包含(单词,编码)元组的列表,如果您对此比较满意的话在你让伯特站起来跑步后,如果这不合理,请给我回复
编辑
下面是一段代码,其工作原理与您想要执行的类似。根据您的需要,您可以选择很多方法来保存结果等,但这应该让您从“假伯特”开始
相关问题 更多 >
编程相关推荐