前言
词袋库+线性回归分类器是一种传统的基于统计学原理进行机器学习实现文本分类任务的方案,本文会对这种通过机器学习实现文本分类任务的思路以及词袋库和岭回归分类器本身进行讲解。
通过机器学习进行分类的思路
其实很多方法都属于传统的文本分类任务的实现方法,但在本文我们只讨论词袋库+岭回归模型这一种。
这种实现方案属于朴素贝叶斯理论的一种应用,认为语句是若干单词生成的一种搭配,通过对已作出结果标注的训练集的学习。以标签作为维度去锚定分类结果在多维空间中的位置。在本案例中维度即是词库中的单词,词库中有多少个单词,我们就从多少个维度去描述一个语句。然后针对多维空间中的已经知道分类结果的这些点,找到一个合适的划分界限,最后将这个划分界限应用于测试集去预测分类结果。
语句的生成
大家可能听说过一个叫“猴子与打字机”的故事,简义是问在无限时间的情况下,一只猴子坐在打字机前使用打字机打出一本《莎士比亚全集》的概率是多少。
而我们这种实现文本分类任务的方法也是相似的思路,这种方法认为,语句的生成是从一个词库中随机地选择单词进行组合而成。
举个例子,我们现在有一个词语库,里面有三个单词[“I”,”eat”,”meat”]。
然后现在要生成一个长度为三个单词的语句,这个长度为三的语句中,三个位置每一个位置都是从这词语库的三个单词中随机且独立的选择出来。
1 | 所谓独立是统计学中的一个概念,指的是三次选择每次都是从这三个单词中选择,互相不影响,也即每一次每个单词被选中的概率都是三分之一。 |
多项分布
在这种随机且独立的情况下,每个位置都有出现”I”、”eat”、”meat”三种情况,而组成的语句就有$3*3*3 = 27$种情况。于是每种情况的概率我们都是能够通过统计数量计算出来的。可如果语句的长度很长,每个位置备选的词库很大,那进行统计就会很困难。在通过对经验进行总结后,统计学认为语句生成这样的独立随机事件各情况的概率分布符合多项式分布:$P(d|c)=\frac{(\sum_ix_i)!}{\prod_ix_i}\prod{P(w_i|c)^{x_i}}$
其中$d$是具体的一个语句,$c$是语句的类别,$x_i$是单词$w_i$的出现次数。
模型训练和评价
在通过训练集进行训练的过程中,公式中的$P(d|c)$是可以通过统计得出的概率,是已知的结果,$\frac{(\sum_ix_i)!}{\prod_ix_i}$也可以通过对训练集的数据计算得出,最后会是一个常数项,而最后的$P(w_i|c)$项是未知。也就是说,训练的过程实际上就是从公式的左边推出右边,尝试找到若干个满足公式的参数$P(w_i|c)$,最后得到的已知参数的公式即是我们的模型。
然后在将公式应用到测试集时,则是从公式的右边推出左边的过程,$P(w_i|c)$就是我们上面计算得到的数值,而$P(d|c)$成了我们要计算的结果,最后将结果作为我们预测的结果。
训练过程中的参数估计
那么如何找到这些参数的合适值呢,这里以极大似然估计为例简要简要讲解一下。
极大似然估计
极大似然估计的核心思想是选择使观测数据出现概率最大的参数值。基于这个思路,提出了一个似然函数的概念:
$L(\theta) = \prod^n_{i=1}f(x_i|\theta)$
其中$\theta$是我们选择的参数,其本身是一个概率向量,表示在当前参数值下,出现样本结果的概率,也就是上面提到的$P(w_i|c)$。
对于上面的似然函数,我们对两边进行取对数的操作,就可以将公式右侧的乘积化为加法。我们要求的是$\theta$的极大值,这就是一个参数方程和求极大值的综合性问题,而通常还会有一些约束参数$\theta$的条件,于是就变成了参数方程的条件极值问题,后续用拉格朗日乘数法等方法求解即可,具体这里不再赘述。
模型的评价
找到了参数之后,我们就要检验和评价我们模型的好坏,也即是评价我们参数选取的好坏。我们上面提到,整体的思路是找到一条参数合适的分界线,如何定义合适即是如何评价模型好坏。
这里提出了一个叫损失函数的概念,通常来讲会选择方差(或者标准差)作为评价的结果,选择方差进行评价的损失函数也叫作L2损失函数。这里可以结合方差的几何意义去理解。
词袋库和岭模型
上面我们讲解了这种传统机器学习进行分类的整体过程思路。使用词袋库和岭模型实现文本分类任务就是这一过程思路的实践。
词袋库
词袋库就是为计算模型中的各种概率提供支持。他需要对文本进行向量化,文本向量化的步骤分两步。第一是需要统计一个包含所有单词的集合,还是举一个简单的例子。我们有一个词库,里面有三个单词[“eat”,”I”,”meat”]。第二是根据词库将样本的语句转化为向量,例如我们有”I eat meat”和”eat meat”两个语句,将其进行向量化表示即如下:1
2
3
4
5词库:["eat","I","meat"]
语句1:"I eat meat"
文本向量化结果:[1, 1, 1]
语句2:"eat meat"
文本向量化结果:[1, 0, 1]
然后我们就可以基于这些向量去进行概率的计算。
词袋库的优缺点
优点
- 很明显的优点就是简单
- 虽然简单,但是对于许多文本分类任务的效果都不错
缺点
- 从词袋库的实现思路我们可以出它只是一个
set集合,所以无法感知到了语句中的词序和语法结构 - 无法理解相似的语义,比如同样是自称”我,鄙人,寡人,孤”或是”phone, telephone”
- 同样由第二个缺点我们可以看出,词库维度可能非常多,也即词库中由很多单词,即使有些单词是一个意思
岭模型
针对模型的训练这一部分的实现实际上就是实现线性回归模型分类器,采用普通最小二乘法的线性回归模型在面对存在多重共线问题的任务时会出现一些问题,岭回归模型即是针对这一问题进行优化的一种线性回归模型。
普通最小二乘法
通常线性模型采用的是普通最小二乘法进行参数估计,其中会涉及一些逆矩阵的运算。
普通最小二乘法的损失函数:
最后得到的参数估计公式:
而在文本分类问题中,结合上面的样例我们能够发现,文本向量化后的向量有的维度可能值为零,或者说向量间共线的情况,而这些情况在词库较大时会显著增加。也就是说通常情况下我们得到的向量化后的样本矩阵是一个稀疏矩阵,很有可能会是行列式为0的奇异矩阵,因而影响矩阵的求逆操作,进而使得参数估计的过程不稳定,方差会很大。
岭模型的参数估计公式
岭回归的损失函数:
最终推导出的参数估计公式:
可以看到,岭回归的参数估计公式中加入了一个 $\lambda > 0$去保证括号内的矩阵结果可逆。
此外,岭回归还通过引入偏差来修正方差作为总误差使得参数的估计更稳定。
- 本文作者: Kylin
- 本文链接: https://kylinnnnn.github.io/2025/10/27/NLP-使用机器学习实现文本分类任务/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!