fastNLP.models package

fastNLP 在 models 模块中内置了如 CNNTextSeqLabeling 等完整的模型,以供用户直接使用。

class fastNLP.models.CNNText(embed, num_classes, kernel_nums=30, 40, 50, kernel_sizes=1, 3, 5, dropout=0.5)[源代码]

基类:torch.nn.modules.module.Module

别名 fastNLP.models.CNNText fastNLP.models.cnn_text_classification.CNNText

使用CNN进行文本分类的模型 ‘Yoon Kim. 2014. Convolution Neural Networks for Sentence Classification.’

__init__(embed, num_classes, kernel_nums=30, 40, 50, kernel_sizes=1, 3, 5, dropout=0.5)[源代码]
参数
  • embed (tuple(int,int),torch.FloatTensor,nn.Embedding,numpy.ndarray) – Embedding的大小(传入tuple(int, int), 第一个int为vocab_zie, 第二个int为embed_dim); 如果为Tensor, Embedding, ndarray等则直接使用该值初始化Embedding

  • num_classes (int) – 一共有多少类

  • kernel_sizes (int,tuple(int)) – 输出channel的kernel大小。

  • dropout (float) – Dropout的大小

forward(words, seq_len=None)[源代码]
参数
  • words (torch.LongTensor) – [batch_size, seq_len],句子中word的index

  • seq_len (torch.LongTensor) – [batch,] 每个句子的长度

Return output

dict of torch.LongTensor, [batch_size, num_classes]

predict(words, seq_len=None)[源代码]
参数
  • words (torch.LongTensor) – [batch_size, seq_len],句子中word的index

  • seq_len (torch.LongTensor) – [batch,] 每个句子的长度

Return predict

dict of torch.LongTensor, [batch_size, ]

training: bool
class fastNLP.models.SeqLabeling(embed, hidden_size, num_classes)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.SeqLabeling fastNLP.models.sequence_labeling.SeqLabeling

一个基础的Sequence labeling的模型。 用于做sequence labeling的基础类。结构包含一层Embedding,一层LSTM(单向,一层),一层FC,以及一层CRF。

__init__(embed, hidden_size, num_classes)[源代码]
参数
  • embed (tuple(int,int),torch.FloatTensor,nn.Embedding,numpy.ndarray) – Embedding的大小(传入tuple(int, int), 第一个int为vocab_zie, 第二个int为embed_dim); 如果为Tensor, embedding, ndarray等则直接使用该值初始化Embedding

  • hidden_size (int) – LSTM隐藏层的大小

  • num_classes (int) – 一共有多少类

forward(words, seq_len, target)[源代码]
参数
  • words (torch.LongTensor) – [batch_size, max_len],序列的index

  • seq_len (torch.LongTensor) – [batch_size,], 这个序列的长度

  • target (torch.LongTensor) – [batch_size, max_len], 序列的目标值

Return y

If truth is None, return list of [decode path(list)]. Used in testing and predicting. If truth is not None, return loss, a scalar. Used in training.

predict(words, seq_len)[源代码]

用于在预测时使用

参数
  • words (torch.LongTensor) – [batch_size, max_len]

  • seq_len (torch.LongTensor) – [batch_size,]

返回

{‘pred’: xx}, [batch_size, max_len]

training: bool
class fastNLP.models.AdvSeqLabel(embed, hidden_size, num_classes, dropout=0.3, id2words=None, encoding_type='bmes')[源代码]

基类:torch.nn.modules.module.Module

别名 fastNLP.models.AdvSeqLabel fastNLP.models.sequence_labeling.AdvSeqLabel

更复杂的Sequence Labelling模型。结构为Embedding, LayerNorm, 双向LSTM(两层),FC,LayerNorm,DropOut,FC,CRF。

__init__(embed, hidden_size, num_classes, dropout=0.3, id2words=None, encoding_type='bmes')[源代码]
参数
  • embed (tuple(int,int),torch.FloatTensor,nn.Embedding,numpy.ndarray) – Embedding的大小(传入tuple(int, int), 第一个int为vocab_zie, 第二个int为embed_dim); 如果为Tensor, Embedding, ndarray等则直接使用该值初始化Embedding

  • hidden_size (int) – LSTM的隐层大小

  • num_classes (int) – 有多少个类

  • dropout (float) – LSTM中以及DropOut层的drop概率

  • id2words (dict) – tag id转为其tag word的表。用于在CRF解码时防止解出非法的顺序,比如’BMES’这个标签规范中,’S’ 不能出现在’B’之后。这里也支持类似与’B-NN’,即’-‘前为标签类型的指示,后面为具体的tag的情况。这里不但会保证 ‘B-NN’后面不为’S-NN’还会保证’B-NN’后面不会出现’M-xx’(任何非’M-NN’和’E-NN’的情况。)

  • encoding_type (str) – 支持”BIO”, “BMES”, “BEMSO”, 只有在id2words不为None的情况有用。

