跳至内容

文本表示、HMM 与 CRF

词频与词向量的表示方法,以及 HMM、CRF 的建模

  • 机器学习
  • 文本表示
  • 词向量
  • HMM
  • CRF

1. 文本表示

1.1 词袋与 TF-IDF

词袋模型先建立词表,再用每个词的出现次数表示文档。向量的每一维对应一个词,长度等于词表大小。

一篇文档通常只覆盖词表中的少量词,因此向量大多为零。词袋保留词频,忽略词序。

分词后的两篇文档分别为“机器 学习 学习”和“机器 翻译”。按词表“机器、学习、翻译”排列,计数向量是:

x1=(1,2,0),x2=(1,0,1)x_1=(1,2,0),\qquad x_2=(1,0,1)

TF-IDF 将词频(TF,Term Frequency)与逆文档频率(IDF,Inverse Document Frequency)相乘。一个词在当前文档中出现得越多,TF 越大;出现在越多文档中,IDF 越小。

这里直接用词的出现次数作为 TF,再按下面的公式计算 TF-IDF:

IDF⁡(t)=log⁡文档总数包含词 t 的文档数TFIDF⁡(t,d)=TF⁡(t,d)×IDF⁡(t)\begin{aligned} \operatorname{IDF}(t)&=\log\frac{\text{文档总数}}{\text{包含词 }t\text{ 的文档数}}\\[6pt] \operatorname{TFIDF}(t,d)&=\operatorname{TF}(t,d)\times\operatorname{IDF}(t) \end{aligned}

tt 表示词,dd 表示文档。同一篇文档中某个词出现多次,IDF 的分母仍只计一篇。

上例中,“机器”两篇都有,IDF 为 log⁡1=0\log 1=0;“学习”只在一篇出现,IDF 为 log⁡2\log 2。

第一篇中“学习”的词频为 22,因此未做归一化的 TF-IDF 向量为 (0,2log⁡2,0)(0,2\log 2,0)。“机器”被降为零,反映的是它在这组文档中没有区分作用。

IDF 衡量词在当前语料中的区分度,不能直接等同于语义重要性。不同工具使用的 TF-IDF 公式和归一化设置可能不同,比较数值时要先统一计算方式。

词表和 IDF 只从训练集拟合,再用于验证集和测试集;不能为计算特征提前读取测试集统计量。

1.2 主题模型与词嵌入

主题模型用主题分布表示文档,词嵌入用稠密向量表示词。 两者的表示对象和各维的含义不同。

潜在狄利克雷分配(LDA,Latent Dirichlet Allocation) 把文档看成多个主题的混合,每个主题又对应一份词的概率分布。文档的主题向量中,每一维表示一个主题所占的比例。

某个主题对“训练、模型、梯度”赋予较高概率,可以人为解释为机器学习主题。模型学到的是词的概率分布,“机器学习”这个主题名称由人归纳。

词嵌入则为每个词学习一个稠密向量,让在相似语境中出现的词共享统计信息。向量维度是需要选择的超参数,每一维通常没有明确的主题含义。

下文的 Word2Vec 和 fastText 都学习静态词向量:同一个词在不同句子中使用同一份表示。把这些词向量求平均,可以得到文档向量,但平均操作会丢失词序。

1.3 Word2Vec:通过上下文学习词向量

Word2Vec 是一种浅层神经网络,通过预测词与上下文的关系学习词向量,包含两种结构:

  • 连续词袋模型(CBOW,Continuous Bag-of-Words):用上下文预测中心词。
  • Skip-gram:用中心词分别预测窗口内的上下文词。

在“我 喜欢 机器 学习”中,取“机器”为中心词,窗口半径为 11,上下文就是左右各一个词:“喜欢”和“学习”。

CBOW 把“喜欢、学习”一起作为输入,预测“机器”。Skip-gram 以“机器”为输入,分别预测“喜欢”和“学习”,得到两个训练词对。

