情绪模型

新闻情绪模型实测:同一批财经标题,三个模型给出什么分数?

情绪分数是 StockSight 全部结论的源头。本站用 10 条英文 + 10 条中文财经标题,在本机把三个模型各跑了一遍,并把旧算法的判定规则原样复算。

结论先说:10 条中文标题在旧算法下全部被判为中性;英文侧「申请破产保护」也被判中性。这不是模型坏了,是词典与规则模型的边界就在这里。

实测环境:Windows · Python 3.11.9 · 独立隔离环境模型版本:TextBlob 0.20.1 / VADER 3.3.2 / SnowNLP 0.12.3实测日期:2026-09-30

TextBlob0.000
VADER0.000
SnowNLP0.953
示例输出:本机对「贵州茅台前三季度净利润同比增长15%」的实测分值(TextBlob 0.20.1 / VADER 3.3.2 / SnowNLP 0.12.3,Python 3.11.9)。原始数据见 sentiment_comparison.json。
StockSight · 先搞清楚谁在打分

StockSight 三条路线分别用什么模型?

「StockSight 的情绪分析」这句话在三个仓库里指的是三件不同的事。

路线使用的模型如何组合可切换注意点
A 老版 StockSight 舆情平台TextBlob + VADER极性取两者平均:(TextBlob.polarity + VADER.compound) / 2不可切换(写死在源码里)标签判定要求两个模型同向,导致大量中性结果
A 老版 StockSight(可选外挂)第三方情感服务 text-processing.com加 --websentiment 时三源需同向命令行开关本机 POST 该地址得到 HTTP 405,本网络下不可用
B 新闻情绪 SkillVADER / TextBlob / SnowNLP / FinBERT按文本语言自动路由,也可用 --backend 指定可切换(4 个 + auto)FinBERT 需另装 transformers + torch(约 400MB)
C 异动分析 Skill不做新闻情绪——它做的是量价与技术指标(MACD/RSI/BOLL/KDJ)
B 路线 — 本机实跑 list-backends 的原始输出$ python __main__.py list-backends vader 英文规则+词典,速度快 vaderSentiment textblob 英文简单 polarity/subjectivity textblob snownlp 中文情感分析(默认中文路由) snownlp finbert ProsusAI/finbert 英文金融预训练 transformers + torch(~400MB) auto 按语言自动路由(默认) —

注意 finbert 这一行写的是「英文金融预训练」。把它直接用在中文新闻上属于跨语言误用,除非你自己换成中文金融模型。以该 Skill 的官方文件为准。

StockSight · 实测结果

20 条财经标题的情绪分值分别是多少(本机实测)

英文 10 条、中文 10 条。最后一列是按 A 路线源码规则复算出的标签。

标题TextBlob 极性VADER 复合分SnowNLP旧算法标签
$TSLA Q3 earnings beat expectations, revenue up 30%0.0000.000—neutral
Tesla misses delivery guidance for the quarter0.000-0.226—neutral
Company files for bankruptcy protection0.0000.000—neutral
Stock plunges 12% after CFO resigns0.000-0.318—neutral
Analysts upgrade TSLA to buy with $300 price target0.0000.000—neutral
Profit warning: margin pressure expected to continue-0.100-0.178—negative
Tesla recalls 100,000 vehicles over a brake issue0.0000.000—neutral
Record deliveries lift Tesla shares in premarket trading0.0000.296—neutral
贵州茅台前三季度净利润同比增长15%0.0000.0000.953neutral
公司发布业绩预告,预计全年亏损3亿元0.0000.0000.062neutral
某公司因信息披露违规被证监会立案调查0.0000.0000.192neutral
获国家大基金战略入股,产能扩张提速0.0000.0000.999neutral
贵州茅台跌破60日均线0.0000.0000.005neutral
拟回购股份不超过10亿元用于股权激励0.0000.0000.132neutral
收到深交所关注函,要求说明业绩大幅下滑原因0.0000.0000.538neutral
分组样本数旧算法标签分布SnowNLP 标签分布读数
英文财经标题10neutral 9 / negative 1未跑(英文路由不走 SnowNLP)两个模型都给 0 分的标题占多数
中文财经标题10neutral 10positive 4 / negative 5 / neutral 1旧算法对中文完全无效;SnowNLP 至少能分出方向
中文组均值—旧算法极性 0.000SnowNLP 0.4770.477 接近中位,说明它对中性样本也没有把握

