Transformers 文档

mLUKE

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

mLUKE

PyTorch

概述

mLUKE 模型由 Ryokan Ri、Ikuya Yamada 和 Yoshimasa Tsuruoka 在mLUKE: The Power of Entity Representations in Multilingual Pretrained Language Models 中提出。 它是 LUKE 模型 的多语言扩展,基于 XLM-RoBERTa 训练。

它基于 XLM-RoBERTa,并添加了实体嵌入,这有助于提高在各种下游任务中的性能,这些任务涉及对实体的推理,例如命名实体识别、抽取式问答、关系分类、完形填空式知识补全。

该论文的摘要如下:

最近的研究表明,通过来自维基百科实体的跨语言对齐信息,可以有效地改进多语言预训练语言模型。然而,现有方法仅在预训练中利用实体信息,而没有在下游任务中显式地使用实体。在本研究中,我们探索了利用实体表示进行下游跨语言任务的有效性。我们训练了一个包含 24 种语言和实体表示的多语言语言模型,并表明该模型在各种跨语言迁移任务中始终优于基于词的预训练模型。我们还分析了该模型,关键的见解是将实体表示纳入输入使我们能够提取更多与语言无关的特征。我们还使用 mLAMA 数据集,通过多语言完形填空提示任务评估了该模型。我们表明,与仅使用词表示相比,基于实体的提示更可能引出正确的 factual knowledge。

此模型由 ryo0634 贡献。 原始代码可以在此处找到。

使用技巧

可以直接将 mLUKE 的权重插入到 LUKE 模型中,如下所示

from transformers import LukeModel

model = LukeModel.from_pretrained("studio-ousia/mluke-base")

请注意,mLUKE 有其自己的 tokenizer,MLukeTokenizer。 您可以按如下方式初始化它

from transformers import MLukeTokenizer

tokenizer = MLukeTokenizer.from_pretrained("studio-ousia/mluke-base")

由于 mLUKE 的架构与 LUKE 的架构等效,因此可以参考 LUKE 的文档页面 以获取所有技巧、代码示例和 notebook。

MLukeTokenizer

class transformers.MLukeTokenizer

< >

