生成相似的命名实体/复合名词

时间:2019-02-25 18:01:50

标签: spacy

我一直在尝试为多项选择题创建干扰因素(错误答案)。使用单词向量,我能够获得单个单词名词的不错结果。

在处理复合名词(例如“停车场”或“唐纳德·特朗普”)时,我的最佳尝试是为复合词的每个部分计算相似的词并将它们组合在一起。结果非常有趣:

  • 停车场->车辆营地|汽车动物园
  • 消防车->火焰马力|发射马达
  • 唐纳德·特朗普->理查德·乔帕迪| Jeffrey Gamble
  • 巴拉克·奥巴马->奥巴马·麦凯恩|奥斯威辛克林顿

不幸的是,这些并不是很令人信服。尤其是在命名实体的情况下,我想生成其他命名实体,它们出现在相似的上下文中。例如:

  • 消防车->消防车|消防员
  • 唐纳德·特朗普->巴拉克·奥巴马|希拉里·克林顿
  • 尼亚加拉大瀑布->美国瀑布|马蹄瀑布

有人对如何实现这一目标有任何建议吗?有没有一种方法可以生成类似的命名实体/名词块?


通过在Wikipedia上搜索命名实体,然后从摘要中提取相似的实体,我设法获得了一些吸引人的干扰因素。尽管我宁愿只使用spacy查找解决方案。

1 个答案:

答案 0 :(得分:0)

如果您还没有看到它,您可能想看看sense2vec,它可以通过包含词性标记或实体标签来学习上下文相关向量。 spaCy扩展的快速使用示例:

s2v = Sense2VecComponent('/path/to/reddit_vectors-1.1.0')
nlp.add_pipe(s2v)
doc = nlp(u"A sentence about natural language processing.")
most_similar = doc[3]._.s2v_most_similar(3)
# [(('natural language processing', 'NOUN'), 1.0),
#  (('machine learning', 'NOUN'), 0.8986966609954834),
#  (('computer vision', 'NOUN'), 0.8636297583580017)]

See here进行交互式演示,使用在Reddit注释上训练的sense2vec模型。使用此模型,"car park"返回诸如“ parking lot”和“ parking garage”之类的信息,而"Donald Trump"为您提供“ Sarah Palin”,“ Mitt Romney”和“ Barack Obama”。对于模棱两可的实体,您还可以添加实体标签-例如,"Niagara Falls|GPE"将显示与地缘政治实体(GPE)类似的术语,例如与实际瀑布相对的城市。结果显然取决于数据中存在的内容,因此,对于更具体的相似性,您还可以尝试训练自己的sense2vec向量。