MathBERT模型(自定义词汇表)
该模型基于从学前到研究生阶段的数学语言(英语),采用掩码语言建模(MLM)目标进行预训练。此模型为不区分大小写版本:不会对"english"和"English"进行区分。
模型描述
MathBERT是基于自监督方式在大型英文数学语料库上预训练的transformers模型。这意味着它仅对原始文本进行预训练,无需任何人工标注(因此可利用大量公开数据),通过自动化流程从文本生成输入和标签。具体而言,其预训练包含两个目标:
- 掩码语言建模(MLM):随机遮蔽输入句子中15%的词汇,通过模型预测被遮蔽的词汇。与传统循环神经网络(RNN)逐词处理或GPT类自回归模型内部遮蔽未来标记不同,该方法使模型能学习句子的双向表征。
- 下一句预测(NSP):在预训练时将两个遮蔽句子拼接作为输入。50%概率保留原文中的连续句子,50%概率随机组合。模型需判断这两个句子是否原文相邻。
通过这种方式,模型可学习数学语言的内部表征,进而提取适用于下游任务的特征。例如,对于已标注的句子数据集,可使用MathBERT生成的特征作为标准分类器的输入。
使用场景与限制
基础模型可直接用于掩码语言建模或下一句预测,但主要用途是针对数学相关下游任务进行微调。
需注意:本模型主要适用于需要整句(可能含遮蔽)决策的数学相关任务,如序列分类、标记分类或问答。对于数学文本生成等任务,建议使用GPT2等模型。
使用方法
以下展示如何在PyTorch中获取文本特征:
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('tbs17/MathBERT-custom')
model = BertModel.from_pretrained("tbs17/MathBERT-custom")
text = "替换为任意文本"
encoded_input = tokenizer(text, return_tensors='pt')["input_ids"]
output = model(encoded_input)
TensorFlow版本:
from transformers import BertTokenizer, TFBertModel
tokenizer = BertTokenizer.from_pretrained('tbs17/MathBERT-custom')
model = TFBertModel.from_pretrained("tbs17/MathBERT-custom")
text = "替换为任意文本"
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
注意事项
MathBERT专为数学相关任务设计,在数学问题文本填充任务中表现优于通用填充任务。参见示例对比:
正确用例:
>>> unmasker("students apply these new understandings as they reason about and perform decimal [MASK] through the hundredths place.")
输出显示"numbers"为最可能预测结果(置信度83.28%)
错误用例:
>>> unmasker("The man worked as a [MASK].")
预测结果(如"book")表明模型不适用于通用场景
训练数据
预训练数据涵盖:学前至高中数学课程(engageNY/犹他州数学/Illustrative Math)、openculture.com的大学数学教材,以及arXiv数学论文摘要。总训练标记约1亿。
训练流程
文本经小写处理后,使用WordPiece和自定义30,522词汇表进行标记化。通过HuggingFace的bert_tokenizer
从原始数学文本生成定制词汇文件。模型输入格式为:
[CLS] 句子A [SEP] 句子B [SEP]
其中50%概率为原文连续句子,50%概率为随机组合。此处"句子"指通常长于单句的连续文本片段,总长度不超过512标记。
遮蔽规则:
- 15%的标记被遮蔽
- 80%概率替换为[MASK]
- 10%概率替换为随机标记
- 10%概率保持原词
预训练配置
在Google Colab的8核云TPU上训练60万步,批量大小128,序列长度始终限制为512。使用Adam优化器(学习率5e-5,β₁=0.9,β₂=0.999),权重衰减0.01,前1万步学习率预热,之后线性衰减。