readme.md 5.6 KB
Newer Older
S
shinichiye 已提交
1 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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
# CPM_LM

| 模型名称            |    CPM_LM     |
| :------------------ | :-----------: |
| 类别                | 文本-文本生成 |
| 网络                |     GPT-2     |
| 数据集              |  自建数据集   |
| 是否支持Fine-tuning |      否       |
| 模型大小            |     5.31G     |
| 最新更新日期        |  2021-02-26   |
| 数据指标            |       -       |

## 一、模型基本信息

- ### 模型介绍
  - CPM-LM 是一个基于 GPT-2 的预训练生成模型,参数规模达 26 亿,预训练中文数据规模 100 GB,使用了 64 块 V100 GPU,训练时间约为 3 周。能够在多种自然语言处理任务上进行零次学习或少次学习,并达到较好的效果。基于给定上文,模型可以续写出一致性高、可读性强的文本,达到现有中文生成模型的领先效果。


## 二、安装

- ### 1、环境依赖

  - paddlepaddle >= 2.0.0
  
  - paddlehub >= 2.0.0    | [如何安装PaddleHub](../../../../docs/docs_ch/get_start/installation.rst)
  
  - sentencepiece==0.1.92
  
    - **注意本模型对sentencepiece版本要求严格,在使用前请确认您所使用的版本是正确的**
    
    - ```shell
      $ pip install sentencepiece==0.1.92
      ```
  
- ### 2、安装

  - ```shell
    $ hub install CPM_LM
    ```

  - 如您安装时遇到问题,可参考:[零基础windows安装](../../../../docs/docs_ch/get_start/windows_quickstart.md)
   | [零基础Linux安装](../../../../docs/docs_ch/get_start/linux_quickstart.md) | [零基础MacOS安装](../../../../docs/docs_ch/get_start/mac_quickstart.md)

## 三、模型API预测

- ### 1、预测代码示例

  - ```python
    import paddlehub as hub
    
    model = hub.Module(name='CPM_LM')  # 加载模型
    ```
  - Note:模型参数转换至官方开源项目,由于模型较大,推荐在GPU环境下运行,并且请确保运行环境的内存大于20G且显卡显存大于12G,否则可能无法正常运行 
     
  - 使用 Greedy Search 生成文本:

    - ```python
      inputs = '''默写古诗:
      日照香炉生紫烟,遥看瀑布挂前川。
      飞流直下三千尺,'''
      outputs = model.predict(inputs, max_len=10, end_word='\n')
      print(inputs+outputs)
      
      # 默写古诗:
      # 日照香炉生紫烟,遥看瀑布挂前川。
      # 飞流直下三千尺,疑是银河落九天。
      ```

    - ```python
      inputs = '''问题:西游记是谁写的?
      答案:'''
      outputs = model.predict(inputs, max_len=10, end_word='\n')
      print(inputs+outputs)
      
      # 问题:西游记是谁写的?
      # 答案:吴承恩。
      ```

    - ```python
      inputs = '''小明决定去吃饭,小红继续写作业
      问题:去吃饭的人是谁?
      答案:'''
      outputs = model.predict(inputs, max_len=10, end_word='\n')
      print(inputs+outputs)
      
      # 小明决定去吃饭,小红继续写作业
      # 问题:去吃饭的人是谁?
      # 答案:小明
      ```

    - ```python
      inputs = '''默写英文:
      狗:dog
      猫:'''
      outputs = model.predict(inputs, max_len=10, end_word='\n')
      print(inputs+outputs)
      
      # 默写英文:
      # 狗:dog
      # 猫:cat
      ```

- ### 2、API

  - ```python
    def predict(text, max_len=32, end_word=None):
    ```

    - 预测 API ,根据输入的文字进行文本生成,使用 Greedy Search 进行解码。
    - **参数**
      - text (str) : 输入文本
      - max_len (int) : 生成文本的最大长度
      - end_word (str or None) : 终止生成的标志词
    - **返回**
      - results (str): 生成的文本
    
  - ```python
    def tokenizer.encode(text):
    ```
  
    - 编码 API
    - **参数**
      - text (str) : 输入文本
    - **返回**
      - results (list[int](https://www.paddlepaddle.org.cn/hubdetail?name=CPM_LM&en_category=TextGeneration)) : 输出编码
    
  - ```python
    def tokenizer.decode(ids):
    ```
  
    - 解码 API
    - **参数**
      - ids (list[int](https://www.paddlepaddle.org.cn/hubdetail?name=CPM_LM&en_category=TextGeneration)) : 输入编码
    - **返回**
      - results (str) : 输出文本
  
  - ```python
    def model(x, kv_cache=None, use_cache=False):
    ```
  
    - 模型前向计算 API
    - **参数**
      - x (tensor) : 输入编码
      - kv_cache (tensor) : 输入的缓存
      - use_cache (bool) : 是否使用缓存
    - **返回**
      - results (tensor) : 模型输出


## 四、服务部署

- PaddleHub Serving可以部署一个在线文本生成服务。

- ### 第一步:启动PaddleHub Serving

  - 运行启动命令:
  - ```shell
    $ hub serving start --modules GPT2_CPM_LM -p 8866
    ```

  - 这样就完成了一个对话机器人服务化API的部署,默认端口号为8866。
  - **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。


- ### 第二步:发送预测请求

  - 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果

  - ```python
    import requests
    import json
    
    text = "今天是个好日子"
    data = {
        "text": text,
        "mode": "sample", # 'search' or 'sample'
        # 可以更加需要设置上述 API 中提到的其他参数
    }
    url = "http://127.0.0.1:8866/predict/GPT2_CPM_LM"
    headers = {"Content-Type": "application/json"}
    
    r = requests.post(url=url, headers=headers, data=json.dumps(data))
    ```
    
  - 关于PaddleHub Serving更多信息参考[服务部署](../../../../docs/docs_ch/tutorial/serving.md)

## 五、更新历史

* 1.0.0

  初始发布