☰
双情感学习DEAN:从文本与用户评论的情感一致性中发现假新闻
2026/10/15 11:57:31 网站建设 项目流程

假新闻检测这个话题,技术方案看了不少,但很多都给我一种“道理我都懂,落地就翻车”的感觉。真正让我愿意反复读的,是 DEAN 这篇 2019 年发布的预印本论文:Learning Dual Emotion for Fake News Detection on Social Media。它把“情感”这个很容易被忽略的中间变量拆成两条线来用:一条是新闻内容本身表达出来的情感,另一条是用户在评论、转发里流露出来的群体情绪。这个 Dual Emotion 的双情感思路,不依赖昂贵的事实库,也不需要人工对每一条新闻做背景核查,而是希望从文本和交互行为中找出假新闻传播的共性特征。这篇博文我会把研究动机、模型结构、实验设计、复现踩坑和后续扩展讲透,适合正在入门假新闻检测、做社交媒体文本分析,或者打算用多任务学习提升分类效果的同学参考。

1. 这项研究到底解决了什么问题

1.1 假新闻检测的第一个难题:特征太容易被“伪装”

假新闻检测最尴尬的地方在于:字面上看,假新闻和真新闻可以几乎没有区别。很多内容只是把时间、地点、人物换掉,或者把某段描述的语气调强一点,在词频、可读性、标题长度这些传统特征上完全看不出破绽。早期方案喜欢统计内容里的绝对词、情感词数量、感叹号密度,一套规则下去,训练集上效果不错,一旦换个话题领域,分类器就迅速退化。

原因在于,这些特征本质上都是“创作者可以主动控制”的表面信号。造一则假新闻的人,完全可以把自己的文本风格伪装成正常新闻。我在实际项目里遇到过类似的情况:把文本经过几轮改写之后,原先基于语言风格训练的分类器预测结果就像抛硬币,但人类一眼还是能看出“这语气不太对”。这说明单纯统计字面特征,没有抓住更稳定的东西。

所以 DEAN 把切入点放在情感上,但又不是简单的情感词计数,而是把情感当成一种“关系信号”来用。也就是说,重要的不是这条新闻有多愤怒,而是它唤起了读者多大的愤怒,以及这两者之间的匹配关系是否正常。

1.2 所谓“双情感”,到底是哪两种情感

Dual Emotion 这个名字听起来玄乎,拆开之后其实很朴素:一份社交平台上的新闻内容,天然存在两个情感主体。第一个是发布者,也就是新闻文本里直接表达出来的情感倾向;第二个是受众,也就是评论区、转发语里体现出来的情感反应。论文里通常把前者叫做目标情感,把后者叫做用户参与情感,有些后续研究也把它称作来源情感或者反馈情感。

用一个生活化类比:想象一场演讲。演讲者可以控制自己的语气和措辞,这是文本侧情感;但听众是鼓掌、起哄还是无动于衷,这是用户侧情感。如果演讲者语气激昂,台下却一片冷静,那这段内容很有可能是“念稿”出来的。反过来说,演讲者语气平平,台下却莫名其妙集体亢奋,那背后可能就有外部力量在煽动。DEAN 想做的,就是同时捕捉这两个信号,再进一步判断它们之间的一致性和传导关系。

这个设计最聪明的地方,是不再孤零零地分析一篇文本,而是把“内容-受众”看成一个系统来建模拟判。

2. DEAN 的整体设计思路,为什么从“情绪”下手

2.1 假新闻传播中,情绪往往跑在事实前面

假新闻能被大量转发,靠的从来不是严谨论证,而是快速击中读者的情绪开关。愤怒、焦虑、恐惧、猎奇,这些情绪会降低人的判断意愿,让人更倾向于“先转再说”。从这个角度看,情绪不只是文章的附属品,它本身就是一个强信号。

DEAN 选择情感下手,还有一个很现实的原因:情感标注比真实性标注便宜得多。要判断一条新闻是真是假,需要外部知识;但判断一段文本是愤怒还是平静,普通标注员就能完成。如果模型能在做假新闻检测的同时学会预测情感,就相当于用大量的低成本情感数据辅助训练,这在标注预算有限的场景里非常划算。

