根据意义比较句子
Python有一个叫做NLTK
的库,这个库里有很多文本和语料库的资源,还有很多文本挖掘和处理的方法。有没有办法可以根据句子的意思来比较它们,以找到可能的匹配呢?也就是说,能不能做一个智能的句子匹配器?
比如说,有一句话是giggling at bad jokes
,还有一句是I like to laugh myself silly at poor jokes
。这两句话表达的意思是一样的,但它们的句子结构完全不同(用的词不一样,Levenstein Distance
这种方法就没法用了!)。
现在想象一下,我们有一个API,提供了一些功能,比如在这里可以找到的那种。基于这个,我们可以找到giggle
和laugh
这两个词在意思上是匹配的。可是Bad
和poor
就不一样,所以我们可能需要增加一些层次(比如在joke
这个词的上下文中,它们是匹配的,因为bad joke
通常和poor joke
是一样的,虽然bad person
和poor person
就不一样!)。
一个主要的挑战是要去掉那些对句子意思影响不大的部分。所以,这个算法应该能让第一句和这句I like to laugh myself silly at poor jokes, even though they are completely senseless, full of crap and serious chances of heart-attack!
之间的匹配程度保持一致。
那么,有没有这样的算法已经被想出来了呢?还是说我得自己去发明一个?
1 个回答
你需要一个更高级的话题建模算法,当然还需要一些语料库来训练你的模型,这样你才能轻松处理像“咯咯笑”和“笑”这样的同义词!
在Python中,你可以试试这个包:http://radimrehurek.com/gensim/。我自己没用过,但它包含了一些经典的语义向量空间方法,比如lsa/lsi、随机投影,甚至lda。
我个人最喜欢的是随机投影,因为它速度快,而且效率也很高(不过我是在Java中用另一个库实现的)。