gpt4 book ai didi

python-3.x - 在 Spacy tokenizer 中添加异常以不使用空格破坏标记?

转载 作者:行者123 更新时间:2023-12-05 03:04:08 27 4
gpt4 key购买 nike

我正在尝试查找包含 5 个单词的列表和包含 3500 个单词的列表之间的单词相似度。

我遇到的问题:

我有5个单词的列表如下

 List_five =['cloud','data','machine learning','virtual server','python']

在3500个单词的列表中,有这样的单词

 List_threek =['cloud computing', 'docker installation', 'virtual server'.....]                                                                     

Spacy 模型通过其“nlp”对象似乎将第二个列表中的标记分解为云、计算、摘要、安装。

这反过来会导致相似的词出现不准确,例如当我运行下面的代码时

tokens = " ".join(List_five)
doc = nlp(tokens)

top5 = " ".join(List_threek)
doc2 = nlp(top5)

similar_words = []
for token1 in doc:
list_to_sort = []
for token2 in doc2:
#print(token1, token2)
list_to_sort.append((token1.text, token2.text, token1.similarity(token2)))

我得到了类似(云,云)的结果,而我却预料到了(云,云计算)。看起来“云计算”这个词被分成了两个单独的标记。

有什么解决方法吗?感谢您的帮助。

我想要一个异常(exception),其中像“云计算”这样的上下文相关的词不会像“云”、“计算”那样被分成两个,而是保留为“云计算”

最佳答案

Spacy 还可以让你做文档相似性(平均单词嵌入,但这比你现在做的要好) - 所以,一种方法是直接比较 list1 和 list2 中的项目而不做它标记通过 token 。例如,

import spacy

nlp = spacy.load('en_core_web_sm')

l1 =['cloud','data','machine learning','virtual server','python']
l2=['cloud computing', 'docker installation', 'virtual server']
for item1 in l1:
for item2 in l2:
print((item1, item2), nlp(item1).similarity(nlp(item2)))

这会打印出如下内容:

('cloud', 'cloud computing') 0.6696009166814865
('cloud', 'docker installation') 0.6003896898695236
('cloud', 'virtual server') 0.5484600148958506
('data', 'cloud computing') 0.3544642116905426
('data', 'docker installation') 0.4123695793059489
('data', 'virtual server') 0.4785382246303466
... and so on.

这是你想要的吗?

关于python-3.x - 在 Spacy tokenizer 中添加异常以不使用空格破坏标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53129516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com