文本表示、HMM 与 CRF
词频与词向量的表示方法,以及 HMM、CRF 的建模
1. 文本表示
1.1 词袋与 TF-IDF
词袋模型先建立词表,再用每个词的出现次数表示文档。向量的每一维对应一个词,长度等于词表大小。
一篇文档通常只覆盖词表中的少量词,因此向量大多为零。词袋保留词频,忽略词序。
分词后的两篇文档分别为“机器 学习 学习”和“机器 翻译”。按词表“机器、学习、翻译”排列,计数向量是:
TF-IDF 将词频(TF,Term Frequency)与逆文档频率(IDF,Inverse Document Frequency)相乘。一个词在当前文档中出现得越多,TF 越大;出现在越多文档中,IDF 越小。
这里直接用词的出现次数作为 TF,再按下面的公式计算 TF-IDF:
表示词, 表示文档。同一篇文档中某个词出现多次,IDF 的分母仍只计一篇。
上例中,“机器”两篇都有,IDF 为 ;“学习”只在一篇出现,IDF 为 。
第一篇中“学习”的词频为 ,因此未做归一化的 TF-IDF 向量为 。“机器”被降为零,反映的是它在这组文档中没有区分作用。
IDF 衡量词在当前语料中的区分度,不能直接等同于语义重要性。不同工具使用的 TF-IDF 公式和归一化设置可能不同,比较数值时要先统一计算方式。
词表和 IDF 只从训练集拟合,再用于验证集和测试集;不能为计算特征提前读取测试集统计量。
1.2 主题模型与词嵌入
主题模型用主题分布表示文档,词嵌入用稠密向量表示词。 两者的表示对象和各维的含义不同。
潜在狄利克雷分配(LDA,Latent Dirichlet Allocation) 把文档看成多个主题的混合,每个主题又对应一份词的概率分布。文档的主题向量中,每一维表示一个主题所占的比例。
某个主题对“训练、模型、梯度”赋予较高概率,可以人为解释为机器学习主题。模型学到的是词的概率分布,“机器学习”这个主题名称由人归纳。
词嵌入则为每个词学习一个稠密向量,让在相似语境中出现的词共享统计信息。向量维度是需要选择的超参数,每一维通常没有明确的主题含义。
下文的 Word2Vec 和 fastText 都学习静态词向量:同一个词在不同句子中使用同一份表示。把这些词向量求平均,可以得到文档向量,但平均操作会丢失词序。
1.3 Word2Vec:通过上下文学习词向量
Word2Vec 是一种浅层神经网络,通过预测词与上下文的关系学习词向量,包含两种结构:
- 连续词袋模型(CBOW,Continuous Bag-of-Words):用上下文预测中心词。
- Skip-gram:用中心词分别预测窗口内的上下文词。
在“我 喜欢 机器 学习”中,取“机器”为中心词,窗口半径为 ,上下文就是左右各一个词:“喜欢”和“学习”。
CBOW 把“喜欢、学习”一起作为输入,预测“机器”。Skip-gram 以“机器”为输入,分别预测“喜欢”和“学习”,得到两个训练词对。
网络由输入层、映射层和输出层组成。 以 Skip-gram 为例,设词表有 个词,词向量为 维:
- 输入层:用 one-hot 编码表示中心词,尺寸为 ;对应词的位置为 ,其余为 。
- 映射层:输入乘以 的权重矩阵,得到 的词向量。这一步等价于取出权重矩阵中该词对应的一行,实现时直接查表。
- 输出层:词向量乘以 的输出权重矩阵,得到 的得分;再经过 softmax,得到词表中各词作为上下文的概率。
只看各层输出的尺寸,过程是:
CBOW 在映射层先对上下文词向量取平均,再进入输出层预测中心词。 后续计算结构相同。
Skip-gram 以真实上下文为训练目标,同时更新两个权重矩阵。 词的上下文分布约束了向量的更新,向量由此反映词在语料中的用法。
训练后通常取 的输入权重矩阵作为词向量表:每行对应一个词,每个词由 个数表示。
1.4 层次 softmax 与负采样
完整 softmax 每个训练对都涉及全部 个输出词,计算量随词表增大。常见替代方法处理方式不同:
层次 softmax:把词放在二叉树叶节点,用从根到目标词路径上的二分类概率乘积表示词概率。Word2Vec 使用哈夫曼树,使高频词路径更短。
每次只计算路径上的节点,平均计算量通常按 量级讨论,具体取决于目标词的路径长度。
负采样:保留真实词对,再从噪声分布抽取 个词,训练模型区分真实词对与采样词对。
每个真实词对只需计算一个正例和 个采样词对,主要计算量为 。
负采样的一次采样损失可写为:
是中心词, 是真实上下文词, 是第 个采样词。 是中心词的输入向量, 和 分别是上下文词与采样词的输出向量;两个向量的内积就是词对得分。
sigmoid 函数为 。最小化损失时,第一项提高真实词对的得分,第二项降低采样词对的得分。
负采样改变了训练目标:完整 softmax 在全词表中预测上下文词,负采样改为区分真实词对与采样词对,因此这些二分类输出不能直接当作归一化的全词表概率。
1.5 fastText:字符片段与文本分类
fastText 的两大用途是文本分类和训练词向量。分类模型由三层组成:
- Embedding 层:将词和可选的词 n-gram 特征转换为向量。
- 全局平均池化层(GAP):对特征向量取平均,将长短不同的文本汇成定长向量。
- 输出层:线性变换后计算类别概率,单标签分类通常使用 softmax,多标签可使用独立 sigmoid。
分类时,嵌入与输出层一起训练。词 n-gram 把连续的 个词作为一个特征,补充平均词向量丢失的局部词序信息。
训练词向量时,fastText 子词模型结合整词与字符 n-gram(长度为 的连续字符片段)的向量。相似词形可以共享参数,训练词表中没有的词也可利用已学到的片段构造表示。
2. HMM 与 CRF
以词性标注为例, 表示输入的词序列, 表示对应的词性序列。下面比较标准一阶 HMM 与一阶线性链 CRF。
2.1 马尔可夫链
马尔可夫链描述状态按概率依次转移的过程。 一阶马尔可夫假设是:已知当前状态后,下一步的状态分布不再依赖更早的历史。若转移概率不随时间改变,就称为齐次马尔可夫链。
HMM 中的隐藏状态沿着这样的链转移,每个状态再生成对应的观测。在词性标注中,词性是隐藏状态,词是观测。
2.2 HMM:生成式模型
隐马尔可夫模型(HMM,Hidden Markov Model)是生成式模型,对联合概率分布建模,这里的 表示词序列与词性序列共同出现的概率。
它有两个主要假设:
- 一阶马尔可夫假设:给定前一个状态,当前状态就不再依赖更早的状态。
- 观测的条件独立性:给定当前状态,当前观测与其他状态和观测条件独立。
一个离散 HMM 的模型参数记作 ,由以下三组概率组成,通常写成一个向量和两个矩阵:
- 初始状态概率向量 :每个元素表示序列从某个状态开始的概率。
- 状态转移概率矩阵 :每行对应当前状态,每列对应下一状态,元素表示两者之间的转移概率。
- 发射概率矩阵 :每行对应一个状态,每列对应一个观测词,元素表示该状态生成这个词的概率。
这些元素均在 到 之间; 的元素和为 , 和 每一行的元素和分别为 。
HMM 主要解决三类问题:
- 估值(评估)问题:已知模型 和观测序列 ,计算模型产生该序列的概率 ,通常用前向算法。
- 解码问题:已知模型 和观测序列 ,寻找概率最大的整条隐藏状态序列,通常用维特比(Viterbi)算法。
- 学习问题:已知模型结构和训练观测序列,估计参数 、 和 。隐藏状态未知时,常用 Baum–Welch(鲍姆–韦尔奇)算法迭代估计;已有完整状态标注时,可统计频数并归一化来估计这些概率。
2.2.1 Viterbi:寻找最优状态序列
Viterbi 用动态规划,在模型参数已知时寻找概率最大的整条隐藏状态序列。 它逐步为每个候选状态保留概率最高的路径,并记录前一状态;最后选出最佳终点,反向回溯得到完整序列。
2.2.2 Baum–Welch:学习模型参数
Baum–Welch 在隐藏状态未知时学习 HMM 参数,是期望最大化(EM,Expectation–Maximization)算法在 HMM 上的应用。它从初始参数出发,用前向–后向算法估计状态与转移的概率,再按概率加权计数,更新 、 和 ,如此反复迭代。结果受初始参数影响,不保证全局最优。
2.3 CRF:判别式模型
条件随机场(CRF,Conditional Random Field)是判别式模型,对问题的条件概率分布建模,这里的 表示给定句子后,各种词性序列的概率。模型根据输入特征和标签关系为整条词性序列打分,再归一化为概率。
CRF 的参数是特征权重,权重可以为正、为负,不要求和为 ;需要归一化的是最终的序列概率。
CRF 不要求观测满足 HMM 的条件独立假设,可以同时利用当前词、前后词、词缀等输入特征。不过,一阶线性链 CRF 的标签关系仍只直接连接相邻标签,并不是没有马尔可夫限制。
在词性标注等标签预测任务中,能用 HMM 解决的问题,通常也能用 CRF 建模,而且 CRF 能更灵活地利用上下文特征。
HMM 和 CRF 都可用 Viterbi 算法寻找最优标签序列。速度和准确率不能仅凭模型名称判断:预测速度还取决于特征计算与实现,准确率取决于数据、特征和训练结果。
评论
使用 GitHub 登录后参与讨论,评论将公开保存在 GitHub。
站长管理删除会同步到 GitHub,无法撤销。
阅读到这里时加载评论。