,

1 两种方法

  1. 手工规则

利用一些关键词来检测,例如“dollars”和“you have been selected”. 优点是精度高,缺点是构建和维护这个规则代价高

  1. 监督学习方法
  • INPUT

    • a document d
    • a fixed set of classed $C={c_1,c_2,\dots,c_n}$
    • A training set of m hand-labeled documents $(d_1,c_1), \dots ,(d_n,c_n)$
  • OUTPUT

    • a learned classifier $d \to c$
  • Any kind of classifier

    • 贝叶斯分类器
    • 逻辑回归
    • 神经网络

2 Naive Bayes Intuition

2.1 Bag of world

定义:词袋模型将一个文档视为其所包含单词的集合,而忽略这些单词出现的顺序和语法结构

朴素贝叶斯公式:
$$
P(c|d) = \frac {P(d|c)P(c)}{P(d)}
$$

1. 目标:最大后验概率 (MAP)
我们的目标是找到概率最大的类别 $c_{MAP}$:
$$ C_{MAP} = \underset{c \in C}{\text{argmax}} P(c \mid d) $$

2. 贝叶斯公式展开
利用贝叶斯定理,并去掉对所有类别都相同的分母 $P(d)$:
$$ C_{MAP} = \underset{c \in C}{\text{argmax}} P(d \mid c)P(c) $$

3. 引入独立性假设 (Bag of Words)
假设文档 $d$ 由特征(单词)$x_1, x_2, …, x_n$ 组成,且在给定类别 $c$ 下,这些单词出现的概率是相互独立的:
$$ P(d \mid c) = P(x_1, x_2, …, x_n \mid c) \approx P(x_1 \mid c) \times P(x_2 \mid c) \times … \times P(x_n \mid c) $$

4. 最终的朴素贝叶斯分类公式
$$ C_{NB} = \underset{c \in C}{\text{argmax}} P(c) \prod_{i \in \text{positions}} P(x_i \mid c) $$

  • $P(c)$:先验概率(该类别本身出现的概率)。
  • $\prod P(x_i \mid c)$:似然概率的乘积(该类别下生成这些单词的概率)。

2.2 Learning

1. 先验概率 $P(c_j)$ 的计算
$$ P(c_j) = \frac{|docs_j|}{|total # documents|} $$

  • $|docs_j|$:训练集中属于类别 $j$ 的文档数量。
  • $|total # documents|$:总文档数量。

2. 似然概率 $P(w_k \mid c_j)$ 的计算 (无平滑版本)
$$ \hat{P}(w_k \mid c_j) = \frac{count(w_k, c_j)}{\sum_{w \in V} count(w, c_j)} $$

  • $count(w_k, c_j)$:单词 $w_k$ 在类别 $c_j$ 的所有文档中出现的总次数。
  • 分母:类别 $c_j$ 中所有单词的总数(总词频)。

Unknown Words:我们直接在测试集中忽略这些训练集中未出现的单词

Stop Words:例如 “a” or “the”这样的词,我们维护一个停用词表,在所有训练集和测试集中将其删除。但是移除这些单词不能获得任何提升,因此朴素贝叶斯倾向于保留这些单词。

工程优化公式 (Optimization)

为了解决实际应用中的“零概率”和“下溢出”问题,对上述公式进行修正。

1. 拉普拉斯平滑 (Laplace/Add-1 Smoothing) (Slide 29, 30)
解决某个词在训练集中未出现导致概率为0的问题:
$$ P(w_k \mid c_j) = \frac{count(w_k, c_j) + 1}{(\sum_{w \in V} count(w, c_j)) + |V|} $$

  • 分子 +1:假设每个词至少出现一次。
  • 分母 +|V|:$|V|$ 是词汇表的大小(所有去重单词的数量),保证概率和为1。

2. 对数空间计算 (Log Space) (Slide 33, 34)
解决多个小数相乘导致浮点数下溢(Underflow)的问题,将乘法转换为加法:

$$ C_{NB} = \underset{c \in C}{\text{argmax}} \left[ \log P(c) + \sum_{i \in \text{positions}} \log P(x_i \mid c) \right] $$

3 Sentiment Analysis

情感分析中,一些情感词的“出现”比出现的次数更加重要,因此我们采用二元多项式朴素贝叶斯,操作:

  1. 将词的计数限制为1
  2. 该方法不同于伯努利贝叶斯‘’

Note:我们只在单个文档中计数为1,多个文档中计数仍然可能大于1

3.1 Dealing with Negation

利用否定前缀NOT训练模型,这样就可以区分出情感倾向不同

didn’t like this movie, but I

didn’t NOT_like NOT_this NOT_movie but I

3.2 Lexicons

当我们的训练标签数据不足的时候可以借用 情感词典,例如:MPQA and The General Inquirer

流程:

  • 并不是直接查字典定结果,而是将“词典匹配” 作为一个 特征(Feature) 加入到分类器中。
  • 例如:增加一个特征为度,数值为“该文档中出现在正面词典中的单词数量”
  • 优势:数据稀疏的时候,词典特征提供很好的泛化能力

朴素贝叶斯的其他任务:

  1. 垃圾邮件检测
  2. 书写语言判断

3.3 基于依存路径的方面级情感分析

输入:长度为n的句子s和句子汇总长度为m的方面词(单词或短语)a

输出:推断一个句子s中方面词的情感极性

3.3.1 基于语义

  • 神经网络提取上下文语义特征,注意力机制建模各单词权重
  • 问题:忽略上下文句法依赖性

3.3.2 基于语法

  • 利用依存语法树的句法结构,图神经网络聚合相邻上下文单词特征

  • 问题:无法建模整体的一寸路径,逐层聚集无关噪声

算法动机:

  1. 设计原则:语法决定上下文权重,语义决定情感倾向性
  2. 语法建模:上下文单词与方面词之间的句法依赖特征

3.3.3 基于依存路径

  • 依存树:构建句子中单词的修饰关系路径
  • 依存路径建模:计算上下文单词到方面词的语法距离
  • 多跳注意力机制:结合语法距离和语义特征来判断哪些词是在描述哪些方面

4 Evaluating

4.1 Macroaveraging

计算每一个类别的性能指标,再进行平均,平等地看待每一个类别

4.2 Microaveraging

先将所有的类别预测结果汇总到一个大的混淆矩阵中,基于这些总数计算性能指标。平等地看待每一个样本