Skip to content

Commit 014ea38

Browse files
committed
textcnn
1 parent ee1caad commit 014ea38

File tree

2 files changed

+46
-91
lines changed

2 files changed

+46
-91
lines changed

models/contentunderstanding/textcnn/config_bigdata.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ runner:
2323
print_interval: 10
2424
#model_init_path: "output_model/0" # init model
2525
model_save_path: "output_model_textcnn_all"
26-
test_data_dir: "../../../datasets/senti_clas/train"
26+
test_data_dir: "../../../datasets/senti_clas/test"
2727
infer_reader_path: "senti_clas_reader" # importlib format
2828
infer_batch_size: 128
2929
infer_load_path: "output_model_textcnn_all"

models/contentunderstanding/textcnn/readme.md

Lines changed: 45 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
├── preprocess.py #数据处理程序
1212
├── __init__.py
1313
├── README.md #文档
14-
├── model.py #模型文件
15-
├── config.yaml #配置文件
16-
├── reader.py #读取程序
14+
├── config.yaml # sample数据配置
15+
├── config_bigdata.yaml # 全量数据配置
16+
├── static_model.py # 构建静态图
17+
├── dygraph_model.py # 构建动态图
18+
├── net.py # 模型核心组网(动静统一)
19+
├── senti_clas_reader.py #数据读取程序
1720
```
1821
注:在阅读该示例前,建议您先了解以下内容:
1922
[paddlerec入门教程](https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md)
@@ -25,126 +28,78 @@
2528
- [数据准备](#数据准备)
2629
- [运行环境](#运行环境)
2730
- [快速开始](#快速开始)
31+
- [模型组网](#模型组网)
2832
- [效果复现](#效果复现)
2933
- [进阶使用](#进阶使用)
3034
- [FAQ](#FAQ)
3135

3236

3337
## 模型简介
3438
TextCNN网络是2014年提出的用来做文本分类的卷积神经网络,由于其结构简单、效果好,在文本分类、推荐等NLP领域应用广泛。对于文本分类问题,常见的方法无非就是抽取文本的特征。然后再基于抽取的特征训练一个分类器。 然而研究证明,TextCnn在文本分类问题上有着更加卓越的表现。从直观上理解,TextCNN通过一维卷积来获取句子中n-gram的特征表示。TextCNN对文本浅层特征的抽取能力很强,在短文本领域专注于意图分类时效果很好,应用广泛,且速度较快。
35-
Yoon Kim在论文[EMNLP 2014][Convolutional neural networks for sentence classication](https://www.aclweb.org/anthology/D14-1181.pdf)提出了TextCNN并给出基本的结构。将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的ngram),从而能够更好地捕捉局部相关性。模型的主体结构如图所示:
36-
<p align="center">
37-
<img align="center" src="../../../doc/imgs/cnn-ckim2014.png">
38-
<p>
3939

4040
## 数据准备
4141
情感倾向分析(Sentiment Classification,简称Senta)针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度。情感类型分为积极、消极。情感倾向分析能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。
42-
情感是人类的一种高级智能行为,为了识别文本的情感倾向,需要深入的语义建模。另外,不同领域(如餐饮、体育)在情感的表达各不相同,因而需要有大规模覆盖各个领域的数据进行模型训练。为此,我们通过基于深度学习的语义模型和大规模数据挖掘解决上述两个问题。效果上,我们基于开源情感倾向分类数据集ChnSentiCorp进行评测,模型在测试集上的准确率如表所示:
43-
44-
| 模型 | dev | test |
45-
| :------| :------ | :------
46-
| TextCNN | 90.75% | 91.27% |
47-
48-
49-
您可以直接执行以下命令下载我们分词完毕后的数据集,文件解压之后,senta_data目录下会存在训练数据(train.tsv)、开发集数据(dev.tsv)、测试集数据(test.tsv)以及对应的词典(word_dict.txt):
50-
51-
```
52-
wget https://baidu-nlp.bj.bcebos.com/sentiment_classification-dataset-1.0.0.tar.gz
53-
tar -zxvf sentiment_classification-dataset-1.0.0.tar.gz
54-
```
42+
情感是人类的一种高级智能行为,为了识别文本的情感倾向,需要深入的语义建模。另外,不同领域(如餐饮、体育)在情感的表达各不相同,因而需要有大规模覆盖各个领域的数据进行模型训练。为此,我们通过基于深度学习的语义模型和大规模数据挖掘解决上述两个问题。
5543
数据格式为一句中文的评价语句,和一个代表情感信息的标签。两者之间用/t分隔,中文的评价语句已经分词,词之间用空格分隔。
5644
```
5745
15.4寸 笔记本 的 键盘 确实 爽 , 基本 跟 台式机 差不多 了 , 蛮 喜欢 数字 小 键盘 , 输 数字 特 方便 , 样子 也 很 美观 , 做工 也 相当 不错 1
5846
跟 心灵 鸡汤 没 什么 本质 区别 嘛 , 至少 我 不 喜欢 这样 读 经典 , 把 经典 都 解读 成 这样 有点 去 中国 化 的 味道 了 0
5947
```
6048

6149
## 运行环境
62-
PaddlePaddle>=1.7.2
50+
PaddlePaddle>=2.0
6351

6452
python 2.7/3.5/3.6/3.7
6553

66-
PaddleRec >=0.1
67-
68-
os : windows/linux/macos
54+
os : windows/linux/macos
6955

7056

7157
## 快速开始
72-
本文提供了样例数据可以供您快速体验,在paddlerec目录下直接执行下面的命令即可启动训练:
58+
本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在textcnn模型目录的快速执行命令如下:
59+
```bash
60+
# 进入模型目录
61+
# cd models/contentunderstanding/textcnn # 在任意目录均可运行
62+
# 动态图训练
63+
python3 -u ../../../tools/trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml
64+
# 动态图预测
65+
python3 -u ../../../tools/infer.py -m config.yaml
7366