我自己的体会是,情感特征还有另一个隐藏优势:它比关键词更抗时间变化。某个事件的专有名词会过时,但“愤怒”“恐慌”这类情感标签在多个热点事件里是稳定的分布,模型跨事件迁移时不容易失效。

2.2 为什么只分析新闻文本的情感不够

只看新闻文本的情感,本质上还是在“创作者可控的范围”里打转。现在做对抗样本很容易:把同一则假新闻里的显性情绪词替换掉,保留同样的事实错误,文本情感分类器就会失效。但用户评论很难被批量伪造,即使雇佣水军,也难在短时间内制造出自然、多样、时间分布合理的评论。

所以 DEAN 把第二个分支放在用户侧。这里有个关键前提:假新闻要想造成传播效果,必须让足够多的用户产生真实情绪反应。一旦大量真实用户被调动起来,评论里的情感分布就会留下痕迹,而这个痕迹是造假者很难彻底抹掉的。把文本情感和用户情感一起看,等于给检测系统上了两道锁。

2.3 一致性、转移:两种互补的建模视角

双情感有了之后,怎么用也有讲究。DEAN 体现的框架可以分成两个互补的视角:一致性视角和转移视角。

一致性视角关心的是“创作者表达的情绪”和“用户反馈的情绪”是否匹配。真实新闻通常追求客观中立,文本情绪和评论情绪的相关性比较弱;而假新闻往往刻意放大情绪,并且评论区也随之出现明显的情感共鸣,这种“高情感共振”就是可疑信号。当然真实新闻也会有争议性内容激怒用户,所以一致性只是一个证据维度,不能单独下结论。

转移视角关心的是“情绪怎么在用户之间传导”。把评论按时间排序,看早期评论和后期评论的情感变化趋势。假新闻经常出现“短时间情绪爆发、后续跟风升温”的曲线,真实新闻的情绪扩散则更平稳、更多元。这两个视角一个看横向匹配,一个看纵向演变,组合起来能比较完整地刻画一条新闻的情感生命周期。

3. 模型结构与核心模块拆解

3.1 输入层与文本编码

DEAN 的输入并不复杂:一条新闻的正文文本,加上这条新闻收到的若干条用户评论。如果只有一条新闻却没有评论,后续的“用户侧”分支就无法生效,这也是方法自身的一个适用边界。

文本编码层在 2019 年的主流选择是卷积网络、循环网络或者它们的组合。拿当时常见的做法举例,正文可以用一维卷积加池化得到一个定长向量;评论可以按回复时间排列,用双向 GRU 把每条评论编码成向量。放在今天,这块编码层直接用预训练语言模型替换也完全合理,DEAN 的核心创新不在编码器,而在于编码之后如何把双情感关系提取出来。

注意:复现时不要把编码层当成研究重点反复调参,真正决定模型性格的是后面的情感分布计算和双通道交互方式。

3.2 目标情感分支:把正文映射成一个情感分布

目标情感分支要做的事情,是把新闻正文变成一个情感概率分布。一般的做法是定义若干个情感类别,比如愤怒、害怕、开心、悲伤、惊讶、中性这六类,然后让模型对每一个类别输出一个概率值。

这里有三个容易被忽略的细节。第一,输出概率分布而不是输出单一情感标签,能保留“这则新闻同时带有一点愤怒和一点恐惧”这样的模糊信息,分类器后续用起来信息量更大。第二,分类器可以放在文本向量之上,也可以设计成多标签形式,因为一段文本完全可能同时包含多种情绪。第三,这个分支的训练标签可以来自人工标注,也可以用情感词典做远程弱标注,代价很低。

我在实际操作中倾向于把这个分支当成一个“先验过滤器”,它的预测质量不需要很高,甚至只有 70% 的正确率也没关系,因为后面会跟一个一致性计算,真正的判别任务由整体网络完成。

3.3 用户评论侧的情感聚合:注意力机制是核心

用户评论侧比正文侧更容易处理。一般来说,我们并不关心某一条具体评论,而是关心“整体评论区的情感结构”。但用户评论有两个麻烦:数量不确定,有的新闻下只有一两条评论,有的有上千条;噪声很大,评论里夹杂大量与正文无关的闲聊、表情包、链接。

