论文部分内容阅读
统计语言模型是很多自然语言处理任务的重要模块。一般而言,用来训练语言模型的数据量越大,训练得到的语言模型质量越好。Google公司通过LDC向学术界公布了Web1T词频数据,这部分数据是从总共有1T个词的互联网网页上抽取得到的。然而,现在的软件包都无法处理这么大规模的数据,这已经成为语言模型发展的一个瓶颈。
本文对大规模语言模型的难点和实现技术进行了研究,并针对Web1T语料实现了一套训练和使用工具。由于Web1T数据做了低频词过滤,本文还对其进行平滑时遇到的问题进行讨论,实现了适合大规模数据傻瓜平滑算法。
具体来说,本文的工作主要包含以下内容:
1、研究并比较了基于n元语法语言模型的平滑算法
基于n元语法的语言模型具有模型简单、效果良好的特点,是目前主流的语言模型建模方法。然而极大似然估计会对n元组的概率给出零值,所以需要对极大似然估计方法给出的结果进行平滑,修正错误的零值概率。本文研究了主流平滑算法,如Good-Turing平滑、Witten-Bell平滑和Kneser-Ney平滑等,并比较了各种平滑算法在实际语料上的效果。
2、实现了针对Web1T语料的平滑算法
Google发布的Web1T词频语料只包含n元组频次信息,并且做了低频词过滤,这使得现有的平滑算法公式中的参数无法求得。为了解决这个问题,本文利用zipf定律估计被过滤掉的不同元组的数目,研究和实现了适合大规模数据处理的傻瓜回退(Stupid Smoothing)平滑算法,并比较了傻瓜回退平滑算法和传统平滑算法的效果。
3、Google Web1T语料的训练和使用
处理大规模文本需要资源过大是大规模语言模型需要解决的问题和难点。本文对大规模语言模型实现的难点进行了分析,考察了关键的实现技术,并讨论了各种技术方案的优缺点。针对语言模型训练时所需内存过大问题,本文采用分布式训练和索引技术使所需内存降到可以接受的程度。针对语言模型使用时所需内存过大问题,本文使用对测试集的过滤的方法去除无用数据,设计高效的TRIE树存储数据,并使用内存映射技术降低内存使用量。基于对大规模语言模型实现技术的研究,本文还实现了一个面向Web1T语料的训练和使用工具包,支持训练和使用Web1T语言模型。