新闻情绪模型实测:同一批财经标题,三个模型给出什么分数?
情绪分数是 StockSight 全部结论的源头。本站用 10 条英文 + 10 条中文财经标题,在本机把三个模型各跑了一遍,并把旧算法的判定规则原样复算。
结论先说:10 条中文标题在旧算法下全部被判为中性;英文侧「申请破产保护」也被判中性。这不是模型坏了,是词典与规则模型的边界就在这里。
sentiment_comparison.json。StockSight 三条路线分别用什么模型?
「StockSight 的情绪分析」这句话在三个仓库里指的是三件不同的事。
| 路线 | 使用的模型 | 如何组合 | 可切换 | 注意点 |
|---|---|---|---|---|
| A 老版 StockSight 舆情平台 | TextBlob + VADER | 极性取两者平均:(TextBlob.polarity + VADER.compound) / 2 | 不可切换(写死在源码里) | 标签判定要求两个模型同向,导致大量中性结果 |
| A 老版 StockSight(可选外挂) | 第三方情感服务 text-processing.com | 加 --websentiment 时三源需同向 | 命令行开关 | 本机 POST 该地址得到 HTTP 405,本网络下不可用 |
| B 新闻情绪 Skill | VADER / TextBlob / SnowNLP / FinBERT | 按文本语言自动路由,也可用 --backend 指定 | 可切换(4 个 + auto) | FinBERT 需另装 transformers + torch(约 400MB) |
| C 异动分析 Skill | 不做新闻情绪 | — | — | 它做的是量价与技术指标(MACD/RSI/BOLL/KDJ) |
注意 finbert 这一行写的是「英文金融预训练」。把它直接用在中文新闻上属于跨语言误用,除非你自己换成中文金融模型。以该 Skill 的官方文件为准。
20 条财经标题的情绪分值分别是多少(本机实测)
英文 10 条、中文 10 条。最后一列是按 A 路线源码规则复算出的标签。
| 标题 | TextBlob 极性 | VADER 复合分 | SnowNLP | 旧算法标签 |
|---|---|---|---|---|
| $TSLA Q3 earnings beat expectations, revenue up 30% | 0.000 | 0.000 | — | neutral |
| Tesla misses delivery guidance for the quarter | 0.000 | -0.226 | — | neutral |
| Company files for bankruptcy protection | 0.000 | 0.000 | — | neutral |
| Stock plunges 12% after CFO resigns | 0.000 | -0.318 | — | neutral |
| Analysts upgrade TSLA to buy with $300 price target | 0.000 | 0.000 | — | neutral |
| Profit warning: margin pressure expected to continue | -0.100 | -0.178 | — | negative |
| Tesla recalls 100,000 vehicles over a brake issue | 0.000 | 0.000 | — | neutral |
| Record deliveries lift Tesla shares in premarket trading | 0.000 | 0.296 | — | neutral |
| 贵州茅台前三季度净利润同比增长15% | 0.000 | 0.000 | 0.953 | neutral |
| 公司发布业绩预告,预计全年亏损3亿元 | 0.000 | 0.000 | 0.062 | neutral |
| 某公司因信息披露违规被证监会立案调查 | 0.000 | 0.000 | 0.192 | neutral |
| 获国家大基金战略入股,产能扩张提速 | 0.000 | 0.000 | 0.999 | neutral |
| 贵州茅台跌破60日均线 | 0.000 | 0.000 | 0.005 | neutral |
| 拟回购股份不超过10亿元用于股权激励 | 0.000 | 0.000 | 0.132 | neutral |
| 收到深交所关注函,要求说明业绩大幅下滑原因 | 0.000 | 0.000 | 0.538 | neutral |
| 分组 | 样本数 | 旧算法标签分布 | SnowNLP 标签分布 | 读数 |
|---|---|---|---|---|
| 英文财经标题 | 10 | neutral 9 / negative 1 | 未跑(英文路由不走 SnowNLP) | 两个模型都给 0 分的标题占多数 |
| 中文财经标题 | 10 | neutral 10 | positive 4 / negative 5 / neutral 1 | 旧算法对中文完全无效;SnowNLP 至少能分出方向 |
| 中文组均值 | — | 旧算法极性 0.000 | SnowNLP 0.477 | 0.477 接近中位,说明它对中性样本也没有把握 |
表里只列了部分条目以节省篇幅,完整 20 条(含主观度与 VADER 的 pos/neu/neg 分解)保存在实测产物 sentiment_comparison.json 中,可逐条复核。
StockSight 最容易出错的是哪几类句子?
下面每一条都能在上面的表里找到对应数字。
| 文本 | 模型判断 | 人的直觉 | 为什么错 |
|---|---|---|---|
| Company files for bankruptcy protection | VADER 0.000 → neutral | 强负面 | bankruptcy 不在 VADER 的金融负面词表里,protection 甚至偏正面 |
| $TSLA Q3 earnings beat expectations | 两个模型都是 0.000 → neutral | 正面 | beat 在通用词典里是「打败」(偏负)而非「超预期」(偏正),expectations 中性 |
| Analysts upgrade TSLA to buy | 两个模型都是 0.000 → neutral | 正面 | upgrade 与 buy 不在这两个模型的财经语境词表里 |
| Tesla recalls 100,000 vehicles over a brake issue | 两个模型都是 0.000 → neutral | 负面 | recall 的召回含义未被识别,issue 在中性区间 |
| 拟回购股份不超过10亿元用于股权激励 | SnowNLP 0.132 → 负面 | 偏正面 | 「不超过」被读成限制性/否定表达,抵消了「回购」的正面含义 |
| 收到深交所关注函,要求说明业绩大幅下滑原因 | SnowNLP 0.538 → 中性偏正 | 负面 | 「收到」「说明」是中性动词,模型看不到「关注函」在 A 股的负面含义 |
| 公司因信息披露违规被证监会立案调查 | SnowNLP 0.192(判为负面,方向对) | 强负面 | 方向虽然对了,但分值只有 0.192,强度严重不足 |
beat/miss/guidance/关注函/立案调查 这类词,需要金融领域微调过的模型或自定义词表,通用模型做不到。以各模型官方文档为准。FinBERT 是答案吗?本站没有测,但可以说明它为什么被寄予期望
B 路线的 README 把 FinBERT 列为「英文金融领域」后端。本站没有在本机运行它,因此不给任何分数。
| 维度 | VADER / TextBlob(已实测) | SnowNLP(已实测) | FinBERT(未实测) |
|---|---|---|---|
| 适用语言 | 英文 | 中文 | 英文(金融领域微调) |
| 实现方式 | 词典 + 规则 | 朴素贝叶斯 + 中文语料 | 预训练语言模型(ProsusAI/finbert) |
| 部署成本 | 极小,随装随用 | 小(包体约 37MB) | 大:需 transformers + torch,模型约 400MB,首次加载约 30 秒 |
| 对金融术语 | 差(本次实测已证明) | 一般 | 官方定位就是解决这类词 |
| 中文可用性 | 不可用(本次实测全为 0) | 可用 | 官方未标注中文能力,建议不要跨语言使用 |
| 本站证据 | 本机实测(20 条) | 本机实测(10 条中文) | 未运行,仅引用官方自述 |
本站不做「FinBERT 比 VADER 准多少」的结论,因为没有实测数据支撑。任何引用 FinBERT 具体准确率的说法,都需要说明测试集、语言与版本。以 ProsusAI/finbert 官方模型卡为准。
在自己的项目里,情绪模型应该怎么选?
按数据语言和可接受的部署成本选,不按「哪个版本更新」选。
| 你的数据 | 建议 | 理由 | 要接受什么 |
|---|---|---|---|
| 纯中文财经新闻 | SnowNLP 起步,或换中文金融模型 | 实测中只有它能给出区分度 | 「回购」「关注函」这类词仍会判错,需要自建词表补正 |
| 纯英文财经新闻 | VADER 起步,重要场景再上 FinBERT | VADER 零依赖、速度快;实测已能抓到 plunges / misses / record 这类词 | beat / miss / guidance / bankruptcy 仍需自定义补充 |
| 中英混合 | 按语言分流:中文走 SnowNLP、英文走 VADER | B 路线的 auto 路由就是这个思路 | 要自己保证语言判定正确,短文本容易判错 |
| 高价值、样本量小 | FinBERT(英文)+ 人工抽检 | 样本少时精度比速度重要 | 部署成本高,中文场景没有现成答案 |
| 要做量化因子 | 不要只用单一模型 | 本次实测显示任意单模型都有系统性漏判 | 需要多模型投票或人工标注校准集 |
先固定一小批评测样本
本站用的是 10 英 + 10 中,覆盖业绩、风险、监管、资金四类。样本不用多,但要能覆盖你的场景。
把候选模型都跑一遍,记录原始分值
不要只记标签,分值才能看出强度是否被低估。本次实测中「立案调查」方向对但分值只有 0.192,就属于强度不足。
人工标注,算方向一致率
把模型标签与你的判断逐条对照。这一步的产物就是你的校准集,后面调参、换模型都以它为准。
把判错条目变成词表或规则
比如给 VADER 追加
beat/miss/bankruptcy的金融极性,或给中文侧加「关注函」「立案调查」等词。过一段时间重跑同一批样本
模型版本会变。SnowNLP 最新版是 2015 年发布的,VADER 是 2020 年,TextBlob 仍在更新——依赖升级后行为可能变化。
本站这套实测怎么复现?
命令与预期输出都在下面。任何一步对不上,说明你的环境与本站不同。
| 步骤 | 命令 | 预期输出 | 本机实际结果 |
|---|---|---|---|
| 先装 wheel | pip install wheel | Successfully installed wheel | 成功(0.48.0) |
| 装三个模型 | pip install textblob vaderSentiment snownlp | 三个包安装成功 | 成功;其中 snownlp 需从源码包构建 wheel |
| 跑对照脚本 | 读取 20 条标题并逐条打分 | 打印 20 行分值 | 成功,产物写入 sentiment_comparison.json |
| 复算旧算法标签 | 按双重阈值规则判定 | 中文组 10 条全为 neutral | 与实测一致 |
注意第 1 步必须单独执行:把 wheel 与三个模型写在同一行命令里会失败(pip 会在安装任何包之前先解析全部元数据),而 snownlp 只有源码包没有 wheel。这与安装页第 1 层失败点是同一个原因。
关于 StockSight 情绪模型的常见问题有哪些
为什么中文标题全部被判中性?
因为旧算法的判定要求 TextBlob 与 VADER 同时给出同向且超过阈值的分数。这两个模型都是英文词典/规则模型,对中文文本一律返回 0.000,自然落在「其余 → neutral」这一支。这是本机实测结果,不是推测;以 sentiment.py 的源码为准。
VADER 把「申请破产保护」判成中性,是不是我用错了?
不是用法问题。VADER 是通用社交媒体词典,bankruptcy 与 protection 都不在其金融极性词表里,实测就是 0.000。要处理这类句子,需要补充自定义词典或在金融语料上微调。以 VADER 官方词典与文档为准。
SnowNLP 的中文结果可信吗?
方向上有区分度,强度不可信。本次实测里「净利润同比增长15%」得 0.953、「跌破60日均线」得 0.005,方向都对;但「拟回购股份」被算成 0.132(负面)、「收到关注函」被算成 0.538(中性偏正),方向错。而且它最新版发布于 2015 年。以该项目的官方发布记录为准。
FinBERT 到底能不能用在中文新闻上?
B 路线的 backend 列表里写明了 FinBERT 是「英文金融预训练」,本站没有在中文语料上运行过它,也没有找到官方中文能力声明。稳妥的做法是不跨语言使用。以 ProsusAI/finbert 的官方模型卡为准。
情绪分值是 -1 到 1 吗?
不是统一量纲。TextBlob 的 polarity 在 -1 到 1;VADER 的 compound 也在 -1 到 1;但旧算法把两者直接取平均,这个平均值的统计含义并不明确。SnowNLP 的 sentiments 则是 0 到 1 的正面概率,与前者完全不是一套尺度,不能直接比较大小。以各模型官方文档为准。
本机的实测样本只有 20 条,够用吗?
作为「证明某类词会被系统性漏判」的演示是够的,作为准确率评估是不够的。20 条无法给出置信区间,本站也没有把它包装成准确率。想得到可用结论,需要按上一节的五步建立自己的标注集。这是方法论边界,不是数据不足的借口。