简短的回答是“不,不可能以一种原则性的方式来做到这一点,即使是远程也能很好地工作”。这是自然语言处理研究中一个未解决的问题,也恰好是我博士工作的主题。我将非常简要地总结一下我们所处的位置,并为您指出一些出版物:
词义
这里最重要的假设是有可能得到一个代表每个词的向量在有问题的句子中。通常选择这个向量来捕获单词可能出现的上下文。例如,如果我们只考虑三个上下文“eat”、“red”和“fluffy”,那么单词“cat”可能表示为 [98, 1 , 87],因为如果您要阅读一段非常长的文本(按照今天的标准,几十亿字并不少见),“猫”这个词会经常出现在“蓬松”和“吃”的上下文中,但在“红色”的上下文中并不常见。同样,“dog”可能表示为 [87,2,34],“umbrella”可能表示为 [1,13,0]。将这些向量成像为 3D 空间中的点,“cat”显然更接近“dog”而不是“umbrella”,因此“cat”
自 90 年代初以来一直对这一工作进行调查(例如Geffenstette 的这项工作),并取得了一些令人惊讶的好结果。例如,这是我最近通过让我的计算机阅读 wikipedia 构建的同义词库中的一些随机条目:
theory -> analysis, concept, approach, idea, method
voice -> vocal, tone, sound, melody, singing
james -> william, john, thomas, robert, george, charles
这些相似词的列表完全没有人为干预 - 你输入文本并在几个小时后回来。
短语的问题
您可能会问,为什么我们对较长的短语不做同样的事情,例如“姜狐爱水果”。这是因为我们没有足够的文本。为了让我们可靠地确定 X 与什么相似,我们需要查看许多在上下文中使用 X 的示例。当 X 是像“声音”这样的单个词时,这并不太难。然而,随着 X 变长,找到 X 自然出现的机会会呈指数级下降。相比之下,Google 大约有 1B 页面包含“狐狸”一词,而没有一个页面包含“姜狐狸爱水果”,尽管它是一个完全有效的英文句子,我们都明白它的意思。
作品
为了解决数据稀疏的问题,我们希望进行组合,即为单词提取向量,这些向量很容易从真实文本中获得,并以一种能够捕捉其含义的方式组合在一起。坏消息是到目前为止没有人能够做到这一点。
最简单和最明显的方法是将单个词向量相加或相乘。这会导致“猫追狗”和“狗追猫”对您的系统意味着相同的不良副作用。此外,如果你在乘法,你必须格外小心,否则每个句子最终都会由 [0,0,0,...,0] 表示,这与这一点无关。
进一步阅读
我不会讨论迄今为止提出的更复杂的组合方法。我建议你阅读 Katrin Erk 的“词义和短语意义的向量空间模型:调查”。这是一个很好的高级调查,可以帮助您入门。不幸的是,出版商的网站上没有免费提供,请直接给作者发送电子邮件以获取副本。在那篇论文中,您将找到对许多更具体方法的参考。更容易理解的是Mitchel 和 Lapata (2008)以及Baroni 和 Zamparelli (2010)。
在@vpekar 发表评论后进行编辑:这个答案的底线是强调这样一个事实,即虽然确实存在幼稚的方法(例如加法、乘法、表面相似性等),但这些方法从根本上来说是有缺陷的,通常人们不应该期望从他们。