BARTpho
概述
BARTpho 模型由 Nguyen Luong Tran、Duong Minh Le 和 Dat Quoc Nguyen 在 BARTpho:越南语预训练序列到序列模型 中提出。
论文摘要如下:
我们提出了 BARTpho 以及两个版本——BARTpho_word 和 BARTpho_syllable——这是第一个公开发布的针对越南语预训练的大规模单语序列到序列模型。我们的 BARTpho 使用了序列到序列降噪模型 BART 的“大型”架构和预训练方案,因此特别适用于生成式 NLP 任务。在越南语文本摘要的下游任务上的实验表明,在自动和人工评估中,我们的 BARTpho 都优于强大的基线 mBART,并且提高了最先进水平。我们发布 BARTpho 以促进未来越南语生成式 NLP 任务的研究和应用。
该模型由 dqnguyen 贡献。原始代码可以在这里找到 here。
使用示例
>>> import torch
>>> from transformers import AutoModel, AutoTokenizer
>>> bartpho = AutoModel.from_pretrained("vinai/bartpho-syllable")
>>> tokenizer = AutoTokenizer.from_pretrained("vinai/bartpho-syllable")
>>> line = "Chúng tôi là những nghiên cứu viên."
>>> input_ids = tokenizer(line, return_tensors="pt")
>>> with torch.no_grad():
... features = bartpho(**input_ids) # Models outputs are now tuples
>>> # With TensorFlow 2.0+:
>>> from transformers import TFAutoModel
>>> bartpho = TFAutoModel.from_pretrained("vinai/bartpho-syllable")
>>> input_ids = tokenizer(line, return_tensors="tf")
>>> features = bartpho(**input_ids)
使用技巧
- 遵循 mBART,BARTpho 使用 BART 的“large”架构,并在编码器和解码器的顶部添加了一个层归一化层。因此,在将 BART 文档 中的使用示例应用于 BARTpho 时,应通过将 BART 专用类替换为 mBART 专用类来进行调整。例如
>>> from transformers import MBartForConditionalGeneration
>>> bartpho = MBartForConditionalGeneration.from_pretrained("vinai/bartpho-syllable")
>>> TXT = "Chúng tôi là <mask> nghiên cứu viên."
>>> input_ids = tokenizer([TXT], return_tensors="pt")["input_ids"]
>>> logits = bartpho(input_ids).logits
>>> masked_index = (input_ids[0] == tokenizer.mask_token_id).nonzero().item()
>>> probs = logits[0, masked_index].softmax(dim=0)
>>> values, predictions = probs.topk(5)
>>> print(tokenizer.decode(predictions).split())
- 此实现仅用于分词:“monolingual_vocab_file” 包含从预训练的 SentencePiece 模型“vocab_file”中提取的越南语专用类型,该模型可从多语言 XLM-RoBERTa 获得。其他语言,如果使用此预训练的多语言 SentencePiece 模型“vocab_file”进行子词分割,则可以使用 BartphoTokenizer 及其自己的语言专用“monolingual_vocab_file”。
BartphoTokenizer
class transformers.BartphoTokenizer
< 源代码 >( vocab_file monolingual_vocab_file bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' sp_model_kwargs: Optional = None **kwargs )
参数
- vocab_file (
str
) — 词汇文件路径。此词汇表是来自多语言 XLM-RoBERTa 的预训练 SentencePiece 模型,也用于 mBART,包含 250K 个类型。 - monolingual_vocab_file (
str
) — 单语词汇文件路径。此单语词汇表包含从 250K 个类型的多语言词汇 vocab_file 中提取的越南语专用类型。 - bos_token (
str
, 可选, 默认为"<s>"
) — 在预训练期间使用的序列开始标记。可用作序列分类标记。在使用特殊标记构建序列时,这不是用于序列开头的标记。使用的标记是
cls_token
。 - eos_token (
str
, 可选, 默认为"</s>"
) — 序列结束标记。在使用特殊标记构建序列时,这不是用于序列结束的标记。使用的标记是
sep_token
。 - sep_token (
str
, 可选, 默认为"</s>"
) — 分隔符标记,用于从多个序列构建序列时,例如序列分类的两个序列或问答的文本和问题。它也用作使用特殊标记构建的序列的最后一个标记。 - cls_token (
str
, 可选,默认为"<s>"
) — 用于执行序列分类(对整个序列进行分类,而不是对每个标记进行分类)时的分类标记。它是使用特殊标记构建时序列的第一个标记。 - unk_token (
str
, 可选,默认为"<unk>"
) — 未知标记。不在词汇表中的标记无法转换为 ID,而是设置为此标记。 - pad_token (
str
, 可选,默认为"<pad>"
) — 用于填充的标记,例如在批处理不同长度的序列时。 - mask_token (
str
, 可选,默认为"<mask>"
) — 用于掩盖值的标记。这是使用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。 - sp_model_kwargs (
dict
, 可选) — 将传递给SentencePieceProcessor.__init__()
方法。除其他事项外,可以使用 SentencePiece 的 Python 包装器 设置:-
enable_sampling
:启用子词正则化。 -
nbest_size
:一元采样的参数。对于 BPE-Dropout 无效。nbest_size = {0,1}
:不执行采样。nbest_size > 1
:从 nbest_size 结果中采样。nbest_size < 0
:假设 nbest_size 是无限的,并使用前向过滤和后向采样算法从所有假设(格)中采样。
-
alpha
:一元采样的平滑参数,以及 BPE-dropout 的合并操作的 dropout 概率。
-
- sp_model (
SentencePieceProcessor
) — 用于每次转换(字符串、标记和 ID)的 SentencePiece 处理器。
改编自 XLMRobertaTokenizer。基于 SentencePiece。
此标记器继承自 PreTrainedTokenizer,其中包含大多数主要方法。有关这些方法的更多信息,用户应参考此超类。
build_inputs_with_special_tokens
< 源代码 >( token_ids_0: List token_ids_1: Optional = None ) → List[int]
通过连接和添加特殊标记,从序列或一对序列构建用于序列分类任务的模型输入。BARTPho 序列具有以下格式
- 单个序列:
<s> X </s>
- 序列对:
<s> A </s></s> B </s>
将一系列标记(子词的字符串)转换为单个字符串。
create_token_type_ids_from_sequences
< 源代码 >( token_ids_0: List token_ids_1: Optional = None ) → List[int]
从传递的两个序列中创建一个掩码,用于序列对分类任务。BARTPho 不使用 token type ids,因此返回一个零列表。
get_special_tokens_mask
< 源代码 >( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → List[int]
从没有添加特殊令牌的令牌列表中检索序列 ID。当使用分词器 prepare_for_model
方法添加特殊令牌时,会调用此方法。