我正在开发一个工具,用于识别给定文本的语言,即给定一个样本文本,识别语言(例如英语、瑞典语、德语等)。它是用来写的。
现在我决定遵循的策略(基于我收集的一些参考资料)如下-
a)创建一个character n-gram model (n的值是基于某些启发式和计算来决定的)
b)使用机器学习分类器(例如朴素贝叶斯)来预测给定文本的语言。
现在,我的疑问是-创建一个字符N-gram模型是必要的。那么,简单的词袋策略有什么缺点,例如,如果我使用各自语言中可能的所有单词来创建预测模型,那么它可能失败的情况会是什么。
产生这种怀疑的原因是,我遇到的任何参考文件/研究论文都表明,语言识别是一项非常困难的任务。然而,仅仅使用这种在语言中使用单词的策略似乎是一项简单的任务。
编辑:应该首选N-gram的一个原因是即使存在here所述的拼写错误,也要使模型健壮。还有人能指出更多吗?
发布于 2014-08-12 17:24:31
Cavnar和Trenkle提出了一种非常简单但有效的方法,使用可变长度的字符n-gram。如果C&T方法不能满足您的需求,也许您应该先尝试实现它,然后转移到更复杂的ML方法。
基本上,我们的想法是只使用X(例如X= 300)最频繁的可变长度的n-gram(例如1 <= N <= 5)来构建语言模型。这样做,你很可能捕捉到所考虑语言的大多数功能词/语素……没有任何关于该语言的先验语言知识!
为什么选择字符n-gram而不是BoW方法?我认为字符n-gram的概念非常简单,适用于每种书面语言。单词,是一个非常复杂的概念,从一种语言到另一种语言有很大的不同(考虑到几乎没有空格的语言)。
参考:http://odur.let.rug.nl/~vannoord/TextCat/textcat.pdf
发布于 2014-08-12 17:44:53
如果我使用各自语言中可能的所有单词来创建预测模型,可能出现的情况是失败的
几乎相同的情况是字符n-gram模型将失败。问题是你不可能为所有可能的单词找到合适的统计数据。(*)字符n元语法统计更容易积累,更健壮,即使对于没有拼写错误的文本也是如此:一种语言中的单词往往遵循相同的拼写模式。例如,如果你没有找到荷兰语单词"uitbuiken“(一个相当罕见的单词)的统计数据,那么n-gram "uit”、"bui“和"uik”的出现仍然是荷兰语的强烈标志。
(*)在土耳其语等粘合语言中,可以通过将语素串在一起来形成新词,并且可能的词的数量是巨大的。查看Jurafsky and Martin的前几章,或任何本科生语言学课本,了解关于每种语言可能的字数的有趣讨论。
发布于 2014-08-12 17:55:26
性能实际上取决于您的预期输入。如果你要在一种语言中对多段文本进行分类,一个功能词列表(你的“词袋”经过修剪后很快就会接近它)可能会很好地为你服务,而且可能比n-gram更好。
单个单词之间有很大的重叠-- "of“可能是荷兰语或英语;"and”在英语中很常见,但在斯堪的纳维亚语言等语言中也表示“鸭子”。但是如果有足够的输入数据,单个停用词的重叠不会经常混淆您的算法。
我的轶事证据来自于在路透社多语言新闻通讯社语料库上使用libtextcat。许多电报包含大量专有名称、外来词等,这些词在很多时候会丢弃n元语法分类器;而仅仅检查停用词(在我的粗略估计中)会产生更稳定的结果。
另一方面,如果您需要识别可能不在字典中的短小的电报语句,那么基于字典的方法显然是有缺陷的。请注意,许多北欧语言都有非常高效的自由复合构词法--你会看到像"tandborstställbrist“和"yhdyssanatauti”这样的词被左右造出来(芬兰语在顶部有粘合-- "yhdyssanataudittomienkinkohan"),在有人决定使用它们之前,根本不能指望它们会出现在字典里。
https://stackoverflow.com/questions/25242967
复制相似问题