從 Hugging Face 到 FinBERT:幫自己的交易裝上一副情緒天線

2026.09.018 分
AI交易量化

如果你只記一句話:Hugging Face 是「開源 AI 模型的 GitHub 加 Docker Hub 加 App Store」三合一;而 FinBERT 是其中一個專門讀懂財經情緒的模型,幾行程式碼就能接進你的交易流程。

這篇手記分兩段:先用 5W1H 把 Hugging Face 講到人話;再以 FinBERT 為例,說明它怎麼落到你自己的交易裡——重點不在寫多少程式,而在想清楚「它解決什麼問題」。

一、Hugging Face 是什麼?5W1H 一次說清

What(是什麼)

把三個你已經懂的東西疊起來,就懂 Hugging Face 了:

  • 像 GitHub:每個模型都有作者、版本、討論區,你可以下載、提 issue、看別人怎麼用。
  • 像 Docker Hub:以前復現一篇論文要自己 clone repo、配環境、下權重,動輒兩三天;現在 from_pretrained("模型名") 一行,權重、分詞器、設定檔全幫你拉好。
  • 像 App Store 的 Spaces:任何人都能免費部署一個互動 demo,打開網頁就能試模型,不用裝任何東西。

它本質上是一個**「讓模型從論文變成可用工具」的基礎設施**。

Who(誰在用)

不是只有工程師。研究者在上面發表最新模型、Kaggle 選手拿現成模型打比賽、公司(從新創到 Apple、Microsoft 這類大廠)把自家模型開源上去。平台上託管著數百萬個模型與十幾萬筆資料集,背後是上千萬名開發者與研究者組成的社群。

When(何時興起)

2016 年成立於法國巴黎,一開始做的是聊天機器人。真正的轉捩點是 2018–2020 年:BERT、GPT 這類 Transformer 模型爆紅,大家都需要一個地方「分享權重」,Hugging Face 就從一個工具公司,變成了整個開源 AI 生態的廣場。

Where(在哪用)

  • 雲端:直接上 huggingface.co 搜模型、用 Spaces 試玩。
  • 本地:pip install transformers 後,筆電就能跑小模型。
  • 更輕:模型可以量化壓到幾 MB,甚至塞進手機。

對交易者來說,重點是「本地、可批次、可自動化」——這意味著你能每天讓它掃幾千條新聞標題,而不用一條條手動看。

Why(為什麼你該知道它)

因為它把「門檻」拆掉了。十年前做情緒分析要自己標註語料、訓練模型;今天你只是站在別人肩膀上,把一個已經讀懂財經語言的模型請下來用。省下的時間,拿去想「這信號怎麼跟我原本的盤勢判讀結合」更有價值。

How(怎麼開始)

三個核心入口:

  1. Model Hub:找模型(搜 finbert 就有一堆金融情緒模型)。
  2. Datasets:找訓練與測試資料。
  3. Spaces:免費部署 demo,先試再決定要不要接。

最小起步只要:

pip install transformers torch

下一節就會用。

二、用 FinBERT 幫交易裝上「情緒天線」

先搞清楚:FinBERT 是什麼

BERT 是 Google 提出的語言模型,讀得懂句子上下文。FinBERT 則是拿 BERT 在金融語料(財經新聞、分析師報告、財報電話會議逐字稿)上繼續預訓練的版本——它特別擅長一件事:判斷一段金融文字是正面、負面,還是中性。

對交易者而言,這解決一個老問題:市場情緒往往是價格的先行指標之一。新聞標題裡藏著「市場在恐慌還是貪婪」的線索,而人眼一天看不了幾百條,模型可以。

一句話定位:FinBERT 不是來替你下單的,是來替你把「情緒」這筆雜訊變成可量化分數的。

落地的邏輯(先想清楚,再寫 code)

把 FinBERT 接進交易,核心不是模型本身,而是這條鏈:

  1. 抓標題:某檔個股的新聞標題、或是大盤相關的財經快訊(來源可以是 RSS、券商 API、財經社群)。
  2. 打情緒分:每條標題丟進 FinBERT,拿到 positive / negative / neutral 的機率。
  3. 聚合成序列:把一段時間內所有相關標題的分數加權平均,得到一條「情緒分數」時間序列。
  4. 疊回盤面:把情緒分數和股價 / K 線疊在一起看——它當輔助訊號,不當主訊號。

實務上怎麼用?舉兩個合乎你既有框架的例子(注意:這裡講的是現股 / ETF,不涉及任何高槓桿商品):

  • 極度負面情緒 + 技術面超賣(如跌破 20MA 且乖離過大):留意是否「錯殺」——市場情緒比基本面更慌,可能給你一張便宜的進場券。
  • 過度樂觀 + 股價乖離 20MA 過大:留意獲利了結的節奏,情緒過熱往往是短期高點的伴隨特徵。

這和你既有的「折價承接有債底標的、波動率目標化保留攻擊權」思路是同一件事的不同切面:都是在別人情緒失控時,保持自己的判讀力。

最小代碼:幾行就跑起來

FinBERT 對英文金融文本最準(它本來就是在英文財經語料上訓的)。中文新聞的話,要改用中文金融情緒模型,或先翻譯再打分——這點要誠實說在前頭,別拿英文模型硬套中文標題。

下面是用英文財經標題的最小示範:

from transformers import pipeline

# 載入金融情緒分析管線(第一次會自動下載權重)
sentiment = pipeline(
    "sentiment-analysis",
    model="ProsusAI/finbert",   # 專精金融文本的 FinBERT
)

# 丟一條財經標題進去
text = "The chipmaker's earnings beat expectations, shares surge."
print(sentiment(text))
# 輸出形如 [{'label': 'positive', 'score': 0.98}]

就這樣。你拿到 label(positive / negative / neutral)和 score(信心度),剩下的只是把它們聚合、畫圖、和你既有的指標疊在一起。

如果要批次掃一大堆標題,把 text 換成串列即可,pipeline 會自動批次處理,比一條條呼叫快很多。

誠實的邊界(這部分比代碼重要)

  • 它是微弱信號,不是聖杯。 財經標題裡有大量標題農場、反向指標、以及「利多出盡」這類反直覺情況。單看情緒分數下單,很快就會被市場教訓。
  • 要當輔助,不當主訊號。 它最適合和你既有的技術面、籌碼面、市場寬度一起看,作為「市場情緒溫度計」。
  • 小心過擬合與數據洩漏。 用歷史新聞回測時,絕對不能讓未來的新聞跑進模型——時間順序錯了,回測績效全是假的。
  • 語言與來源偏差。 英文模型讀中文會失真;不同媒體的立場也會帶入偏誤,最好多來源交叉驗證。

小結

Hugging Face 把「用 AI 模型」的門檻降到了幾行程式;FinBERT 則是其中一個能直接服務交易者的零件——它把財經情緒這筆雜訊,變成你可以畫在盤面上的分數。

但記住這篇手記一直沒變的底色:工具再強,也只是放大你原本的判讀力,不會替你做決定。 把情緒天線裝上,是為了在別人恐慌時你還看得清,而不是為了多一個讓自己更慌的儀表。

延伸閱讀:我把這套情緒天線落成了每天自動執行的小工具(Google News RSS 抓新聞 → FinBERT 評分 → 每日快報),完整使用說明在這篇——把 FinBERT 接上每日流程:一份台美股市場新聞情緒快報的工具說明。

← 回到手記列表