表里只列了部分条目以节省篇幅,完整 20 条(含主观度与 VADER 的 pos/neu/neg 分解)保存在实测产物 sentiment_comparison.json 中,可逐条复核。

StockSight · 判错案例

StockSight 最容易出错的是哪几类句子?

下面每一条都能在上面的表里找到对应数字。

文本模型判断人的直觉为什么错
Company files for bankruptcy protectionVADER 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/关注函/立案调查 这类词,需要金融领域微调过的模型或自定义词表,通用模型做不到。以各模型官方文档为准。
StockSight · FinBERT

FinBERT 是答案吗?本站没有测,但可以说明它为什么被寄予期望

B 路线的 README 把 FinBERT 列为「英文金融领域」后端。本站没有在本机运行它,因此不给任何分数。

维度VADER / TextBlob(已实测)SnowNLP(已实测)FinBERT(未实测)
适用语言英文中文英文(金融领域微调)
实现方式词典 + 规则朴素贝叶斯 + 中文语料预训练语言模型(ProsusAI/finbert)
部署成本极小,随装随用小(包体约 37MB)大:需 transformers + torch,模型约 400MB,首次加载约 30 秒
对金融术语差(本次实测已证明)一般官方定位就是解决这类词
中文可用性不可用(本次实测全为 0)可用官方未标注中文能力,建议不要跨语言使用
本站证据本机实测(20 条)本机实测(10 条中文)未运行,仅引用官方自述

本站不做「FinBERT 比 VADER 准多少」的结论,因为没有实测数据支撑。任何引用 FinBERT 具体准确率的说法,都需要说明测试集、语言与版本。以 ProsusAI/finbert 官方模型卡为准。

StockSight · 怎么用

在自己的项目里,情绪模型应该怎么选?

按数据语言和可接受的部署成本选,不按「哪个版本更新」选。

你的数据建议理由要接受什么
纯中文财经新闻SnowNLP 起步,或换中文金融模型实测中只有它能给出区分度「回购」「关注函」这类词仍会判错,需要自建词表补正
纯英文财经新闻VADER 起步,重要场景再上 FinBERTVADER 零依赖、速度快;实测已能抓到 plunges / misses / record 这类词beat / miss / guidance / bankruptcy 仍需自定义补充
中英混合按语言分流:中文走 SnowNLP、英文走 VADERB 路线的 auto 路由就是这个思路要自己保证语言判定正确,短文本容易判错
高价值、样本量小FinBERT(英文)+ 人工抽检样本少时精度比速度重要部署成本高,中文场景没有现成答案
要做量化因子不要只用单一模型本次实测显示任意单模型都有系统性漏判需要多模型投票或人工标注校准集
  1. 先固定一小批评测样本

    本站用的是 10 英 + 10 中,覆盖业绩、风险、监管、资金四类。样本不用多,但要能覆盖你的场景。

  2. 把候选模型都跑一遍,记录原始分值

    不要只记标签,分值才能看出强度是否被低估。本次实测中「立案调查」方向对但分值只有 0.192,就属于强度不足。

  3. 人工标注,算方向一致率

    把模型标签与你的判断逐条对照。这一步的产物就是你的校准集,后面调参、换模型都以它为准。

  4. 把判错条目变成词表或规则

    比如给 VADER 追加 beat/miss/bankruptcy 的金融极性,或给中文侧加「关注函」「立案调查」等词。

  5. 过一段时间重跑同一批样本

    模型版本会变。SnowNLP 最新版是 2015 年发布的,VADER 是 2020 年,TextBlob 仍在更新——依赖升级后行为可能变化。

StockSight · 复现方法

本站这套实测怎么复现?

命令与预期输出都在下面。任何一步对不上,说明你的环境与本站不同。

bash — 复现三个模型的对照python -m venv venv-cmp venv-cmp\Scripts\activate pip install wheel pip install textblob vaderSentiment snownlp python -c "from textblob import TextBlob; from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer; from snownlp import SnowNLP; print('ok')"
步骤命令预期输出本机实际结果
先装 wheelpip install wheelSuccessfully 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 层失败点是同一个原因。

FAQ

关于 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 条无法给出置信区间,本站也没有把它包装成准确率。想得到可用结论,需要按上一节的五步建立自己的标注集。这是方法论边界,不是数据不足的借口。

模型看懂了,下一步要解决中文数据本身的问题

A 股新闻有它自己的坑:时间对齐、重复转载、公告与媒体新闻不等权、涨跌停与停牌。