forward(words, seq_len, target)[源代码]
参数
  • words (torch.LongTensor) – [batch_size, mex_len]

  • seq_len (torch.LongTensor) – [batch_size, ]

  • target (torch.LongTensor) – [batch_size, max_len], 目标

Return torch.Tensor

a scalar loss

training: bool
predict(words, seq_len)[源代码]
参数
  • words (torch.LongTensor) – [batch_size, mex_len]

  • seq_len (torch.LongTensor) – [batch_size, ]

Return torch.LongTensor

[batch_size, max_len]

class fastNLP.models.BiLSTMCRF(embed, num_classes, num_layers=1, hidden_size=100, dropout=0.5, target_vocab=None)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.BiLSTMCRF fastNLP.models.sequence_labeling.BiLSTMCRF

结构为embedding + BiLSTM + FC + Dropout + CRF.

__init__(embed, num_classes, num_layers=1, hidden_size=100, dropout=0.5, target_vocab=None)[源代码]
参数
  • embed – 支持(1)fastNLP的各种Embedding, (2) tuple, 指明num_embedding, dimension, 如(1000, 100)

  • num_classes – 一共多少个类

  • num_layers – BiLSTM的层数

  • hidden_size – BiLSTM的hidden_size,实际hidden size为该值的两倍(前向、后向)

  • dropout – dropout的概率,0为不dropout

  • target_vocab – Vocabulary对象,target与index的对应关系。如果传入该值,将自动避免非法的解码序列。

training: bool
class fastNLP.models.ESIM(embed, hidden_size=None, num_labels=3, dropout_rate=0.3, dropout_embed=0.1)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.ESIM fastNLP.models.snli.ESIM

ESIM model的一个PyTorch实现 论文参见: https://arxiv.org/pdf/1609.06038.pdf

__init__(embed, hidden_size=None, num_labels=3, dropout_rate=0.3, dropout_embed=0.1)[源代码]
参数
  • embed – 初始化的Embedding

  • hidden_size (int) – 隐藏层大小,默认值为Embedding的维度

  • num_labels (int) – 目标标签种类数量,默认值为3

  • dropout_rate (float) – dropout的比率,默认值为0.3

  • dropout_embed (float) – 对Embedding的dropout比率,默认值为0.1

forward(words1, words2, seq_len1, seq_len2, target=None)[源代码]
参数
  • words1 – [batch, seq_len]

  • words2 – [batch, seq_len]

  • seq_len1 – [batch]

  • seq_len2 – [batch]

  • target

返回

training: bool
class fastNLP.models.StarTransEnc(embed, hidden_size, num_layers, num_head, head_dim, max_len, emb_dropout, dropout)[源代码]

基类:torch.nn.modules.module.Module

别名 fastNLP.models.StarTransEnc fastNLP.models.star_transformer.StarTransEnc

带word embedding的Star-Transformer Encoder

__init__(embed, hidden_size, num_layers, num_head, head_dim, max_len, emb_dropout, dropout)[源代码]
参数
  • embed – 单词词典, 可以是 tuple, 包括(num_embedings, embedding_dim), 即 embedding的大小和每个词的维度. 也可以传入 nn.Embedding 对象,此时就以传入的对象作为embedding

  • hidden_size – 模型中特征维度.

  • num_layers – 模型层数.

  • num_head – 模型中multi-head的head个数.

  • head_dim – 模型中multi-head中每个head特征维度.

  • max_len – 模型能接受的最大输入长度.

  • emb_dropout – 词嵌入的dropout概率.

  • dropout – 模型除词嵌入外的dropout概率.

forward(x, mask)[源代码]
参数
  • x (FloatTensor) – [batch, length, hidden] 输入的序列

  • mask (ByteTensor) – [batch, length] 输入序列的padding mask, 在没有内容(padding 部分) 为 0, 否则为 1