74-
```
75-
python -m paddlerec.run -m models/contentunderstanding/textcnn/config.yaml
76-
```
67+
# 静态图训练
68+
python3 -u ../../../tools/static_trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml
69+
# 静态图预测
70+
python3 -u ../../../tools/static_infer.py -m config.yaml
71+
```
72+
73+
## 模型组网
74+
Yoon Kim在论文[EMNLP 2014][Convolutional neural networks for sentence classication](https://www.aclweb.org/anthology/D14-1181.pdf)提出了TextCNN并给出基本的结构。将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的ngram),从而能够更好地捕捉局部相关性。模型的主体结构如图所示:
75+
<p align="center">
76+
<img align="center" src="../../../doc/imgs/cnn-ckim2014.png">
77+
<p>
7778

7879

7980
## 效果复现
8081
为了方便使用者能够快速的跑通每一个模型,我们在每个模型下都提供了样例数据。如果需要复现readme中的效果,请按如下步骤依次操作即可。
81-
1. 确认您当前所在目录为PaddleRec/models/contentunderstanding/textcnn
82-
2. 下载并解压数据集,命令如下:
83-
```
84-
wget https://baidu-nlp.bj.bcebos.com/sentiment_classification-dataset-1.0.0.tar.gz
85-
tar -zxvf sentiment_classification-dataset-1.0.0.tar.gz
86-
```
87-
3. 本文提供了快速将数据集中的汉字数据处理为可训练格式数据的脚本,您在解压数据集后,将preprocess.py复制到senta_data文件中并执行,即可将数据集中提供的dev.tsv,test.tsv,train.tsv转化为可直接训练的dev.txt,test.txt,train.txt.
88-
```
89-
cp ./data/preprocess.py ./senta_data/
90-
cd senta_data/
91-
python preprocess.py
92-
```
93-
4. 创建存放训练集和测试集的目录,将数据放入目录中。
94-
```
95-
mkdir train
96-
mv train.txt train
97-
mkdir test
98-
mv dev.txt test
99-
cd ..
100-
```
101-
5. 打开文件config.yaml,更改其中的参数
102-
103-
将workspace改为您当前的绝对路径。(可用pwd命令获取绝对路径)
104-
将data1下的batch_size值从10改为128
105-
将data1下的data_path改为:{workspace}/senta_data/train
106-
将dataset_infer下的batch_size值从2改为256
107-
将dataset_infer下的data_path改为:{workspace}/senta_data/test
108-
109-
6. 执行命令,开始训练:
110-
```
111-
python -m paddlerec.run -m ./config.yaml
112-
```
113-
114-
7. 运行结果:
115-
```
116-
PaddleRec: Runner infer_runner Begin
117-
Executor Mode: infer
118-
processor_register begin
119-
Running SingleInstance.
120-
Running SingleNetwork.
121-
Running SingleInferStartup.
122-
Running SingleInferRunner.
123-
load persistables from increment/14
124-
batch: 1, acc: [0.91796875], loss: [0.2287855]
125-
batch: 2, acc: [0.91796875], loss: [0.22827303]
126-
batch: 3, acc: [0.90234375], loss: [0.27907994]
127-
```
128-
## 进阶使用
82+
我们基于开源情感倾向分类数据集ChnSentiCorp进行评测,模型在测试集上的准确率如表所示:
12983

130-
### 动态图&论文复现
84+
| 模型 | dev | test |
85+
| :------| :------ | :------
86+
| TextCNN | 90.75% | 91.27% |
13187

88+
1. 确认您当前所在目录为PaddleRec/models/contentunderstanding/textcnn
89+
2. 进入paddlerec/datasets/senti_clas目录下,执行该脚本,会从国内源的服务器上下载我们预处理完成的senti_clas全量数据集,并解压到指定文件夹。
90+
``` bash
91+
cd ../../../datasets/senti_clas
92+
sh run.sh
13293
```
133-
# 进入模型目录
134-
cd models/contentunderstanding/textcnn # 在任意目录均可运行
94+
3. 切回模型目录,执行命令运行全量数据
95+
```bash
96+
cd - # 切回模型目录
13597
# 动态图训练
136-
python -u ../../../tools/trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml
137-
# 动态图预测
138-
python -u ../../../tools/infer.py -m config.yaml
98+
python3 -u ../../../tools/trainer.py -m config_bigdata.yaml # 全量数据运行config_bigdata.yaml
99+
python3 -u ../../../tools/infer.py -m config_bigdata.yaml # 全量数据运行config_bigdata.yaml
100+
```
139101

140-
# 静态图训练
141-
python -u ../../../tools/static_trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml
142-
# 静态图预测
143-
python -u ../../../tools/static_infer.py -m config.yaml
102+
## 进阶使用
144103

145-
# 全量数据下载
146-
cd tools/datasets/senti_clas
147-
sh run.sh
148-
```
149104
## FAQ
150105

0 commit comments

Comments
 (0)