models.md 7.8 KB
Newer Older
Z
Zeyu Chen 已提交
1
# PaddleNLP Models API
Z
Zeyu Chen 已提交
2

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
该模块提供了百度自研的模型的高阶API,如文本分类模型Senta,文本匹配模型SimNet,通用预训练模型ERNIE等。

```python
class paddlenlp.models.Ernie(model_name, num_classes, task=None, **kwargs):
    """
    预训练模型ERNIE。
    更多信息参考:ERNIE: Enhanced Representation through Knowledge Integration(https://arxiv.org/abs/1904.09223)

    参数:
        `model_name (obj:`str`)`: 模型名称,如`ernie-1.0`,`ernie-tiny`,`ernie-2.0-en`, `ernie-2.0-large-en`。
        `num_classes (obj:`int`)`: 分类类别数。
        `task (obj:`str`): 预训练模型ERNIE用于下游任务名称,可以为`seq-cls`,`token-cls`,`qa`. 默认为None

            - task='seq-cls': ERNIE用于文本分类任务。其将从ERNIE模型中提取句子特征,用于最后一层全连接网络进行文本分类。
                详细信息参考:`paddlenlp.transformers.ErnieForSequenceClassification`。
            - task='token-cls': ERNIE用于序列标注任务。其将从ERNIE模型中提取每一个token特征,用于最后一层全连接网络进行token分类。
                详细信息参考:`paddlenlp.transformers.ErnieForQuestionAnswering`。
            - task='qa': ERNIE用于阅读理解任务。其将从ERNIE模型中提取每一个token特征,用于最后一层全连接网络进行答案位置在原文中位置的预测。
                详细信息参考:`paddlenlp.transformers.ErnieForTokenClassification`。
            - task='None':预训练模型ERNIE。可将其作为backbone,用于提取句子特征pooled_output、token特征sequence_output。
                详细信息参考:`paddlenlp.transformers.ErnieModel`
    """

    def forward(input_ids, token_type_ids=None, position_ids=None, attention_mask=None):
        """
        参数:
            `input_ids (obj:`paddle.Tensor`)`:文本token id,shape为(batch_size, sequence_length)。
            `token_type_ids (obj:`paddle.Tensor`)`: 各token所在文本的标识(token属于文本1或者文本2),shape为(batch_size, sequence_length)。
                默认为None,表示所有token都属于文本1。
            `position_ids(obj:`paddle.Tensor`)`:各Token在输入序列中的位置,shape为(batch_size, sequence_length)。默认为None。
            `attention_mask`(obj:`paddle.Tensor`)`:为了避免在padding token上做attention操作,`attention_mask`表示token是否为padding token的标志矩阵,
                shape为(batch_size, sequence_length)。mask的值或为0或为1, 为1表示该token是padding token,为0表示该token为真实输入token id。默认为None。

        返回:
            - 当`task=None`时,返回相应下游任务的分类概率值`probs(obj:`paddle.Tensor`)`,shape为(batch_size,num_classes)。
            - 当`task=None`时,返回预训练模型ERNIE的句子特征pooled_output、token特征sequence_output。
              * pooled_output(obj:`paddle.Tensor`):shape (batch_size,hidden_size)
              * sequence_output(obj:`paddle.Tensor`):shape (batch_size,sequence_length, hidden_size)

        """

```


```python
class paddlenlp.models.Senta(network, vocab_size, num_classes, emb_dim=128, pad_token_id=0):
    """
    文本分类模型Senta

    参数:
        `network(obj:`str`)`: 网络名称,可选bow,bilstm,bilstm_attn,bigru,birnn,cnn,lstm,gru,rnn以及textcnn。

            - network='bow',对输入word embedding相加作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.BoWEncoder`。
            - network=`bilstm`, 对输入word embedding进行双向lstm操作,取最后一个step的表示作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.LSTMEncoder`。
            - network=`bilstm_attn`, 对输入word embedding进行双向lstm和Attention操作,取最后一个step的表示作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.LSTMEncoder`。
            - network=`bigru`, 对输入word embedding进行双向gru操作,取最后一个step的表示作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.GRUEncoder`。
            - network=`birnn`, 对输入word embedding进行双向rnn操作,取最后一个step的表示作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.RNNEncoder`。
            - network='cnn',对输入word embedding进行一次积操作后进行max-pooling,作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.CNNEncoder`。
            - network='lstm', 对输入word embedding进行lstm操作后进行max-pooling,作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.LSTMEncoder`。
            - network='gru', 对输入word embedding进行lstm操作后进行max-pooling,作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.GRUEncoder`。
            - network='rnn', 对输入word embedding进行lstm操作后进行max-pooling,作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.RNNEncoder`。
            - network='textcnn',对输入word embedding进行多次卷积和max-pooling,作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.CNNEncoder`。

        `vocab_size(obj:`int`)`:词汇表大小。
        `num_classes(obj:`int`)`:分类类别数。
        `emb_dim(obj:`int`)`:word embedding维度,默认128.
        `pad_token_id(obj:`int`)`:padding token 在词汇表中index,默认0。

    """

    def forward(text, seq_len):
        """
        参数:
            `text(obj:`paddle.Tensor`)`: 文本token id,shape为(batch_size, sequence_length)。
            `seq_len(obj:`paddle.Tensor`): 文本序列长度, shape为(batch_size)。

        返回:
            `probs(obj:`paddle.Tensor`)`: 分类概率值,shape为(batch_size,num_classes)。

        """

```

```python
class paddlenlp.models.SimNet(nn.Layer):
    """
    文本匹配模型SimNet

    参数:
        `network(obj:`str`)`: 网络名称,可选bow,cnn,lstm,以及gru,rnn以及textcnn。

            - network='bow',对输入word embedding相加作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.BoWEncoder`。
            - network='cnn',对输入word embedding进行一次积操作后进行max-pooling,作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.CNNEncoder`。
            - network='lstm', 对输入word embedding进行lstm操作,取最后一个step的表示作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.LSTMEncoder`。
            - network='gru', 对输入word embedding进行lstm操作后进行max-pooling,取最后一个step的表示作为文本特征表示。
                详细信息参考:`paddlenlp.seq2vec.GRUEncoder`。

        `vocab_size(obj:`int`)`:词汇表大小。
        `num_classes(obj:`int`)`:分类类别数。
        `emb_dim(obj:`int`)`:word embedding维度,默认128。
        `pad_token_id(obj:`int`)`:padding token 在词汇表中index,默认0。

    """

    def forward(query, title, query_seq_len=None, title_seq_len=None):
        """
        参数:
            `query(obj:`paddle.Tensor`)`: query文本token id,shape为(batch_size, query_sequence_length)。
            `title(obj:`paddle.Tensor`)`: title文本token id,shape为(batch_size, title_sequence_length)。

            `query_seq_len(obj:`paddle.Tensor`): query文本序列长度,shape为(batch_size)。。

        返回:
            `probs(obj:`paddle.Tensor`)`: 分类概率值,shape为(batch_size,num_classes)。

        """

```