死灵淋巴药房-Necro Lymph Pharmacy

CFG

指一系列“\(A\to B_1\ B_2\ B_3\dots B_n\) 的转化规则。可以发现,因为转化规则是一对多,所以一个词生成的内容完全上下文无关的。同时,一次转化呈树形结构,因此有对应的 parse tree。

虽然 CFG 是一对多的,但是总是可以通过设中间态让转移变成一对二或一对终态两种场合。此时 parsing tree 是二叉树。此乃 Chomsky Normal Form(CNF)。

依赖 CNF 和转化规则,我们可以对一句话设计 DP 方式来找到它的 parsing tree。

但是一句话的 parsing tree 可能不唯一。因此,我们可以通过统计学方法,对多种转移方式赋以不同的概率,得到 PCFG。对 PCFG 使用 DP 方法,可以生成若干种最可能的 parsing tree。

LSA

对于若干份文本,使用每个单词在各个文本中出现频率的频率向量作为 embedding。

  • 问题很大!

使用 SVD 提取向量!

  • 全都正交!

不直接取 \(\text{rank}\) 近似,而是取一个稍微弱一点的近似,它即不再正交。

其它优化?

  • 干掉某些出现过于频繁的单词。

HMM

对于文本 \(\{o_i\}\),HMM 假设存在隐标签 \(\{q_i\}\),且文本之间的依赖关系满足 Markov 链关系,即

\[\Pr(O)=\prod\Pr(q_i\mid q_{i-1})\Pr(o_i\mid q_i) \]

若已知标签-标签转移矩阵和标签-文本转移矩阵,则通过 DP 即可简单计算上式。

不仅如此,通过把正向 DP 和反向 DP 拼接,我们可以计算一些例如

\[\Pr(O\mid q_t=i),\Pr(O\mid q_t=i,q_{t+1}=j) \]

等信息,在下文中的 E-M 算法有用。

同时,若已知矩阵,还可以根据 \(O\) 计算最可能的标签 \(Q\),即

\[\arg\max_Q\Pr(Q\mid O) \]

对其 DP 即可。DP 的算法被称作 Viterbi 算法。

现在思考如何得到矩阵。在有监督学习的场合,直接使用统计学方法,用频率替代概率不失为一种好的求出矩阵的方法;但是如果是无监督的场合呢?

迁移:GMM 算法,处理数据服从混合 Gauss 分布的场合。

\(N(X\mid\mu,\Sigma)\) 是数据在 \(\mu,\Sigma\) 引导的 Gauss 分布下的密度函数。再加入一个 \(\pi\) 表示 Gauss 分布的权重(有 \(\sum \pi_i=1\)),则有

\[\Pr(X\mid\mu,\Sigma,\pi)=\sum\pi_k N(X\mid\mu_k,\Sigma_k) \]

初始时,对全体概率密度随机初始化,然后不断调整参数优化概率。

首先,计算每个点属于某个 Gauss 分布的后验概率

\[\gamma(z_{n,k})=\dfrac{\pi_k(x_n\mid\mu_k,\Sigma_k)}{\sum\pi_i(x_n\mid\mu_i,\Sigma_i)} \]

然后根据后验概率,可以依托某个公式更新 \(\pi,\mu,\Sigma\)。交替两个步骤,最终参数会收敛。

现在对于参数 \(\theta\),我们希望计算

\[\log\Pr(O\mid\theta)=\log\sum_Q\Pr(O\mid\theta,Q)\Pr(Q)=\log\sum_Q\Pr(O,Q\mid\theta) \]

其中,外面套一个 \(\log\) 是为了接下来应用 Jensen 不等式。对于任一组 \(Q\) 的一组 distribution \(q(Q)\),有

\[\log\Pr(O\mid\theta)=\log\sum_Q\Pr(O,Q\mid\theta) \\=\log\sum_Qq(Q)\dfrac{\Pr(O,Q\mid\theta)}{q(Q)} \\\geq\sum_Qq(Q)\log\dfrac{\Pr(O,Q\mid\theta)}{q(Q)}&(\text{Jensen}) \\=\sum_Qq(Q)\log\Pr(O,Q\mid\theta)-\sum_Qq(Q)\log q(Q) \]

其中后面的熵项 \(\sum_Qq(Q)\log q(Q)\) 与参数 \(\theta\) 无关。因此,当 \(q\) 固定时,我们只需寻找最大化前一半的 \(\theta\) 即可。

任意时刻,我们可以根据当前的 \(\theta_k\) 生成 \(q=\text{distribution}(O,\theta_k)\),然后更新 \(\theta\)

在已知 \(\theta_k\) 并由其确定 \(q\) 后,新 \(\theta\) 对应的

\[\Pr(\theta\mid\theta_k)=\sum_Qq(Q)\log\Pr(O,Q\mid\theta) \\=\sum_Q\Pr(Q\mid O,\theta_k)\log\Pr(O,Q\mid\theta) \]

其中,后者即为 HMM 的 DP,因此

\[=\sum_Q\Pr(Q\mid O,\theta_k)\log\prod a_{q_{t-1},q_t}b_{q_t,o_t} \\=\sum_{t,i,j}\Pr(Q_{t-1}=i,Q_t=j\mid O,\theta_k)\log a_{i,j}+\sum_{t,j}\Pr(Q_t=j\mid O,\theta_k)\log b_{j,o(t)} \]

两项求和直接 DP 即可。于是剩下就变成了优化由 \(\theta\) 决定的 \(a,b\) 的过程。

事实上,使用

\[\hat a_{i,j}=\dfrac{\sum_{t,O}\Pr(Q_{t-1}=i,Q_t=j,O\mid\theta_k)}{\sum_{t,O,*}\Pr(Q_{t-1}=i,Q_t=*,O\mid\theta_k)} \]

即可更新。\(\hat b\) 也类似。

N-GRAM

核心公式

\[\prod\Pr(w_i\mid w_{i-n+2},\dots,w_{i-1})=\prod\dfrac{\Pr(w_{i-n+2},\dots,w_{i-1},w_i)}{\Pr(w_{i-n+2},\dots,w_{i-1})} \]

其它:

  • 特殊 token 可以通过参数设置让某些结尾得不合常理的句子的权重小(例如,I go to. 的权重应该小于 I go to school)。
  • 完全未出现的词汇会被赋以特殊 token ,虽然在更先进的 Language Model 中,被 subword unit(covered later) 替换了。
  • 处理未出现 n-gram 的方法之一是 add-k smoothing,即 \(\Pr_{tri}(w_t\mid w_{t-2}w_{t-1})=\dfrac{\Pr(w_{t-2}w_{t-1}w_t)+k}{\Pr(w_{t-2}w_{t-1})+k|V|}\);方法之二是同时使用多个 gram 的结果,为它们赋以 \(\lambda\) 的系数,该系数可以调参;方法之三是 backoff,如果长 gram 未出现则换短 gram(但是短 gram 要乘以一个参数使其与长 gram 公平竞争)
posted @ 2024-09-27 13:51  Troverld  阅读(51)  评论(1编辑  收藏  举报