网络由输入层、映射层和输出层组成。 以 Skip-gram 为例,设词表有 VV 个词,词向量为 dd 维:

  1. 输入层:用 one-hot 编码表示中心词,尺寸为 [1,V][1,V];对应词的位置为 11,其余为 00。
  2. 映射层:输入乘以 [V,d][V,d] 的权重矩阵,得到 [1,d][1,d] 的词向量。这一步等价于取出权重矩阵中该词对应的一行,实现时直接查表。
  3. 输出层:词向量乘以 [d,V][d,V] 的输出权重矩阵,得到 [1,V][1,V] 的得分;再经过 softmax,得到词表中各词作为上下文的概率。

只看各层输出的尺寸,过程是:

[1,V]⏟输入→×[V,d][1,d]⏟词向量→×[d,V][1,V]⏟得分→softmax[1,V]⏟概率\underbrace{[1,V]}_{\text{输入}} \xrightarrow{\times[V,d]} \underbrace{[1,d]}_{\text{词向量}} \xrightarrow{\times[d,V]} \underbrace{[1,V]}_{\text{得分}} \xrightarrow{\text{softmax}} \underbrace{[1,V]}_{\text{概率}}

CBOW 在映射层先对上下文词向量取平均,再进入输出层预测中心词。 后续计算结构相同。

Skip-gram 以真实上下文为训练目标,同时更新两个权重矩阵。 词的上下文分布约束了向量的更新,向量由此反映词在语料中的用法。

训练后通常取 [V,d][V,d] 的输入权重矩阵作为词向量表:每行对应一个词,每个词由 dd 个数表示。

1.4 层次 softmax 与负采样

完整 softmax 每个训练对都涉及全部 VV 个输出词,计算量随词表增大。常见替代方法处理方式不同:

  • 层次 softmax:把词放在二叉树叶节点,用从根到目标词路径上的二分类概率乘积表示词概率。Word2Vec 使用哈夫曼树,使高频词路径更短。

    每次只计算路径上的节点,平均计算量通常按 O(dlog⁡V)O(d\log V) 量级讨论,具体取决于目标词的路径长度。

  • 负采样:保留真实词对,再从噪声分布抽取 KK 个词,训练模型区分真实词对与采样词对。

    每个真实词对只需计算一个正例和 KK 个采样词对,主要计算量为 O((K+1)d)O((K+1)d)。

负采样的一次采样损失可写为:

ℓ(w,c)=−log⁡σ(uc⊤vw)−∑k=1Klog⁡σ(−unk⊤vw)\ell(w,c)=-\log\sigma(u_c^\top v_w)-\sum_{k=1}^{K}\log\sigma(-u_{n_k}^\top v_w)

ww 是中心词,cc 是真实上下文词,nkn_k 是第 kk 个采样词。vwv_w 是中心词的输入向量,ucu_c 和 unku_{n_k} 分别是上下文词与采样词的输出向量;两个向量的内积就是词对得分。

sigmoid 函数为 σ(z)=11+e−z\displaystyle\sigma(z)=\frac{1}{1+e^{-z}}。最小化损失时,第一项提高真实词对的得分,第二项降低采样词对的得分。

负采样改变了训练目标:完整 softmax 在全词表中预测上下文词,负采样改为区分真实词对与采样词对,因此这些二分类输出不能直接当作归一化的全词表概率。

1.5 fastText:字符片段与文本分类

fastText 的两大用途是文本分类和训练词向量。分类模型由三层组成:

  • Embedding 层:将词和可选的词 n-gram 特征转换为向量。
  • 全局平均池化层(GAP):对特征向量取平均,将长短不同的文本汇成定长向量。
  • 输出层:线性变换后计算类别概率,单标签分类通常使用 softmax,多标签可使用独立 sigmoid。

分类时,嵌入与输出层一起训练。词 n-gram 把连续的 nn 个词作为一个特征,补充平均词向量丢失的局部词序信息。

训练词向量时,fastText 子词模型结合整词与字符 n-gram(长度为 nn 的连续字符片段)的向量。相似词形可以共享参数,训练词表中没有的词也可利用已学到的片段构造表示。

2. HMM 与 CRF

以词性标注为例,xx 表示输入的词序列,yy 表示对应的词性序列。下面比较标准一阶 HMM 与一阶线性链 CRF。

