【问题标题】:Add exception in Spacy tokenizer to not break the tokens with whitespaces?在 Spacy 标记器中添加异常以不破坏带有空格的标记?
【发布时间】:2019-04-07 08:15:39
【问题描述】:

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

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

有什么解决方法吗?任何帮助表示赞赏。

我想要一个例外,即“云计算”等上下文相关的词不会像“云”、“计算”那样分成两个,而是保留为“云计算”

【问题讨论】:

    标签: python-3.x nlp spacy cosine-similarity word-embedding


    【解决方案1】:

    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.
    

    这是你想要的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2013-06-24
      相关资源
      最近更新 更多