语言模型的性能通常用交叉熵和复杂度(perplexity)来衡量。交叉熵的意义是用该模型对文本识别的难度,或者从压缩的角度来看,每个词平均要用几个位来编码。复杂度的意义是用该模型表示这一文本平均的分支数,其倒数可视为每个词的平均概率。平滑是指对没观察到的N元组合赋予一个概率值,以保证词序列总能通过语言模型得到一个概率值。通常使用的平滑技术有图灵估计、删除插值平滑、Katz平滑和Kneser-Ney平滑。
假设现在有一个样本集中两个概率分布p,q,其中
p为真实分布,
q为非真实分布。机器学习的目的就是使q尽可能的接近p,使交叉熵接近于0;
假如,按照真实分布p来衡量识别一个样本所需要的编码长度的期望为:
H(p)=
![](http://b.hiphotos.baidu.com/baike/s%3D134/sign=f29c291e4136acaf5de092ff48d98d03/ca1349540923dd546f3dcd4fdb09b3de9c82484e.jpg)
但是,如果采用错误的分布q来表示来自真实分布p的平均编码长度,则应该是:
H(p,q)=
![](http://d.hiphotos.baidu.com/baike/s%3D133/sign=9170a8149b8fa0ec7bc7600e1596594a/37d3d539b6003af3c927b6473f2ac65c1038b67c.jpg)
此时就将H(p,q)称之为交叉熵。交叉熵的计算方式如下:
对于离散变量采用以下的方式计算:H(p,q)=
![](http://a.hiphotos.baidu.com/baike/s%3D138/sign=8fca88ef104c510faac4e61958582528/30adcbef76094b36a4214dcaa9cc7cd98d109d61.jpg)
对于连续变量采用以下的方式计算:
![](http://e.hiphotos.baidu.com/baike/s%3D263/sign=3dda5d162b3fb80e08d166d105d12ffb/9d82d158ccbf6c81bc397dcfb63eb13533fa408e.jpg)
交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,
交叉熵损失函数可以衡量p与q的
相似性。交叉熵作为损失函数还有一个好处是
使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以
被输出的误差所控制。
在特征工程中,可以用来衡量两个随机变量之间的相似度。
在语言模型中(NLP)中,由于真实的分布p是未知的,在语言模型中,模型是通过训练集得到的,交叉熵就是衡量这个模型在测试集上的正确率。