跳到主要内容

基于情感词典的情感分析

一、直观理解:按“褒贬词表”给句子打分​

基于情感词典的方法不训练复杂分类器,而是查表:命中正向词加分,负向词减分,再结合否定词、程度副词调整,最后得到句子或文档的情感极性与强度。

在中文建模赛题中,若语料不大、需要可解释结论(哪些词驱动差评),词典法往往比黑盒模型更易写进论文。

二、适用场景与优缺点​

类型说明
适用场景评论/舆情极性;可解释的正负驱动因素;标注数据不足。
核心优点透明、快、无需训练;易做词级归因;规则可针对领域扩展。
局限与缺点反讽、网络新词、领域术语易失效;否定/比较句处理难;跨领域需维护词表。

三、核心原理​

对分词序列 w1,…,wmw_1,\ldots,w_m,基础分

s=∑iscore(wi)s=\sum_i \mathrm{score}(w_i)

再乘以程度副词权重,并在否定窗口内翻转符号。文档分可为句子分均值。阈值 τ\tau 划分正/中/负。

词典来源:知网 HowNet、大连理工情感本体、领域自建词表等。

四、实践要点​

  1. 分词 + 否定词表 + 程度副词表;
  2. 领域词(“续航”“掉漆”)手动补;
  3. 用少量人工标注估计准确率;
  4. 输出关键词贡献列表。

五、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 个最关键参数,各取偏低/基准/偏高三档,报告输出变化。这比大段空泛的“模型具有较强鲁棒性”更有说服力。

可复现信息​

在附录或正文脚注中记录:软件版本、随机种子、关键容差、数据截取时间范围。另一人按文档应能得到同量级结果。

审稿式自问​

  1. 方法假设在题目数据上是否可检查?
  2. 若最敏感参数估计错误 20%,结论是否翻盘?
  3. 是否存在更简单方法达到相近效果?
  4. 图表是否都能用一句话概括?
  5. 局限是否写得具体,而不是套话?

把上述自问的答案写进论文,方法章节会明显更“像完成了建模”,而不是“像完成了公式摘录”。

八、小结​

基于情感词典的情感分析用可解释规则快速估计文本极性,适合标注稀缺与需要归因的建模场景。其效果取决于词表质量与否定/程度等语言现象的处理;应用中应辅以人工校验与领域适配。