HerBERT
概述
HerBERT模型由Piotr Rybak、Robert Mroczkowski、Janusz Tracz和Ireneusz Gawlik在KLEJ: Comprehensive Benchmark for Polish Language Understanding中提出。它是一个基于BERT的语言模型,使用波兰语语料库进行训练,仅使用MLM目标,并对整个单词进行动态掩码。
论文的摘要如下:
近年来,一系列基于Transformer的模型在通用自然语言理解(NLU)任务中取得了重大进展。如果没有通用的NLU基准测试,这种快速的研究步伐是不可能实现的,这些基准测试允许对所提出的方法进行公平比较。然而,这些基准测试仅适用于少数语言。为了缓解这一问题,我们引入了一个全面的波兰语理解多任务基准测试,并附带一个在线排行榜。它由一系列多样化的任务组成,这些任务改编自现有的命名实体识别、问答、文本蕴含等数据集。我们还引入了一个新的电子商务领域的情感分析任务,名为Allegro Reviews(AR)。为了确保一个共同的评估方案并推广能够泛化到不同NLU任务的模型,该基准测试包括了来自不同领域和应用的数据集。此外,我们发布了HerBERT,这是一个专门为波兰语训练的基于Transformer的模型,它在平均性能上表现最佳,并在九个任务中的三个任务中取得了最佳结果。最后,我们提供了一个广泛的评估,包括几个标准基线和最近提出的多语言基于Transformer的模型。
该模型由rmroczkowski贡献。原始代码可以在这里找到。
使用示例
>>> from transformers import HerbertTokenizer, RobertaModel
>>> tokenizer = HerbertTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1")
>>> model = RobertaModel.from_pretrained("allegro/herbert-klej-cased-v1")
>>> encoded_input = tokenizer.encode("Kto ma lepszą sztukę, ma lepszy rząd – to jasne.", return_tensors="pt")
>>> outputs = model(encoded_input)
>>> # HerBERT can also be loaded using AutoTokenizer and AutoModel:
>>> import torch
>>> from transformers import AutoModel, AutoTokenizer
>>> tokenizer = AutoTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1")
>>> model = AutoModel.from_pretrained("allegro/herbert-klej-cased-v1")
Herbert 的实现与 BERT
相同,除了分词方法。请参阅 BERT 文档 获取 API 参考和示例。
HerbertTokenizer
类 transformers.HerbertTokenizer
< source >( vocab_file merges_file tokenizer_file = None cls_token = '' unk_token = '' do_lowercase_and_remove_accent = False additional_special_tokens = ['
为HerBERT构建一个BPE分词器。
特点:
使用BERT的预分词器:BaseTokenizer在空格和标点符号上分割标记。每个标点符号的出现将被单独处理。
这种预分词的输入是BPE子词分词的
此分词器继承自XLMTokenizer,其中包含了大部分方法。用户应参考超类以获取有关方法的更多信息。
build_inputs_with_special_tokens
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
通过连接和添加特殊标记,从序列或序列对构建序列分类任务的模型输入。一个XLM序列具有以下格式:
- 单一序列:
X - 序列对:
AB
将一系列标记(字符串)转换为单个字符串。
create_token_type_ids_from_sequences
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
从传递给序列对分类任务的两个序列中创建一个掩码。一个XLM序列
如果 token_ids_1
是 None
,此方法仅返回掩码的第一部分(0s)。
get_special_tokens_mask
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None already_has_special_tokens: bool = False ) → List[int]
从没有添加特殊标记的标记列表中检索序列ID。当使用标记器的prepare_for_model
方法添加特殊标记时,会调用此方法。
HerbertTokenizerFast
类 transformers.HerbertTokenizerFast
< source >( vocab_file = None merges_file = None tokenizer_file = None cls_token = '' unk_token = '
为HerBERT构建一个“快速”的BPE分词器(由HuggingFace的tokenizers库支持)。
特点:
- 使用BERT的预分词器:BertPreTokenizer在空格和标点符号上分割标记。每个标点字符的出现将被单独处理。
此分词器继承自PreTrainedTokenizer,其中包含了大部分方法。用户应参考超类以获取有关方法的更多信息。
build_inputs_with_special_tokens
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
通过连接和添加特殊标记,从序列或序列对构建序列分类任务的模型输入。像BERT序列一样,HerBERT序列具有以下格式:
- 单一序列:
X - 序列对:
AB
create_token_type_ids_from_sequences
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None ) → List[int]
从传递给的两个序列创建一个掩码,用于序列对分类任务。HerBERT,像
get_special_tokens_mask
< source >( token_ids_0: typing.List[int] token_ids_1: typing.Optional[typing.List[int]] = None already_has_special_tokens: bool = False ) → List[int]
从没有添加特殊标记的标记列表中检索序列ID。当使用标记器的prepare_for_model
方法添加特殊标记时,会调用此方法。