( vocab_file entity_vocab_file bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' task = None max_entity_length = 32 max_mention_length = 30 entity_token_1 = '<ent>' entity_token_2 = '<ent2>' entity_unk_token = '[UNK]' entity_pad_token = '[PAD]' entity_mask_token = '[MASK]' entity_mask2_token = '[MASK2]' sp_model_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None **kwargs )

参数

  • vocab_file (str) — 词汇表文件的路径。
  • entity_vocab_file (str) — 实体词汇表文件的路径。
  • bos_token (str, optional, defaults to "<s>") — 序列开始标记,在预训练期间使用。 可以用作序列分类器标记。

    当使用特殊标记构建序列时,这不是用于序列开始的标记。 使用的标记是 cls_token

  • eos_token (str, optional, defaults to "</s>") — 序列结束标记。

    当使用特殊标记构建序列时,这不是用于序列结束的标记。 使用的标记是 sep_token

  • sep_token (str, optional, defaults to "</s>") — 分隔符标记,用于从多个序列构建序列时,例如用于序列分类的两个序列,或用于问答的文本和问题。 它也用作使用特殊标记构建的序列的最后一个标记。
  • cls_token (str, optional, defaults to "<s>") — 分类器标记,用于进行序列分类(对整个序列而不是每个标记进行分类)。 当使用特殊标记构建时,它是序列的第一个标记。
  • unk_token (str, optional, defaults to "<unk>") — 未知标记。 词汇表中没有的标记无法转换为 ID,而是设置为此标记。
  • pad_token (str, optional, defaults to "<pad>") — 用于填充的标记,例如在批处理不同长度的序列时。
  • mask_token (str, optional, defaults to "<mask>") — 用于屏蔽值的标记。 这是使用 masked language modeling 训练此模型时使用的标记。 这是模型将尝试预测的标记。
  • task (str, optional) — 您要为其准备序列的任务。 "entity_classification""entity_pair_classification""entity_span_classification" 之一。 如果您指定此参数,则实体序列将根据给定的实体 span 自动创建。
  • max_entity_length (int, optional, defaults to 32) — entity_ids 的最大长度。
  • max_mention_length (int, optional, defaults to 30) — 实体 span 内的最大标记数。
  • entity_token_1 (str, optional, defaults to <ent>) — 用于表示词标记序列中实体 span 的特殊标记。 仅当 task 设置为 "entity_classification""entity_pair_classification" 时才使用此标记。
  • entity_token_2 (str, optional, defaults to <ent2>) — 用于表示词标记序列中实体 span 的特殊标记。 仅当 task 设置为 "entity_pair_classification" 时才使用此标记。
  • additional_special_tokens (List[str], optional, defaults to ["<s>NOTUSED", "</s>NOTUSED"]) — tokenizer 使用的其他特殊标记。
  • sp_model_kwargs (dict, optional) — 将传递给 SentencePieceProcessor.__init__() 方法。 SentencePiece 的 Python 包装器 可用于设置:

    • enable_sampling:启用子词正则化。

    • nbest_size:unigram 的采样参数。 对 BPE-Dropout 无效。

      • nbest_size = {0,1}:不执行采样。
      • nbest_size > 1:从 nbest_size 结果中采样。
      • nbest_size < 0:假设 nbest_size 是无限的,并使用前向滤波和后向采样算法从所有假设(lattice)中采样。
    • alpha:unigram 采样的平滑参数,以及 BPE-dropout 的合并操作的 dropout 概率。

  • sp_model (SentencePieceProcessor) — 用于每次转换(字符串、标记和 ID)的 SentencePiece 处理器。

改编自 XLMRobertaTokenizerLukeTokenizer。 基于 SentencePiece

此 tokenizer 继承自 PreTrainedTokenizer,其中包含大多数主要方法。 用户应参考此超类以获取有关这些方法的更多信息。

__call__

< >

( text: typing.Union[str, typing.List[str]] text_pair: typing.Union[str, typing.List[str], NoneType] = None entity_spans: typing.Union[typing.List[typing.Tuple[int, int]], typing.List[typing.List[typing.Tuple[int, int]]], NoneType] = None entity_spans_pair: typing.Union[typing.List[typing.Tuple[int, int]], typing.List[typing.List[typing.Tuple[int, int]]], NoneType] = None entities: typing.Union[typing.List[str], typing.List[typing.List[str]], NoneType] = None entities_pair: typing.Union[typing.List[str], typing.List[typing.List[str]], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy] = None max_length: typing.Optional[int] = None max_entity_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: typing.Optional[bool] = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) BatchEncoding

参数

  • text (str, List[str], List[List[str]]) — 要编码的序列或序列批次。每个序列必须是字符串。请注意,此分词器不支持基于预分词字符串的分词。
  • text_pair (str, List[str], List[List[str]]) — 要编码的成对序列或成对序列批次。每个序列必须是字符串。请注意,此分词器不支持基于预分词字符串的分词。
  • entity_spans (List[Tuple[int, int]], List[List[Tuple[int, int]]], optional) — 要编码的实体跨度序列或实体跨度序列批次。每个序列由元组组成,每个元组包含两个整数,表示基于字符的实体的起始和结束位置。 如果您在构造函数中将 "entity_classification""entity_pair_classification" 指定为 task 参数,则每个序列的长度必须分别为 1 或 2。 如果您指定 entities,则每个序列的长度必须等于每个 entities 序列的长度。
  • entity_spans_pair (List[Tuple[int, int]], List[List[Tuple[int, int]]], optional) — 要编码的成对实体跨度序列或成对实体跨度序列批次。每个序列由元组组成,每个元组包含两个整数,表示基于字符的实体的起始和结束位置。 如果您在构造函数中指定了 task 参数,则此参数将被忽略。 如果您指定 entities_pair,则每个序列的长度必须等于每个 entities_pair 序列的长度。
  • entities (List[str], List[List[str]], optional) — 要编码的实体序列或实体序列批次。每个序列由表示实体的字符串组成,即特殊实体(例如,[MASK])或维基百科的实体标题(例如,Los Angeles)。 如果您在构造函数中指定了 task 参数,则此参数将被忽略。 每个序列的长度必须等于每个 entity_spans 序列的长度。 如果您指定了 entity_spans 而未指定此参数,则实体序列或实体序列批次将通过填充 [MASK] 实体自动构建。
  • entities_pair (List[str], List[List[str]], optional) — 要编码的成对实体序列或成对实体序列批次。每个序列由表示实体的字符串组成,即特殊实体(例如,[MASK])或维基百科的实体标题(例如,Los Angeles)。 如果您在构造函数中指定了 task 参数,则此参数将被忽略。 每个序列的长度必须等于每个 entity_spans_pair 序列的长度。 如果您指定了 entity_spans_pair 而未指定此参数,则实体序列或实体序列批次将通过填充 [MASK] 实体自动构建。
  • max_entity_length (int, optional) — entity_ids 的最大长度。
  • add_special_tokens (bool, optional, defaults to True) — 是否在编码序列时添加特殊 token。 这将使用底层的 PretrainedTokenizerBase.build_inputs_with_special_tokens 函数,该函数定义了哪些 token 会自动添加到 input ids 中。 如果您想自动添加 boseos token,这将非常有用。
  • padding (bool, str or PaddingStrategy, optional, defaults to False) — 激活并控制填充。 接受以下值:

    • True'longest': 填充到批次中最长序列的长度(如果仅提供单个序列,则不填充)。
    • 'max_length': 填充到由参数 max_length 指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。
    • False'do_not_pad' (默认): 不填充(即,可以输出具有不同长度序列的批次)。
  • truncation (bool, str or TruncationStrategy, optional, defaults to False) — 激活并控制截断。 接受以下值:

    • True'longest_first': 截断为由参数 max_length 指定的最大长度,如果未提供该参数,则截断为模型可接受的最大输入长度。 如果提供了一对序列(或成对批次),这将逐个 token 截断,从序列对中最长的序列中删除一个 token。
    • 'only_first': 截断为由参数 max_length 指定的最大长度,如果未提供该参数,则截断为模型可接受的最大输入长度。 如果提供了一对序列(或成对批次),这将仅截断序列对中的第一个序列。
    • 'only_second': 截断为由参数 max_length 指定的最大长度,如果未提供该参数,则截断为模型可接受的最大输入长度。 如果提供了一对序列(或成对批次),这将仅截断序列对中的第二个序列。
    • False'do_not_truncate' (默认): 不截断(即,可以输出序列长度大于模型最大允许输入大小的批次)。
  • max_length (int, optional) — 控制截断/填充参数之一使用的最大长度。

    如果未设置或设置为 None,如果截断/填充参数之一需要最大长度,则将使用预定义的模型最大长度。 如果模型没有特定的最大输入长度(如 XLNet),则将停用截断/填充到最大长度。

  • stride (int, optional, defaults to 0) — 如果与 max_length 一起设置为数字,则当 return_overflowing_tokens=True 时返回的溢出 token 序列将包含来自截断序列末尾的一些 token,以便在截断序列和溢出序列之间提供一些重叠。 此参数的值定义了重叠 token 的数量。
  • is_split_into_words (bool, optional, defaults to False) — 输入是否已预分词(例如,拆分为单词)。 如果设置为 True,则分词器假定输入已拆分为单词(例如,通过在空格上拆分),它将对这些单词进行分词。 这对于 NER 或 token 分类非常有用。
  • pad_to_multiple_of (int, optional) — 如果设置,则将序列填充到提供的值的倍数。 需要激活 padding。 这对于在计算能力 >= 7.5 (Volta) 的 NVIDIA 硬件上启用 Tensor Core 的使用尤其有用。
  • padding_side (str, optional) — 模型应在其上应用填充的一侧。 应从 [‘right’, ‘left’] 中选择。 默认值从同名的类属性中选取。
  • return_tensors (str or TensorType, optional) — 如果设置,将返回 tensor 而不是 python 整数列表。 可接受的值为:

    • 'tf': 返回 TensorFlow tf.constant 对象。
    • 'pt': 返回 PyTorch torch.Tensor 对象。
    • 'np': 返回 Numpy np.ndarray 对象。
  • return_token_type_ids (bool, optional) — 是否返回 token 类型 ID。 如果保留为默认值,将根据特定分词器的默认值返回 token 类型 ID,由 return_outputs 属性定义。

    什么是 token 类型 ID?

  • return_attention_mask (bool, optional) — 是否返回 attention mask。 如果保留为默认值,将根据特定分词器的默认值返回 attention mask,由 return_outputs 属性定义。

    什么是 attention mask?

  • return_overflowing_tokens (bool, optional, defaults to False) — 是否返回溢出的 token 序列。 如果提供了一对输入 id 序列(或成对批次),并且 truncation_strategy = longest_firstTrue,则会引发错误,而不是返回溢出的 token。
  • return_special_tokens_mask (bool, optional, defaults to False) — 是否返回特殊 token mask 信息。
  • return_offsets_mapping (bool, optional, defaults to False) — 是否为每个 token 返回 (char_start, char_end)

    这仅在继承自 PreTrainedTokenizerFast 的快速分词器上可用,如果使用 Python 的分词器,此方法将引发 NotImplementedError

  • return_length (bool, optional, defaults to False) — 是否返回编码输入的长度。
  • verbose (bool, optional, defaults to True) — 是否打印更多信息和警告。
  • **kwargs — 传递给 self.tokenize() 方法

返回

BatchEncoding

一个 BatchEncoding,包含以下字段

  • input_ids — 要馈送到模型的 token ID 列表。

    什么是输入 ID?

  • token_type_ids — 要馈送到模型的 token 类型 ID 列表(当 return_token_type_ids=True 或如果 “token_type_ids”self.model_input_names 中时)。

    什么是 token 类型 ID?

  • attention_mask — 指定模型应关注哪些 token 的索引列表(当 return_attention_mask=True 或如果 “attention_mask”self.model_input_names 中时)。

    什么是 attention mask?

  • entity_ids — 要馈送到模型的实体 ID 列表。

    什么是输入 ID?

  • entity_position_ids — 要馈送到模型的输入序列中实体位置的列表。

  • entity_token_type_ids — 要馈送到模型的实体 token 类型 ID 列表(当 return_token_type_ids=True 或如果 “entity_token_type_ids”self.model_input_names 中时)。

    什么是 token 类型 ID?

  • entity_attention_mask — 指定模型应关注哪些实体的索引列表(当 return_attention_mask=True 或如果 “entity_attention_mask”self.model_input_names 中时)。

    什么是 attention mask?

  • entity_start_positions — 单词 token 序列中实体的起始位置列表(当 task="entity_span_classification" 时)。

  • entity_end_positions — 实体在词语 token 序列中的结束位置列表 (当 task="entity_span_classification" 时)。

  • overflowing_tokens — 溢出的 token 序列列表 (当指定了 max_lengthreturn_overflowing_tokens=True 时)。

  • num_truncated_tokens — 被截断的 token 数量 (当指定了 max_lengthreturn_overflowing_tokens=True 时)。

  • special_tokens_mask — 0 和 1 的列表,其中 1 表示添加的特殊 token,0 表示常规序列 token (当 add_special_tokens=Truereturn_special_tokens_mask=True 时)。

  • length — 输入的长度 (当 return_length=True 时)

用于为一个或多个序列或一个或多个序列对进行分词和模型准备的主要方法,取决于您要为哪个任务准备它们。

save_vocabulary

< >

( save_directory: str filename_prefix: typing.Optional[str] = None )

< > Update on GitHub