选择合适的模型来创建语言识别工具

时间:2014-08-11 12:10:28

标签: machine-learning nlp n-gram

我正在开发一种用于语言识别给定文本的工具,即给出一个示例文本,识别它所写的语言(例如英语,瑞典语,德语等)。

现在我决定遵循的策略(基于我收集的一些参考资料)如下 -

a)创建character n-gram model(n的值取决于某些启发式和计算)

b)使用机器学习分类器(例如朴素贝叶斯)来预测给定文本的语言。

现在,我怀疑的是 - 是否需要创建一个字符N-gram模型。如同,一个简单的单词包策略有什么缺点,即如果我使用相应语言中可能的所有单词来创建预测模型,那么它可能会失败的可能情况。

出现这种疑问的原因是我遇到的任何参考文件/研究论文都指出语言识别是一项非常困难的任务。但是,仅使用这种使用语言中的单词的策略似乎是一项简单的任务。

编辑:首选N-gram的一个原因是,即使存在here所述的拼写错误,也要使模型具有可靠性。有谁可以指出更多?

3 个答案:

答案 0 :(得分:1)

Cavnar和Trenkle使用可变长度的字符n-gram提出了一种非常简单而有效的方法。如果C& T方法不能满足您的要求,也许您应该首先尝试实施它并转向更复杂的ML方法。

基本上,该想法是仅使用X(例如X = 300)最频繁的可变长度的n-gram(例如,1 <= N <= 5)来构建语言模型。这样做,您很可能捕获所考虑语言的大多数功能性单词/词素......没有任何关于该语言的任何语言知识!

为什么你会选择字符n-gram而不是BoW方法呢?我认为字符n-gram的概念非常简单,适用于每种书面语言。 Word,是一个非常复杂的概念,从一种语言到另一种语言大不相同(考虑几乎没有间距标记的语言)。

参考:http://odur.let.rug.nl/~vannoord/TextCat/textcat.pdf

答案 1 :(得分:1)

  

如果我使用相应语言中可能的所有单词来创建预测模型,那么它可能会失败的可能情况

几乎相同的情况是字符n-gram模型会失败。问题是你不会找到所有可能单词的适当统计数据。(*)即使对于没有拼写错误的文本,字符n-gram统计数据也更容易积累和更健壮:语言中的单词往往遵循相同的拼写图案。例如。如果你没有找到荷兰语单词“uitbuiken”(一个非常罕见的单词)的统计数据,那么n-gram“uit”,“bui”和“uik”的出现仍然是荷兰人的强烈指标。

(*)在土耳其语等凝聚性语言中,可以通过将语素串在一起形成新词,并且可能的词的数量是巨大的。查看Jurafsky and Martin的前几章或任何本科语言学文本,了解有关每种语言可能的单词数量的有趣讨论。

答案 2 :(得分:1)

性能实际上取决于您的预期输入。如果你要用一种语言对多段文本进行分类,那么一个功能词汇列表(你的“词袋”与修剪的hapaxes很快就会近似)可能会很好地为你服务,并且可以比n-gram更好地工作。 / p>

个别词之间存在重大差异 - “of”可以是荷兰语或英语; “和”在英语中很常见,但在斯堪的纳维亚语中也意味着“鸭子”等。但是如果有足够的输入数据,单个停用词的重叠不会经常混淆你的算法。

我的轶事证据来自于路透社多语种新闻专线语料库中使用libtextcat。许多电报都包含许多专有名称,借词等,这些都会在很多时候甩掉n-gram分类器;而只是检查停用词会(以我简陋的估计)产生更稳定的结果。

另一方面,如果你需要识别可能不在你词典中的简短的电报话语,那么基于字典的方法显然是有缺陷的。请注意,许多北欧语言通过自由复合形成非常富有成效的单词形成 - 你看到像“tandborstställbrist”和“yhdyssanatauti”这样的词被左右创造(芬兰语在顶部有凝集 - “yhdyssanataudittomienkinkohan”),这是完全无法预料的在某人决定使用它们之前,要在字典中。