返回

[batch, length, hidden] 编码后的输出序列

[batch, hidden] 全局 relay 节点, 详见论文

training: bool
class fastNLP.models.STSeqLabel(embed, num_cls, hidden_size=300, num_layers=4, num_head=8, head_dim=32, max_len=512, cls_hidden_size=600, emb_dropout=0.1, dropout=0.1)[源代码]

基类:torch.nn.modules.module.Module

别名 fastNLP.models.STSeqLabel fastNLP.models.star_transformer.STSeqLabel

用于序列标注的Star-Transformer模型

__init__(embed, num_cls, hidden_size=300, num_layers=4, num_head=8, head_dim=32, max_len=512, cls_hidden_size=600, emb_dropout=0.1, dropout=0.1)[源代码]
参数
  • embed – 单词词典, 可以是 tuple, 包括(num_embedings, embedding_dim), 即 embedding的大小和每个词的维度. 也可以传入 nn.Embedding 对象, 此时就以传入的对象作为embedding

  • num_cls – 输出类别个数

  • hidden_size – 模型中特征维度. Default: 300

  • num_layers – 模型层数. Default: 4

  • num_head – 模型中multi-head的head个数. Default: 8

  • head_dim – 模型中multi-head中每个head特征维度. Default: 32

  • max_len – 模型能接受的最大输入长度. Default: 512

  • cls_hidden_size – 分类器隐层维度. Default: 600

  • emb_dropout – 词嵌入的dropout概率. Default: 0.1

  • dropout – 模型除词嵌入外的dropout概率. Default: 0.1

forward(words, seq_len)[源代码]
参数
  • words – [batch, seq_len] 输入序列

  • seq_len – [batch,] 输入序列的长度

Return output

[batch, num_cls, seq_len] 输出序列中每个元素的分类的概率

predict(words, seq_len)[源代码]
参数
  • words – [batch, seq_len] 输入序列

  • seq_len – [batch,] 输入序列的长度

Return output

[batch, seq_len] 输出序列中每个元素的分类

training: bool
class fastNLP.models.STNLICls(embed, num_cls, hidden_size=300, num_layers=4, num_head=8, head_dim=32, max_len=512, cls_hidden_size=600, emb_dropout=0.1, dropout=0.1)[源代码]

基类:torch.nn.modules.module.Module

别名 fastNLP.models.STNLICls fastNLP.models.star_transformer.STNLICls

用于自然语言推断(NLI)的Star-Transformer

__init__(embed, num_cls, hidden_size=300, num_layers=4, num_head=8, head_dim=32, max_len=512, cls_hidden_size=600, emb_dropout=0.1, dropout=0.1)[源代码]
参数
  • embed – 单词词典, 可以是 tuple, 包括(num_embedings, embedding_dim), 即 embedding的大小和每个词的维度. 也可以传入 nn.Embedding 对象, 此时就以传入的对象作为embedding

  • num_cls – 输出类别个数

  • hidden_size – 模型中特征维度. Default: 300

  • num_layers – 模型层数. Default: 4

  • num_head – 模型中multi-head的head个数. Default: 8

  • head_dim – 模型中multi-head中每个head特征维度. Default: 32

  • max_len – 模型能接受的最大输入长度. Default: 512

  • cls_hidden_size – 分类器隐层维度. Default: 600

  • emb_dropout – 词嵌入的dropout概率. Default: 0.1

  • dropout – 模型除词嵌入外的dropout概率. Default: 0.1

forward(words1, words2, seq_len1, seq_len2)[源代码]
参数
  • words1 – [batch, seq_len] 输入序列1

  • words2 – [batch, seq_len] 输入序列2

  • seq_len1 – [batch,] 输入序列1的长度

  • seq_len2 – [batch,] 输入序列2的长度

Return output

[batch, num_cls] 输出分类的概率

predict(words1, words2, seq_len1, seq_len2)[源代码]
参数
  • words1 – [batch, seq_len] 输入序列1

  • words2 – [batch, seq_len] 输入序列2

  • seq_len1 – [batch,] 输入序列1的长度

  • seq_len2 – [batch,] 输入序列2的长度

Return output

[batch, num_cls] 输出分类的概率

training: bool
class fastNLP.models.STSeqCls(embed, num_cls, hidden_size=300, num_layers=4, num_head=8, head_dim=32, max_len=512, cls_hidden_size=600, emb_dropout=0.1, dropout=0.1)[源代码]

