自然语言处理算法:朴素贝叶斯文本分类
题目描述
朴素贝叶斯是一种基于贝叶斯定理的概率分类算法,常用于文本分类任务(如垃圾邮件检测、情感分析)。其核心思想是:假设文本中的每个特征(通常是单词)在给定类别下相互独立,通过计算每个类别的后验概率,将文本分配到概率最大的类别中。本题要求实现一个简单的朴素贝叶斯分类器,对英文电影评论进行情感分类(正面或负面)。
解题步骤
1. 理解贝叶斯定理
- 贝叶斯公式:
\[ P(C|X) = \frac{P(X|C) \cdot P(C)}{P(X)} \]
其中:
-
\(C\) 表示类别(如正面/负面),
-
\(X\) 表示文本特征(如单词序列),
-
\(P(C|X)\) 是给定特征 \(X\) 时类别 \(C\) 的后验概率,
-
\(P(X|C)\) 是似然概率(特征在类别 \(C\) 下出现的概率),
-
\(P(C)\) 是类别的先验概率(训练集中类别 \(C\) 的频率)。
-
分类目标:选择使 \(P(C|X)\) 最大的类别 \(C\)。
2. 文本预处理与特征提取
- 分词:将每条评论拆分为单词列表(如
"I love this movie"→["I", "love", "this", "movie"])。 - 停用词过滤:移除常见但无实际意义的词(如
"the","a"),可选用标准停用词列表。 - 词干提取:将单词还原为词干形式(如
"loved"→"love"),减少特征维度。 - 构建词表:统计训练集中所有出现过的单词,形成特征集合。
3. 计算先验概率 \(P(C)\)
- 统计训练集中每个类别的文档数量:
\[ P(C) = \frac{\text{类别 } C \text{ 的文档数}}{\text{总文档数}} \]
例如:若训练集有 1000 条评论,其中 600 条为正面,则 \(P(\text{正面}) = 0.6\)。
4. 计算似然概率 \(P(X|C)\)
- 由于特征(单词)相互独立(“朴素”假设),似然概率可拆分为每个单词概率的乘积:
\[ P(X|C) = P(w_1|C) \cdot P(w_2|C) \cdots P(w_n|C) \]
- 使用拉普拉斯平滑避免零概率问题(如某个单词未在类别中出现):
\[ P(w_i|C) = \frac{\text{类别 } C \text{ 中单词 } w_i \text{ 的出现次数} + 1}{\text{类别 } C \text{ 的总单词数} + \text{词表大小}} \]
例如:正面评论中单词 "good" 出现 50 次,正面评论总单词数为 5000,词表大小为 1000,则
\[ P(\text{"good"}|\text{正面}) = \frac{50 + 1}{5000 + 1000} = \frac{51}{6000}. \]
5. 分类预测
- 对一条新评论 \(X\),计算每个类别的后验概率:
\[ P(C|X) \propto P(C) \cdot \prod_{i=1}^n P(w_i|C) \]
(实际计算时使用对数避免浮点数下溢:
\[ \log P(C|X) = \log P(C) + \sum_{i=1}^n \log P(w_i|C) \]
)
- 选择使 \(\log P(C|X)\) 最大的类别作为预测结果。
6. 优化与注意事项
- 处理未知单词:测试集中出现训练集未包含的单词时,直接忽略或使用平滑后的默认概率。
- 特征选择:可通过卡方检验或信息增益选择高频且区分度高的单词,提升效率。
- 数值稳定性:概率连乘可能导致数值过小,对数转换是标准做法。
总结
朴素贝叶斯通过简单的概率计算实现高效文本分类,虽假设特征独立(实际中未必成立),但在许多场景下表现良好。重点在于理解贝叶斯定理、平滑处理及对数变换的应用。