研究 旧 .com 迁移

NLP:相关资料 / 语言模型

从旧 .com 全量搬运的历史内容,来源路径:/ai-kb/课程/nlp/resources/语言模型/

迁移来源

语言模型

definition

目标: 给定词串 W=w1,w2,,wnW=w_1,w_2,\ldots, w_n, 计算概率 p(W)p(W), 表示这个词序列在自然语言中出现的概率 (合理性).

从数学角度 p(W)=p(w1)p(w2w1)p(wnw1,w2,,wn1)p(W)=p(w_1)p(w_2|w_1)\cdots p(w_n|w_1,w_2,\ldots,w_{n_1}).

n-gram #

应用马尔可夫过程.

n-gram 就是每个词的概率只依赖于前 n1n-1 个词, 即认为 p(wkw1,w2,,wk1)=p(wkwkn+1,,wk1)p(w_k|w_1,w_2,\ldots,w_{k-1})=p(w_k|w_{k-n+1},\ldots,w_{k-1}).

具体的

  • 1-gram/unigram p(w1,w2,,wn)=p(w1)p(w2)p(wn)p(w_1,w_2,\ldots,w_n)=p(w_1)p(w_2)\cdots p(w_n).
  • 2-gram/bigram p(w1,w2,,wn)=p(w1)p(w2w1)p(w3w2)p(wnwn1)p(w_1,w_2,\ldots,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_2)\cdots p(w_n|w_{n-1}).

实际应用中加入开始标识符和结束标志符, 即第一项为 p(w1<BOS>)p(w_1|<BOS>) 最后一项为 p(<EOS>wn1)p(<EOS>|w_{n-1}).

参数计算方法就是用巨大的语料库, 统计连续 nn 个词的分布计算条件概率.

参数量 #

显然 nn 越大理论效果越好, 越接近数学层面的定义.

但考虑到实际计算限制, 一般取 n=3n=3.

设词典中词数为 NN, 对于 ngramn-gram 要计算 p(wnw1,,wn1)p(w_n|w_1,\ldots,w_{n-1}), 一共有 NnN^n 个参数, 参数量巨大难以维护, 并且会出现非常多 0 值参数.

数据稀疏 #

在给定的训练数据中

  • 一些词高频出现, 概率很高
  • 一些词低频出现, 概率接近 0, 从而造成估计不可靠. 极大似然估计在采样样本总数趋于无穷时达到最小方差.

同时也可能有一些词或词组在数据集未出现, 从而无法计算. 默认 0 的话会导致一个很好的句子被认为概率 0.

解决办法:

  • 扩大训练数据规模有所帮助, 但增加的数据集仍是高频词占据绝大部分.
  • 平滑: 重新估计 0 概率和低概率. (Add-one, Good-Turing)
  • 回退: 高阶 n-gram 的概率难以计算时, 采用低阶 n-gram 统计 (backoff, Linear interpolation)

平滑 Smooth #

Add-one: 将所有词/词组出现次数 +1.

c(w)c(w)ww 出现次数, 总词数为 V|V|, 总出现次数为 NN.

  • unigram p(w)=c(w)+1N+Vp(w)=\frac{c(w)+1}{N+|V|}.
  • bigram p(w1,w2)=c(w1,w2)+1c(w1)+Vp(w_1,w_2)=\frac{c(w_1,w_2)+1}{c(w_1)+|V|}.

缺点: 会分走过多概率给 0 概率, 修正考虑将 +1, 变为 +δ\delta.

如何选取合适的 δ\delta (held-out estimation) 从训练数据中分离一部分数据 HH, 用剩余数据对不同 δ\delta 训练, 并在 H 上测试表现, 选取最优的 δ\delta.

Good-Turing: 根据仅出现一次的 n-gram 的个数, 来确定未见 n-gram 的概率.

NrN_r 表示出现次数为 rr 的词/词组的个数.

rr 调整为

r=(r+1)Nr+1Nrr^*=\frac{(r+1)N_{r+1}}{N_r}

那么概率

回退 #

Backoff:

p(wiwi2,wi1)={p(wiwi2,wi1)if C(wi2,wi1,wi)>0α1p(wiwi1)if C(wi2,wi1,wi)=0 and C(wi1,wi)>0α2p(wi)otherwise p(w_i \mid w_{i-2}, w_{i-1})= \begin{cases} p(w_i \mid w_{i-2}, w_{i-1}) & \text{if } C(w_{i-2}, w_{i-1}, w_i) > 0 \\ \alpha_1\, p(w_i \mid w_{i-1}) & \text{if } C(w_{i-2}, w_{i-1}, w_i)=0 \ \text{and}\ C(w_{i-1}, w_i) > 0 \\ \alpha_2\, p(w_i) & \text{otherwise} \end{cases}

Interpolation:

p(wnwn2,wn1)=λ1p(wn)+λ2p(wnwn1)+λ3p(wnwn2,wn1)0λi1,i=1,2,3,λ1+λ2+λ3=1 p(w_n \mid w_{n-2}, w_{n-1}) = \lambda_1 p(w_n) + \lambda_2 p(w_n \mid w_{n-1}) + \lambda_3 p(w_n \mid w_{n-2}, w_{n-1}) \quad 0 \le \lambda_i \le 1,\quad i=1,2,3,\qquad \lambda_1+\lambda_2+\lambda_3=1

模型质量评价 #

好的模型应该给实际使用的句子打较高的概率.

外部评价: 一般用于比较两个模型, 将其应用于同一个任务.

内部评价: 对模型直接评价.

Perplexity (困惑度, PP): P(W) 的几何平均值的倒数

对于 bigram 模型

PP(W)=P(W)1N=[i=1NP(wiwi1)1N]PP(W)=P(W)^{-\frac 1N}=\left[\prod\limits_{i=1}^N P(w_i|w_{i-1})^{-\frac1N}\right]

PP 越小效果越好 {{< admonition question “练习” true >}}

题目 #

图

题目 #

图

前馈神经网络 FNN## 预训练模型 PCM #

讨论

评论

正在加载评论...