文本分类
定义
文本分类就是对将文本归类到预定义的某一个或某几个语义标签中。单类别文本分类,每个文本只有一个类别标签。多标签文本分类,每个文本可以有多个类别标签。
形式化
形式上,建立分类器f
将输入文本x
(样本空间$Xf$$
) 映射为标签y
(标签空间Y
),即\text{argmax}_y P(y|x)
应用场景
- 情感分类
- 新闻分类
- 垃圾邮件过滤
主要步骤
特征表示 (Feature representation)
建模 (Modeling)
训练 (Training)
推理 (Inference)
特征表示
特征表示的目的是把非结构化、不可计算的文本转换为可计算、结构化的向量。(表示方法见词向量章节)
建模
基于统计学习的文本分类
朴素贝叶斯模型
朴素贝叶斯模型是一个基于“朴素”假设的概率模型,是一个生成式模型,适用于离散分布,广泛应用于文本分类、自然语言处理和模式识别。
-
朴素假设
朴素的意思是特征之间相互独立,即任意两个词出现的概率互不影响,即P(w_1,w_2,...,w_n) = P(w_1) * P(w_2) *...*P(w_n)
-
生成式模型
在朴素贝叶斯模型中,后验概率P(y|x)
不是直接计算得到的,而是通过计算联合概率,然后比较联合概率的大小,间接得到的。
根据贝叶斯公式P(y|x) = \frac{P(x,y)}{P(x)}
,因此,求解的目标\text{argmax}_y P(y|x) = \text{argmax}_y \frac{P(x,y)}{P(x)}
。由于x
是给定的,所以P(x)
是一个常数。因此,\text{argmax}_y P(y|x) = \text{argmax}_y P(x,y) = \text{argmax}_y P(x | y)P(y)
。
根据朴素假设,\text{argmax}_y P(x | y)P(y) = \text{argmax}_y P(w_1,w_2,...,w_n | y)P(y) = \text{argmax}_y P(w_1 | y) P(w_2 | y) ... P(w_n | y) P(y)
,问题就转换为了P(w_1 | y) P(w_2 | y) ... P(w_n | y)
如何计算,而这个的计算与具体的文档模型有关。
- 伯努利文档模型
用伯努利文档模型表示文本时只考虑单词是否出现,不考虑出现次数。在这个模型中,文本被表示为一个|V|
维的0-1向量,|V|
表示词表长度。
因此,\text{argmax}_y P(x | y)P(y) = \text{argmax}_y \prod_{i=1}^{|V|}(d_t P(w_t|y) +(1-d_t)(1-P(w_t|y))) P(y)
,其中d_t
表示w_t
是否在文本中出现,P(w_t|y)
表示类别为y
的条件下w_t
出现的概率,可以用\frac{数据集中出现w_t且类别为y的文档数}{数据集中类别为y的文档数}
来估算,P(y)
表示类别y
出现的概率,可以用\frac{数据集中类别为y的文档数}{数据集中文档数}
来估算。
实际运算时,为了防止出现零概率,还要进行拉普拉斯平滑。对于类条件概率来说,单词要么出现,要么没出现,所以是+2。对于类别的先验概率来说,存在|Y|
种情况。
伯努利模型的问题在于,表示文本时只考虑单词是否出现,不考虑出现次数,忽略了词频对文本分类的重要性
- 多项式文档模型
在多项式文档模型中,\text{argmax}_y P(x | y)P(y) =\text{argmax}_y \frac{n!}{\prod_{t=1}^{|V|}{n_t!}}\prod_{t=1}^{|V|}P(w_t|y)^{n_t} P(y) = \text{argmax}_y \prod_{t=1}^{|V|}P(w_t|y)^{n_t} P(y)
,其中n
表示句子长度,n_t
表示第t
个单词在句子中出现的次数,\frac{n!}{\prod_{t=1}^{|V|}{n_t!}}
的分子表示n
个单词的全排列,由于同一个单词出现在不同位置属于是一种情况,所以分母将这些情况排除。
\begin{aligned}
P(w_t|y) &= \frac{w_t在所有类别为y的文档中出现的次数之和}{类别为y的文档中的所有词的数量(重复的计多次)} \\
P(y) &= \frac{数据集中类别为y的文档数}{数据集中文档数}
\end{aligned}
实际运算时,为了防止出现零概率,还要进行拉普拉斯平滑。
感知机模型
感知机模型是用于监督学习的分类算法,是一种线性分类算法,为人工神经网络奠定了基础。
假设v
为文本x
的特征表示,\omega
为特征表示v
的权重向量,\hat{y}
为文本x
的预测标签。
\hat{y}=\begin{cases}
1 & \text{ if } \omega ^Tv \ge 0 \\
0 & \text{ if } \omega ^Tv \lt 0
\end{cases}
其损失函数可以定义为:
\begin{aligned}
\displaystyle J&=\sum_{i=1}^{N}((1-y_i)\hat{y}_i - y_i(1-\hat{y}_i)) \omega^Tv_i \\
&= \sum_{i=1}^{N}(\hat{y}_i - y_i) \omega^Tv_i
\end{aligned}
通过梯度下降就可以实现参数的更新:
\omega := \omega + \alpha (y-\hat{y}) v = \begin{cases}
\omega + \alpha v & \text{ if } y=1\, and\, \hat{y} =0 \\
\omega - \alpha v & \text{ if } y=0\, and\, \hat{y} =1 \\
\omega & \text{ else }
\end{cases}
Logist回归
逻辑回归是一种二分类模型,一种线性分类模型,用一个非线性激活函数(Sigmoid函数)来模拟后验概率
-
\begin{aligned} \delta(z)&=\frac{1}{1+e^{-z}} \\ \frac{d\delta(z)}{dz}&=\delta(z)(1-\delta(z)) \end{aligned}
-
建模
\begin{aligned} P(y=1|x)&=\delta(\omega^Tv) \\ P(y=0|x)&=1-\delta(\omega^Tv) \end{aligned}
用一个式子表达就是:
P(y|x)=\delta(\omega^Tv)^y(1-\delta(\omega^Tv))^{1-y} \\
我们可以利用最大似然估计来优化模型的参数(实际损失函数要取负对数):
\displaystyle L(\theta) = \prod_{i=1}^N P(y_i|x_i)
其原理就是让模型预测的结果最符合实际观测到的数据,本质上来说以上这个式子就是实现了当数据集标签为1的时候,乘上模型预测为1的概率,当数据集标签为0的时候,乘上模型预测为0的概率。然后通过梯度下降法可以对这个模型的参数进行优化。
最后,在推理的时候,考虑\delta(\omega^Tv)
是否大于0.5,大于0.5预测为1,否则为0。
多分类感知机
就是给每个类别分配一个权重,然后尝试使得使样本的正确类别对应的权重向量与样本特征的内积最大
\begin{aligned}
\hat{y}&=\text{argmax}_{j=1,...,m}\omega_j^Tv \\
\displaystyle J&=\sum_{i=1} ^{N}(\omega_{\hat{y}_i}^Tv_i - \omega_{y_i}^Tv_i)
\end{aligned}
因为\hat{y}_i
就是通过argmax来的,所以写损失函数的时候就没有再去遍历求max了。
Softmax回归
Softmax 回归是一种多分类模型,也叫做多分类逻辑回归,是一种非常常见的分类算法
\begin{aligned}
P(c_j|x) &= \frac{e^{\omega^T_j v}}{\sum_{k=1}^{m}e^{\omega^T_k v}} \\
\hat{y} &= \text{argmax}_{c_j = c_1,...,c_m} P(c_j|x) \\
L &= \prod^{N}_{i=1} P(y_i|x_i) \\
\mathcal{L} &= -\frac{1}{N} \text{log} L = -\frac{1}{N} \sum_{i=1}^{N} \frac{e^{\omega^T_{y_i} v}}{\sum_{k=1}^{m}e^{\omega^T_k v}}
\end{aligned}
基于深度学习的文本分类
前馈神经网络
循环神经网络
卷积神经网络
文本分类评价指标
准确率
分对的占全体测试集的比例,对稀缺标签的分类性能不敏感
acc= \frac{1}{N} \sum_{i=1}^{N} \mathbb{I}(\hat{y}_i = y_i)
精确率
对于所有预测结果为某标签的样本,其中预测正确的样本所占的比例
P = \frac{真正例}{真正例 + 假正例}
召回率
对于所有真实标签为某标签的样本,其中预测正确的样本所占的比例
P = \frac{真正例}{真正例 + 假负例}
F-score
F = \frac{2*P*R}{P + R}
宏平均F-score
先计算每个类的F-score,然后将它们平均
Precision和Recall较高的类别对F-score的影响会较大
微平均F-score
先计算所有类别总的TP、FP、FN,然后计算总的Precision和Recall,最后再计算F-score
数量较多的类别对Micro F-score的影响会较大