XLM 预训练模型的使用
Posted wevolf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XLM 预训练模型的使用相关的知识,希望对你有一定的参考价值。
XLM 预训练模型的使用
本文使用的是 Transformer 库的预训练模型, 主要是对 xlm 部分的翻译.
xlm 模型是在 BERT 模型的基础上使用多种语言或者跨语言语料库训练得到的预训练模型, 根据训练数据与训练方法的不同, 有三张预训练模型, 分别是
- a causal language modeling (CLM) objective (next token prediction), 传统的语言模型的训练方式
- a masked language modeling (MLM) objective (Bert-like), 类似于 BERT 的mask 方式, 不同的是输入可以是多个句子
- a Translation Language Modeling (TLM) object (extension of Bert’s MLM to multiple language inputs), 输入是两种语言的并行语料库
Tips:
xlm 在使用时的特点有:
- 模型参数的多样性, 可以是三种模型的任意一个
- 语言的多样性, 使用不同的语料库, 不同的语言
XLM Config (XLM 的配置)
源码中的配置与参数:
class
transformers.``XLMConfig
(vocab_size=30145, emb_dim=2048, n_layers=12, n_heads=16, dropout=0.1, attention_dropout=0.1, gelu_activation=True, sinusoidal_embeddings=False, causal=False, asm=False, n_langs=1, use_lang_emb=True, max_position_embeddings=512, embed_init_std=0.02209708691207961, layer_norm_eps=1e-12, init_std=0.02, bos_index=0, eos_index=1, pad_index=2, unk_index=3, mask_index=5, is_encoder=True, summary_type=‘first‘, summary_use_proj=True, summary_activation=None, summary_proj_to_labels=True, summary_first_dropout=0.1, start_n_top=5, end_n_top=5, mask_token_id=0, lang_id=0, bos_token_id=0, pad_token_id=2, kwargs)**
这是 xlm 模型的配置类, 用于使用特定的参数实例化一个 xlm 模型, 同时定义模型的结构, 对于默认的结构, 得到的模型类似于 xlm-mlm-en-2048 的结构. 这个类是继承自 PretrainedConfig
, 同时可以控制模型的输出, 如果想要获取更多信息, 可以参考 PretrainedConfig
.
下面解释一下这个类的参数与使用方法:
-
vocab_size (
int
, optional, defaults to 30145) – 词典的大小, 定义了对于 xlm 来说, 分词方法使用的是 BPE, 这就表示分词之后的词典的 subword 的总数, 也是在模型的最初结构的 embedding 的输入的向量的长度 -
emb_dim (
int
, optional, defaults to 2048) – encoder 与 pooler 层的维度, 也就是从 embedding 层输出的维度. -
n_layer (
int
, optional, defaults to 12) – Transformer Encoder 层的个数 -
n_head (
int
, optional, defaults to 16) – Transformer encoder 中 self_Attention 的 Attention 的个数 -
dropout (
float
, optional, defaults to 0.1) – 全连接层的 dropout -
attention_dropout (
float
, optional, defaults to 0.1) – Attention 机制的 Dropout -
gelu_activation (
boolean
, optional, defaults toTrue
) – 在 encoder 与 pooler 层的非线性激活函数, 如果是 False, 那么就使用默认的 relu 激活函数 -
sinusoidal_embeddings (
boolean
, optional, defaults toFalse
) – Transformer 的 embedding 阶段使用 sin 的位置编码信息还是绝对位置编码信息, 这里在 Google 的Transformer 模型中使用的是 sin 的位置编码 -
causal (
boolean
, optional, defaults toFalse
) – 对应与 CLM 模型, Attention 机制不是双向的, 而是序列的 -
asm (
boolean
, optional, defaults toFalse
) – 最后的预测层是使用 log softmax 还是线性层 -
n_langs (
int
, optional, defaults to 1) – 模型处理的语言, 1 表示单语语料库 -
use_lang_emb (
boolean
, optional, defaults toTrue
) – 是否使用多语言模型, 使用方法见 the multilingual models page -
max_position_embeddings (
int
, optional, defaults to 512) – 训练模型是使用的句子的最长的长度 -
embed_init_std (
float
, optional, defaults to 2048^-0.5) – 初始化 embedding 矩阵的标准差 -
init_std (
int
, optional, defaults to 50257) – embedding 矩阵以外的参数矩阵的正态分布初始化标准差 -
layer_norm_eps (
float
, optional, defaults to 1e-12) – 归一化层使用的超参数 (epsilon) -
bos_index (
int
, optional, defaults to 0) – 句子的开头在词典中的索引 -
eos_index (
int
, optional, defaults to 1) – 句子的结尾在词典中的索引 -
pad_index (
int
, optional, defaults to 2) – padding 在词典中的索引 -
unk_index (
int
, optional, defaults to 3) – 未知单词在词典中的索引 -
mask_index (
int
, optional, defaults to 5) – mask 标志在词典中的索引 -
is_encoder (
boolean
, optional, defaults toTrue
) – 初始化模型是 Transformer 中的encoder 结构还是 decoder 结构, 在双向的时候是 encoder, 单向的时候是 decoder -
summary_type (
string
, optional, defaults to “first”) –文本分类任务的时候, 在隐藏层采用的 token 的位置, bert 是第一个, xlnet 是最后一个, 将得到的隐藏层状态经过一个全连接层即可完成分类任务,:
- ’last’ => take the last token hidden state (like XLNet)
- ’first’ => take the first token hidden state (like Bert)
- ’mean’ => take the mean of all tokens hidden states
- ’cls_index’ => supply a Tensor of classification token position (GPT/GPT-2)
- ’attn’ => Not implemented now, use multi-head attention
-
lang_id (
int
, optional, defaults to 1) – 生成文本模型时指定一种语言
下面是默认的情况下的例子:
from transformers import XLMConfig, XLMModel
# Initializing a XLM configuration
configuration = XLMConfig()
# Initializing a model from the configuration
model = XLMModel(configuration)
# Accessing the model configuration
configuration = model.config
XLM Tokenizer
xlm 的 BPE 分词
- Moses preprocessing & tokenization 支持大多数模型支持的语言
- 特殊的语言分词器有: Chinese (Jieba), Japanese (KyTea) and Thai (PyThaiNLP)
- 对文本的小写化与正则化
- 使用参数
special_tokens
与函数set_special_tokens
可以添加额外的标志进入词典 - lang2id 属性会映射模型支持的语言及其ID,
- id2lang 会映射 ID及其支持的语言
使用的参数有:
- vocab_file (
string
) – Vocabulary file. - merges_file (
string
) – Merges file. - do_lower_case (
bool
, optional, defaults toTrue
) – 小写化 - remove_space (
bool
, optional, defaults toTrue
) – 去掉开头与末尾的空格 - keep_accents (
bool
, optional, defaults toFalse
) – 标记时是否保留重音符号 - unk_token (
string
, optional, defaults to “”) – 未知单词的默认 index - bos_token (
string
, optional, defaults to “”) – 训练的时候往往使用的是 cls_token - sep_token (
string
, optional, defaults to “”) –句子之间分开的标志 - cls_token (
string
, optional, defaults to “”) – 在进行序列分类时使用的分类器令牌(对整个序列进行分类,而不是按令牌分类)。使用特殊标记构建时,它是序列的第一个标记
以上是关于XLM 预训练模型的使用的主要内容,如果未能解决你的问题,请参考以下文章
论文泛读117通过中文自然语言推理研究多语言预训练语言模型中的迁移学习
tensorflow利用预训练模型进行目标检测:预训练模型的使用