DEAN 风格的解法是,把正文侧得到的目标情感向量作为注意力查询,去评论集合里筛选最相关的信息。这个操作说起来很自然:如果新闻正文表达的是恐惧,模型就会重点看评论里那些恐惧感较强的回复,而不是被无关评论带偏。注意力机制在这里起到的其实是特征选择作用,它让用户侧情感表示动态适配正文侧,而不是固定地平均所有评论。

我用一个比喻帮助理解:目标情感分支相当于给出了“我们要找什么样的现场反应”,用户侧注意力相当于“在反应里找出最像这种反应的瞬间”。两个分支在信息获取阶段就开始互动,比最后简单拼接要有效得多。

3.4 一致性得分与情感转移建模

得到两个分支的表示之后,DEAN 类模型通常还要做两件事。第一件是计算一致性得分。简单方案是直接算两个情感分布向量之间的余弦相似度,得到一个 0 到 1 之间的数值;更精细的做法是把两个向量拼接后过一个多层感知机,让模型自己学习什么叫“匹配”。我自己在实践里更推荐后者,因为不同场景对“一致”的定义并不一样,硬编码余弦相似度容易限制模型表达能力。

第二件事是情感转移建模。把用户评论按时间排好,用循环网络逐个读取,同时把相邻评论的时间间隔编码成衰减因子,让模型能感知“情绪是突然爆发还是逐步累积”。把最后一个隐藏状态展开,就得到一个序列级的情感转移特征。这个特征和一致性得分拼接在一起,再联合正文表示,最后过一个全连接层做二分类。

我按理解写一段伪代码,方便大家直观理解结构:

# 伪代码,仅用于表达结构,不是原论文逐行实现 news_vec = encode(news_text) # [B, D] target_dist = softmax(emotion_clf(news_vec)) # [B, K] reply_vecs = encode(replies, mask) # [B, M, D] query = target_dist @ emotion_emb_table # [B, D_q] attn = softmax((reply_vecs @ query.unsqueeze(1)).squeeze(1), dim=-1) source_vec = (attn.unsqueeze(-1) * reply_vecs).sum(dim=1) source_dist = softmax(emotion_clf(source_vec)) # [B, K] consistency = cosine_similarity(target_dist, source_dist) # [B, 1] transition_feat = time_aware_gru(reply_vecs, time_gap) # [B, H] fake_prob = classifier(cat(news_vec, consistency, transition_feat, source_vec))

这段结构把“文本情感”和“用户情感”都融合进去了,但最终预测仍然走的是一个端到端的分类器,不需要额外维护两套推理逻辑。

3.5 多任务学习与损失函数怎么设计

DEAN 这类双情感框架还有一个很常见的配套动作:把情感分类当成辅助任务,和假新闻检测一起训练。总损失大致是:

[ L = \lambda_1 L_{fake} + \lambda_2 L_{emotion_target} + \lambda_3 L_{emotion_source} ]

其中 ( L_{fake} ) 是假新闻二分类的交叉熵,后面两项分别是正文情感和评论情感的交叉熵。( \lambda ) 是权重,我复现时通常先让 ( \lambda_1 = 1 ),情感任务权重从 0.2 开始调。

多任务在这里有三个好处。第一,情感分类任务提供额外梯度,帮助文本编码器学到更有通用性的语义表示。第二,情感标签比真假标签噪声更小、类别更均衡,训练更稳定。第三,如果未来要上线系统,情感分布本身就是一个不错的可解释中间结果,运营同学能直接看出“这条内容激起了哪种情绪”。

要注意的是,多任务不是万能的。如果数据里情感标签和真假标签本身高度相关,模型可能偷懒,直接用情感标签作为假新闻代理,而不再学习其他证据。这时候需要观察两个 loss 是否同步下降,如果 ( L_{fake} ) 掉得很快但泛化测试很差,就要降低情感分支权重。

4. 实验设计与关键结论

4.1 数据怎么构建:正文、评论、时间戳对齐

复现这类方法,数据组织比模型结构更容易出问题。每条新闻至少要有三样东西:新闻正文、一组用户评论、评论发布时间。只拿到聚合评论却不拿到时间戳,情感转移模块就形同虚设。

