MathBERT模型(原始词汇版)
免责声明:本文档格式遵循官方BERT模型的readme.md
这是一个基于学前至研究生阶段数学英语语料、采用掩码语言建模(MLM)目标预训练的模型。该模型不区分大小写:即english和English被视为相同。
模型描述
MathBERT是通过自监督方式在大量英文数学语料上预训练的transformers模型。这意味着它仅对原始文本进行预训练,无需任何人工标注(因此可利用大量公开数据),通过自动化流程从文本生成输入和标签。具体而言,其预训练包含两个目标:
- 掩码语言建模(MLM):模型随机遮蔽输入句子中15%的词汇,然后通过整个被遮蔽的句子预测被遮蔽的词汇。这不同于传统循环神经网络(RNN)逐词处理的方式,也不同于GPT等自回归模型内部遮蔽未来标记的做法,使模型能学习句子的双向表征。
- 下一句预测(NSP):预训练时将两个遮蔽后的句子拼接作为输入。有时这两个句子在原文中相邻,有时不相邻。模型需判断这两个句子是否连续。
通过这种方式,模型学习数学语言的内部表征,可用于提取下游任务所需的特征。例如,若有一个标注句子数据集,可以使用MathBERT模型生成的特征作为输入来训练标准分类器。
预期用途与限制
原始模型可用于掩码语言建模或下一句预测,但主要适用于微调数学相关下游任务。
需注意,该模型主要针对需要整句(可能被遮蔽)进行决策的数学相关任务,如序列分类、标记分类或问答。对于数学文本生成等任务,建议使用GPT2等模型。
使用方法
以下是在PyTorch中使用该模型获取文本特征的示例:
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('tbs17/MathBERT',output_hidden_states=True)
model = BertModel.from_pretrained("tbs17/MathBERT")
text = "替换为任意文本。"
encoded_input = tokenizer(text, return_tensors='pt')
output = model(encoded_input)
在TensorFlow中的使用示例:
from transformers import BertTokenizer, TFBertModel
tokenizer = BertTokenizer.from_pretrained('tbs17/MathBERT',output_hidden_states=True)
model = TFBertModel.from_pretrained("tbs17/MathBERT")
text = "替换为任意文本。"
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
与原始BERT在填空任务上的对比
原始BERT(即bert-base-uncased)存在性别预测偏差问题,尽管其训练数据相对中性。由于我们的模型未在可能包含数学方程、符号和术语的通用语料上训练,因此不会显示此类偏差。见下例:
原始BERT的输出
>>> unmasker("The man worked as a [MASK].")
[预测结果为木匠、服务员等传统男性职业]
>>> unmasker("The woman worked as a [MASK].")
[预测结果为护士、女服务员等传统女性职业]
MathBERT的输出
>>> unmasker("The man worked as a [MASK].")
[预测结果为book、guide等中性词汇]
>>> unmasker("The woman worked as a [MASK].")
[预测结果为woman、guide等中性词汇]
由此可见,MathBERT专为数学相关任务设计,在数学问题文本填空任务上表现优于通用填空任务。
典型数学填空示例:
>>> unmasker("students apply these new understandings as they reason about and perform decimal [MASK] through the hundredths place.")
[最佳预测为numbers(数值),其他选项包括operations(运算)等数学术语]
因此,使用页面右侧的'fill-mask'API时,建议输入类似以下数学语句:
1 tenth times any [MASK] on the place value chart moves it one place value to the right.
训练数据
MathBERT的预训练数据包含:学前至高中数学课程(engageNY、犹他州数学、Illustrative Math)、openculture.com的大学数学教材,以及arXiv数学论文摘要的研究生级内容,总计约1亿标记。
训练流程
文本经小写处理和WordPiece分词(词汇表源自原始BERT的30,522个词条)。模型输入格式为:
[CLS] 句子A [SEP] 句子B [SEP]
其中50%概率下句子A和B来自原文连续段落。这里的"句子"指长于单句但不超过512标记的连续文本。
遮蔽规则如下:
- 15%的标记被遮蔽
- 80%概率替换为[MASK]
- 10%概率替换为随机标记
- 10%概率保持原词
预训练细节
模型在Google Colab的8核云TPU上训练60万步,批次大小128,序列长度始终限制为512。使用Adam优化器(学习率5e-5,β₁=0.9,β₂=0.999),权重衰减0.01,前1万步学习率预热,之后线性衰减。
训练与微调代码见:https://github.com/tbs17/MathBERT