FinVocab为何比BERT原版词表更强?FinBERT金融WordPiece词表生成原理深度解析
【免费下载链接】FinBERTA Pretrained BERT Model for Financial Communications. https://arxiv.org/abs/2006.08097项目地址: https://gitcode.com/gh_mirrors/finbe/FinBERT
FinVocab 是FinBERT(金融领域预训练 BERT 模型)配套的新版 WordPiece 金融词表,也是 FinBERT 比通用 BERT 更懂金融文本的关键之一。本文将用通俗的语言讲清楚:FinVocab 是如何生成的、它为什么比 BERT 原版 BaseVocab 更强,以及如何快速上手使用。
一、为什么通用词表在金融文本上会“水土不服”?
🔍 BERT 的默认词表(BaseVocab)是在书籍、维基百科等通用文本上训练出来的。而金融文档里充满了专业术语:
- 财报术语:
10-K、10-Q、EPS、guidance、guidelines - 会议用语:earnings call、liquidity、capital allocation
- 分析概念:ESG、forward-looking statement、revenue growth
这些词在通用词表中往往不是完整词,会被切成几个 WordPiece 子词碎片(如##guid、##ance),甚至直接变成未知词[UNK]。后果是:
- 序列变长:一句话被切成更多 token,注意力被稀释;
- 语义破碎:模型要“重新学会”把碎片拼回专业含义;
- 训练低效:预训练时大量参数花在通用语料,而非金融语料。
FinVocab 的核心思路就一句话:词表也应该从金融文本里“长”出来。
二、FinVocab 生成原理:SentencePiece 词表训练流程
1. 先攒够 49 亿 token 的金融语料
FinVocab 是在三类金融通讯语料上生成的,总规模约4.9B tokens(详见 README.md):
| 语料来源 | 规模(tokens) | 内容特点 |
|---|---|---|
| 公司报告 10-K & 10-Q | 2.5B | 年度/季度财报,专业术语密集 |
| 财报电话会议记录(Earnings Call Transcripts) | 1.3B | 管理层口语化表达、业绩展望 |
| 分析师报告(Analyst Reports) | 1.1B | 投资观点、评级与预测 |
2. 用 SentencePiece 在金融语料上重新学习词表
项目使用SentencePiece库在上述语料上训练出一套全新的 WordPiece 词表,即 FinVocab,并同时产出两个版本:
- FinVocab-Cased(区分大小写):28,573 个 token
- FinVocab-Uncased(不区分大小写):30,873 个 token
📌 注意一个巧妙之处:FinVocab 的规模被刻意控制在与 BERT 原版词表(28,996 / 30,522)接近的水平,这样模型架构完全不用改,只需替换词表即可——这正是archive/bertModel.py中四种配置的写法:base-cased、base-uncased、finance-cased、finance-uncased共享相同的 hidden_size=768、12 层、12 头的结构,仅词表大小不同。
三、FinVocab 与 BERT 原版词表对比:到底强在哪?
| 词表 | 大小(tokens) | 训练语料 |
|---|---|---|
| BaseVocab-Cased(BERT 原版) | 28,996 | 通用文本 |
| BaseVocab-Uncased(BERT 原版) | 30,522 | 通用文本 |
| FinVocab-Cased | 28,573 | 4.9B 金融 tokens |
| FinVocab-Uncased | 30,873 | 4.9B 金融 tokens |
🏆 FinVocab 的三大优势:
- 金融术语“整词”保留:在财报、电话会议中高频出现的专业词会作为完整词进入词表,token 化更短、语义更完整;
- 未知词更少:
[UNK]与碎片子词比例下降,同样的序列长度能承载更多信息; - 开箱即用的领域适配:项目官方推荐使用
FinBERT-FinVocab-Uncased版本(见 README.md),配合在金融语料上预训练的权重,词表与权重“同源同域”,效果最佳。
💡 词表与模型权重的对应关系可以在
archive/train_bert.py的vocab_to_model_dict中直接看到:finance-uncased对应FinBert_FinVocab_Uncased模型。
四、FinVocab 版本如何接入?(词表加载方式)
在原始训练代码中,切换词表只需一行 tokenizer 配置(见archive/datasets.py):
# 使用原版词表 self.tokenizer = BertTokenizer.from_pretrained('bert-base-cased', do_lower_case=False) # 使用 FinVocab 金融词表:指定 vocab_file 即可 self.tokenizer = BertTokenizer(vocab_file=vocab_path, do_lower_case=False)也就是说,FinVocab 的接入成本极低——把vocab_file指向 FinVocab 词表文件,其余训练与微调流程完全不变。
五、3 步快速上手 FinVocab 版 FinBERT 🚀
第 1 步:克隆仓库
git clone https://gitcode.com/gh_mirrors/finbe/FinBERT第 2 步:安装依赖
依赖清单见 requirements.txt,按其中版本安装即可(项目验证环境为 transformers 4.18.0 + PyTorch 1.7.1)。
第 3 步:按需选择 notebook
| 你的目标 | 打开哪个文件 |
|---|---|
| 直接调用微调好的 FinBERT 做情感/ESG/前瞻性语句分类 | FinBERT-demo.ipynb |
| 在自己数据集上微调 FinBERT | finetune.ipynb |
| 查看早期训练实现(含词表切换逻辑) | archive/目录(说明见archive/README.md) |
微调流程非常简单:加载BertForSequenceClassification与BertTokenizer→ 用自己的金融标注数据构造 Dataset → 用 HuggingFaceTrainer训练几个 epoch 即可。
六、总结
- FinVocab是基于 4.9B 金融 token、用SentencePiece训练出的 WordPiece 金融词表(28,573 / 30,873 token 两版);
- 它让金融术语保持完整、减少未知词,且模型架构零改动,这就是它比 BERT 原版 BaseVocab 更强的原因;
- 官方推荐搭配FinBERT-FinVocab-Uncased预训练权重使用,可通过
FinBERT-demo.ipynb和finetune.ipynb快速体验情感分析、ESG 分类等金融 NLP 任务。
💬 想深入了解?原始论文为FinBERT: A Pretrained Language Model for Financial Communications(arXiv:2006.08097),引用信息已收录在 README.md 的 Citation 部分。
【免费下载链接】FinBERTA Pretrained BERT Model for Financial Communications. https://arxiv.org/abs/2006.08097项目地址: https://gitcode.com/gh_mirrors/finbe/FinBERT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考