语言检测工具 - Language Detection Tool
程 权 2014-06-20
一、基本原理
语言检测本质上是一个分类问题:给定一段文本,如何将它划分到正确的语言类别中。对于这样一个问题,首先需要弄清楚:什么特征可以区分两种语言?显然,不同的语言采用不同的字符,并且不同的语言字符的排列具有不同的特征。
通过对大量不同语言的文本进行统计分析,记录下各种语言不同字符排列的频率,即得到一个统计语言模型。将被检测文本中字符排列的频率与模型中的频率进行比对,频率最接近的语言即为被检测文本的语言。
二、关键技术
记录长度为N的字符串的频率分布的统计语言模型称为N-gram语言模型。最常用的语言模型为Tri-gram模型,该模型记录长度为3的字符串频率分布。
如何保存统计语言模型?
我采用了一个256叉树来保存训练得到的Tri-gram模型。该树结构分为4层,第0层为根节点,第3层的叶子节点记录了长度为3的字符串的频率。在构建Tri-gram模型时,向该树插入节点。在构建结束后,将该树以文本的形式保存。在检测语言时,从文本中读取Tri-gram模型。
如何计算频率分布的相似性?
最常用的相似性的度量为余弦相似度。然而,在实际的实验中,我发现采用余弦相似度得到的检测准确率并不高。因此,我采用了更为简单的方法来衡量被检测文本与语言模型的相似性,即计算被检测文本中Tri-gram出现在语言模型中的比例。
三、项目简介
该语言检测工具包括模型训练和语言检测两部分。
- train: 训练Tri-gram语言模型。
- main: 检测文本语言。
- test: 测试语言检测工具的准确率。
这里是该语言检测工具的源码。