• 什么是文本分类?在机器学习方法中,我们介绍了许多分类方法(包括监督学习与神经网络),它们大多用于表格数据的分类。事实上,这些方法同样可以应用于文本数据上。
    • 文本分类的应用包括情感分析、垃圾邮件检测、语言识别、作者归属等。
  • 在机器学习方法出现之前,文本分类主要采用基于规则的方法(Rule-based Method)或专家系统。
    • 其优点是可以非常准确(如果专家仔细研究了规则),但缺点更明显:规则可能难以确定(有些规则甚至不为我们所知)、价格昂贵,且不易推广。
  • 而对于文本而言,在之前已经介绍了文本预处理,得到了干净的词序列。为了将词序列转为模型的输入,我们需要在此基础上进行特征提取,得到文本表示(Text Representation)。
    • 一个典型的文本表示就是多维词空间中的向量,其构成的向量空间一般假设:在多维空间中距离近的文本具有相似的语义。

注:本讲不会介绍具体的分类算法(常用的分类算法包括朴素贝叶斯、SVM、逻辑斯蒂回归、决策树等均已在机器学习方法中涉及),主要介绍文本进入分类器前的处理和分类结果的评估。

词袋模型(Bag of words,BoW)

  • 词袋模型是向量空间模型最经典的一种实现。其具体实现方式为:给定一个大小为V|V|的词表,对预处理后的文本进行词频统计,由此得到了词项-文档矩阵(每个文本对应一个词空间向量)。

  • 但是词表往往很大,这会导致文本向量的维度过大,难以计算。对此,我们需要进行特征选择(Feature Selection):根据某个评价指标独立的对原始特征项(词项)进行评分排序,从中选择得分最高的一些特征项,过滤掉其余的特征项。常用的评价有:

    1. 文档频率:统计某个词出现在多少篇文档里。
    2. 互信息:“某个词出现”和“文档属于某类”之间相互关联的强度。
    3. 信息增益:知道了这个词出现或不出现之后,对判断类别不确定性的减少量。
    4. χ2\chi^2统计量:衡量词与类别的独立性。

    这样就可以对特征进行降维,得到一个大小合适的词向量矩阵。

更多关于词向量的构建可参见下一讲。

分类评估

  1. 交叉熵损失函数
    考虑分类器输出y^\hat{y}与真实标签yy之间的差异度,使用损失函数L(y^,y)L(\hat{y},y)表示。【此处真实标签设为{0,1}\{0,1\}
    下面对损失函数进行推导:
    • 对于单个样本xx,我们的目标是学习一组权重,使其最大化正确标签的概率p(yx)p(y|x)。它服从伯努利分布,参数即为y^\hat{y},于是其可表示为 p(yx)=y^y(1y^)1yp(y|x)=\hat{y}^{y}(1-\hat{y})^{1-y}
    • 那么总体的似然函数就可以表示为 L(θ)=i=1np(yixi)=i=1nyi^yi(1yi^)1yiL(\theta)=\prod_{i=1}^np(y_i|x_i)=\prod_{i=1}^n\hat{y_i}^{y_i}(1-\hat{y_i})^{1-y_i} 为方便计算,我们使用对数似然 (θ)=i=1n[yilogy^i+(1yi)log(1y^i)]\ell(\theta)=\sum_{i=1}^n\left[y_i\log\hat{y}_i+(1-y_i)\log(1-\hat{y}_i)\right] 因此这也被称作条件极大似然估计。
    • 将其作为损失函数时需要转为最小化,因此加上符号变为负对数似然(也可再取平均): L(y^,y)=1ni=1n[yilogy^i+(1yi)log(1y^i)]L(\hat{y},y)=-\frac{1}{n}\sum_{i=1}^n\left[y_i\log\hat{y}_i+(1-y_i)\log(1-\hat{y}_i)\right] 这便是负对数似然损失,即交叉熵损失函数的由来。
  2. 精确率,召回率与F值
    • 假设我们已经得到了混淆矩阵,如果我们单纯以准确率作为评估指标,稀有正类样本往往不会被正确分类,而这又通常是比较重要的。
    • 于是我们会考虑另外两个指标:
      • 精确率:Precision=TPTP+FP\text{Precision}=\dfrac{TP}{TP+FP}
      • 召回率:Recall=TPTP+FN\text{Recall}=\dfrac{TP}{TP+FN}

      一个比较直观的理解:将正类样本看作坏人,预测正标签表示捕捉坏人,那么精确率就表示捕捉得“准”,而召回率则表示捕捉得“全”。

    • 当然,我们也可以考虑将两个指标进行合并,一个简单的方法就是使用F值: Fβ=(β2+1)×Precision×Recallβ2Precision+RecallF_\beta=\frac{(\beta^2+1)\times\text{Precision}\times\text{Recall}}{\beta^2\text{Precision}+\text{Recall}} 其中β\beta为调节参数,β\beta越大,越重视召回率,反之越重视精确率。当β=1\beta=1时,两个指标被同等对待,此时也称作F1值(F1-score): F1=2×Precision×RecallPrecision+RecallF_1=\frac{2\times\text{Precision}\times\text{Recall}}{\text{Precision}+\text{Recall}} 这也是机器学习中最常用的分类评估指标之一。

      F值本质上是精确率与召回率的加权调和平均:

      F=1α1P+(1α)1R,α=1β2+1.F=\frac{1}{\alpha\frac{1}{P}+(1-\alpha)\frac{1}{R}},\quad \alpha=\frac{1}{\beta^2+1}.

      采用调和平均而非算术平均的原因是调和平均更接近两个数值中的较小者。

  3. 宏平均与微平均
    上述评估指标都只针对二分类问题,那么如何评估多分类问题的分类结果呢?
    • 首先,我们同样可以得到一个更大的混淆矩阵,其中对角线上表示分类正确的样本。

    • 然后,对每一个类别,我们可以考虑将其他类别都归为一个类别,这样就能正常计算精确率与召回率了。

    • 最后我们考虑将这些评估值进行合并,主要有以下两种策略:

      • 宏平均(Macroaveraging):先为每个类别单独计算评估指标(如精确率、召回率),然后对所有类别的指标取算术平均。
      • 微平均(Microaveraging):将所有类别的预测结果汇总到一个全局2×22\times 2混淆矩阵中,再基于这个合并后的矩阵统一计算精确率和召回率。【实际上微平均得到的精确率与召回率一定相等】

      由此可知,微平均受高频类别主导,因为其计算基于所有样本的总计数。相比之下,宏平均更能反映低频类别的表现,因此在所有类别同等重要时更为合适。