LUKE模型由Ikuya Yamada、Akari Asai、Hiroyuki Shindo、Hideaki Takeda和Yuji Matsumoto在LUKE: 带实体感知自注意力机制的实体上下文化表示一文中提出。它基于RoBERTa,并添加了实体嵌入以及一个实体感知自注意力机制,这有助于提高涉及推理实体的各种下游任务的表现,例如命名实体识别、抽取和完形填空式问答、实体类型和关系分类。
论文的摘要如下
实体表示在涉及实体的自然语言任务中非常有用。在本文中,我们基于双向变换器提出了新的预训练词语和实体上下文化表示。所提出的模型将给定文本中的词语和实体视为独立的标记,并输出它们的上下文化表示。我们的模型使用基于BERT掩码语言模型的新预训练任务进行训练。该任务涉及预测来自Wikipedia的巨大实体注释语料库中的随机掩码词语和实体。我们还提出了一种实体感知的自注意力机制,这是变换器自注意力机制的扩展,在计算注意力分数时考虑标记的类型(词语或实体)。我们提出的模型在广泛的实体相关任务上取得了令人印象深刻的实证性能。特别是在五个知名数据集上获得了最先进的结果:Open Entity(实体类型)、TACRED(关系分类)、CoNLL-2003(命名实体识别)、ReCoRD(填空式问答)和SQuAD 1.1(抽取式问答)。
此模型由ikuyamada和nielsr贡献。原始代码可在此处找到。
使用提示
此实现与RobertaModel相同,增加了实体嵌入以及实体感知的自注意力机制,这提高了涉及实体推理的任务的性能。
LUKE将实体视为输入标记;因此,它将
entity_ids
、entity_attention_mask
、entity_token_type_ids
和entity_position_ids
作为额外的输入。您可以使用LukeTokenizer获取这些内容。LukeTokenizer将
entities
和entity_spans
(输入文本中实体的基于字符的起始和结束位置)作为额外的输入。entities
通常包括[MASK]实体或Wikipedia实体。输入这些实体时的简要描述如下- 将[MASK]实体输入以计算实体表示:[MASK]实体用于掩码预训练期间要预测的实体。当LUKE收到[MASK]实体时,它会尝试通过收集有关该实体的信息来预测原始实体。因此,[MASK]实体可用于处理下游任务,这些任务需要文本中的实体信息,如实体类型、关系分类和命名实体识别。
- 将Wikipedia实体输入以计算知识增强的标记表示:LUKE在预训练期间学习有关Wikipedia实体的丰富信息(或知识),并将该信息存储在其实体嵌入中。使用Wikipedia实体作为输入标记,LUKE输出由这些实体的嵌入中存储的信息丰富的标记表示。这对于需要现实世界知识的任务特别有效,如问答。
对于第一种用法,有三个头部模型
- LukeForEntityClassification,用于对输入文本中单个实体进行分类的任务,例如实体类型,例如Open Entity数据集。此模型在实体表示输出上放置了一个线性头。
- LukeForEntityPairClassification,用于分类两个实体间关系(例如关系分类)的任务,例如TACRED数据集。此模型在两个给定实体的连接输出表示上放置了一个线性头。
- LukeForEntitySpanClassification,用于分类实体跨度序列的任务,例如命名实体识别(NER)。此模型在实体表示输出上放置了一个线性头。您可以通过将文本中所有可能的实体跨度输入到模型中来使用该模型进行NER。
LukeTokenizer有一个
task
参数,您可以通过指定task="entity_classification"
、task="entity_pair_classification"
或task="entity_span_classification"
来轻松创建输入以供这些头模型使用。请参阅每个头模型中的示例代码。
使用示例
>>> from transformers import LukeTokenizer, LukeModel, LukeForEntityPairClassification
>>> model = LukeModel.from_pretrained("studio-ousia/luke-base")
>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-base")
# Example 1: Computing the contextualized entity representation corresponding to the entity mention "Beyoncé"
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [(0, 7)] # character-based entity span corresponding to "Beyoncé"
>>> inputs = tokenizer(text, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
# Example 2: Inputting Wikipedia entities to obtain enriched contextualized representations
>>> entities = [
... "Beyoncé",
... "Los Angeles",
... ] # Wikipedia entity titles corresponding to the entity mentions "Beyoncé" and "Los Angeles"
>>> entity_spans = [(0, 7), (17, 28)] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> inputs = tokenizer(text, entities=entities, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt")
>>> outputs = model(**inputs)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
# Example 3: Classifying the relationship between two entities using LukeForEntityPairClassification head model
>>> model = LukeForEntityPairClassification.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> entity_spans = [(0, 7), (17, 28)] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_idx = int(logits[0].argmax())
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
资源
- 如何使用HuggingFace实现的LUKE进行关系分类的微调示例笔记本
- 展示如何使用LUKE的HuggingFace实现重现论文中报告的成果的笔记本
- 文本分类任务指南
- 标记分类任务指南
- 问答任务指南
- 掩码语言模型任务指南
- 多项选择任务指南
LukeConfig
类 transformers.LukeConfig
< 来源 >( vocab_size = 50267 entity_vocab_size = 500000 hidden_size = 768 entity_emb_size = 256 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 512 type_vocab_size = 2 initializer_range = 0.02 layer_norm_eps = 1e-12 use_entity_aware_attention = True classifier_dropout = None pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 **kwargs )
参数
- vocab_size (
int
, 可选, 默认为50267) — LUKE模型的词汇量。定义了在调用LukeModel
时通过inputs_ids
传入的可表示的不同令牌的数量。 - entity_vocab_size (
int
, 可选, 默认为500000) — LUKE模型中的实体词汇量。定义了在调用LukeModel
时通过entity_ids
传入的可表示的不同实体的数量。 - hidden_size (
int
, 可选, 默认为768) — 编码层和池化层的维度。 - entity_emb_size (
int
, 可选, 默认为 256) — 实体嵌入的维度数。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - intermediate_size (
int
, 可选, 默认为 3072) — Transformer 编码器中“中间”层(通常命名为前馈层)的维度。 - hidden_act (
str
或Callable
,可选,默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持“gelu”
,“relu”
,“silu”
和“gelu_new”
。 - hidden_dropout_prob (
float
,可选,默认为 0.1) — 嵌入层、编码器、池化器中所有全连接层的dropout概率。 - attention_probs_dropout_prob (
float
,可选,默认为 0.1) — 注意力概率的dropout比率。 - max_position_embeddings (
int
,可选,默认为 512)— 此模型可能使用的最大序列长度。通常设置为较大的值以防万一(例如,512 或 1024 或 2048)。 - type_vocab_size (
int
,可选,默认为 2)— 在调用 LukeModel 时传入的token_type_ids
的词汇表大小。 - initializer_range (
float
,可选,默认为 0.02)— 初始化所有权重矩阵的截尾正态初始化器的标准差。 - layer_norm_eps (
浮点数
,可选,默认为 1e-12) — 层归一化层使用的 epsilon 值。 - use_entity_aware_attention (
布尔值
,可选,默认为True
) — 模型是否使用在 LUKE: Deep Contextualized Entity Representations with Entity-aware Self-attention (Yamada et al.) 中提出的实体感知自注意力机制。 - classifier_dropout (
浮点数
,可选) — 分类头的丢弃率。 - pad_token_id (
整数
,可选,默认为 1) — 填充标记的 id。 - bos_token_id (
int
, 可选, 默认为0) — 数据流开始标记id。 - eos_token_id (
int
, 可选, 默认为2) — 数据流结束标记id。
这是用于存储LukeModel配置的配置类。它用于根据指定的参数实例化LUKE模型,定义模型架构。使用默认值实例化配置将产生与LUKE studio-ousia/luke-base架构相似的配置。
配置对象继承自PretrainedConfig并可用于控制模型输出。有关更多信息,请参阅PretrainedConfig的文档。
LukeTokenizer
类 transformers.LukeTokenizer
< 源代码 >( vocab_file merges_file entity_vocab_file 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]' errors = 'replace' bos_token = '<s>' eos_token = '</s>' sep_token = '</s>' cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' add_prefix_space = False **kwargs )
参数
- vocab_file (
str
) — 词汇文件路径。 - merges_file (
str
) — 合并文件路径。 - entity_vocab_file (
str
) — 实体词汇文件路径。 - task (
str
, 可选) — 您想准备序列的任务。可以是"entity_classification"
、"entity_pair_classification"
或"entity_span_classification"
之一。如果指定此参数,将根据给定的实体跨度自动创建实体序列。 - max_entity_length (
int
, 可选, 默认为32) —entity_ids
的最大长度。 - max_mention_length (
int
, 可选, 默认为30) — 实体span内的最大token数。 - entity_token_1 (
str
, 可选, 默认为<ent>
) — 在单词token序列中用来表示实体span的特殊token。仅在将task
设置为"entity_classification"
或"entity_pair_classification"
时使用。 - entity_token_2 (
str
, 可选, 默认为<ent2>
) — 在单词token序列中用来表示实体span的特殊token。仅在将task
设置为"entity_pair_classification"
时使用。 - errors (
str
, 可选, 默认为"replace"
) — 解码字节为 UTF-8 时的处理模式。更多信息请参见 bytes.decode。 - bos_token (
str
, 可选, 默认为"<s>"
) — 预训练期间使用的序列开始标记。可以用作序列分类标记。 - eos_token (
str
, 可选, 默认为"</s>"
) — 序列结束标记。 - sep_token (
str
, 可选,默认为"</s>"
) — 分隔符标记,用于从多个序列构建一个序列时,例如用于序列分类的两种序列或文本和问题的问答。它也是使用特殊标记构建的序列的最后一个标记。 - cls_token (
str
, 可选,默认为"<s>"
) — 用于序列分类(全序列分类而不是按标记分类)的分类标记。当使用特殊标记构建序列时,它是序列的第一个标记。 - unk_token (
str
, 可选,默认为"<unk>"
) — 未知标记。不在词汇表中的标记无法转换为ID,因此设置为该标记。 - pad_token (
str
, 可选, 默认为"<pad>"
) — 用于填充的标记,例如在将不同长度的序列批处理时使用。 - mask_token (
str
, 可选, 默认为"<mask>"
) — 用于遮罩值的标记。这是在用掩码语言建模训练此模型时使用的标记。这是模型将尝试预测的标记。 - add_prefix_space (
bool
, 可选, 默认为False
) — 是否在输入前添加空格。这允许将首词视为其他任何词一样对待。(LUKE词元器通过前面的空格检测单词的开始)。
使用字节级字节对编码构建LUKE词元器,该词元器是从GPT-2词元器衍生而来的。
此词元器已经过训练,将空格视为标记的一部分(有点像sentencepiece),因此单词将被编码为不
管它是在句子的开头(没有空格)还是不在开头
>>> from transformers import LukeTokenizer
>>> tokenizer = LukeTokenizer.from_pretrained("studio-ousia/luke-base")
>>> tokenizer("Hello world")["input_ids"]
[0, 31414, 232, 2]
>>> tokenizer(" Hello world")["input_ids"]
[0, 20920, 232, 2]
您可以通过在实例化此词元器或对其调用时传递add_prefix_space=True
来避免这种行为,但
由于模型没有被预训练成这种方式,这可能会降低性能。
这个分词器继承自 预训练分词器,其中包含大部分主要方法。用户应参考这个超类以获取关于这些方法更多的信息。它还创建了实体序列,即 entity_ids
、entity_attention_mask
、entity_token_type_ids
和 entity_position_ids
,用于LUKE模型。
__call__
< 源代码 >( text: 联合 text_pair: 联合 = None entity_spans: 联合 = None entity_spans_pair: 联合 = None entities: 联合 = None entities_pair: 联合 = None add_special_tokens: bool = True padding: 联合 = False truncation: 联合 = None max_length: Optional = None max_entity_length: Optional = None stride: int = 0 is_split_into_words: Optional = False pad_to_multiple_of: Optional = None return_tensors: 联合 = None return_token_type_ids: Optional = None return_attention_mask: Optional = 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]]]
, 可选) — 要编码的实体范围序列或序列批次。每个序列由表示实体基于字符的起始和结束位置的整数元组组成。如果将"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])或维基百科的实体标题(例如,洛杉矶)。如果构造函数中指定了task
参数,则忽略此参数。每个序列的长度必须等于 entity_spans 中每个序列的长度。如果没有指定此参数则指定entity_spans
,则自动构建实体序列或实体序列批次,并用[MASK]实体填充。 - entities_pair (
List[str]
,List[List[str]]
, 可选)— 需要编码的实体序列或批量序列。每个序列由表示实体的字符串组成,例如特殊实体(例如,[MASK])或维基百科的实体标题(例如,洛杉矶)。如果在使用构造函数的task
参数时指定该参数,则忽略该参数。每个序列的长度必须等于每个entity_spans_pair
序列的长度。如果没有指定该参数而指定了entity_spans_pair
,则自动构造实体序列或实体序列批量,用 [MASK] 实体填充。 - max_entity_length (
int
, 可选)—entity_ids
的最大长度。 - add_special_tokens (
bool
, 可选,默认值为True
)— 在编码序列时是否添加特殊标记。这将使用底层PretrainedTokenizerBase.build_inputs_with_special_tokens
函数,该函数定义了哪些标记被自动添加到输入 id 中。如果想要自动添加bos
或eos
标记,这很有用。 - padding (
bool
,str
or PaddingStrategy, optional, defaults toFalse
) — 激活并控制填充。接受以下值:True
或'longest'
:填充到批次中最长的序列(或如果没有提供序列则不填充)。'max_length'
:填充到使用参数max_length
指定的最大长度,或者如果未提供该参数,则到模型可接受的最大输入长度。False
或'do_not_pad'
(默认值):不填充(即可以输出包含长度不同的序列的批次)。
- truncation (
bool
,str
or TruncationStrategy, optional, defaults toFalse
) — 激活并控制截断。接受以下值:True
或'longest_first'
:截断到最大长度,该长度由参数max_length
指定,或者如果在未提供参数的情况下,则为模型可接受的最大输入长度。如果提供了序列对(或批次序列对),这将按照最长序列逐个移除令牌进行截断。'only_first'
:截断到最大长度,该长度由参数max_length
指定,或者如果在未提供参数的情况下,则为模型可接受的最大输入长度。如果提供了序列对(或批次序列对),这将只截断第一个序列。'only_second'
:截断到最大长度,该长度由参数max_length
指定,或者如果在未提供参数的情况下,则为模型可接受的最大输入长度。如果提供了序列对(或批次序列对),这将只截断第二个序列。False
或'do_not_truncate'
(默认值):不截断(即可以输出长度大于模型最大可接受输入大小的批次)。
- max_length (
int
, 可选) — 通过截断/填充参数之一控制使用的最大长度。如果未设置或设置为
None
,则会在截断/填充参数需要一个最大长度时使用预定义的模型最大长度。如果模型没有特定的最大输入长度(如 XLNet),则不会启用截断/填充到最大长度。 - stride (
int
, 可选,默认为0) — 如果与max_length
设置一起,当return_overflowing_tokens=True
时返回的溢出标记将包含截断序列末尾的一些标记,以在截断序列和溢出序列之间提供一些重叠。此参数的值定义了重叠标记的数量。 - is_split_into_words (
bool
, 可选,默认为False
) — 是否输入已经被分词(例如,按单词分割)。如果设置为True
,分词器假设输入已经按单词分割(例如,通过空格分割),然后它会进行分词。这在 NER 或标记分类中非常有用。 - pad_to_multiple_of (
int
, 可选) — 如果设置,将序列填充为提供值的倍数。需要激活padding
。这在启用 NVIDIA 硬件上的 Tensor Cores (>= 7.5
Volta) 时特别有用。 - return_tensors (
str
或 TensorType, 可选) — 如果设置,将返回张量而非 Python 整数列表。可接受值有:'tf'
:返回 TensorFlowtf.constant
对象。'pt'
:返回 PyTorchtorch.Tensor
对象。'np'
:返回 Numpynp.ndarray
对象。
- return_token_type_ids (
bool
, 可选) — 是否返回 token 类型 ID。如果留空默认值,将根据特定分词器的默认值返回 token 类型 ID,默认值为return_outputs
属性定义。 - return_attention_mask (
bool
, 可选) —— 是否返回注意力掩码。如果保持默认,将根据特定分词器默认设置返回注意力掩码,此默认设置由return_outputs
属性定义。 - return_overflowing_tokens (
bool
, 可选,默认为False
) —— 是否返回溢出的标记序列。如果提供了具有truncation_strategy = longest_first
或True
的输入ID序列对(或批次对),则将引发错误而不是返回溢出标记。 - return_special_tokens_mask (
bool
, 可选,默认为False
) —— 是否返回特殊标记掩码信息。 - return_offsets_mapping (
bool
, 可选,默认为False
)— 是否返回每个标记的(char_start, char_end)
。 - return_length (
bool
, 可选,默认为False
)— 是否返回编码输入的长度。 - verbose (
bool
, 可选,默认为True
)— 是否打印更多信息和警告。**kwargs—传递给self.tokenize()
方法
返回值
包含以下字段的BatchEncoding:
-
input_ids—模型将输入的标记ID列表。
-
token_type_ids—模型将输入的标记类型ID列表(当
return_token_type_ids=True
或“token_type_ids”在self.model_input_names
中时)。 -
attention_mask—指定模型应关注哪些标记的索引列表(当
return_attention_mask=True
或“attention_mask”在self.model_input_names
中时)。 -
entity_ids—要输入模型的实体ID列表。
-
entity_position_ids—要输入模型的输入序列中的实体位置列表。
-
entity_token_type_ids — 要输入模型中的实体token类型id的列表(当
return_token_type_ids=True
或 “entity_token_type_ids” 包含在self.model_input_names
中时)。 -
entity_attention_mask — 指定模型应关注哪些实体的索引列表(当
return_attention_mask=True
或 “entity_attention_mask” 包含在self.model_input_names
中时)。 -
entity_start_positions — 词token序列中实体起始位置的列表(当
task="entity_span_classification"
时)。 -
entity_end_positions — 词token序列中实体结束位置的列表(当
task="entity_span_classification"
时)。 -
overflowing_tokens — 扩展token序列的列表(当指定了
max_length
且return_overflowing_tokens=True
时)。 -
num_truncated_tokens — 被截断的token数量(当指定了
max_length
且return_overflowing_tokens=True
时)。 -
special_tokens_mask — 由0s和1s组成的列表,1表示已添加特殊token,0表示普通序列token(当
add_special_tokens=True
且return_special_tokens_mask=True
时)。 -
length — 输入的长度(当
return_length=True
时)
主方法,用于对一个或多个序列或一对或多对序列进行标记化并准备模型,具体取决于要进行准备的特定任务。
LukeModel
class transformers.LukeModel
< source >( config: LukeConfig add_pooling_layer: bool = True )
参数
- config (LukeConfig) — Model configuration class with all the parameters of the model. Initializing with a config file does not load the weights associated with the model, only the configuration. Check out the from_pretrained() method to load the model weights.
无具体头部的裸LUKE模型,输出单词和实体的原始隐藏状态。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< 来源 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.BaseLukeModelOutputWithPooling
或 tuple(torch.FloatTensor)
参数
- input_ids (形状为
(batch_size, sequence_length)
的torch.LongTensor
) — 词汇表中的输入序列标记的索引。可以使用 AutoTokenizer 来获取索引。有关详情,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (形状为
(batch_size, sequence_length)
的torch.FloatTensor
,可选) — 避免对填充标记索引执行注意力的掩码。掩码值选择在[0, 1]
:- 1 表示 未遮蔽 的标记,
- 0 表示 遮蔽 的标记。
- token_type_ids (形状为
(batch_size, sequence_length)
的torch.LongTensor
,可选) — 分段标记索引,用于指示输入的第一部分和第二部分。索引选择在[0, 1]
:- 0 对应于 A 句 标记,
- 1 对应于 B 句 标记。
- position_ids (形状为
(batch_size, sequence_length)
的torch.LongTensor
,可选) — 每个输入序列标记在位置嵌入中的位置索引。选择在[0, config.max_position_embeddings - 1]
范围内。 - entity_ids (形状为
(batch_size, entity_length)
的torch.LongTensor
) — 实体词汇中的实体标记索引。可以通过使用AutoTokenizer来获取索引。有关详细信息,请参阅PreTrainedTokenizer.encode()和PreTrainedTokenizer.call()。
- entity_attention_mask (形状为
(batch_size, entity_length)
的torch.FloatTensor
,可选) — 用于避免在填充实体标记索引上执行注意力的掩码。掩码值选择在[0, 1]
:- 1:对未掩码的实体标记,
- 0:对掩码的实体标记。
- entity_token_type_ids (
torch.LongTensor
的形状为(batch_size, entity_length)
,可选) — 用于指示实体输入的第一和第二部分的段标记索引。索引在[0, 1]
范围内:- 0 对应于 部分 A 实体标记,
- 1 对应于 部分 B 实体标记。
- entity_position_ids (
torch.LongTensor
的形状为(batch_size, entity_length, max_mention_length)
,可选) — 用于表示每种输入实体在位置嵌入中的位置的索引。索引在[0, config.max_position_embeddings - 1]
范围内。 - inputs_embeds (
torch.FloatTensor
的形状为(batch_size, sequence_length, hidden_size)
,可选) — 可选择直接传递嵌入表示,而不仅传递input_ids
。当您希望比模型的内部嵌入查找矩阵有更多控制权时,这种方式非常有用,以便将input_ids
索引转换为相关的向量。 - head_mask (
torch.FloatTensor
of shape(num_heads,)
or(num_layers, num_heads)
, 可选) — 要移除自我注意力模块中选定头部的掩码。掩码值选择在[0, 1]
之间:- 1 表示头部未被 掩码,
- 0 表示头部被 掩码。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。详细信息请参考返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。详细信息请参考返回张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回ModelOutput,而不是原始元组。
返回值
transformers.models.luke.modeling_luke.BaseLukeModelOutputWithPooling
或 tuple(torch.FloatTensor)
一个 transformers.models.luke.modeling_luke.BaseLukeModelOutputWithPooling
或 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),根据配置(LukeConfig)和输入包含各种元素。
- last_hidden_state (
torch.FloatTensor
形状(batch_size, sequence_length, hidden_size)
) — 模型最后层的输出隐藏状态序列。 - entity_last_hidden_state (
torch.FloatTensor
形状(batch_size, entity_length, hidden_size)
) — 模型最后层输出实体隐藏状态序列。 - pooler_output (
torch.FloatTensor
形状(batch_size, hidden_size)
) — 序列第1个token(分类token)的最后一层隐藏状态,进一步通过线性层和Tanh激活函数处理。 - hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
的元组(一个用于嵌入输出的输出,一个用于每个层的输出)。每个层的隐藏状态以及初始嵌入输出。 - entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 - attentions (
tuple(torch.FloatTensor)
, optional,当传递output_attentions=True
或当config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length + entity_length, sequence_length+entity_length)
的torch.FloatTensor
的元组(每个层一个)。注意力softmax后的注意力权重,用于在每个自注意力头中计算加权的平均值。
LukeModel 的 forward 方法重写了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
示例
>>> from transformers import AutoTokenizer, LukeModel
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeModel.from_pretrained("studio-ousia/luke-base")
# Compute the contextualized entity representation corresponding to the entity mention "Beyoncé"
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [(0, 7)] # character-based entity span corresponding to "Beyoncé"
>>> encoding = tokenizer(text, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt")
>>> outputs = model(**encoding)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
# Input Wikipedia entities to obtain enriched contextualized representations of word tokens
>>> text = "Beyoncé lives in Los Angeles."
>>> entities = [
... "Beyoncé",
... "Los Angeles",
... ] # Wikipedia entity titles corresponding to the entity mentions "Beyoncé" and "Los Angeles"
>>> entity_spans = [
... (0, 7),
... (17, 28),
... ] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> encoding = tokenizer(
... text, entities=entities, entity_spans=entity_spans, add_prefix_space=True, return_tensors="pt"
... )
>>> outputs = model(**encoding)
>>> word_last_hidden_state = outputs.last_hidden_state
>>> entity_last_hidden_state = outputs.entity_last_hidden_state
LukeForMaskedLM
类 transformers.LukeForMaskedLM
< source >( config )
参数
- config (LukeConfig) — 包含模型所有参数的模型配置类。通过配置文件初始化不加载与模型关联的权重,仅加载配置。请查看from_pretrained()方法以加载模型权重。
LUKE模型,顶部带有语言建模头和实体预测头,用于掩盖语言建模和掩盖实体预测。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< 源代码 >( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None entity_ids: Optional = None entity_attention_mask: Optional = None entity_token_type_ids: Optional = None entity_position_ids: Optional = None labels: Optional = None entity_labels: Optional = None head_mask: Optional = None inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → transformers.models.luke.modeling_luke.LukeMaskedLMOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
形状(batch_size, sequence_length)
) ——词汇表中的输入序列标记的索引。可以通过使用AutoTokenizer 获取索引。有关详细信息,请参阅PreTrainedTokenizer.encode() 和PreTrainedTokenizer.call()。
- attention_mask (可选,形状为
torch.FloatTensor
的(batch_size, sequence_length)
形状) ——用于避免对填充标记索引进行 attention 的遮罩。遮罩值选择在[0, 1]
之间:- 1 表示 未遮罩 的标记,
- 0 表示 遮罩 的标记。
- token_type_ids (可选,形状为
torch.LongTensor
的(batch_size, sequence_length)
形状) ——用于指示输入的各个部分的标记段索引。索引选择在[0, 1]
之间:- 0 对应于 句子 A 标记,
- 1 对应于 句子 B 标记。
- position_ids (形状为
(batch_size, sequence_length)
的torch.LongTensor
,可选)- 每个输入序列token的位置嵌入中的索引。在范围[0, config.max_position_embeddings - 1]
内选择。 - entity_ids (形状为
(batch_size, entity_length)
的torch.LongTensor
)- 实体词汇表中的实体token的索引。可以通过使用AutoTokenizer来获取索引。请参阅PreTrainedTokenizer.encode()和PreTrainedTokenizer.call()以获取详细信息。
- entity_attention_mask (形状为
(batch_size, entity_length)
的torch.FloatTensor
,可选)- 避免在padding实体token索引上执行注意力的掩码。掩码值在[0, 1]
之间选择:- 对于未掩码的实体token,其为1;
- 对于掩码的实体token,其为0。
- entity_token_type_ids (
torch.LongTensor
大小为(batch_size, entity_length)
,可选)— 段落标记索引,用于指示实体标记输入的第一和第二部分。索引选择范围为[0, 1]
:- 0 对应于 部分 A 实体标记,
- 1 对应于 部分 B 实体标记。
- entity_position_ids (
torch.LongTensor
大小为(batch_size, entity_length, max_mention_length)
,可选)— 每个输入实体在位置向量中的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - inputs_embeds (
torch.FloatTensor
大小为(batch_size, sequence_length, hidden_size)
,可选)— 可选,您可以直接传入嵌入式表示,而不是通过传入input_ids
。这在您想要比模型内部的嵌入查找矩阵有更多控制权时非常有用。 - head_mask (
torch.FloatTensor
of shape(num_heads,)
or(num_layers, num_heads)
, 可选) — 用于取消自注意力模块中选中头部的掩码。掩码值在[0, 1]
之间选择:- 1 表示头部 未被掩码,
- 0 表示头部 被掩码。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。请参阅返回张量下的attentions
以获取更多详细信息。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。请参阅返回张量下的hidden_states
以获取更多详细信息。 - return_dict (
bool
, 可选) — 是否返回ModelOutput而不是一个普通的元组。 - labels (
torch.LongTensor
具有形状(batch_size, sequence_length)
,可选) — 为了计算掩盖语言模型损失而提供的标签。索引应在[-100, 0, ..., config.vocab_size]
(见input_ids
文档字符串)之间,具有索引设置为-100
的标记将被忽略(掩盖),仅对位于[0, ..., config.vocab_size]
中的标签的标记进行计算损失。 - entity_labels (
torch.LongTensor
的形状为(batch_size, entity_length)
,可选) — 为了计算掩盖语言模型损失而提供的标签。索引应在[-100, 0, ..., config.vocab_size]
之间(见input_ids
文档字符串)标记具有索引设置为-100
的将被忽略(掩盖),只对具有索引在[0, ..., config.vocab_size]
之间的标记计算损失。
返回值
transformers.models.luke.modeling_luke.LukeMaskedLMOutput
或tuple(torch.FloatTensor)
一个transformers.models.luke.modeling_luke.LukeMaskedLMOutput
或一个包含多个元素且依赖于配置(LukeConfig)和输入的torch.FloatTensor
元组(如果传递了return_dict=False
或当config.return_dict=False
)。
-
损失 (
torch.FloatTensor
形状为(1,)
,可选,当提供labels
时返回) — 掩码语言模型 (MLM) 损失与实体预测损失的总和。 -
mlm_loss (
torch.FloatTensor
形状为(1,)
,可选,当提供labels
时返回) — 掩码语言模型 (MLM) 损失。 -
mep_loss (
torch.FloatTensor
形状为(1,)
,可选,当提供labels
时返回) — 掩码实体预测 (MEP) 损失。 -
logits (
torch.FloatTensor
形状为(batch_size, sequence_length, config.vocab_size)
) — 语言模型头的预测得分(在 SoftMax 之前每个词汇表标记的得分)。 -
entity_logits (
torch.FloatTensor
形状为(batch_size, sequence_length, config.vocab_size)
) — 实体预测头的预测得分(在 SoftMax 之前每个实体词汇表标记的得分)。 -
hidden_states (
tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 嵌入输出加每个层输出torch.FloatTensor
的元组(每个层一个)形状为(batch_size, sequence_length, hidden_size)
。模型在每层输出和初始嵌入输出的隐藏状态。
-
entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 -
attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) — 每个层torch.FloatTensor
的元组(每个层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于自我注意力头中的加权平均。
LukeForMaskedLM 前向方法覆盖了特殊的 __call__
方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
LukeForEntityClassification
类 transformers.LukeForEntityClassification
< 来源 >( config )
参数
- config (LukeConfig) — 模型配置类,包含所有模型参数。使用配置文件初始化不会加载模型相关的权重,只有配置。查看 from_pretrained() 方法来加载模型权重。
具有分类头部的LUKE模型(在第一个实体标记的隐藏状态之上的一层线性层)用于实体分类任务,如Open Entity。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< source >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.EntityClassificationOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
形状(batch_size, sequence_length)
) — 输入序列token在词汇表中的索引。索引可以通过 AutoTokenizer 获取。更详细的信息请查看 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
的形状为(batch_size, sequence_length)
,可选) — 用于避免对填充标记索引执行注意力的掩码。掩码值选择在[0, 1]
中:- 1 表示 未掩码 的标记,
- 0 表示 掩码 的标记。
- token_type_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
,可选) — 用于指示输入第一和第二部分的段标记索引。索引在[0, 1]
中选择:- 0 对应于 句子 A 标记,
- 1 对应于 句子 B 标记。
- position_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的索引。选择在范围[0, config.max_position_embeddings - 1]
中。 - entity_ids (
torch.LongTensor
形状(batch_size, entity_length)
) — 实体词汇中实体标记的索引。可以使用 AutoTokenizer 获取索引。详细信息参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
形状(batch_size, entity_length)
,可选) — 用来防止对填充实体标记索引执行注意力的掩码。掩码值选择[0, 1]
:- 1 对应未掩码的实体标记,
- 0 对应已掩码的实体标记。
- entity_token_type_ids (
torch.LongTensor
形状(batch_size, entity_length)
,可选) — 段落标记索引,用于指示实体标记输入的第一和第二部分。索引选择[0, 1]
:- 0 对应实体标记的部分 A,
- 1 对应实体标记的部分 B。
- entity_position_ids (
torch.LongTensor
形状(batch_size, entity_length, max_mention_length)
,可选) —— 每个输入实体在位置嵌入中的位置索引。在范围[0, config.max_position_embeddings - 1]
内选择。 - inputs_embeds (
torch.FloatTensor
形状(batch_size, sequence_length, hidden_size)
,可选) —— 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您希望比模型内部嵌入查找矩阵有更多控制权,使其将input_ids
索引转换为相关向量,则此功能非常有用。 - head_mask (
torch.FloatTensor
形状(num_heads,)
或(num_layers, num_heads)
,可选) —— 用于屏蔽自注意力模块中选定头的掩码。所选掩码值在[0, 1]
内:- 1 表示头未被 屏蔽
- 0 表示头被 屏蔽
- output_attentions (
bool
,可选)— 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
,可选)— 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
,可选)— 是否返回ModelOutput 而不返回普通元组。 - labels (
torch(LongTensor)
,形状为(batch_size,)
或(batch_size, num_labels)
,可选)— 用于计算分类损失的标签。如果形状为(batch_size,)
,则使用交叉熵损失进行单标签分类。在这种情况下,标签应包含位于[0, ..., config.num_labels - 1]
内的索引。如果形状为(batch_size, num_labels)
,则使用二元交叉熵损失进行多标签分类。在这种情况下,标签应仅包含[0, 1]
,其中 0 和 1 分别表示假和真。
返回值
transformers.models.luke.modeling_luke.EntityClassificationOutput
或 tuple(torch.FloatTensor)
A transformers.models.luke.modeling_luke.EntityClassificationOutput
或 torch 浮点数
元组的实例(如果 return_dict=False
传递或当 config.return_dict=False
)由配置(LukeConfig)和输入定义。
- loss (
torch(LongTensor)
,形状为(1,)
,可选,在提供labels
时返回)— 分类损失。 - logits (
torch(LongTensor)
,形状为(batch_size, config.num_labels)
)— 分类得分(SoftMax 之前)。 - hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
的元组(一个用于嵌入输出的输出,一个用于每个层的输出)。每个层的隐藏状态以及初始嵌入输出。 - entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 - attentions (
torch(LongTensor)
元组,可选,在传递output_attentions=True
或当config.output_attentions=True
)— 形状的每个层的torch(LongTensor)
(一个层一个torch(LongTensor)
)元组(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax后的注意力权重,用于在自注意力头中计算加权平均值。
LukeForEntityClassification 前向方法重载了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
示例
>>> from transformers import AutoTokenizer, LukeForEntityClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-open-entity")
>>> model = LukeForEntityClassification.from_pretrained("studio-ousia/luke-large-finetuned-open-entity")
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [(0, 7)] # character-based entity span corresponding to "Beyoncé"
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: person
LukeForEntityPairClassification
class transformers.LukeForEntityPairClassification
< 源代码 >( config )
参数
- 配置 (LukeConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不加载与模型相关的权重,仅加载配置。请查看from_pretrained() 方法以加载模型权重。
在实体对分类任务(如TACRED)上方具有分类头(两个实体标记的隐藏状态的线性层)的LUKE模型。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< 源代码 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.EntityPairClassificationOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列标记的索引,在词汇表中。索引可以通过使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask(
torch.FloatTensor
形状为(batch_size, sequence_length)
,可选)—为了防止在填充token索引上执行注意力,需要使用的掩码。掩码值选择范围为[0, 1]
: - token_type_ids(
torch.LongTensor
形状为(batch_size, sequence_length)
,可选)—用于表示输入的两个部分(第一部分和第二部分)的token索引。索引选择范围为[0, 1]
: - position_ids(
torch.LongTensor
形状为(batch_size, sequence_length)
,可选)—每个输入序列token在位置嵌入中的位置索引。选择范围在[0, config.max_position_embeddings - 1]
内。 - entity_ids (
torch.LongTensor
形状(batch_size, entity_length)
) — 实体词汇中的实体标记索引。可以借助 AutoTokenizer 获取索引。有关详细信息,请查阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
形状(batch_size, entity_length)
,可选) — 避免对填充实体标记索引执行注意力的掩码。掩码值选择在[0, 1]
:- 1 对应于未掩码的实体标记,
- 0 对应于掩码的实体标记。
- entity_token_type_ids (
torch.LongTensor
形状(batch_size, entity_length)
,可选) — 段标记索引以指示实体标记输入的第一和第二部分。索引选择在[0, 1]
:- 0 对应于部分 A 的实体标记,
- 1 对应于部分 B 的实体标记。
- entity_position_ids (
torch.LongTensor
形状(batch_size, entity_length, max_mention_length)
, 可选) — 每个输入实体在位置嵌入中的位置索引。选择范围[0, config.max_position_embeddings - 1]
。 - inputs_embeds (
torch.FloatTensor
形状(batch_size, sequence_length, hidden_size)
, 可选) — 可选,您可以直接传递嵌入表示,而不是传递input_ids
。如果您想要比模型的内部嵌入查找矩阵有更多的控制权,将input_ids
索引转换成相关向量时,这种方式很有用。 - head_mask (
torch.FloatTensor
形状(num_heads,)
或者(num_layers, num_heads)
, 可选) — 用于屏蔽自注意力模块所选头的掩码。掩码值在[0, 1]
范围内:- 1 表示未 屏蔽 头;
- 0 表示已 屏蔽 头。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。详见返回张量下的attentions
以获得更多细节。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。详见返回张量下的hidden_states
以获得更多细节。 - return_dict (
bool
, 可选) — 是否返回ModelOutput 而不是普通的元组。 - labels (
torch.LongTensor
of shape(batch_size,)
or(batch_size, num_labels)
, 可选) — 用于计算分类损失的标签。如果形状为(batch_size,)
,则使用交叉熵损失进行单标签分类。在这种情况下,标签应包含应在[0, ..., config.num_labels - 1]
范围内的索引。如果形状为(batch_size, num_labels)
,则使用二值交叉熵损失进行多标签分类。在这种情况下,标签应只包含[0, 1]
,其中0和1分别表示假和真。
返回值
transformers.models.luke.modeling_luke.EntityPairClassificationOutput
或 tuple(torch.FloatTensor)
A transformers.models.luke.modeling_luke.EntityPairClassificationOutput
或一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
),它包含了根据配置(LukeConfig)和输入而变化的多个元素。
- loss (
torch(LongTensor)
,形状为(1,)
,可选,在提供labels
时返回)— 分类损失。 - logits (
torch(LongTensor)
,形状为(batch_size, config.num_labels)
)— 分类得分(SoftMax 之前)。 - hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
的元组(一个用于嵌入输出的输出,一个用于每个层的输出)。每个层的隐藏状态以及初始嵌入输出。 - entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 - attentions (
torch(LongTensor)
元组,可选,在传递output_attentions=True
或当config.output_attentions=True
)— 形状的每个层的torch(LongTensor)
(一个层一个torch(LongTensor)
)元组(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax后的注意力权重,用于在自注意力头中计算加权平均值。
The LukeForEntityPairClassification 前向方法,覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
示例
>>> from transformers import AutoTokenizer, LukeForEntityPairClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> model = LukeForEntityPairClassification.from_pretrained("studio-ousia/luke-large-finetuned-tacred")
>>> text = "Beyoncé lives in Los Angeles."
>>> entity_spans = [
... (0, 7),
... (17, 28),
... ] # character-based entity spans corresponding to "Beyoncé" and "Los Angeles"
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: per:cities_of_residence
LukeForEntitySpanClassification
class transformers.LukeForEntitySpanClassification
< 源 >( config )
参数
- config (LukeConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载模型相关的权重,只加载配置。检查from_pretrained()方法以加载模型权重。
LUKE模型,在顶上添加了跨度分类头(在隐藏状态输出之上添加了一层线性层),用于命名实体识别等任务。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< source >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None entity_start_positions: 可选 = None entity_end_positions: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.EntitySpanClassificationOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列_token在词汇表中的索引。索引可以通过使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (形状为 (batch_size, sequence_length) 的 torch.FloatTensor,可选)— 用于避免对填充标记索引执行注意力的掩码。选定的掩码值在 [0, 1]:
- 1 代表未进行掩码的标记,
- 0 代表进行掩码的标记。
- token_type_ids (形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选)— 段标记索引,用于指示输入的第一部分和第二部分。索引在 [0, 1]:
- 0 代表句子 A 的标记,
- 1 代表句子 B 的标记。
- position_ids (形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选)— 每个输入序列标记在位置嵌入中的索引。在范围 [0, config.max_position_embeddings - 1] 中选择。
- entity_ids (
torch.LongTensor
形状(batch_size, entity_length)
) — 实体词汇中的实体标记索引。索引可以通过使用 AutoTokenizer 获取。详细信息请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (
torch.FloatTensor
形状(batch_size, entity_length)
,可选) — 避免在填充实体标记索引上执行注意力的掩码。掩码值选择范围为[0, 1]
:- 1 表示 未掩码 的实体标记;
- 0 表示 掩码 的实体标记。
- entity_token_type_ids (
torch.LongTensor
形状(batch_size, entity_length)
,可选) — 表示实体标记输入的第一部分和第二部分的段标记索引。索引选择范围为[0, 1]
:- 0 对应 部分 A 实体标记;
- 1 对应 部分 B 实体标记。
- entity_position_ids (形状为
torch.LongTensor
,大小为(batch_size, entity_length, max_mention_length)
的张量,可选) — 每个输入实体在位置嵌入中的位置索引。选择范围在[0, config.max_position_embeddings - 1]
之间。 - inputs_embeds (形状为
torch.FloatTensor
,大小为(batch_size, sequence_length, hidden_size)
的张量,可选) — 可选的,你可以直接传递嵌入表示,而不是通过input_ids
。如果想要比模型内部的嵌入查找矩阵更大程度地控制如何将input_ids
索引转换成相关的向量,这个选项非常有用。 - head_mask (形状为
torch.FloatTensor
,大小为(num_heads,)
或(num_layers, num_heads)
的张量,可选) — 用于取消选择自注意力模块中选中头部的掩码。掩码值选择的范围在[0, 1]
:- 1 表示头部 未掩码,
- 0 表示头部 掩码。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的数据张量。更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 对象而不是一个普通的元组。 - entity_start_positions (
torch.LongTensor
) — 单词标记序列中实体的起始位置。
返回值
transformers.models.luke.modeling_luke.EntitySpanClassificationOutput
或 tuple(torch.FloatTensor)
- loss (
torch(LongTensor)
,形状为(1,)
,可选,在提供labels
时返回)— 分类损失。 - hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
的元组(一个用于嵌入输出的输出,一个用于每个层的输出)。每个层的隐藏状态以及初始嵌入输出。 - entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 - attentions (
torch(LongTensor)
元组,可选,在传递output_attentions=True
或当config.output_attentions=True
)— 形状的每个层的torch(LongTensor)
(一个层一个torch(LongTensor)
)元组(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax后的注意力权重,用于在自注意力头中计算加权平均值。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
示例
>>> from transformers import AutoTokenizer, LukeForEntitySpanClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-large-finetuned-conll-2003")
>>> model = LukeForEntitySpanClassification.from_pretrained("studio-ousia/luke-large-finetuned-conll-2003")
>>> text = "Beyoncé lives in Los Angeles"
# List all possible entity spans in the text
>>> word_start_positions = [0, 8, 14, 17, 21] # character-based start positions of word tokens
>>> word_end_positions = [7, 13, 16, 20, 28] # character-based end positions of word tokens
>>> entity_spans = []
>>> for i, start_pos in enumerate(word_start_positions):
... for end_pos in word_end_positions[i:]:
... entity_spans.append((start_pos, end_pos))
>>> inputs = tokenizer(text, entity_spans=entity_spans, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> predicted_class_indices = logits.argmax(-1).squeeze().tolist()
>>> for span, predicted_class_idx in zip(entity_spans, predicted_class_indices):
... if predicted_class_idx != 0:
... print(text[span[0] : span[1]], model.config.id2label[predicted_class_idx])
Beyoncé PER
Los Angeles LOC
< 源 >
( config )
参数
- 配置 (LukeConfig) — 包含所有模型参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。请查看from_pretrained()方法来加载模型权重。
LUKE 模型转换器,在最上面有一个序列分类/回归头(在池化输出之上的一层线性层),例如用于 GLUE 任务。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< 源 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.LukeSequenceClassifierOutput
or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列token在词典中的索引。索引可以通过使用 AutoTokenizer 获得。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
形状为(batch_size, sequence_length)
,可选) — 避免对填充标记索引执行注意力操作的掩码。选定的掩码值在[0, 1]
范围内:- 1 代表 未掩码 的标记,
- 0 代表 掩码 的标记。
- token_type_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 标记段索引,用于指示输入的第1部分和第2部分。索引值选自[0, 1]
:- 0 表示 句子A 标记,
- 1 表示 句子B 标记。
- position_ids (
torch.LongTensor
形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的索引。选择范围在[0, config.max_position_embeddings - 1]
。 - entity_ids (形如
torch.LongTensor
的张量,形状为(batch_size, entity_length)
)— 实体词汇中的实体标记索引。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (形如
torch.FloatTensor
的张量,形状为(batch_size, entity_length)
,可选)— 用于避免在填充实体标记索引上执行注意力的掩码。掩码值选择在[0, 1]
范围内:- 1 用于未掩码的实体标记;
- 0 用于掩码的实体标记。
- entity_token_type_ids (形如
torch.LongTensor
的张量,形状为(batch_size, entity_length)
,可选)— 用于指示实体标记输入的第一和第二部分的段标记索引。索引选择在[0, 1]
范围内:- 0 对应于部分 A 的实体标记;
- 1 对应于部分 B 的实体标记。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。更多详情请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。更多详情请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 - labels (
torch.LongTensor
形状为(batch_size,)
,可选项) — 用于计算序列分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]
范围内。如果config.num_labels == 1
则计算回归损失(均方损失),如果config.num_labels > 1
则计算分类损失(交叉熵)。
返回值
transformers.models.luke.modeling_luke.LukeSequenceClassifierOutput
或 tuple(torch.FloatTensor)
transformers.models.luke.modeling_luke.LukeSequenceClassifierOutput
或一个 torch.FloatTensor
的元组(如果传递了return_dict=False
或当 config.return_dict=False
),取决于配置(《LukeConfig》)和输入的元素。
-
loss(
torch.FloatTensor
形状为(1,)
,可选项,在提供labels
时返回)—— 分类(如果config.num_labels==1
则为回归)损失。 -
logits(
torch.FloatTensor
形状为(batch_size, config.num_labels)
)—— 分类(如果config.num_labels==1
则为回归)分数(在 SoftMax 之前)。 -
hidden_states(
tuple(torch.FloatTensor)
,可选项,在传递output_hidden_states=True
时返回或当config.output_hidden_states=True
时返回)—— 一个包含torch.FloatTensor
的元组(如果模型有嵌入层,则为嵌入层的输出 + 每个层的输出)的形状为(batch_size, sequence_length, hidden_size)
。模型在每一层的输出以及可选的初始嵌入输出的隐藏状态。
-
entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 -
attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) — 每个层torch.FloatTensor
的元组(每个层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于自我注意力头中的加权平均。
LukeForSequenceClassification 的前向方法覆盖了特殊的 __call__
方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
单标签分类的示例
>>> import torch
>>> from transformers import AutoTokenizer, LukeForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForSequenceClassification.from_pretrained("studio-ousia/luke-base")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = LukeForSequenceClassification.from_pretrained("studio-ousia/luke-base", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
多标签分类的示例
>>> import torch
>>> from transformers import AutoTokenizer, LukeForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForSequenceClassification.from_pretrained("studio-ousia/luke-base", problem_type="multi_label_classification")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]
>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = LukeForSequenceClassification.from_pretrained(
... "studio-ousia/luke-base", num_labels=num_labels, problem_type="multi_label_classification"
... )
>>> labels = torch.sum(
... torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss
LukeForMultipleChoice
class transformers.LukeForMultipleChoice
< 来源 >( config )
参数
- config (LukeConfig) — 拥有所有模型参数的配置类。使用配置文件初始化时不会加载与模型相关的权重,只有配置。请查看from_pretrained()方法来加载模型权重。
LUKE 模型配备了一个顶部带多项选择分类头(一个位于池化输出顶端并带有 softmax 的线性层),例如用于 RocStories/SWAG 任务的示例。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< 来源 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.LukeMultipleChoiceModelOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, num_choices, sequence_length)
) — 输入序列标记的索引,在词汇表中的索引。可以通过 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask(一个形状为
(batch_size, num_choices, sequence_length)
的torch.FloatTensor
,可选) — 用于避免对填充token索引执行注意力操作的掩码。掩码值的选择在[0, 1]
中:- 1 表示 未被掩码 的token
- 0 表示 被掩码 的token
- token_type_ids(一个形状为
(batch_size, num_choices, sequence_length)
的torch.LongTensor
,可选) — 标记段索引以指明输入的各个部分。选择在[0, 1]
中:- 0 对应于 句子 A 标记
- 1 对应于 句子 B 标记
- position_ids(一个形状为
(batch_size, num_choices, sequence_length)
的torch.LongTensor
,可选) — 每个输入序列token在位置嵌入中的索引。在范围[0, config.max_position_embeddings - 1]
内选择。 - entity_ids (
torch.LongTensor
of shape(batch_size, entity_length)
) — 实体词汇中的实体标记索引。可以使用 AutoTokenizer 获取索引。详见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call() 的详细信息。
- entity_attention_mask (
torch.FloatTensor
of shape(batch_size, entity_length)
, 可选) — 避免对填充实体标记索引执行注意力操作的掩码。掩码值选择在[0, 1]
:- 1 表示未 掩码 的实体标记,
- 0 表示已 掩码 的实体标记。
- entity_token_type_ids (
torch.LongTensor
of shape(batch_size, entity_length)
, 可选) — 分段标记索引,以指示实体标记输入的第一和第二部分。索引选择在[0, 1]
:- 0 对应于 部分 A 的实体标记,
- 1 对应于 部分 B 的实体标记。
- entity_position_ids (
torch.LongTensor
的形状为(batch_size, entity_length, max_mention_length)
,可选) — 每个输入实体在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
范围内选择。 - inputs_embeds (
torch.FloatTensor
的形状为(batch_size, num_choices, sequence_length, hidden_size)
,可选) — 可选的,您可以直接传递嵌入表示,而不是传递input_ids
。如果您希望对如何将input_ids
索引转换为相关向量有更多控制权,这将很有用。 - head_mask (
torch.FloatTensor
的形状为(num_heads,)
或(num_layers, num_heads)
,可选) — 用于取消选择自注意力模块选定头部的掩码。掩码值在[0, 1]
之间选择:- 1 表示头部 未掩码,
- 0 表示头部 已掩码。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层注意力的张量。有关返回的张量中的更多详情,请参见attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关返回的张量中的更多详情,请参见hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是纯元组。 - labels (
torch.LongTensor
of shape(batch_size,)
, optional) — 计算多选分类损失的标签。索引应该在代码[0, ..., num_choices-1]
中,其中num_choices
是输入张量的第二维大小。 (见上面代码input_ids
)
返回值
transformers.models.luke.modeling_luke.LukeMultipleChoiceModelOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.luke.modeling_luke.LukeMultipleChoiceModelOutput
或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或 config.return_dict=False
),根据配置 (LukeConfig) 和输入包含各种元素。
-
loss (
torch.FloatTensor
of shape (1,), optional, 附加当提供labels
时) — 分类损失。 -
logits (
torch.FloatTensor
of shape(batch_size, num_choices)
) — num_choices 是输入张量的第二维。 (见上面代码 input_ids )分类分数(在SoftMax之前)。
-
hidden_states(
tuple(torch.FloatTensor)
,可选项,在传递output_hidden_states=True
时返回或当config.output_hidden_states=True
时返回)—— 一个包含torch.FloatTensor
的元组(如果模型有嵌入层,则为嵌入层的输出 + 每个层的输出)的形状为(batch_size, sequence_length, hidden_size)
。模型在每一层的输出以及可选的初始嵌入输出的隐藏状态。
-
entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 -
attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) — 每个层torch.FloatTensor
的元组(每个层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于自我注意力头中的加权平均。
《LukeForMultipleChoice》的前向方法,覆盖了特殊的 __call__
方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
示例
>>> from transformers import AutoTokenizer, LukeForMultipleChoice
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForMultipleChoice.from_pretrained("studio-ousia/luke-base")
>>> prompt = "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
>>> choice0 = "It is eaten with a fork and a knife."
>>> choice1 = "It is eaten while held in the hand."
>>> labels = torch.tensor(0).unsqueeze(0) # choice0 is correct (according to Wikipedia ;)), batch size 1
>>> encoding = tokenizer([prompt, prompt], [choice0, choice1], return_tensors="pt", padding=True)
>>> outputs = model(**{k: v.unsqueeze(0) for k, v in encoding.items()}, labels=labels) # batch size is 1
>>> # the linear classifier still needs to be trained
>>> loss = outputs.loss
>>> logits = outputs.logits
LukeForTokenClassification
类 transformers.LukeForTokenClassification
< source >( config )
参数
- config (LukeConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不加载模型相关联的权重,只有配置。请参阅from_pretrained()方法以加载模型权重。
在顶部具有标记分类头(隐藏状态输出之上的线性层)的LUKE模型。要使用LUKE解决命名实体识别(NER)任务,与这个类相比,LukeForEntitySpanClassification
更适合。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< 源代码 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None labels: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.LukeTokenClassifierOutput
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列标记在词汇表中的索引。索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
的形状为(batch_size, sequence_length)
,可选) — 用于避免在填充标记索引处执行注意力的掩码。选定的掩码值范围在[0, 1]
:- 1 表示 未掩码 的标记,
- 0 表示 已掩码 的标记。
- token_type_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
,可选) — 用于指示输入的两个部分的分段标记索引。索引选择在[0, 1]
之间:- 0 对应于 句子 A 标记,
- 1 对应于 句子 B 标记。
- position_ids (
torch.LongTensor
的形状为(batch_size, sequence_length)
,可选) — 每个输入序列标记在位置嵌入中的位置索引。选择的范围在[0, config.max_position_embeddings - 1]
之间。 - entity_ids (
torch.LongTensor
形状为(batch_size, entity_length)
) — 实体词汇中的实体标记索引。可以使用 AutoTokenizer 获取索引。详见 PreTrainedTokenizer.encode() 及 PreTrainedTokenizer.call() 的细节。
- entity_attention_mask (
torch.FloatTensor
形状为(batch_size, entity_length)
,可选) — 用于避免在填充实体标记索引上执行注意力的掩码。掩码值选择在[0, 1]
之间:- 1 表示未进行掩码的实体标记,
- 0 表示进行掩码的实体标记。
- entity_token_type_ids (
torch.LongTensor
形状为(batch_size, entity_length)
,可选) — 表示实体标记输入的前后部分的段标记索引。索引选择在[0, 1]
之间:- 0 对应于 部分 A 实体标记,
- 1 对应于 部分 B 实体标记。
- entity_position_ids (
torch.LongTensor
of shape(batch_size, entity_length, max_mention_length)
, 可选) — 每个输入实体的位置在位置嵌入中的索引。范围在[0, config.max_position_embeddings - 1]
内选定。 - inputs_embeds (
torch.FloatTensor
of shape(batch_size, sequence_length, hidden_size)
, 可选) — 可选地,直接传入嵌入表示,而不是input_ids
。这有助于当你需要更多控制如何将input_ids
索引转换为相关向量时,而不是模型内建的嵌入查找矩阵。 - head_mask (
torch.FloatTensor
of shape(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于取消选择自注意力模块中选定头部的掩码。掩码值在[0, 1]
之间选定:- 1 表示头部 未掩码,
- 0 表示头部 已掩码。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回的张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回的张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回ModelOutput
而不是普通的元组。 - labels (
torch.LongTensor
of shape(batch_size,)
, 可选) — 计算多选分类损失的标签。索引应在[0, ..., num_choices-1]
范围内,其中num_choices
是输入张量第二维的大小。(见上方input_ids
)
返回值
transformers.models.luke.modeling_luke.LukeTokenClassifierOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.luke.modeling_luke.LukeTokenClassifierOutput
,或者一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
)组成,取决于配置(LukeConfig)和输入。
-
loss (
torch(LongTensor)
,形状为(1,)
,可选,在提供labels
时返回)— 分类损失。 -
logits (形状为
torch.FloatTensor(batch_size, sequence_length, config.num_labels)
的 torch.FloatTensor)—— 分类得分(SoftMax 之前)。 -
hidden_states(
tuple(torch.FloatTensor)
,可选项,在传递output_hidden_states=True
时返回或当config.output_hidden_states=True
时返回)—— 一个包含torch.FloatTensor
的元组(如果模型有嵌入层,则为嵌入层的输出 + 每个层的输出)的形状为(batch_size, sequence_length, hidden_size)
。模型在每一层的输出以及可选的初始嵌入输出的隐藏状态。
-
entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 -
attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) — 每个层torch.FloatTensor
的元组(每个层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于自我注意力头中的加权平均。
LukeForTokenClassification 的 forward 方法,覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
示例
>>> from transformers import AutoTokenizer, LukeForTokenClassification
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForTokenClassification.from_pretrained("studio-ousia/luke-base")
>>> inputs = tokenizer(
... "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="pt"
... )
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_token_class_ids = logits.argmax(-1)
>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t.item()] for t in predicted_token_class_ids[0]]
>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
LukeForQuestionAnswering
class transformers.LukeForQuestionAnswering
< source >( config )
参数
- 配置 (LukeConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化时不加载与模型相关的权重,只有配置。请查看 from_pretrained() 方法以加载模型权重。
LUKE 模型,在顶部带有跨度分类头的用于 SQuAD 等提取式问答任务的模型(隐藏状态输出之上的线性层用于计算 跨度开始 logits
和 跨度结束 logits
)。
该模型继承自 PreTrainedModel。有关库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入尺寸、剪枝头部等),请参阅超类文档。
该模型也是PyTorch torch.nn.Module的子类。将其作为常规PyTorch模块使用,并参阅PyTorch文档以获取有关通用使用和行为的所有相关问题。
正向传播
< 源代码 >( input_ids: 可选 = None attention_mask: 可选 = None token_type_ids: 可选 = None position_ids: 可选 = None entity_ids: 可选 = None entity_attention_mask: 可选 = None entity_token_type_ids: 可选 = None entity_position_ids: 可选 = None head_mask: 可选 = None inputs_embeds: 可选 = None start_positions: 可选 = None end_positions: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) → transformers.models.luke.modeling_luke.LukeQuestionAnsweringModelOutput
or tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
) — 输入序列在词汇表中的索引。索引可以通过 AutoTokenizer 获取。详细信息请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.FloatTensor
of shape(batch_size, sequence_length)
, optional) — 避免在填充token索引上执行注意力的掩码。掩码值在[0, 1]
之间选择:- 1 对应于 未掩码的token,
- 0 对应于
masked
的token。
- token_type_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — 指示输入的前后部分的段token索引。索引在[0, 1]
之间选择:- 0 对应于句子 A的token,
- 1 对应于句子 B的token。
- position_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — 输入序列中每个token的位置索引。在范围[0, config.max_position_embeddings - 1]
内选择。 - entity_ids (形状为
(batch_size, entity_length)
的 torch.LongTensor) — 实体词汇中的实体标记的索引。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- entity_attention_mask (形状为
(batch_size, entity_length)
的 torch.FloatTensor,可选) — 避免对填充实体标记索引执行注意力的掩码。掩码值选择在[0, 1]
之间:- 对于未掩码的实体标记为 1,
- 对于掩码的实体标记为 0。
- entity_token_type_ids (形状为
(batch_size, entity_length)
的 torch.LongTensor,可选) — 段标记索引以指示实体标记输入的第一部分和第二部分。索引选择在[0, 1]
之间:- 0 对应于部分 A 的实体标记,
- 1 对应于部分 B 的实体标记。
- entity_position_ids (
torch.LongTensor
的形状为(batch_size, entity_length, max_mention_length)
,可选) — 每个输入实体在位置嵌入中的位置索引。选择范围为[0, config.max_position_embeddings - 1]
。 - inputs_embeds (
torch.FloatTensor
的形状为(batch_size, sequence_length, hidden_size)
,可选) — 可选地,您可以选择直接传递嵌入表示,而不是input_ids
。这在使用模型内部的嵌入查找矩阵转换input_ids
索引为相关向量方法时很有用。 - head_mask (
torch.FloatTensor
的形状为(num_heads,)
或(num_layers, num_heads)
,可选) — 用于将自注意力模块中选定的头置 null 的掩码。掩码值在[0, 1]
范围内选择:- 1 表示头 未掩码,
- 0 表示头 掩码。
- output_attentions (
bool
,可选) — 是否返回所有注意力层的注意力张量。请参阅返回张量下的attsentions
,获取更多详细信息。 - output_hidden_states (
bool
,可选) — 是否返回所有层的隐藏状态。请参阅返回张量下的hidden_states
,获取更多详细信息。 - return_dict (
bool
,可选) — 是否返回ModelOutput对象而非普通元组。 - start_positions (
torch.LongTensor
of shape(batch_size,)
, optional) — 标记标记跨度起始位置(索引)的标签,用于计算token分类损失。位置被限制在序列长度(sequence_length
)内。序列之外的输出位置不计入损失计算。 - end_positions (
torch.LongTensor
of shape(batch_size,)
, optional) — 标记标记跨度结束位置(索引)的标签,用于计算token分类损失。位置被限制在序列长度(sequence_length
)内。序列之外的输出位置不计入损失计算。
返回值
transformers.models.luke.modeling_luke.LukeQuestionAnsweringModelOutput
或 tuple(torch.FloatTensor)
A transformers.models.luke.modeling_luke.LukeQuestionAnsweringModelOutput
或一个 torch.FloatTensor
的元组(如果传递了 return_dict=False
或当 config.return_dict=False
),包括根据配置(LukeConfig)和输入的各种元素。
-
loss (
torch.FloatTensor
of shape(1,)
, optional, returned whenlabels
is provided) — 总跨度提取损失是开始和结束位置的交叉熵之和。 -
start_logits (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 跨度起始得分(在 SoftMax 之前)。 -
end_logits (
torch.FloatTensor
of shape(batch_size, sequence_length)
) — 跨度结束得分(在 SoftMax 之前)。 -
hidden_states(
tuple(torch.FloatTensor)
,可选项,在传递output_hidden_states=True
时返回或当config.output_hidden_states=True
时返回)—— 一个包含torch.FloatTensor
的元组(如果模型有嵌入层,则为嵌入层的输出 + 每个层的输出)的形状为(batch_size, sequence_length, hidden_size)
。模型在每一层的输出以及可选的初始嵌入输出的隐藏状态。
-
entity_hidden_states (
tuple(torch.FloatTensor)
, optional,当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, entity_length, hidden_size)
的torch.FloatTensor
的元组(一个用于初始实体嵌入输出,一个用于每个层的输出)。每个层的实体隐藏状态以及初始实体嵌入输出。 -
attentions (
tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或当config.output_attentions=True
时返回) — 每个层torch.FloatTensor
的元组(每个层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于自我注意力头中的加权平均。
LukeForQuestionAnswering 的 forward 方法覆盖了 __call__
特殊方法。
尽管前向传递的配方需要在这个函数内定义,但应该调用 Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略了它们。
示例
>>> from transformers import AutoTokenizer, LukeForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("studio-ousia/luke-base")
>>> model = LukeForQuestionAnswering.from_pretrained("studio-ousia/luke-base")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> answer_start_index = outputs.start_logits.argmax()
>>> answer_end_index = outputs.end_logits.argmax()
>>> predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
>>> # target is "nice puppet"
>>> target_start_index = torch.tensor([14])
>>> target_end_index = torch.tensor([15])
>>> outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
>>> loss = outputs.loss