Skip to content

Commit dc8ecdf

Browse files
Bond-Hchenbjin
authored andcommitted
Update lexical_analysis code for paddle 1.6 (#3823)
* update PaddleNLP lexical_analysis for Release/1.6 (#3664) * update for paddle 1.6 * update optimize op in paddle 1.6 * fix ernie based in paddle 1.6 * fix coding for windows * update downloads.py (#3672) * Fix infer bug on Release/1.6 * fix bug on ernie based inferring * replace open with io.open to be compatible with windows (#3707) * update README.md
1 parent 482f33f commit dc8ecdf

14 files changed

+823
-345
lines changed

PaddleNLP/emotion_detection/inference_model.py

+11-14
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ def do_save_inference_model(args):
4545
with fluid.program_guard(test_prog, startup_prog):
4646
with fluid.unique_name.guard():
4747
infer_loader, probs, feed_target_names = create_model(
48-
args,
49-
num_labels=args.num_labels,
50-
is_prediction=True)
48+
args, num_labels=args.num_labels, is_prediction=True)
5149

5250
test_prog = test_prog.clone(for_test=True)
5351
exe = fluid.Executor(place)
@@ -82,10 +80,10 @@ def test_inference_model(args, texts):
8280

8381
assert (args.inference_model_dir)
8482
infer_program, feed_names, fetch_targets = fluid.io.load_inference_model(
85-
dirname=args.inference_model_dir,
86-
executor=exe,
87-
model_filename="model.pdmodel",
88-
params_filename="params.pdparams")
83+
dirname=args.inference_model_dir,
84+
executor=exe,
85+
model_filename="model.pdmodel",
86+
params_filename="params.pdparams")
8987
data = []
9088
seq_lens = []
9189
for query in texts:
@@ -97,13 +95,13 @@ def test_inference_model(args, texts):
9795
seq_lens = np.array(seq_lens)
9896

9997
pred = exe.run(infer_program,
100-
feed={
101-
feed_names[0]:data,
102-
feed_names[1]:seq_lens},
103-
fetch_list=fetch_targets,
104-
return_numpy=True)
98+
feed={feed_names[0]: data,
99+
feed_names[1]: seq_lens},
100+
fetch_list=fetch_targets,
101+
return_numpy=True)
105102
for probs in pred[0]:
106-
print("%d\t%f\t%f\t%f" % (np.argmax(probs), probs[0], probs[1], probs[2]))
103+
print("%d\t%f\t%f\t%f" %
104+
(np.argmax(probs), probs[0], probs[1], probs[2]))
107105

108106

109107
if __name__ == "__main__":
@@ -116,4 +114,3 @@ def test_inference_model(args, texts):
116114
else:
117115
texts = [u"我 讨厌 你 , 哼哼 哼 。 。", u"我 喜欢 你 , 爱 你 哟"]
118116
test_inference_model(args, texts)
119-

PaddleNLP/lexical_analysis/README.md

+24-26
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型
1616

1717
#### 1.PaddlePaddle 安装
1818