2.1 马尔可夫链

马尔可夫链描述状态按概率依次转移的过程。 一阶马尔可夫假设是:已知当前状态后,下一步的状态分布不再依赖更早的历史。若转移概率不随时间改变,就称为齐次马尔可夫链。

HMM 中的隐藏状态沿着这样的链转移,每个状态再生成对应的观测。在词性标注中,词性是隐藏状态,词是观测。

2.2 HMM:生成式模型

隐马尔可夫模型(HMM,Hidden Markov Model)是生成式模型,对联合概率分布建模,这里的 P(x,y)P(x,y) 表示词序列与词性序列共同出现的概率。

它有两个主要假设:

  1. 一阶马尔可夫假设:给定前一个状态,当前状态就不再依赖更早的状态。
  2. 观测的条件独立性:给定当前状态,当前观测与其他状态和观测条件独立。

一个离散 HMM 的模型参数记作 λ=(A,B,π)\lambda=(A,B,\pi),由以下三组概率组成,通常写成一个向量和两个矩阵:

  1. 初始状态概率向量 π\pi:每个元素表示序列从某个状态开始的概率。
  2. 状态转移概率矩阵 AA:每行对应当前状态,每列对应下一状态,元素表示两者之间的转移概率。
  3. 发射概率矩阵 BB:每行对应一个状态,每列对应一个观测词,元素表示该状态生成这个词的概率。

这些元素均在 00 到 11 之间;π\pi 的元素和为 11,AA 和 BB 每一行的元素和分别为 11。

HMM 主要解决三类问题:

  1. 估值(评估)问题:已知模型 λ\lambda 和观测序列 xx,计算模型产生该序列的概率 P(x∣λ)P(x\mid\lambda),通常用前向算法。
  2. 解码问题:已知模型 λ\lambda 和观测序列 xx,寻找概率最大的整条隐藏状态序列,通常用维特比(Viterbi)算法。
  3. 学习问题:已知模型结构和训练观测序列,估计参数 AA、BB 和 π\pi。隐藏状态未知时,常用 Baum–Welch(鲍姆–韦尔奇)算法迭代估计;已有完整状态标注时,可统计频数并归一化来估计这些概率。

2.2.1 Viterbi:寻找最优状态序列

Viterbi 用动态规划,在模型参数已知时寻找概率最大的整条隐藏状态序列。 它逐步为每个候选状态保留概率最高的路径,并记录前一状态;最后选出最佳终点,反向回溯得到完整序列。

2.2.2 Baum–Welch:学习模型参数

Baum–Welch 在隐藏状态未知时学习 HMM 参数,是期望最大化(EM,Expectation–Maximization)算法在 HMM 上的应用。它从初始参数出发,用前向–后向算法估计状态与转移的概率,再按概率加权计数,更新 AA、BB 和 π\pi,如此反复迭代。结果受初始参数影响,不保证全局最优。

2.3 CRF:判别式模型

条件随机场(CRF,Conditional Random Field)是判别式模型,对问题的条件概率分布建模,这里的 P(y∣x)P(y\mid x) 表示给定句子后,各种词性序列的概率。模型根据输入特征和标签关系为整条词性序列打分,再归一化为概率。

CRF 的参数是特征权重,权重可以为正、为负,不要求和为 11;需要归一化的是最终的序列概率。

CRF 不要求观测满足 HMM 的条件独立假设,可以同时利用当前词、前后词、词缀等输入特征。不过,一阶线性链 CRF 的标签关系仍只直接连接相邻标签,并不是没有马尔可夫限制。

在词性标注等标签预测任务中,能用 HMM 解决的问题,通常也能用 CRF 建模,而且 CRF 能更灵活地利用上下文特征。

HMM 和 CRF 都可用 Viterbi 算法寻找最优标签序列。速度和准确率不能仅凭模型名称判断:预测速度还取决于特征计算与实现,准确率取决于数据、特征和训练结果。

评论

使用 GitHub 登录后参与讨论,评论将公开保存在 GitHub。

阅读到这里时加载评论。