fastNLP.models

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

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

别名 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, ]

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

基类 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]

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

别名 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

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.ESIM(embed, hidden_size=None, num_labels=3, dropout_rate=0.3, dropout_embed=0.1)[源代码]

基类 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 --
返回:

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

别名 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 节点, 详见论文

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)[源代码]

别名 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] 输出序列中每个元素的分类

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)[源代码]

别名 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] 输出分类的概率

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)[源代码]

别名 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] 输出序列的分类

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.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
class fastNLP.models.GraphParser[源代码]

基类 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)预测结果

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

基类 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]
class fastNLP.models.BertForSentenceMatching(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels: int = 2, dropout=0.1)[源代码]

基类 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]
class fastNLP.models.BertForMultipleChoice(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_choices=2, dropout=0.1)[源代码]

基类 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]
class fastNLP.models.BertForTokenClassification(embed: fastNLP.embeddings.bert_embedding.BertEmbedding, num_labels, dropout=0.1)[源代码]

基类 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]
class fastNLP.models.BertForQuestionAnswering(embed: fastNLP.embeddings.bert_embedding.BertEmbedding)[源代码]

基类 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]