动词器距离可用于识别文本之间的相似性。 这种相似性可用于比较多个文本以查找最接近的相似文本。 但是,我无法自定义算法来执行以下操作 1)消除位置(GPE)-通过spacy进行标识,在比较相似性时,文中没有任何权重。 2)赋予文本第一句中的特征更多的权重,而不是第二句和第二句中超过第三等的特征。
instance = WmdSimilarity(wmd_corpus, loaded_model, num_best=10)
start = time()
sent = 'Abc hotel serves best in class drunken prawn in north america . ABC Hotel has branches in London, New York, Chicago and San Francisco.'
query = preprocess(sent)
sims = instance[query] # A query is simply a "look-up" in the similarity class.
print('Cell took %.2f seconds to run.' % (time() - start))
print('Query:')
print(sent)
for i in range(num_best):
print()
print('sim = %.4f' % sims[i][1])
print(documents[sims[i][0]])
在此特定示例中,为WMD相似性传递了酒店描述, 结果标识诸如
的描述-DEF自1969年起就在芝加哥的一家餐厅提供纯素食。 -JKL现在在伦敦,纽约,芝加哥和旧金山服务 -酒店的畅销书包括醉虾,千层面等。 (MNO酒店)
预期结果 从以上结果来看,只有MNO酒店与饮食方面有关。
查询: 如何消除由于位置而映射的其他酒店?
答案 0 :(得分:0)
这个问题已经很老了,但是我会尝试回答,因为我遇到了类似的问题,并且我认为WMD仍然是文本的STOA相似性指标之一。
确定要使用spacy吗?您似乎正在使用WMD by gensim。 无论如何,要回答您的第二个问题:您可以使用任何NLP库以句子的形式解析和拆分公司描述。然后,您可以为每个句子创建嵌入,而不是为当前实现中的每个文档(整个描述)创建嵌入。 Gensim在上述链接中使用了Word2vec-您也可以使用它来获取嵌入。然后,您可以根据两家公司的句子进行比较,当两家公司的第一句向量匹配时,您可以赋予较高的权重,第二句的向量匹配时可以给予较低的权重,以此类推。我不知道任何现有的库这样就可以了,但是如果您在spacy之上实现它,则可以自由调整权重和逻辑。
关于您的第一个问题:我认为大规模杀伤性武器应该考虑地点,因为ABC不仅在食物方面与MNO类似,而且在共同地点方面也与JKL和DEF类似。删除文本位置会在相似性结果中产生偏差。
但是,如果要执行此操作,则可以仅标记文本,删除位置,然后再次创建文本字符串: 例如:
# This can be part of your preprocessing function.
# You can apply it to all companies in advance.
import spacy
spacy_nlp = spacy.load('en_core_web_lg')
text = "Some hotel description"
doc = spacy_nlp(text)
current_tokens = [token.text for token in doc]
for item in doc:
if item.ent_type_ == "the_type_to_be_removed":
# remove word from `current_tokens` list
new_text = " ".join(current_tokens)
doc = spacy_nlp(new_text)
...
...
import wmd
spacy_nlp.add_pipe(wmd.WMD.SpacySimilarityHook(spacy_nlp), last=True)
doc_2 = spacy_nlp("Another hotel description")
print(doc1.similarity(doc_2))
This是将WMD集成到spacy中的实现。
由于您要查找最接近的相似文本,因此可以查看this示例代码。您可以调用一个nearest_neighbors
函数,以将与WMD为基础的查询文本相似的文本。您还可以定义自己的嵌入,如在class SpacyEmbeddings
中看到的那样,以防创建新的嵌入而有利于专门针对您的用例的句子。