README.md 8.2 KB
Newer Older
S
shinichiye 已提交
1
# lac
W
wuzewu 已提交
2

S
shinichiye 已提交
3
|模型名称|lac|
4
| :--- | :---: |
S
shinichiye 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17
|类别|文本-词法分析|
|网络|BiGRU+CRF|
|数据集|百度自建数据集|
|是否支持Fine-tuning|否|
|模型大小|35MB|
|最新更新日期|2021-02-26|
|数据指标|Precision=88.0%,Recall=88.7%,F1-Score=88.4%|



## 一、模型基本信息

- ### 模型介绍
W
wuzewu 已提交
18

S
shinichiye 已提交
19
  - Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。在百度自建数据集上评测,LAC效果:Precision=88.0%,Recall=88.7%,F1-Score=88.4%。该PaddleHub Module支持预测。
20

S
shinichiye 已提交
21 22 23
<p align="center">
<img src="https://user-images.githubusercontent.com/76040149/130606395-60691079-d33f-4d74-a980-b4d9e3bc663e.png"   height = "300" hspace='10'/> <br />
</p>
W
wuzewu 已提交
24

S
shinichiye 已提交
25
  - 更多详情请参考:[LAC论文](https://arxiv.org/abs/1807.01882)
W
wuzewu 已提交
26 27


S
Steffy-zxf 已提交
28 29


S
shinichiye 已提交
30
## 二、安装
S
Steffy-zxf 已提交
31

S
shinichiye 已提交
32
- ### 1、环境依赖  
S
Steffy-zxf 已提交
33

S
shinichiye 已提交
34
  - paddlepaddle >= 1.6.2
35

S
shinichiye 已提交
36
  - paddlehub >= 1.6.0    | [如何安装PaddleHub](../../../../docs/docs_ch/get_start/installation.rst)
37 38 39

  - 若使用词典干预功能,额外依赖第三方库 pyahocorasick

S
shinichiye 已提交
40 41 42
  - ```shell
    $ pip install pyahocorasick
    ```
43

S
shinichiye 已提交
44
- ### 2、安装
S
Steffy-zxf 已提交
45

S
shinichiye 已提交
46 47 48 49 50
  - ```shell
    $ hub install lac
    ```
  - 如您安装时遇到问题,可参考:[零基础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)
W
wuzewu 已提交
51 52 53 54




S
shinichiye 已提交
55
## 三、模型API预测
W
wuzewu 已提交
56

S
shinichiye 已提交
57
- ### 1、命令行预测
W
wuzewu 已提交
58

S
shinichiye 已提交
59 60 61 62 63 64 65
  - ```shell
    $ hub run lac --input_text "今天是个好日子"
    ```
  - 或者
  - ```shell
    $ hub run lac --input_file test.txt --user_dict user.dict
    ```
66

S
shinichiye 已提交
67 68
    - test.txt 存放待分词文本, 如:
      - ```shell
69 70 71
        今天是个好日子  
        今天天气晴朗
        ```
S
shinichiye 已提交
72 73 74 75 76 77
    - user.dict 为用户自定义词典,可以不指定,当指定自定义词典时,可以干预默认分词结果。如:
      - ```shell
        春天/SEASON
        花/n 开/v
        秋天的风
        落 阳  
78
        ```
S
shinichiye 已提交
79
      - 词典文件每行表示一个定制化的item,由一个单词或多个连续的单词组成,每个单词后使用'/'表示标签,如果没有'/'标签则会使用模型默认的标签。每个item单词数越多,干预效果会越精准。
W
wuzewu 已提交
80

S
shinichiye 已提交
81
    - Note:该PaddleHub Module使用词典干预功能时,依赖于第三方库pyahocorasick,请自行安装
82

S
shinichiye 已提交
83
  - 通过命令行方式实现文字识别模型的调用,更多请见 [PaddleHub命令行指令](../../../../docs/docs_ch/tutorial/cmd_usage.rst)
W
wuzewu 已提交
84

S
shinichiye 已提交
85
- ### 2、预测代码示例
W
wuzewu 已提交
86

S
shinichiye 已提交
87 88
  - ```python
    import paddlehub as hub
W
wuzewu 已提交
89

S
shinichiye 已提交
90 91
    lac = hub.Module(name="lac")
    test_text = ["今天是个好日子", "天气预报说今天要下雨", "下一班地铁马上就要到了"]
W
wuzewu 已提交
92

S
shinichiye 已提交
93
    results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)
W
wuzewu 已提交
94

S
shinichiye 已提交
95 96 97
    for result in results:
        print(result['word'])
        print(result['tag'])
98

S
shinichiye 已提交
99 100 101 102 103 104 105
    # ['今天', '是', '个', '好日子']
    # ['TIME', 'v', 'q', 'n']
    # ['天气预报', '说', '今天', '要', '下雨']
    # ['n', 'v', 'TIME', 'v', 'v']
    # ['下', '一班', '地铁', '马上', '就要', '到', '了']
    # ['f', 'm', 'n', 'd', 'v', 'v', 'xc']
    ```
106 107 108



S
shinichiye 已提交
109
- ### 3、API
W
wuzewu 已提交
110

S
shinichiye 已提交
111 112 113 114
  - ```python
    def __init__(user_dict=None)
    ```
    - 构造LAC对象
W
wuzewu 已提交
115

S
shinichiye 已提交
116
    - **参数**
W
wuzewu 已提交
117

S
shinichiye 已提交
118
      - user_dict(str): 自定义词典路径。如果需要使用自定义词典,则可通过该参数设置,否则不用传入该参数。
W
wuzewu 已提交
119 120


S
shinichiye 已提交
121 122 123
  - ```python
    def cut(text, use_gpu=False, batch_size=1, return_tag=True)
    ```
W
wuzewu 已提交
124

S
shinichiye 已提交
125
    - lac预测接口,预测输入句子的分词结果
W
wuzewu 已提交
126

S
shinichiye 已提交
127
    - **参数**
W
wuzewu 已提交
128

S
shinichiye 已提交
129 130 131 132
      - text(str or list): 待预测数据,单句预测数据(str类型)或者批量预测(list,每个元素为str
      - use_gpu(bool): 是否使用GPU预测,如果使用GPU预测,则在预测之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置
      - batch_size(int): 批处理大小
      - return_tag(bool): 预测结果是否需要返回分词标签结果
W
wuzewu 已提交
133 134


S
shinichiye 已提交
135 136 137
  - ```python
    def lexical_analysis(texts=[], data={}, use_gpu=False, batch_size=1, user_dict=None, return_tag=True)
    ```
138

S
shinichiye 已提交
139
    - **该接口将会在未来版本被废弃,如有需要,请使用cut接口预测**
W
wuzewu 已提交
140

S
shinichiye 已提交
141
    - lac预测接口,预测输入句子的分词结果
W
wuzewu 已提交
142

S
shinichiye 已提交
143
    - **参数**
W
wuzewu 已提交
144

S
shinichiye 已提交
145 146 147 148 149
      - texts(list): 待预测数据,如果使用texts参数,则不用传入data参数,二选一即可
      - data(dict): 预测数据,key必须为text,value是带预测数据。如果使用data参数,则不用传入texts参数,二选一即可。建议使用texts参数,data参数后续会废弃
      - use_gpu(bool): 是否使用GPU预测,如果使用GPU预测,则在预测之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置
      - batch_size(int): 批处理大小
      - return_tag(bool): 预测结果是否需要返回分词标签结果
W
wuzewu 已提交
150

S
shinichiye 已提交
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 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
    - **返回**

      - results(list): 分词结果


  - ```python
    def set_user_dict(dict_path)
    ```

    - 加载用户自定义词典

    - **参数**

      - dict_path(str ): 自定义词典路径


  - ```python
    def del_user_dict()
    ```

    - 删除自定义词典


  - ```python
    def get_tags()
    ```

    - 获取lac的标签

    - **返回**

      - tag_name_dict(dict): lac的标签




## 四、服务部署

- PaddleHub Serving可以部署一个在线词法分析服务,可以将此接口用于词法分析、在线分词等在线web应用。

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

  - 运行启动命令:
  - ```shell
    $ hub serving start -c serving_config.json
    ```

    `serving_config.json`的内容如下:
    ```json
    {
      "modules_info": {
        "lac": {
          "init_args": {
            "version": "2.1.0",
            "user_dict": "./test_dict.txt"
          },
          "predict_args": {}
        }
K
KP 已提交
209
      },
S
shinichiye 已提交
210 211 212
      "port": 8866,
      "use_singleprocess": false,
      "workers": 2
W
wuzewu 已提交
213
    }
S
shinichiye 已提交
214 215 216 217 218 219
    ```
  - 其中user_dict含义为自定义词典路径,如果不使用lac自定义词典功能,则可以不填入。

  - 这样就完成了一个词法分析服务化API的部署,默认端口号为8866。

  - **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。
W
wuzewu 已提交
220

S
shinichiye 已提交
221
- ### 第二步:发送预测请求
W
wuzewu 已提交
222

S
shinichiye 已提交
223
  - 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果
W
wuzewu 已提交
224

S
shinichiye 已提交
225 226 227
  - ```python
    import requests
    import json
W
wuzewu 已提交
228

S
shinichiye 已提交
229 230
    # 待预测数据
    text = ["今天是个好日子", "天气预报说今天要下雨"]
W
wuzewu 已提交
231

S
shinichiye 已提交
232 233 234
    # 设置运行配置
    # 对应本地预测lac.analysis_lexical(texts=text, batch_size=1, use_gpu=True)
    data = {"texts": text, "batch_size": 1, "use_gpu":True}
W
wuzewu 已提交
235

S
shinichiye 已提交
236 237 238 239 240
    # 指定预测方法为lac并发送post请求,content-type类型应指定json方式
    # HOST_IP为服务器IP
    url = "http://HOST_IP:8866/predict/lac"
    headers = {"Content-Type": "application/json"}
    r = requests.post(url=url, headers=headers, data=json.dumps(data))
W
wuzewu 已提交
241

S
shinichiye 已提交
242 243 244
    # 打印预测结果
    print(json.dumps(r.json(), indent=4, ensure_ascii=False))
    ```
W
wuzewu 已提交
245

S
shinichiye 已提交
246
  - 关于PaddleHub Serving更多信息参考:[服务部署](../../../../docs/docs_ch/tutorial/serving.md)
W
wuzewu 已提交
247

jm_12138's avatar
jm_12138 已提交
248 249
- ### Gradio APP 支持
  从 PaddleHub 2.3.1 开始支持使用链接 http://127.0.0.1:8866/gradio/lac 在浏览器中访问 lac 的 Gradio APP。
S
Steffy-zxf 已提交
250

S
shinichiye 已提交
251
## 五、更新历史
S
Steffy-zxf 已提交
252 253 254

* 1.0.0

S
shinichiye 已提交
255
  初始发布
S
Steffy-zxf 已提交
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285

* 1.0.1

  修复python2中编码问题

* 1.1.0

  支持词典干预,通过配置自定义词典可以对LAC默认分词结果进行干预

* 1.1.1

  修复输入文本中带有/字符时,使用词典干预会崩溃的问题

* 2.0.0

  修复输入文本为空、“ ”或者“\n”,使用LAC会崩溃的问题
  更新embedding_size, hidden_size为128,压缩模型,性能提升

* 2.1.0

  lac预测性能大幅提升
  支持是否返回分词标签tag,同时简化预测接口使用

* 2.1.1

  当输入文本为空字符串“”,返回切词后结果为空字符串“”,分词tag也为“”

* 2.2.0

  升级自定义词典功能,支持增加不属于lac默认提供的词性
286

jm_12138's avatar
jm_12138 已提交
287
* 2.3.0
288 289 290

  移除 fluid api

jm_12138's avatar
jm_12138 已提交
291 292 293 294
* 2.4.0

  添加 Gradio APP 支持

S
shinichiye 已提交
295
  - ```shell
jm_12138's avatar
jm_12138 已提交
296
    $ hub install lac==2.4.0
S
shinichiye 已提交
297
    ```