基于情感词典的情感分析
一、直观理解:按“褒贬词表”给句子打分
基于情感词典的方法不训练复杂分类器,而是查表:命中正向词加分,负向词减分,再结合否定词、程度副词调整,最后得到句子或文档的情感极性与强度。
在中文建模赛题中,若语料不大、需要可解释结论(哪些词驱动差评),词典法往往比黑盒模型更易写进论文。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 评论/舆情极性;可解释的正负驱动因素;标注数据不足。 |
| 核心优点 | 透明、快、无需训练;易做词级归因;规则可针对领域扩展。 |
| 局限与缺点 | 反讽、网络新词、领域术语易失效;否定/比较句处理难;跨领域需维护词表。 |
三、核心原理
对分词序列 ,基础分
再乘以程度副词权重,并在否定窗口内翻转符号。文档分可为句子分均值。阈值 划分正/中/负。
词典来源:知网 HowNet、大连理工情感本体、领域自建词表等。
四、实践要点
- 分词 + 否定词表 + 程度副词表;
- 领域词(“续航”“掉漆”)手动补;
- 用少量人工标注估计准确率;
- 输出关键词贡献列表。
五、MATLAB 示例
%% 极简情感词典打分(演示)
pos = containers.Map(["好","优秀","满意","喜欢","快"], [1,2,1,1,0.5]);
neg = containers.Map(["差","糟糕","失望","慢","贵"], [1,2,1,0.5,0.5]);
negation = ["不","没","并非"];
degree = containers.Map(["很","非常","太"], [1.5,1.8,1.6]);
texts = {
["服务" "很" "好"]
["物流" "慢"]
["不" "满意"]
["非常" "喜欢" "质量"]
};
for t = 1:numel(texts)
words = texts{t};
score = 0;
i = 1;
while i <= numel(words)
w = words(i);
boost = 1;
flip = 1;
% 看前一个程度/否定
if i>1 && isKey(degree, words(i-1))
boost = degree(words(i-1));
end
if i>1 && any(words(i-1)==negation)
flip = -1;
end
if isKey(pos, w)
score = score + flip*boost*pos(w);
elseif isKey(neg, w)
score = score - flip*boost*neg(w);
end
i = i + 1;
end
if score > 0.2
lab = "正向";
elseif score < -0.2
lab = "负向";
else
lab = "中性";
end
fprintf("句子%d: 分=%.2f, 标签=%s, 词=[%s]\n", t, score, lab, join(words, " "));
end
批量统计:
% 假设已有 scores 向量
scores = [1.5, -0.5, -1.0, 1.8];
fprintf("正向占比 = %.1f%%\n", 100*mean(scores>0.2));
figure; histogram(scores); xlabel("情感分"); title("评论情感分布"); grid on;
六、如何解释结果
报告词典来源、规则(否定/程度)、阈值、总体正负占比、典型正负例句与贡献词。说明局限(反讽等)与改进方向。
七、常见误区
1. 忽略否定
“不满意”被算成正向。
2. 通用词典硬套专业评论
3. 不抽样人工核对准确率
4. 把平均分当因果关系
附:建模流程中的落地清单(情感词典)
要把方法真正写进论文,建议补齐以下模块,而不是只贴一个最终数字。
1. 问题对齐与假设
说明题目中的输入/输出如何映射到本方法,并显式列出关键假设。假设越清楚,后面的敏感性分析越有对象。
2. 关键关系
命中褒贬词计分,并结合否定与程度副词;输出极性与贡献词。
3. 补充实现片段
score=1.5; if score>0.2, lab='pos'; elseif score<-0.2, lab='neg'; else, lab='neu'; end; disp(lab);
4. 报告要素
词典来源、规则、阈值、正负占比、例句。
5. 不适用情形
忽略否定;无人工抽样核对。
6. 与验证章节的衔接
至少做一项:参数扰动、与基线方法对照、极限情形检查。把“方法正文”和“全局方法论(第15门类)”连起来,结论才站得住。
附:结果解读示例与常见审稿问题
结果解读示例
假设已经得到主要数值输出。写作时应把数字翻译回题目语言,例如:
- “在基准参数下指标为 A;当关键参数变化 ±10% 时,指标波动约 B%,方案排序未变。”
- “算法在 R 次独立重复中有 S 次收敛到同一结构解,说明结论对初始化不敏感。”
- “与简化基线相比,本方法在验证集误差降低 Δ,但计算时间增加,权衡后仍采用。”
如果只有表格没有句子,评委很难判断你是否真正理解结果。
参数与数据的最小敏感性
即使篇幅有限,也建议给出一个小表:选取 1–3 个最关键参数,各取偏低/基准/偏高三档,报告输出变化。这比大段空泛的“模型具有较强鲁棒性”更有说服力。
可复现信息
在附录或正文脚注中记录:软件版本、随机种子、关键容差、数据截取时间范围。另一人按文档应能得到同量级结果。
审稿式自问
- 方法假设在题目数据上是否可检查?
- 若最敏感参数估计错误 20%,结论是否翻盘?
- 是否存在更简单方法达到相近效果?
- 图表是否都能用一句话概括?
- 局限是否写得具体,而不是套话?
把上述自问的答案写进论文,方法章节会明显更“像完成了建模”,而不是“像完成了公式摘录”。
八、小结
基于情感词典的情感分析用可解释规则快速估计文本极性,适合标注稀缺与需要归因的建模场景。其效果取决于词表质量与否定/程度等语言现象的处理;应用中应辅以人工校验与领域适配。