基类:torch.nn.modules.module.Module

别名 fastNLP.models.STSeqCls fastNLP.models.star_transformer.STSeqCls

用于分类任务的Star-Transformer

__init__(embed, num_cls, hidden_size=300, num_layers=4, num_head=8, head_dim=32, max_len=512, cls_hidden_size=600, emb_dropout=0.1, dropout=0.1)[源代码]
参数
  • embed – 单词词典, 可以是 tuple, 包括(num_embedings, embedding_dim), 即 embedding的大小和每个词的维度. 也可以传入 nn.Embedding 对象, 此时就以传入的对象作为embedding

  • num_cls – 输出类别个数

  • hidden_size – 模型中特征维度. Default: 300

  • num_layers – 模型层数. Default: 4

  • num_head – 模型中multi-head的head个数. Default: 8

  • head_dim – 模型中multi-head中每个head特征维度. Default: 32

  • max_len – 模型能接受的最大输入长度. Default: 512

  • cls_hidden_size – 分类器隐层维度. Default: 600

  • emb_dropout – 词嵌入的dropout概率. Default: 0.1

  • dropout – 模型除词嵌入外的dropout概率. Default: 0.1

forward(words, seq_len)[源代码]
参数
  • words – [batch, seq_len] 输入序列

  • seq_len – [batch,] 输入序列的长度

Return output

[batch, num_cls] 输出序列的分类的概率

predict(words, seq_len)[源代码]
参数
  • words – [batch, seq_len] 输入序列

  • seq_len – [batch,] 输入序列的长度

Return output

[batch, num_cls] 输出序列的分类

training: bool
class fastNLP.models.BiaffineParser(embed, pos_vocab_size, pos_emb_dim, num_label, rnn_layers=1, rnn_hidden_size=200, arc_mlp_size=100, label_mlp_size=100, dropout=0.3, encoder='lstm', use_greedy_infer=False)[源代码]

基类:fastNLP.models.biaffine_parser.GraphParser

基类 fastNLP.models.GraphParser

别名 fastNLP.models.BiaffineParser fastNLP.models.biaffine_parser.BiaffineParser

__init__(embed, pos_vocab_size, pos_emb_dim, num_label, rnn_layers=1, rnn_hidden_size=200, arc_mlp_size=100, label_mlp_size=100, dropout=0.3, encoder='lstm', use_greedy_infer=False)[源代码]
参数
  • embed – 单词词典, 可以是 tuple, 包括(num_embedings, embedding_dim), 即 embedding的大小和每个词的维度. 也可以传入 nn.Embedding 对象, 此时就以传入的对象作为embedding

  • pos_vocab_size – part-of-speech 词典大小

  • pos_emb_dim – part-of-speech 向量维度

  • num_label – 边的类别个数

  • rnn_layers – rnn encoder的层数

  • rnn_hidden_size – rnn encoder 的隐状态维度

  • arc_mlp_size – 边预测的MLP维度

  • label_mlp_size – 类别预测的MLP维度

  • dropout – dropout概率.

  • encoder – encoder类别, 可选 (‘lstm’, ‘var-lstm’, ‘transformer’). Default: lstm

  • use_greedy_infer – 是否在inference时使用贪心算法. 若 False , 使用更加精确但相对缓慢的MST算法. Default: False

forward(words1, words2, seq_len, target1=None)[源代码]

模型forward阶段

参数
  • words1 – [batch_size, seq_len] 输入word序列

  • words2 – [batch_size, seq_len] 输入pos序列

  • seq_len – [batch_size, seq_len] 输入序列长度

  • target1 – [batch_size, seq_len] 输入真实标注的heads, 仅在训练阶段有效, 用于训练label分类器. 若为 None , 使用预测的heads输入到label分类器 Default: None

Return dict

parsing 结果:

pred1: [batch_size, seq_len, seq_len] 边预测logits
pred2: [batch_size, seq_len, num_label] label预测logits
pred3: [batch_size, seq_len] heads的预测结果, 在 ``target1=None`` 时预测
static loss(pred1, pred2, target1, target2, seq_len)[源代码]

计算parser的loss

参数
  • pred1 – [batch_size, seq_len, seq_len] 边预测logits

  • pred2 – [batch_size, seq_len, num_label] label预测logits

  • target1 – [batch_size, seq_len] 真实边的标注

  • target2 – [batch_size, seq_len] 真实类别的标注

  • seq_len – [batch_size, seq_len] 真实目标的长度

