4、关键词提取:TF-IDF算法、TextRank算法、关键词权重计算、高频词分析

聊到情绪预警,很多人第一反应是看正负面词汇。但说实话,这远远不够。真正让我在项目中拍大腿的,是关键词提取这个环节。它就像一把手术刀,能精准切开海量文本,把那些真正引爆情绪的「火药桶」给揪出来。

我个人习惯把关键词提取比作「文本里的探针」。你想想看,一条微博里可能有一百个字,但真正让用户情绪炸裂的,往往就那一两个词。比如「退钱」「翻车」「割韭菜」——这些词一出现,基本就是预警信号拉满。

这一章,我会把四种最实用的方法掰开揉碎讲清楚。嗯,都是我在真实舆情项目里反复验证过的。

4.1 TF-IDF算法:老牌劲旅,但别小看它

TF-IDF,全称 Term Frequency-Inverse Document Frequency。说白了就是:一个词在单篇文档里出现得越多,同时在所有文档里出现得越少,那它就越重要

公式其实不复杂:

TF-IDF = TF × IDF

TF = 某个词在文档中出现的次数 / 文档总词数
IDF = log(文档总数 / 包含该词的文档数 + 1)

我在项目中遇到过一件事:某品牌突然被大量负面评论刷屏。用TF-IDF一跑,排名第一的关键词不是「垃圾」也不是「差评」,而是「客服」。为什么?因为平时「客服」这个词出现频率很低,但那天突然暴增——这说明问题出在服务环节,而不是产品本身。你看,这就是TF-IDF的妙处。

核心洞察: TF-IDF对「突发性关键词」极其敏感。在情绪预警场景下,它能帮你快速发现那些「平时没人提,今天突然炸了」的异常信号。

4.2 TextRank算法:图模型的力量

TextRank的思路跟PageRank很像。它把每个词看作一个节点,词与词之间的共现关系看作边。然后通过迭代计算,给每个词打分。

我刚开始用TextRank时犯过一个错:直接用默认参数跑中文文本。结果出来的关键词全是「的」「了」「在」这种停用词。后来才意识到,中文文本必须先做分词和去停用词,否则TextRank会被高频虚词带偏。

TextRank的优势在于:它不需要标注数据,完全无监督。而且它考虑的是词与词之间的「社交关系」——一个词如果跟很多重要词同时出现,那它自己也变得重要。这在情绪分析里特别有用,因为情绪往往是通过一组词共同表达的。

我的经验: 在短文本(比如微博、评论)上,TextRank的效果往往优于TF-IDF。因为短文本里词频统计的样本太少,而TextRank能利用词之间的共现关系来弥补。

4.3 关键词权重计算:不只是算个分数

很多人以为权重计算就是套公式出数字。其实没那么简单。我在实际项目中,通常会把权重拆成三个维度:

维度 含义 计算方式
统计权重 词本身的出现频率和分布 TF-IDF、词频等
情感权重 词携带的情感强度 情感词典匹配 + 程度副词加权
突发权重 词在当前时段相比历史时段的异常程度 时间序列异常检测

举个例子。假设「质量」这个词,平时权重是0.3,今天突然涨到0.8。但光看这个还不够。如果「质量」同时搭配了「差」「问题」「投诉」这些负面词,那它的情感权重就会飙升。这时候,综合权重 = 统计权重 × 情感权重 × 突发权重,才能真正反映预警信号。

避坑指南: 我曾经只用了统计权重来做预警,结果漏掉了一条关键舆情。那条评论里「质量」出现了很多次,但TF-IDF分数并不高,因为它在历史数据里也经常出现。后来加上突发权重才补上这个漏洞。

4.4 高频词分析:最朴素但最直观

高频词分析,说白了就是数数。哪个词出现次数最多,哪个就是高频词。但这里有个坑:高频不等于重要

我见过很多新手,一上来就画词云,结果满屏都是「的」「了」「是」。这能看出什么?什么都看不出来。

真正的高频词分析,要分三步走:

  1. 去噪:去掉停用词、标点、数字、无意义符号
  2. 分组:按时间窗口(比如每小时、每天)统计高频词变化
  3. 对比:对比当前高频词与历史高频词,找出「新面孔」

我在做某次电商大促的情绪监控时,发现「发货」这个词在24小时内从第50名飙升到第3名。点进去一看,全是「发货慢」「不发货」「虚假发货」。这就是典型的高频词预警信号——不需要复杂算法,光靠数数就能发现问题。

知识体系总览

下面这张图,是我自己梳理的关键词提取知识框架。你可以把它当作本章的「地图」:

关键词提取知识体系 关键词提取 TF-IDF算法 TextRank算法 权重计算 高频词分析 词频(TF)计算 逆文档频率(IDF) 异常信号检测 图模型构建 共现关系分析 迭代打分机制 统计权重 情感权重 突发权重 去噪处理 时间窗口统计 历史对比分析 核心目标:从海量文本中精准定位情绪引爆点

这四种方法,各有各的脾气。TF-IDF适合做「横向对比」,看某个词在整体语料中的稀缺性;TextRank适合做「纵向挖掘」,看词与词之间的关联;权重计算是「综合打分」,把多个维度揉在一起;高频词分析则是「快速扫描」,第一时间发现异常。

我个人建议,在实际项目中不要只用一种方法。我通常的做法是:先用高频词分析做快速扫描,发现异常后再用TF-IDF和TextRank做深度分析,最后用权重计算给出综合评分。这样既快又准。

一个小技巧: 如果你做的是实时情绪监控,可以把高频词分析的时间窗口设短一点(比如5分钟),这样能捕捉到「瞬间爆发」的情绪信号。我有个项目就是靠这个提前15分钟发现了某品牌的公关危机。

好了,关键词提取这块就聊到这儿。记住一句话:工具是死的,场景是活的。别死磕算法,多想想你的数据长什么样、你的预警目标是什么。这才是关键。


专注资料整理