🚀 MathBERT模型(原始词表)
MathBERT是一个在数学语言数据上预训练的模型,它通过自监督学习的方式学习数学语言的内在表示,可用于提取对下游任务有用的特征,尤其适用于与数学相关的任务。
🚀 快速开始
MathBERT是一个以自监督方式在大量英语数学语料数据上预训练的transformers模型。它可以用于掩码语言建模或下一句预测任务,但主要用于在与数学相关的下游任务上进行微调。
以下是在PyTorch中使用该模型获取给定文本特征的示例:
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('tbs17/MathBERT', output_hidden_states=True)
model = BertModel.from_pretrained("tbs17/MathBERT")
text = "Replace me by any text you'd like."
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 = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
✨ 主要特性
- 自监督学习:MathBERT在原始文本上进行预训练,无需人工标注,通过掩码语言建模(MLM)和下一句预测(NSP)两个目标学习数学语言的内在表示。
- 双向表示学习:MLM允许模型学习句子的双向表示,与传统的循环神经网络(RNNs)和自回归模型(如GPT)不同。
- 适用于数学任务:该模型专门为数学相关任务设计,在数学问题文本的掩码填充任务中表现更好,且不会出现像原始BERT那样的性别偏见问题。
📚 详细文档
模型描述
MathBERT是一个在大规模英语数学语料数据上以自监督方式预训练的transformers模型。它通过以下两个目标进行预训练:
- 掩码语言建模(MLM):模型随机掩盖输入句子中15%的单词,然后通过模型预测这些被掩盖的单词,从而学习句子的双向表示。
- 下一句预测(NSP):模型在预训练时将两个掩码句子作为输入,预测这两个句子是否在原始文本中相邻。
通过这种方式,模型学习到数学语言的内在表示,可用于提取对下游任务有用的特征。
预期用途和限制
- 用途:可以使用原始模型进行掩码语言建模或下一句预测,但主要用于在与数学相关的下游任务上进行微调,如序列分类、标记分类或问答任务。
- 限制:该模型主要针对使用整个句子(可能是掩码的)进行决策的数学相关任务进行微调。对于数学文本生成等任务,建议使用像GPT2这样的模型。
与原始BERT在掩码填充任务上的比较
原始BERT(即bert-base-uncased)在性别预测上存在偏差问题,而MathBERT由于在不包含性别相关信息的数学语料上训练,不会出现这种偏差。以下是两者在掩码填充任务上的比较示例:
原始BERT的预测结果
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='bert-base-uncased')
>>> unmasker("The man worked as a [MASK].")
[{'sequence': '[CLS] the man worked as a carpenter. [SEP]',
'score': 0.09747550636529922,
'token': 10533,
'token_str': 'carpenter'},
{'sequence': '[CLS] the man worked as a waiter. [SEP]',
'score': 0.0523831807076931,
'token': 15610,
'token_str': 'waiter'},
...]
>>> unmasker("The woman worked as a [MASK].")
[{'sequence': '[CLS] the woman worked as a nurse. [SEP]',
'score': 0.21981462836265564,
'token': 6821,
'token_str': 'nurse'},
{'sequence': '[CLS] the woman worked as a waitress. [SEP]',
'score': 0.1597415804862976,
'token': 13877,
'token_str': 'waitress'},
...]
MathBERT的预测结果
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='tbs17/MathBERT')
>>> unmasker("The man worked as a [MASK].")
[{'score': 0.6469377875328064,
'sequence': 'the man worked as a book.',
'token': 2338,
'token_str': 'book'},
...]
>>> unmasker("The woman worked as a [MASK].")
[{'score': 0.8999770879745483,
'sequence': 'the woman worked as a woman.',
'token': 2450,
'token_str': 'woman'},
...]
从上述结果可以看出,MathBERT专门为数学相关任务设计,在数学问题文本的掩码填充任务中表现更好。
训练数据
MathBERT模型在从幼儿园到高中的数学课程(engageNY、犹他数学、示例数学)、openculture.com上的大学数学书籍以及arxiv数学论文摘要中的研究生水平数学数据上进行预训练,大约有1亿个标记。
训练过程
- 文本预处理:文本先转换为小写,然后使用WordPiece进行分词,词汇表大小为30,522,与原始BERT的vocab.txt相同。
- 输入格式:模型的输入形式为
[CLS] Sentence A [SEP] Sentence B [SEP]
,其中句子A和句子B有50%的概率对应原始语料中的两个连续句子片段。
- 掩码过程:每个句子中15%的标记被掩盖,其中80%的情况下被掩盖的标记被
[MASK]
替换,10%的情况下被随机标记替换,10%的情况下保持不变。
预训练
模型在Google Colab的8核云TPU上训练了600k步,批量大小为128,序列长度始终限制为512。使用的优化器是Adam,学习率为5e-5,beta₁ = 0.9,beta₂ = 0.999,权重衰减为0.01,学习率在10,000步内热身,之后线性衰减。
训练和微调代码可参考:https://github.com/tbs17/MathBERT 。
引用说明
文档格式遵循官方BERT模型的README.md。
注意事项
若要尝试页面右上角的“fill-mask”托管API,请使用类似以下的句子:
1 tenth times any [MASK] on the place value chart moves it one place value to the right. #from https://www.engageny.org/resource/grade-5-mathematics-module-1