语言模型基本概念
语言模型基础
语言模型(Language Model),顾名思义,是与语言相关的模型,是对语句的概率分布的建模。那么既然是模型,应当有模型的输入与对应的输出,对于语言模型,输入为字或者单词组成的序列,输出为这个序列的概率。
所以语言模型的定义是,对于一个给定的语言序列 $w_1,w_2,…,w_n$,语言模型用于计算序列的概率分布$P(w_1,w_2,…,w_n)$。
通俗点说,就是给定一个语句,语言模型用于判断该语句是否符合人类语言。
解释完什么是语言模型,接下来简单介绍一下为什么语言模型是有效的。上学学习语文的时候,语文老师教导我们每一句话都是有组成成分的,如‘主谓宾’
,‘定状补’
的句子结构等,那么基于这些结构,‘我是人’
通常比‘我是六点半’
更像是一句人类语言。另外,单词或者短语自身也存在依存关系和顺序关系,比如‘我们’比‘们我’更像是正常人会说的词。
看起来语言模型似乎很专业,然而实际上它早已经广泛应用于我们的生活中,最常见的如搜索引擎或者输入法在我们输入一些单词后给出联想词:
另外,人的大脑中的语言系统,就是一个非常强大的语言模型。例如在理解人类语音时,从听力转到语言的过程中,人脑扮演了语言模型的角色。在听到‘wo xi huan ni’
这句话的时候,绝大多数人应该会理解为‘我喜欢你’
而不是‘我洗换你’
。
事实上,语言模型起源于语音识别领域,实现的功能正类似于人类语言系统识别语音。而随着语言模型与深度学习的发展,语言模型的功能越来越强大,应用范围早已经扩展到翻译、搜索、问答等众多领域。
困惑度定义
语言模型首先是一个模型,那么我们需要一个方法或者指标来评估这个模型预测一个语言样本的能力。前面提到,语言模型可以计算出给定序列的出现概率。概率即不确定性,统计学中常常使用交叉熵来衡量不确定性,而困惑度实际上是交叉熵的指数形式。因此,困惑度是评估一个概率模型预测样本能力的指标。
这里给出困惑度(Perplexity)的数学定义:
从公式可以看出,困惑度是与句子的出现概率是负相关的。
模型对于真实数据集中的句子预测其出现的概率越大,那么模型的困惑度越小,也就是该模型性能越好。而公式中的N次根号是为了解决句子长度对于句子概率的影响,因为越长的句子的概率在连乘的情况下必然越小。
困惑度与语料库紧密相关,因而两个或多个语言模型只有构建在相同的语料库上才能使用困惑度进行对比。
语言模型类型划分
下面会介绍两个较为典型的语言模型:基于统计语言模型的N-gram模型和基于深度学习的神经网络语言模型。
统计语言模型(Statistical Language Model,SLM)尝试获取自然语言中的语法规则,以建立一个可以尽可能准确估计自然语言概率分布的统计学模型。
N-gram模型是如今使用最广泛的统计语言模型。N-gram模型把一个完整句子分割为固定长度为N的小片段,通过计算这些片段的概率来近似计算整个句子的概率。很显然,简单切分为固定长度的方式并不总是可以正确切分句子,固定长度N过小会导致信息丢失,而如果N设置过大也会导致计算量过大。
为了解决使用统计语言模型遇到的问题,人们把目光转向了神经网络(Neural Network,NN)。包括前馈神经网络(Forward Feedback Neural Network,FFNN)和循环神经网络(Recurrent Neural Network,RNN)在内的神经网络都能接收到更广泛的上下文作为输入,自动学习到每个字符的表征和上下文关系,性能较传统的语言模型有了大幅度的提升。