HuggingFace镜像/roberta_large
模型介绍文件和版本分析
下载使用量0

模型说明

RoBERTa 是一种基于 Transformer 的模型,它通过自监督学习的方式在大规模英文语料库上进行预训练。这意味着它仅使用原始文本进行预训练,无需人工对文本进行任何形式的标注(这也是它能够利用大量公开可用数据的原因),并通过自动流程从这些文本中生成输入和标签。

更准确地说,它是通过掩码语言模型(MLM)目标进行预训练的。对于一个句子,模型会随机掩码输入中 15% 的词语,然后将整个掩码后的句子输入模型,模型需要预测出这些被掩码的词语。这与传统的循环神经网络(RNNs)通常逐个处理词语的方式不同,也与像 GPT 这样的自回归模型在内部对未来标记进行掩码的方式不同。这种方式使模型能够学习句子的双向表示。

通过这种方式,模型学习到英语语言的内部表示,该表示可用于提取对下游任务有用的特征:例如,如果你有一个带标签的句子数据集,你可以使用 BERT 模型生成的特征作为输入来训练一个标准分类器。

这种偏差也会影响该模型的所有微调版本。

训练数据

RoBERTa 模型的预训练数据是五个数据集的集合:

  • [BookCorpus],一个包含 11,038 本未出版书籍的数据集;
  • [English Wikipedia](不包括列表、表格和标题);
  • [CC-News],一个包含 6300 万篇英文新闻文章的数据集,这些文章是在 2016 年 9 月至 2019 年 2 月期间爬取的。
  • [OpenWebText],一个开源的 WebText 数据集复现版本,该数据集曾用于训练 GPT-2,
  • [Stories],一个包含 CommonCrawl 数据子集的数据集,该子集经过筛选以匹配 Winograd 模式的故事式风格。

这些数据集的总大小为 160GB 文本。

与 openMind 配合使用

环境变量

# source environment variable
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export OPENMIND_FRAMEWORK=pt

pip 安装 openMind 库

OpenMind 库可通过 pip 进行安装,请根据实际环境选择相应命令进行安装。

需要注意的是,由于 torch npu 依赖于 torch,在 aarch64 环境下可通过 pip 直接安装,而在 x86 环境下则需要通过特定 URL 下载 CPU 版本,因此两种环境下的安装命令有所不同。具体安装代码已在下文进行区分呈现。

# aarch64
pip install openmind[all]
# x86
pip install openmind[all] --extra-index-url https://download.pytorch.org/whl/cpu

推理

from openmind import AutoTokenizer, AutoModelForCausalLM
import torch
import torch_npu

model_dir = "HangZhou_Ascend/roberta_large"
tokenizer = AutoTokenizer.from_pretrained(model_dir, device_map="auto", trust_remote_code=True)
# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and might cause OOM Error.
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto",  trust_remote_code=True, torch_dtype=torch.float16)
model = model.eval()
response, history = model.chat(tokenizer, "1+1=", history=[], meta_instruction="")
print(response)

预处理

文本使用字节级别的字节对编码(BPE)进行分词,词汇表大小为50,000。模型的输入采用512个连续的token片段,这些片段可能跨越多个文档。新文档的开头用 <s> 标记,结尾用 </s> 标记。

每个句子的掩码处理细节如下:

  • 15%的token被掩码。
  • 在80%的情况下,被掩码的token替换为 <mask>。
  • 在10%的情况下,被掩码的token替换为一个随机的(不同的)token。
  • 在剩余10%的情况下,被掩码的token保持不变。

与BERT不同,掩码是在预训练过程中动态进行的(例如,在每个epoch都会变化,并非固定不变)。

预训练

该模型在1024块V100 GPU上进行训练,共训练500K步,批处理大小为8K,序列长度为512。使用的优化器是Adam,学习率为4e-4,$\beta_{1} = 0.9$,$\beta_{2} = 0.98$,$\epsilon = 1e-6$,权重衰减为0.01,学习率预热30,000步,之后学习率线性衰减。

评估结果

在下游任务上进行微调后,该模型取得了以下结果:

GLUE测试结果:

任务MNLIQQPQNLISST-2CoLASTS-BMRPCRTE
90.292.294.796.468.096.490.986.6