短答案是“不,无法以原则性的方式解决这个问题,即使稍微好一点也不行”。这是自然语言处理研究中尚未解决的问题,也恰好是我博士论文的主题。我将简要总结我们的进展,并指向一些出版物:
单词的意义
这里最重要的假设是可以获得一个向量来表示句子中每个单词。该向量通常被选为捕捉单词可能出现的上下文。例如,如果我们只考虑“吃”、“红色”和“毛茸茸”三个上下文,那么单词“猫”可能被表示为[98, 1, 87],因为如果你阅读一篇非常长的文本(按今天的标准,几十亿个单词并不罕见),单词“猫”会在“毛茸茸”和“吃”的上下文中经常出现,但在“红色”的上下文中出现的次数不那么多。同样地,“狗”可能被表示为[87,2,34],“雨伞”可能是[1,13,0]。把这些向量想象成3D空间中的点,“猫”显然比“雨伞”更接近“狗”,因此“猫”也意味着与“狗”更相似,而不是与“雨伞”。
这项工作自90年代初开始调查(例如Greffenstette的
this研究),并取得了一些惊人的好成果。例如,以下是我最近建立的一个同义词词库中的几个随机条目,是通过让我的计算机阅读维基百科而生成的:
theory -> analysis, concept, approach, idea, method
voice -> vocal, tone, sound, melody, singing
james -> william, john, thomas, robert, george, charles
这些相似单词列表完全不需要人工干预-您输入文本,几个小时后回来即可。
短语的问题
您可能会问为什么我们不对更长的短语进行同样的操作,例如“ginger foxes love fruit”。这是因为我们没有足够的文本。为了能够可靠地确定X与何物相似,我们需要看到许多实例中使用X的上下文。当X是像“voice”这样的单词时,这并不太困难。然而,随着X变得更长,找到自然出现的X的机会呈指数级减少。举个例子,Google有大约10亿个包含“fox”一词的页面,但没有一个页面包含“ginger foxes love fruit”,尽管它是一个完全有效的英语句子,我们都理解它的意思。
组合
为了解决数据稀疏性问题,我们想要执行组合,即获取单词向量(从真实文本中很容易获得),并以捕捉其含义的方式将它们放在一起。坏消息是迄今为止没有人能够做到这一点。
最简单和最明显的方法是将每个单词向量相加或相乘。这会导致一个不良的副作用,即"猫追逐狗"和"狗追逐猫"在你的系统中意味着相同的含义。此外,如果你在做乘法,你必须特别小心,否则每个句子都将以[0,0,0,...,0]表示,这将使其失去意义。
进一步阅读
我不会讨论到目前为止已经提出的更复杂的组合方法。我建议你阅读Katrin Erk的 "Vector space models of word meaning and phrase meaning: a survey"。这是一个非常好的高层次调查,可以让你入门。不幸的是,在出版商的网站上不能免费获得它,请直接联系作者获取一份副本。在那篇论文中,你会找到许多更具体的方法的参考资料。其中比较易懂的是Mitchel和Lapata(2008)和Baroni和Zamparelli(2010)。
这个答案的要点是强调这样一个事实,即虽然存在
天真的方法(例如加法、乘法、表面相似度等),但这些方法
基本上是有缺陷的,一般不应该期望它们具有很好的性能。