在 Spacy tokenizer 中添加异常以不使用空格破坏标记?

Add exception in Spacy tokenizer to not break the tokens with whitespaces?

我正在尝试查找包含 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)))

我得到了像(云,云)这样的结果,而我期望的是(云,云计算)。看起来 'cloud computing' 这个词被分成了两个单独的标记。

有什么解决方法吗?感谢任何帮助。

我想要一个例外,其中像 'cloud computing' 这样的上下文链接的词不会像 'cloud' 、 'computing' 那样分成两个,而是保留为 'cloud computing'

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

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.

这是你想要的吗?