第三章 统计语言模型–延伸阅读:统计语言模型的工程诀窍
在做这一节的读书笔记前,有一个例子其实应该深刻理解。即第一节提出来的大数定理在自然语言模型中的应用。
一个城镇的男女比例是6:4,根据大数定理遇见男生的概率是60%,而女生仅为40%,但是如果进入了一个女校,全是女生,那么可以说这个城镇只有女生吗?
所以在建模中自然语言模型最后真的"不管用"吗?
1. 假定文本中的每个词 w i 和前面 N − 1 个词有关,而与更前面的词无关 P ( w i ∣ w 1 , w 2 , … , w i − 1 ) = P ( w i ∣ w i − N + 1 , w i − N + 2 , … , w i − 1 ) 上式假设被称为 N − 1 阶马尔可夫假设,对应的语言模型称为 N 元模型。 1.假定文本中的每个词w_i和前面N-1个词有关,而与更前面的词无关\\P(w_i|w_1,w_2,…,w_{i-1})=P(w_i|w_{i-N+1},w_{i-N+2},…,w_{i-1})\\上式假设被称为N-1阶马尔可夫假设,对应的语言模型称为N元模型。 1.假定文本中的每个词wi和前面N−1个词有关,而与更前面的词无关P(wi∣w1,w2,…,wi−1)=P(wi∣wi−N+1,wi−N+2,…,wi−1)上式假设被称为N−1阶马尔可夫假设,对应的语言模型称为N元模型。
在吴军博士后续的讲解中,对于N元模型,不是说N选取的越大,最后的效果更优秀。因为这里牵扯到空间复杂度。
对于语言处理的过程中,语言词典量必然是很多的(参考厚厚的新华字典……)将词汇量表示为V,那么到时的复杂度就是o(V的N-1次方),N越大,
对于一元模型其实就是上下文无关模型。结果效果没有得到很大提升,资源的耗费却增长很多。所以实际上用的最多的是三元模型,更高阶的就很少用了。
实际的文章的撰写过程中,上下文的相关性跨度有时会很大,就比如写作中的首尾相应,凤头龙威……
上述其实是马尔可夫模型的局限性,需要采用其他一些长程的依赖性来解决。--后续进行补充。
2.如何正确的训练一个语言模型?一个直接的方法就是增加数据量,但是即使如此,仍会遇到零概率或者统计量不足的问题。因此,如果用直接的比值计算概率,大部分条件概率仍然是零,这种模型称之为“不平滑”。
这里其实就和开头的例子有一定关联了,难道在构建的样本中没出现就是不存在吗?后面介绍的古德-图灵估计就很精妙的处理这个不平滑问题。
3.古德-图灵估计的原理是这样的:对于没有看见的事件,我们不能认为它发生的概率就是零,因此我们从概率的总量中分配一个很小的比例给这些没有看见的时间。这样,看见的那些事件的概率总和就要小于1了,因此,需要将所有看见的事件概率调小一点。至于小多少,要根据“越是不可信的统计折扣越多”的方法进行。
这一段话其实第一遍读的时候看不懂,后来仔细看了几遍,才明白了这个方法的精妙。
将事件分为看得见的事件以及看不见的事件。其中看不见的事件就是条件概率为0的事件。
对于财富已经分配好的条件下,一旦有了新的人,人民日子过不下去了,绿林好汉就要“劫富济贫”,这个时候就要从看得见的事件分出来一小部分的概率分给看不见的事件。
那么赈济的钱从何出呢,绿林好汉就会从“道德层级越低下的人”(事件概率越小)身上揪出来。
4. 假定在语料库中出现 r 次的词有 N r 个,特别的,未出现的词数量为 N 0 , 语料库的大小为 N 。 N = ∑ r = 1 ∞ r ∗ N r 出现 r 次的词在整个语料库中的相对频度则是 r N r / N , 如果不做任何优化处理,就以这个相对频度作为这些词的概率统计。 \small4.假定在语料库中出现r次的词有N_r个,特别的,未出现的词数量为N_0,语料库的大小为N。\\N=\sum\limits^\infty\limits_{r=1}r*N_r\\出现r次的词在整个语料库中的相对频度则是rN_r/N,如果不做任何优化处理,就以这个相对频度作为这些词的概率统计。 4.假定在语料库中出现r次的词有Nr个,特别的,未出现的词数量为N0,语料库的大小为N。N=r=1∑∞r∗Nr出现r次的词在整个语料库中的相对频度则是rNr/N,如果不做任何优化处理,就以这个相对频度作为这些词的概率统计。
这里的表示其实我是一直绕不过来的,但是理解这个道理,可能是我的潜意识里先根据一个次来查它究竟出现了多少次。会下意识的忽略出现r次的词不只是一个可能有很多个的。
5. 假定当 r 比较小时,要使用一个更小一点的次数 , 是 d r ( 而不是直接使用 r ) ,古德 − 图灵估计按照下面的公式计算 d r : d r = ( r + 1 ) ∗ N r + 1 / N r ∑ r d r ∗ N r = N Z i p f 定律:一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多。 \small5.假定当r比较小时,要使用一个更小一点的次数,是d_r(而不是直接使用r),古德-图灵估计按照下面的公式计算d_r: \\ d_r=(r+1)*N_{r+1}/N_r\\\sum\limits_rd_r*N_r=N\\Zipf定律:一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多。 5.假定当r比较小时,要使用一个更小一点的次数,是dr(而不是直接使用r),古德−图灵估计按照下面的公式计算dr:dr=(r+1)∗Nr+1/Nrr∑dr∗Nr=NZipf定律:一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多。
上述的式子就是古德-图灵估计的里面的为了“劫富济贫”而劫掠“道德层级低下的人”,对概率小的词进行下调,也确保只是给未出现的词赋予一个很小的非零值。
同时根据Zipf定律,Nr+1小于Nr,Nr+1/Nr小于1。则一般情况下dr<r,同时d0>0。
对于进行下调的条件其实就是设定了一个阈值,只有低于这个阈值才进行下调(道德评判的标准)。
6. P ( w i ∣ w i − 1 ) = { f ( w i ∣ w i − 1 ) if # ( w i − 1 , w i ) ≥ T f g t ( w i ∣ w i − 1 if 0 < # ( w i − 1 , w i ) < T Q ( w i − 1 ) ∗ f ( w i ) otherwise 其中 T 是一个阈值,一般在 8 − 10 , f g t 表示经过古德 − 图灵估计后的相对频度,而 Q ( w i − 1 ) = 1 − ∑ w i s e e n P ( w i ∣ w i − 1 ) ∑ w i u n s e e n 这种平滑的方法,最早由前 I B M 科学家卡茨提出,故称卡茨退避法。 6.P(w_i|w_{i-1})=\begin{cases} f(w_i|w_{i-1}) & \text{if } \#(w_{i-1},w_i) \geq T\\f_{gt}( w_i|w_{i-1} & \text{if } 0<\#(w_{i-1},w_i)<T \\Q(w_{i-1})*f(w_i)& \text{otherwise}\end{cases}\\其中T是一个阈值,一般在8-10,f_{gt}表示经过古德-图灵估计后的相对频度,而\\Q(w_{i-1})=\frac{1-\sum\limits_{w_i seen}P(w_i|w_{i-1})}{\sum\limits_{w_i unseen}}\\这种平滑的方法,最早由前IBM科学家卡茨提出,故称卡茨退避法。 6.P(wi∣wi−1)=⎩ ⎨ ⎧f(wi∣wi−1)fgt(wi∣wi−1Q(wi−1)∗f(wi)if #(wi−1,wi)≥Tif 0<#(wi−1,wi)<Totherwise其中T是一个阈值,一般在8−10,fgt表示经过古德−图灵估计后的相对频度,而Q(wi−1)=wiunseen∑1−wiseen∑P(wi∣wi−1)这种平滑的方法,最早由前IBM科学家卡茨提出,故称卡茨退避法。
上面就是卡茨退避法的详细公式表示,非常简洁的体现了古德-图灵估计,very good~
后面还提到了一种现在比较少用的删除插值法是通过低级语言模型和高级语言模型进行线性插值来达到平滑(里面有个)