我想知道是否有算法或库可以帮助我识别英语句子中无意义的成分?例如,非常严重的语法错误?如果有的话,能否解释一下它的工作原理,因为我非常想实现或在自己的项目中使用它。
这里有一个随机的例子:
在句子中:“我关上了所以等等页面你好那扇门。”
作为人类,我们可以迅速识别出[所以等等页面你好]这一部分没有任何意义。机器是否有可能指出这一字符串没有意义并且还包含语法错误呢?
如果有这样的解决方案,它的精确度能达到什么程度?例如,给定一段英语句子,算法是否能返回一个测量值,指示这段句子的意义或正确性如何?非常感谢!
附注:我已经查看了CMU的链接语法以及NLTK库。但我仍然不确定如何使用例如链接语法解析器来实现我想要的功能,因为如果解析器不接受该句子,我不知道如何调整它来告诉我哪个部分不对……而且我不确定NLTK是否支持这个功能。
我还想到解决这个问题的方法是查看词语组合的频率。由于我目前只对纠正非常严重的错误感兴趣。如果我将“严重错误”定义为句子片段中词语很少一起使用的案例,即,该组合的频率应该远低于句子中其他组合的频率。
例如,在上面的例子中:[所以等等页面你好]这四个词确实很少一起出现。我的想法的一个直觉来自于当我在Google中输入这样的组合时,没有相关结果跳出来。那么,是否有任何库可以像Google那样为我提供这样的频率信息?这样的频率可能会给出词语组合正确性的一个很好的提示。
回答:
我认为你正在寻找的是语言模型。语言模型为你的语言中出现的k
个词的句子分配一个概率。最简单的语言模型是n-gram模型:给定句子的前i
个词,观察到第i+1
个词的概率仅依赖于前n-1
个词。
例如,对于二元模型(n=2
),句子w1 w2 ... wk
的概率等于
P(w1 ... wk) = P(w1) P(w2 | w1) ... P(wk | w(k-1))。
要计算概率P(wi | w(i-1))
,你只需要在一个大型语料库中统计二元组w(i-1) wi
和词w(i-1)
的出现次数即可。
这里有一篇关于这个主题的好教程论文:语言建模的一点进展,作者是Joshua Goodman。