19-
本项目依赖 PaddlePaddle 1.4.0 及以上版本和PaddleHub 1.0.0及以上版本 ,PaddlePaddle安装请参考官网 [快速安装](http://www.paddlepaddle.org/paddle#quick-start),PaddleHub安装参考 [PaddleHub](https://github.com/PaddlePaddle/PaddleHub)
19+
本项目依赖 PaddlePaddle 1.6.0 及以上版本和PaddleHub 1.0.0及以上版本 ,PaddlePaddle安装请参考官网 [快速安装](http://www.paddlepaddle.org/paddle#quick-start),PaddleHub安装参考 [PaddleHub](https://github.com/PaddlePaddle/PaddleHub)
2020

2121
> Warning: GPU 和 CPU 版本的 PaddlePaddle 分别是 paddlepaddle-gpu 和 paddlepaddle,请安装时注意区别。
2222
@@ -26,52 +26,48 @@ Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型
2626
git clone https://github.com/PaddlePaddle/models.git
2727
cd models/PaddleNLP/lexical_analysis
2828
```
29+
30+
#### 3. 环境依赖
31+
PaddlePaddle的版本要求是:Python 2 版本是 2.7.15+、Python 3 版本是 3.5.1+/3.6/3.7。LAC的代码可支持Python2/3,无具体版本限制
32+
2933
### 数据准备
3034

3135
#### 1. 快速下载
3236

3337
本项目涉及的**数据集****预训练模型**的数据可通过执行以下脚本进行快速下载,若仅需使用部分数据,可根据需要参照下列介绍进行部分下载
3438

3539
```bash
36-
sh download.sh
40+
python downloads.py all
41+
```
42+
或在支持运行shell脚本的环境下执行:
43+
```bash
44+
sh downloads.sh
3745
```
3846

3947
#### 2. 训练数据集
4048

4149
下载数据集文件,解压后会生成 `./data/` 文件夹
4250
```bash
43-
wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/lexical_analysis-dataset-2.0.0.tar.gz
44-
tar xvf lexical_analysis-dataset-2.0.0.tar.gz
51+
python downloads.py dataset
4552
```
4653

4754
#### 3. 预训练模型
4855

49-
我们开源了在自建数据集上训练的词法分析模型,可供用户直接使用,这里提供两种下载方式:
50-
51-
方式一:基于 PaddleHub 命令行工具,PaddleHub 的安装参考 [PaddleHub](https://github.com/PaddlePaddle/PaddleHub)
56+
我们开源了在自建数据集上训练的词法分析模型,可供用户直接使用,可通过下述链接进行下载:
5257
```bash
5358
# download baseline model
54-
hub download lexical_analysis
55-
tar xvf lexical_analysis-2.0.0.tar.gz
59+
python downloads.py lac
5660

5761
# download ERNIE finetuned model
58-
hub download lexical_analysis_finetuned
59-
tar xvf lexical_analysis_finetuned-1.0.0.tar.gz
60-
```
62+
python downloads.py finetuned
6163

62-
方式二:直接下载
63-
```bash
64-
# download baseline model
65-
wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/lexical_analysis-2.0.0.tar.gz
66-
tar xvf lexical_analysis-2.0.0.tar.gz
67-
68-
# download ERNIE finetuned model
69-
wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/lexical_analysis_finetuned-1.0.0.tar.gz
70-
tar xvf lexical_analysis_finetuned-1.0.0.tar.gz
64+
# download ERNIE model for training
65+
python downloads.py ernie
7166
```
7267

73-
注:若需进行ERNIE Finetune训练,需自行下载 [ERNIE](https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz) 开放的模型,下载链接为: [https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz](https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz),下载后解压至 `./pretrained/` 目录下。
74-
68+
注:若需进行ERNIE Finetune训练,需先行下载
69+
[ERNIE](https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz) 开放的模型,通过命令`python
70+
downloads.py ernie`可完成下载
7571
### 模型评估
7672

7773
我们基于自建的数据集训练了一个词法分析的模型,可以直接用这个模型对测试集 `./data/test.tsv` 进行验证,
@@ -85,8 +81,9 @@ sh run_ernie.sh eval
8581

8682
### 模型训练
8783
基于示例的数据集,可通过下面的命令,在训练集 `./data/train.tsv` 上进行训练,示例包含程序在单机单卡/多卡,以及CPU多线程的运行设置
88-
> Warning: 若需进行ERNIE Finetune训练,需自行下载 [ERNIE](https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz) 开放的模型,下载链接为: [https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz](https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz),下载后解压至 `./pretrained/` 目录下。
89-
84+
> Waring: 若需进行ERNIE Finetune训练,需先行下载
85+
[ERNIE](https://baidu-nlp.bj.bcebos.com/ERNIE_stable-1.0.1.tar.gz) 开放的模型,通过命令`python
86+
downloads.py ernie`可完成下载
9087
```bash
9188
# baseline model, using single GPU
9289
sh run.sh train_single_gpu
@@ -180,7 +177,7 @@ python inference_model.py \
180177
1. 从原始数据文件中抽取出句子和标签,构造句子序列和标签序列
181178
2. 将句子序列中的特殊字符进行转换
182179
3. 依据词典获取词对应的整数索引
183-
180+
184181
### 代码结构说明
185182
```text
186183
.
@@ -189,6 +186,7 @@ python inference_model.py \
189186
├── compare.py # 执行LAC与其他开源分词的对比脚本
190187
├── creator.py # 执行创建网络和数据读取器的脚本
191188
├── data/ # 存放数据集的目录
189+
├── downloads.py # 用于下载数据和模型的脚本
192190
├── downloads.sh # 用于下载数据和模型的脚本
193191
├── eval.py # 词法分析评估的脚本
194192
├── inference_model.py # 执行保存inference_model的脚本,用于准备上线部署环境

PaddleNLP/lexical_analysis/compare.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
23
#
34
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -11,7 +12,6 @@
1112
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1213
# See the License for the specific language governing permissions and
1314
# limitations under the License.
14-
# -*- coding: UTF-8 -*-
1515
"""
1616
evaluate wordseg for LAC and other open-source wordseg tools
1717
"""
@@ -20,6 +20,7 @@
2020

2121
import sys
2222
import os
23+
import io
2324

2425

2526
def to_unicode(string):
@@ -70,7 +71,7 @@ def load_testdata(datapath="./data/test_data/test_part"):
7071
"""none"""
7172
sentences = []
7273
sent_seg_list = []
73-
for line in open(datapath):
74+
for line in io.open(datapath, 'r', encoding='utf8'):
7475
sent, label = line.strip().split("\t")
7576
sentences.append(sent)
7677

@@ -109,7 +110,7 @@ def get_lac_result():
109110
`sh run.sh | tail -n 100 > result.txt`
110111
"""
111112
sent_seg_list = []
112-
for line in open("./result.txt"):
113+
for line in io.open("./result.txt", 'r', encoding='utf8'):
113114
line = line.strip().split(" ")
114115
words = [pair.split("/")[0] for pair in line]
115116
labels = [pair.split("/")[1] for pair in line]

0 commit comments

Comments
 (0)