Return loss

scalar

predict(words1, words2, seq_len)[源代码]

模型预测API

参数
  • words1 – [batch_size, seq_len] 输入word序列

  • words2 – [batch_size, seq_len] 输入pos序列

  • seq_len – [batch_size, seq_len] 输入序列长度

Return dict

parsing 结果:

pred1: [batch_size, seq_len] heads的预测结果
pred2: [batch_size, seq_len, num_label] label预测logits
training: bool
class fastNLP.models.GraphParser[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.GraphParser fastNLP.models.biaffine_parser.GraphParser

基于图的parser base class, 支持贪婪解码和最大生成树解码

static greedy_decoder(arc_matrix, mask=None)[源代码]

贪心解码方式, 输入图, 输出贪心解码的parsing结果, 不保证合法的构成树

参数
  • arc_matrix – [batch, seq_len, seq_len] 输入图矩阵

  • mask – [batch, seq_len] 输入图的padding mask, 有内容的部分为 1, 否则为 0. 若为 None 时, 默认为全1向量. Default: None

Return heads

[batch, seq_len] 每个元素在树中对应的head(parent)预测结果

static mst_decoder(arc_matrix, mask=None)[源代码]

用最大生成树算法, 计算parsing结果, 保证输出合法的树结构

参数
  • arc_matrix – [batch, seq_len, seq_len] 输入图矩阵

  • mask – [batch, seq_len] 输入图的padding mask, 有内容的部分为 1, 否则为 0. 若为 None 时, 默认为全1向量. Default: None

Return heads

[batch, seq_len] 每个元素在树中对应的head(parent)预测结果

training: bool
class fastNLP.models.BertForSequenceClassification(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels: int = 2, dropout=0.1)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.BertForSequenceClassification fastNLP.models.bert.BertForSequenceClassification

BERT model for classification.

__init__(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels: int = 2, dropout=0.1)[源代码]
参数
  • embed (fastNLP.embeddings.BertEmbedding) – 下游模型的编码器(encoder).

  • num_labels (int) – 文本分类类别数目,默认值为2.

  • dropout (float) – dropout的大小,默认值为0.1.

forward(words)[源代码]

输入为 [[w1, w2, w3, …], […]], BERTEmbedding会在开头和结尾额外加入[CLS]与[SEP] :param torch.LongTensor words: [batch_size, seq_len] :return: { fastNLP.Const.OUTPUT : logits}: torch.Tensor [batch_size, num_labels]

predict(words)[源代码]
参数

words (torch.LongTensor) – [batch_size, seq_len]

返回

{ fastNLP.Const.OUTPUT : logits}: torch.LongTensor [batch_size]

training: bool
class fastNLP.models.BertForSentenceMatching(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels: int = 2, dropout=0.1)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.BertForSentenceMatching fastNLP.models.bert.BertForSentenceMatching

BERT model for sentence matching.

__init__(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels: int = 2, dropout=0.1)[源代码]
参数
  • embed (fastNLP.embeddings.BertEmbedding) – 下游模型的编码器(encoder).

  • num_labels (int) – Matching任务类别数目,默认值为2.

  • dropout (float) – dropout的大小,默认值为0.1.

forward(words)[源代码]

输入words的格式为 [sent1] + [SEP] + [sent2](BertEmbedding会在开头加入[CLS]和在结尾加入[SEP]),输出为batch_size x num_labels

参数

words (torch.LongTensor) – [batch_size, seq_len]

返回

{ fastNLP.Const.OUTPUT : logits}: torch.Tensor [batch_size, num_labels]

predict(words)[源代码]
参数

words (torch.LongTensor) – [batch_size, seq_len]

返回

{ fastNLP.Const.OUTPUT : logits}: torch.LongTensor [batch_size]

training: bool
class fastNLP.models.BertForMultipleChoice(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_choices=2, dropout=0.1)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.BertForMultipleChoice fastNLP.models.bert.BertForMultipleChoice

BERT model for multiple choice.

__init__(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_choices=2, dropout=0.1)[源代码]
参数
  • embed (fastNLP.embeddings.BertEmbedding) – 下游模型的编码器(encoder).

  • num_choices (int) – 多选任务选项数目,默认值为2.

  • dropout (float) – dropout的大小,默认值为0.1.

forward(words)[源代码]
参数

words (torch.LongTensor) – [batch_size, num_choices, seq_len]

返回

{ fastNLP.Const.OUTPUT : logits}: torch.LongTensor [batch_size, num_choices]

predict(words)[源代码]
参数

words (torch.LongTensor) – [batch_size, num_choices, seq_len]

返回

{ fastNLP.Const.OUTPUT : logits}: torch.LongTensor [batch_size]

training: bool
class fastNLP.models.BertForTokenClassification(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels, dropout=0.1)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.BertForTokenClassification fastNLP.models.bert.BertForTokenClassification

BERT model for token classification.

__init__(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels, dropout=0.1)[源代码]
参数
  • embed (fastNLP.embeddings.BertEmbedding) – 下游模型的编码器(encoder).

  • num_labels (int) – 序列标注标签数目,无默认值.

  • dropout (float) – dropout的大小,默认值为0.1.

forward(words)[源代码]
参数

words (torch.LongTensor) – [batch_size, seq_len]

返回

{ fastNLP.Const.OUTPUT : logits}: torch.Tensor [batch_size, seq_len, num_labels]

predict(words)[源代码]
参数

words (torch.LongTensor) – [batch_size, seq_len]

返回

{ fastNLP.Const.OUTPUT : logits}: torch.LongTensor [batch_size, seq_len]

training: bool
class fastNLP.models.BertForQuestionAnswering(embed: fastNLP.embeddings.bert_embedding.BertEmbedding)[源代码]

基类:fastNLP.models.base_model.BaseModel

基类 fastNLP.models.BaseModel

别名 fastNLP.models.BertForQuestionAnswering fastNLP.models.bert.BertForQuestionAnswering

用于做Q&A的Bert模型,如果是Squad2.0请将BertEmbedding的include_cls_sep设置为True,Squad1.0或CMRC则设置为False

__init__(embed: fastNLP.embeddings.bert_embedding.BertEmbedding)[源代码]
参数
  • embed (fastNLP.embeddings.BertEmbedding) – 下游模型的编码器(encoder).

  • num_labels (int) – 抽取式QA列数,默认值为2(即第一列为start_span, 第二列为end_span).

forward(words)[源代码]
输入words为question + [SEP] + [paragraph],BERTEmbedding在之后会额外加入开头的[CLS]和结尾的[SEP]. note:

如果BERTEmbedding中include_cls_sep=True,则输出的start和end index相对输入words会增加一位;如果为BERTEmbedding中 include_cls_sep=False, 则输出start和end index的位置与输入words的顺序完全一致

参数

words (torch.LongTensor) – [batch_size, seq_len]

返回

一个包含num_labels个logit的dict,每一个logit的形状都是[batch_size, seq_len + 2]

training: bool
class fastNLP.models.TransformerSeq2SeqModel(encoder, decoder)[源代码]

基类:fastNLP.models.seq2seq_model.Seq2SeqModel

基类 fastNLP.models.Seq2SeqModel

别名 fastNLP.models.TransformerSeq2SeqModel fastNLP.models.seq2seq_model.TransformerSeq2SeqModel

Encoder为TransformerSeq2SeqEncoder, decoder为TransformerSeq2SeqDecoder,通过build_model方法初始化

classmethod build_model(src_embed, tgt_embed=None, pos_embed='sin', max_position=1024, num_layers=6, d_model=512, n_head=8, dim_ff=2048, dropout=0.1, bind_encoder_decoder_embed=False, bind_decoder_input_output_embed=True)[源代码]

初始化一个TransformerSeq2SeqModel

参数
  • StaticEmbedding, Tuple[int, int] src_embed (nn.Module,) – source的embedding

  • StaticEmbedding, Tuple[int, int] tgt_embed (nn.Module,) – target的embedding,如果bind_encoder_decoder_embed为 True,则不要输入该值

  • pos_embed (str) – 支持sin, learned两种

  • max_position (int) – 最大支持长度

  • num_layers (int) – encoder和decoder的层数

  • d_model (int) – encoder和decoder输入输出的大小

  • n_head (int) – encoder和decoder的head的数量

  • dim_ff (int) – encoder和decoder中FFN中间映射的维度

  • dropout (float) – Attention和FFN dropout的大小

  • bind_encoder_decoder_embed (bool) – 是否对encoder和decoder使用相同的embedding

  • bind_decoder_input_output_embed (bool) – decoder的输出embedding是否与其输入embedding是一样的权重

返回

TransformerSeq2SeqModel

training: bool
class fastNLP.models.LSTMSeq2SeqModel(encoder, decoder)[源代码]

基类:fastNLP.models.seq2seq_model.Seq2SeqModel

基类 fastNLP.models.Seq2SeqModel

别名 fastNLP.models.LSTMSeq2SeqModel fastNLP.models.seq2seq_model.LSTMSeq2SeqModel

使用LSTMSeq2SeqEncoder和LSTMSeq2SeqDecoder的model

classmethod build_model(src_embed, tgt_embed=None, num_layers=3, hidden_size=400, dropout=0.3, bidirectional=True, attention=True, bind_encoder_decoder_embed=False, bind_decoder_input_output_embed=True)[源代码]
参数
  • StaticEmbedding, Tuple[int, int] src_embed (nn.Module,) – source的embedding

  • StaticEmbedding, Tuple[int, int] tgt_embed (nn.Module,) – target的embedding,如果bind_encoder_decoder_embed为 True,则不要输入该值

  • num_layers (int) – Encoder和Decoder的层数

  • hidden_size (int) – encoder和decoder的隐藏层大小

  • dropout (float) – 每层之间的Dropout的大小

  • bidirectional (bool) – encoder是否使用双向LSTM

  • attention (bool) – decoder是否使用attention attend encoder在所有时刻的状态

  • bind_encoder_decoder_embed (bool) – 是否对encoder和decoder使用相同的embedding

  • bind_decoder_input_output_embed (bool) – decoder的输出embedding是否与其输入embedding是一样的权重

返回

LSTMSeq2SeqModel

training: bool
class fastNLP.models.SequenceGeneratorModel(seq2seq_model: fastNLP.models.seq2seq_model.Seq2SeqModel, bos_token_id, eos_token_id=None, max_length=30, max_len_a=0.0, num_beams=1, do_sample=True, temperature=1.0, top_k=50, top_p=1.0, repetition_penalty=1, length_penalty=1.0, pad_token_id=0)[源代码]

基类:torch.nn.modules.module.Module

通过使用本模型封装seq2seq_model使得其既可以用于训练也可以用于生成。训练的时候,本模型的forward函数会被调用,生成的时候本模型的predict

函数会被调用。

__init__(seq2seq_model: fastNLP.models.seq2seq_model.Seq2SeqModel, bos_token_id, eos_token_id=None, max_length=30, max_len_a=0.0, num_beams=1, do_sample=True, temperature=1.0, top_k=50, top_p=1.0, repetition_penalty=1, length_penalty=1.0, pad_token_id=0)[源代码]
参数
  • seq2seq_model (Seq2SeqModel) – 序列到序列模型

  • bos_token_id (int,None) – 句子开头的token id

  • eos_token_id (int,None) – 句子结束的token id

  • max_length (int) – 生成句子的最大长度, 每句话的decode长度为max_length + max_len_a*src_len

  • max_len_a (float) – 每句话的decode长度为max_length + max_len_a*src_len。 如果不为0,需要保证State中包含encoder_mask

  • num_beams (int) – beam search的大小

  • do_sample (bool) – 是否通过采样的方式生成

  • temperature (float) – 只有在do_sample为True才有意义

  • top_k (int) – 只从top_k中采样

  • top_p (float) – 只从top_p的token中采样,nucles sample

  • repetition_penalty (float) – 多大程度上惩罚重复的token

  • length_penalty (float) – 对长度的惩罚,小于1鼓励长句,大于1鼓励短剧

  • pad_token_id (int) – 当某句话生成结束之后,之后生成的内容用pad_token_id补充

forward(src_tokens, tgt_tokens, src_seq_len=None, tgt_seq_len=None)[源代码]

透传调用seq2seq_model的forward。

参数
  • src_tokens (torch.LongTensor) – bsz x max_len

  • tgt_tokens (torch.LongTensor) – bsz x max_len’

  • src_seq_len (torch.LongTensor) – bsz

  • tgt_seq_len (torch.LongTensor) – bsz

返回

predict(src_tokens, src_seq_len=None)[源代码]

给定source的内容,输出generate的内容。

参数
  • src_tokens (torch.LongTensor) – bsz x max_len

  • src_seq_len (torch.LongTensor) – bsz

返回

training: bool