我习惯的数据清洗流程是:先按新闻 ID 聚合评论;过滤明显是机器生成的短评论,比如重复字符占比过高的内容;对评论做句式归一化,不需要做太粗的停用词过滤,因为情感表达常常依赖否定词和语气词;保留原始时间戳,并计算相邻评论的时间间隔。整个管道做完,再按新闻级划分训练集和测试集,不允许同一条新闻的评论同时出现在两个集合里,否则就是严重的数据泄漏。

4.2 评测指标与对比基线

假新闻检测领域常用的指标是准确率、精确率、召回率和宏观 F1。由于假新闻在真实分布里比例通常偏低,宏观 F1 比准确率更有参考价值。我当时拿几个典型方案做对照:基于词频的逻辑回归、只用文本情感分支的变体、只用用户情感分支的变体、以及完整的 DEAN 结构。

下面的表格是示意性结果,用来展示相对趋势,不代表任何官方复现数据,具体数字会因为数据集划分和编码器选择有明显波动。

模型变体(示意)是否使用双情感是否使用一致性/转移宏观F1(示意)
词频+逻辑回归否否0.701
仅正文情感分支部分否0.752
仅用户情感分支部分否0.764
双情感+简单拼接是否0.783
双情感+一致性+转移是是0.814

从趋势上看,双情感切换带来的提升是最稳定的,而一致性、转移模块带来的属于“锦上添花”级别的提升。如果训练数据很少,优先保住双情感分支;如果数据量足够大,再把两个交互模块加进去也不迟。

4.3 消融实验到底说明了什么

消融实验的核心问题是:双情感是不是真的有用,还是只是多了几个参数导致效果变好。如果只把源情感分支拿掉,分类性能会明显下降,说明用户评论里的群体情感确实携带了正文之外的信息。如果去掉一致性模块,模型退化成简单拼接,我能观察到的典型现象是整体准确率略降,但更难调参,训练曲线抖动得更厉害。这说明一致性模块除了提升性能,还有一定的正则化效果。

更有意思的是,在情感类别维度上,不同情感的可分性差异很大。愤怒和恐惧这两类情感对区分假新闻的贡献通常最明显,因为它们与“煽动性内容”高度相关;而喜悦和平静类情感的区分度相对弱。不过这个结论不是普适的,换一个领域和数据集,主导情感的类别会变,需要根据数据重新观察。

4.4 从结果反推的可解释性

双情感模型给人最直观的可解释性证据,来自情感分布本身。拿一个测试样本举例:系统判断为假的新闻,正文情感分布呈现出“愤怒 0.62、惊讶 0.21”,评论区情感分布则是“愤怒 0.58、害怕 0.19”,一致性很高;而真实新闻的正文情感分布通常更分散,评论区则更多元。这种分布差异可以直接可视化给审核人员看,比单纯输出一个 0.87 的可疑分数要可信得多。

但这并不是说,凡是文本和评论都愤怒的新闻就一定是假的。真实新闻里也会出现重大负面事件,引发大面积愤怒。所以这套方法更适合作为舆情研判的辅助信号,而不是唯一的判案依据。

5. 复现与实战中的避坑要点

5.1 情感分布的稳定性比准确率更重要

复现 DEAN 时,我踩过的第一个大坑是过度追求情感分类的准确率。当时我把正文情感分支单独拿出来调优,用了更复杂的模型,准确率确实涨了几个点,但整体假新闻检测 F1 反而降了。原因是单独调优后的情感分类器变得更敏感,很喜欢把中性文本也预测成激进情感,导致一致性计算分数整体偏高,失去了区分度。后来我把情感分类器固定在中低复杂度,把训练重心放在双通道交互上,效果才恢复正常。记住,这个模块要的是稳定、可比的相对分布,不是绝对准确率。

5.2 零评论样本怎么处理

社交平台上不是每条内容都有评论,新账号、新话题尤其明显。直接在源情感分支里填充零向量会带来副作用:零向量参与注意力计算时会产生不可预测的向量方向。稳妥做法是加一个评论数量是否为零的指示特征,同时让注意力机制学会把零评论样本的源情感表示退化为可学习的默认向量。

