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