根据意义比较句子

10 投票
1 回答
3000 浏览
提问于 2025-04-17 15:43

Python有一个叫做NLTK的库,这个库里有很多文本和语料库的资源,还有很多文本挖掘和处理的方法。有没有办法可以根据句子的意思来比较它们,以找到可能的匹配呢?也就是说,能不能做一个智能的句子匹配器?

比如说,有一句话是giggling at bad jokes,还有一句是I like to laugh myself silly at poor jokes。这两句话表达的意思是一样的,但它们的句子结构完全不同(用的词不一样,Levenstein Distance这种方法就没法用了!)。

现在想象一下,我们有一个API,提供了一些功能,比如在这里可以找到的那种。基于这个,我们可以找到gigglelaugh这两个词在意思上是匹配的。可是Badpoor就不一样,所以我们可能需要增加一些层次(比如在joke这个词的上下文中,它们是匹配的,因为bad joke通常和poor joke是一样的,虽然bad personpoor 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 个回答

5

你需要一个更高级的话题建模算法,当然还需要一些语料库来训练你的模型,这样你才能轻松处理像“咯咯笑”和“笑”这样的同义词!

在Python中,你可以试试这个包:http://radimrehurek.com/gensim/。我自己没用过,但它包含了一些经典的语义向量空间方法,比如lsa/lsi、随机投影,甚至lda。

我个人最喜欢的是随机投影,因为它速度快,而且效率也很高(不过我是在Java中用另一个库实现的)。

撰写回答