我实测下来,与其硬造一条伪评论,不如分开建模。评论数量足够多的样本用完整双通道,零评论样本退化为纯文本基线。上线系统时可以在同一个模型里对两种情况分别做分支,只要控制好批次里的掩码就行。

5.3 情感类别粒度怎么选

情感类别定多少类,对结果影响很大。定太少,比如只有正面负面中性,信息太粗糙;定太多,比如 20 类细粒度情绪,标注噪声和训练难度都会上升。我常用的起点是 6 类基础情感加中性,这样每个类别样本量相对均衡,远程标注也方便。如果是做中文场景,还要额外处理情绪词的尺度差异,比如“还行”和“太棒了”之间的强度就完全不同,需要用带强度的情感词典做初始化。

5.4 训练稳定性的三个典型问题

训练过程中我遇到的三个典型问题,应该也是很多人会碰到的。第一个是正负样本不平衡,假新闻占比过低时,前几个 epoch 模型会一直预测“真”,这时候要在损失里给假新闻加权重,或者先用类别平衡采样。第二个是情感分支和主分类分支梯度冲突,表现为情感 loss 下降但主 loss 震荡,解决办法是给两个分支设置不同的学习率,情感分支用小一点的学习率。第三个是评论长度差异过大,长评论容易主导注意力,所以要么做长度截断,要么对注意力分数做长度归一化。

提示:不要在一开始就把所有模块都打开。第一步只跑通“编码器 + 拼接分类器”,第二步再加上双情感交互,第三步再加入多任务损失。一步步加,出了问题才可能定位到具体模块。

5.5 把双情感思路迁移到其他场景

这套“目标侧 + 反馈侧”的双通道思路其实不只在假新闻检测里能用。我在做产品评论可信度判断时也复用类似设计:一条商品评价是目标侧,其他人对这条评价的“评论的评论”是反馈侧。恶意刷评内容经常出现“正文极力吹捧,留言区却一片嘲讽”的高不一致信号。

在迁移时,核心要改的是情感类别定义和时序范围,比如评论诚信度场景里不是判断愤怒或恐惧,而是判断“是否过度夸张”“是否高度空泛”。结构上保留一致性模块和转移建模,就能快速适配。

6. 这个方向的后续进化与我的实际感受

6.1 从文本情感走向多模态与传播时序

DEAN 让我印象最深的,不是某个模块有多精巧,而是它重新定义了“假新闻检测里的情感应该怎么作为证据”。在它之后,很多研究把文本情感扩展到了图像情感、视频封面情感;也有研究把情感转移进一步细化成“级联传播图上的时间衰减建模”。如果你今天重新看这个话题,完全可以在 DEAN 的基础上把正文编码换成更大的预训练语言模型,把评论聚合改成图神经网络,把一致性计算放到多个层次上做,每一步都是增量提升。

6.2 双情感方法的三点局限

这套方法并非没有边界。第一,它非常依赖评论数量,热门新闻效果好,长尾内容效果差。第二,它会被大规模水军攻击,如果评论者刻意模仿正常人的情感分布,一致性信号就会失真。第三,它不能判断“事实性错误”,只能判断“内容是否在情感上表现异常”,所以更适合作为辅助筛选系统,而不是最终裁决系统。把这三点摆清楚,应用时就不会抱过高期望。

6.3 我的使用建议和最后一条小技巧

如果让我给一个最落地的组合,我会这样做:用 DEAN 的双情感分支作为召回阶段,把情感一致性异常的内容先捞出来,再用外部事实库或者人工审核做精排。这样既避免了纯事实库的高维护成本,也避免了纯机器学习的高误报率,是一个成本可控的工程方案。

最后分享一个小技巧:在情感标签实在缺失的场景,不需要人工从头标。先用一个公开的情感分类器给训练集做伪标签,然后用伪标签跑一版 DEAN,把模型预测概率高于 0.95 的样本挑出来交给人工复核,迭代两轮之后情感分支的质量就能满足要求。我用这个方法,在只有几千条人工标注的情况下把情感分支训练到位,后续迁移到新产品线时,这套“弱标签起步、双情感交互、多任务稳定”的组合拳基本没有失手过。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询