未验证 提交 4ce87c57 编写于 作者: Y Yibing Liu 提交者: GitHub

Update paddle-nlp (#2125)

* Update README.md

* replace test to eval

* change test to eval

* Refine install in README of paddle-nlp-transformer

* update readme

* fix readme for ADE

* fix reademe for ADE second

* update reademe for DAM

* readme all

* update_readme

* representation

* Update README.md

* Update README.md

* Update top-level readme
上级 98f04d1f
PaddleNLP PaddleNLP
========= =========
机器翻译 PaddleNLP 是百度开源的工业级 NLP 工具与预训练模型集,能够适应全面丰富的 NLP 任务,方便开发者灵活插拔尝试多种网络结构,并且让应用最快速达到工业级效果。
--------
机器翻译(Machine Translation)将一种自然语言(源语言)转换成一种自然语言(目标语言),是自然语言处理中非常基础和重要的研究方向。在全球化的浪潮中,机器翻译在促进跨语言文明的交流中所起的重要作用是不言而喻的。其发展经历了统计机器翻译和基于神经网络的神经机器翻译(Nueural
Machine Translation, NMT)等阶段。在 NMT 成熟后,机器翻译才真正得以大规模应用。而早阶段的 NMT 主要是基于循环神经网络 RNN 的,其训练过程中当前时间步依赖于前一个时间步的计算,时间步之间难以并行化以提高训练速度。因此,非 RNN 结构的 NMT 得以应运而生,例如基 卷积神经网络 CNN 的结构和基于自注意力机制(Self-Attention)的结构。
本实例所实现的 Transformer 就是一个基于自注意力机制的机器翻译模型,其中不再有RNN或CNN结构,而是完全利用 Attention 学习语言中的上下文依赖。相较于RNN/CNN, 这种结构在单层内计算复杂度更低、易于并行化、对长程依赖更易建模,最终在多种语言之间取得了最好的翻译效果。
- [Transformer](https://github.com/PaddlePaddle/models/blob/develop/PaddleNLP/neural_machine_translation/transformer/README.md)
中文词法分析
------------
中文分词(Word Segmentation)是将连续的自然语言文本,切分出具有语义合理性和完整性的词汇序列的过程。因为在汉语中,词是承担语义的最基本单位,切词是文本分类、情感分析、信息检索等众多自然语言处理任务的基础。 词性标注(Part-of-speech Tagging)是为自然语言文本中的每一个词汇赋予一个词性的过程,这里的词性包括名词、动词、形容词、副词等等。 命名实体识别(Named Entity Recognition,NER)又称作“专名识别”,是指识别自然语言文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。 我们将这三个任务统一成一个联合任务,称为词法分析任务,基于深度神经网络,利用海量标注语料进行训练,提供了一个端到端的解决方案。
我们把这个联合的中文词法分析解决方案命名为LAC。LAC既可以认为是Lexical Analysis of Chinese的首字母缩写,也可以认为是LAC Analyzes Chinese的递归缩写。
- [LAC](https://github.com/baidu/lac/blob/master/README.md)
情感倾向分析
------------
情感倾向分析针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度。情感类型分为积极、消极、中性。情感倾向分析能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有力的决策支持。本次我们开放 AI 开放平台中情感倾向分析采用的[模型](http://ai.baidu.com/tech/nlp/sentiment_classify),提供给用户使用。
- [Senta](https://github.com/baidu/Senta/blob/master/README.md) PaddleNLP 完全基于[PaddlePaddle Fluid](http://www.paddlepaddle.org/)开发,并提供依托于百度百亿级大数据的预训练模型,能够极大地方便 NLP 研究者和工程师快速应用。使用者可以用PaddleNLP 快速实现文本分类、文本匹配、序列标注、阅读理解、智能对话等NLP任务的组网、建模和部署,并且可以直接使用百度开源工业级预训练模型进行快速应用。用户在极大地减少研究和开发成本的同时,也可以获得更好的基于工业实践的应用效果。
语义匹配 特点与优势
-------- --------
- 全面丰富的中文NLP应用任务;
- 任务与网络解耦,网络灵活可插拔;
- 强大的工业化预训练模型,打造优异应用效果。
目录结构
------
```text
.
├── dialogue_model_toolkit # 对话模型工具箱
├── emotion_detection # 对话情绪识别
├── knowledge_driven_dialogue # 知识驱动对话
├── language_model # 语言模型
├── language_representations_kit # 语言表示工具箱
├── lexical_analysis # 词法分析
├── models # 共享网络
│ ├── __init__.py
│ ├── classification
│ ├── dialogue_model_toolkit
│ ├── language_model
│ ├── matching
│ ├── neural_machine_translation
│ ├── reading_comprehension
│ ├── representation
│ ├── sequence_labeling
│ └── transformer_encoder.py
├── neural_machine_translation # 机器翻译
├── preprocess # 共享文本预处理工具
│ ├── __init__.py
│ ├── ernie
│ ├── padding.py
│ └── tokenizer
├── reading_comprehension # 阅读理解
├── sentiment_classification # 文本情感分析
├── similarity_net # 短文本语义匹配
```
其中,除了 `models``preprocess` 分别是共享的模型集合与共享的数据预处理流程之外,其它目录包含的都是相互独立的任务,可以直接进入这些目录运行任务。
快速安装
-------
### 依赖
本项目依赖于 Python 2.7 和 Paddle Fluid 1.3.1 及以上版本,请参考 [安装指南](http://www.paddlepaddle.org/#quick-start) 安装 PaddlePaddle。
### 流程
- 克隆代码库到本地
```shell
git clone https://github.com/PaddlePaddle/models.git
```
- 进入到特定的子目录中查看代码和运行任务(如情感分析)
```shell
cd models/PaddleNLP/sentiment_classification
```
支持的 NLP 任务
-------------
### 文本分类
- [文本情感分析](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/sentiment_classification)
- [对话情绪识别](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/emotion_detection)
### 文本匹配
- [短文本语义匹配](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/similarity_net)
### 序列标注
- [词法分析](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/lexical_analysis)
### 文本生成
- [机器翻译](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/neural_machine_translation/transformer)
### 语义表示与语言模型
- [语言表示工具箱](https://github.com/PaddlePaddle/LARK/tree/develop)
- [语言模型](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/language_model)
### 复杂任务
- [对话模型工具箱](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit)
- [知识驱动对话](https://github.com/baidu/knowledge-driven-dialogue/tree/master)
- [阅读理解](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/reading_comprehension)
在自然语言处理很多场景中,需要度量两个文本在语义上的相似度,这类任务通常被称为语义匹配。例如在搜索中根据查询与候选文档的相似度对搜索结果进行排序,文本去重中文本与文本相似度的计算,自动问答中候选答案与问题的匹配等。
本例所开放的DAM (Deep Attention Matching Network)为百度自然语言处理部发表于ACL-2018的工作,用于检索式聊天机器人多轮对话中应答的选择。DAM受Transformer的启发,其网络结构完全基于注意力(attention)机制,利用栈式的self-attention结构分别学习不同粒度下应答和语境的语义表示,然后利用cross-attention获取应答与语境之间的相关性,在两个大规模多轮对话数据集上的表现均好于其它模型。
- [Deep Attention Matching Network](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/deep_attention_matching)
AnyQ
----
[AnyQ](https://github.com/baidu/AnyQ)(ANswer Your Questions) 开源项目主要包含面向FAQ集合的问答系统框架、文本语义匹配工具SimNet。 问答系统框架采用了配置化、插件化的设计,各功能均通过插件形式加入,当前共开放了20+种插件。开发者可以使用AnyQ系统快速构建和定制适用于特定业务场景的FAQ问答系统,并加速迭代和升级。
SimNet是百度自然语言处理部于2013年自主研发的语义匹配框架,该框架在百度各产品上广泛应用,主要包括BOW、CNN、RNN、MM-DNN等核心网络结构形式,同时基于该框架也集成了学术界主流的语义匹配模型,如MatchPyramid、MV-LSTM、K-NRM等模型。使用SimNet构建出的模型可以便捷的加入AnyQ系统中,增强AnyQ系统的语义匹配能力。
- [SimNet in PaddlePaddle Fluid](https://github.com/baidu/AnyQ/blob/master/tools/simnet/train/paddle/README.md)
机器阅读理解
----------
机器阅读理解(MRC)是自然语言处理(NLP)中的核心任务之一,最终目标是让机器像人类一样阅读文本,提炼文本信息并回答相关问题。深度学习近年来在NLP中得到广泛使用,也使得机器阅读理解能力在近年有了大幅提高,但是目前研究的机器阅读理解都采用人工构造的数据集,以及回答一些相对简单的问题,和人类处理的数据还有明显差距,因此亟需大规模真实训练数据推动MRC的进一步发展。
百度阅读理解数据集是由百度自然语言处理部开源的一个真实世界数据集,所有的问题、原文都来源于实际数据(百度搜索引擎数据和百度知道问答社区),答案是由人类回答的。每个问题都对应多个答案,数据集包含200k问题、1000k原文和420k答案,是目前最大的中文MRC数据集。百度同时开源了对应的阅读理解模型,称为DuReader,采用当前通用的网络分层结构,通过双向attention机制捕捉问题和原文之间的交互关系,生成query-aware的原文表示,最终基于query-aware的原文表示通过point network预测答案范围。
- [DuReader in PaddlePaddle Fluid](https://github.com/PaddlePaddle/models/blob/develop/PaddleNLP/reading_comprehension)
\ No newline at end of file
...@@ -29,9 +29,20 @@ ...@@ -29,9 +29,20 @@
## 快速开始 ## 快速开始
### 安装说明 ### 安装说明
1. paddle安装 1. paddle安装
本项目依赖于 Paddlepaddle Fluid 1.3.1,请参考安装指南进行安装。
本项目依赖于Paddle Fluid 1.3.1 及以上版本,请参考[安装指南](http://www.paddlepaddle.org/#quick-start)进行安装
2. 安装代码 2. 安装代码
克隆数据集代码库到本地
```
git clone https://github.com/PaddlePaddle/models.git
cd models/PaddleNLP/dialogue_model_toolkit/auto_dialogue_evaluation
```
3. 环境依赖 3. 环境依赖
python版本依赖python 2.7
### 开始第一次模型调用 ### 开始第一次模型调用
1. 数据准备 1. 数据准备
...@@ -48,6 +59,19 @@ ...@@ -48,6 +59,19 @@
cd model_files cd model_files
sh download_model.sh sh download_model.sh
``` ```
我们提供了两种下载方式,以下载auto_dialogue_evaluation_matching_pretrained_model为例
方式一:基于PaddleHub命令行工具(PaddleHub可参考[安装指南](https://github.com/PaddlePaddle/PaddleHub)进行安装)
```
hub download auto_dialogue_evaluation_matching_pretrained_model --output_path ./
```
方式二:直接下载
```
wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/auto_dialogue_evaluation_matching_pretrained-1.0.0.tar.gz
```
3. 模型预测 3. 模型预测
基于上面的模型和数据,可以运行下面的命令直接对对话数据进行打分。 基于上面的模型和数据,可以运行下面的命令直接对对话数据进行打分。
......
...@@ -20,14 +20,24 @@ Overview of Deep Attention Matching Network ...@@ -20,14 +20,24 @@ Overview of Deep Attention Matching Network
### 安装说明 ### 安装说明
1. paddle安装 1. paddle安装
本项目依赖于 Paddlepaddle Fluid 1.3.1,请参考安装指南进行安装。 本项目依赖于Paddle Fluid 1.3.1 及以上版本,请参考[安装指南](http://www.paddlepaddle.org/#quick-start)进行安装
2. 安装代码 2. 安装代码
克隆数据集代码库到本地
```
git clone https://github.com/PaddlePaddle/models.git
cd models/PaddleNLP/dialogue_model_toolkit/deep_attention_matching
```
3. 环境依赖 3. 环境依赖
python版本依赖python 2.7
### 开始第一次模型调用 ### 开始第一次模型调用
1. 数据准备 1. 数据准备
下载经过预处理的数据,运行该脚本之后,data目录下会存在unlabel和douban两个文件夹。 下载经过预处理的数据,运行该脚本之后,data目录下会存在ubuntu和douban两个文件夹。
``` ```
cd data cd data
sh download_data.sh sh download_data.sh
......
...@@ -39,7 +39,7 @@ SWDA:Switchboard Dialogue Act Corpus; ...@@ -39,7 +39,7 @@ SWDA:Switchboard Dialogue Act Corpus;
####   a、paddle安装 ####   a、paddle安装
    本项目依赖于Paddle Fluid 1.3.1,请参考[安装指南](http://www.paddlepaddle.org/#quick-start)进行安装     本项目依赖于PaddlePaddle 1.3.1 及以上版本,请参考[安装指南](http://www.paddlepaddle.org/#quick-start)进行安装
####   b、安装代码 ####   b、安装代码
......
# 中文词法分析 # 中文词法分析
## 1. 简介 ## 1. 简介
Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。效果方面,分词、词性标注、专名识别的整体准确率 88.0%,召回率 88.7%,F1 值 88.4%。此外,我们在百度开放的 [ERNIE](https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE) 模型上 finetune,效果可以提升到准确率 92.0%,召回率 92.0%,F1 值 92.0%。可通过 [AI开放平台-词法分析](http://ai.baidu.com/tech/nlp/lexical) 线上体验。
Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。我们在自建的数据集上对分词、词性标注、专名识别进行整体的评估效果,具体数值见下表;此外,我们在百度开放的 [ERNIE](https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE) 模型上 finetune,并对比基线模型、BERT finetuned 和 ERNIE finetuned 的效果,可以看出会有显著的提升。可通过 [AI开放平台-词法分析](http://ai.baidu.com/tech/nlp/lexical) 线上体验百度的词法分析服务。
|模型|Precision|Recall|F1-score|
|:-:|:-:|:-:|:-:|
|Lexical Analysis|88.0%|88.7%|88.4%|
|BERT finetuned|90.2%|90.4%|90.3%|
|ERNIE finetuned|92.0%|92.0%|92.0%|
## 2. 快速开始 ## 2. 快速开始
本项目依赖 Paddle 1.3.2,安装请参考官网 [快速安装](http://www.paddlepaddle.org/paddle#quick-start)
### 基础模型 ### 安装说明
运行下载数据和模型的脚本,
#### 1.PaddlePaddle 安装
本项目依赖 PaddlePaddle 1.3.2 及以上版本,安装请参考官网 [快速安装](http://www.paddlepaddle.org/paddle#quick-start)
#### 2. 克隆代码
克隆工具集代码库到本地
```bash ```bash
sh downloads.sh git clone https://github.com/PaddlePaddle/models.git
cd models/PaddleNLP/lexical_analysis
``` ```
会生成下面几个文件夹, ### 数据准备
```test 下载数据集文件,解压后会生成 `./data/` 文件夹
./data/ # 数据文件夹 ```bash
./model_baseline/ # lexical analysis 模型文件 wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/lexical_analysis-dataset-1.0.0.tar.gz
./model_finetuned/ # lexical analysis 在 ERNIE 上 finetune 的模型文件 tar xvf lexical_analysis-dataset-1.0.0.tar.gz
./pretrained/ # ERNIE 发布的 pretrained 模型
``` ```
模型文件也可以很方便地通过 [PaddleHub](https://github.com/PaddlePaddle/PaddleHub) 的方式来获取,参考下面的命令示例: ### 模型下载
```bash 我们开源了在自建数据集上训练的词法分析模型,可供用户直接使用,这里提供两种下载方式:
# install paddlehub
pip install paddlehub
方式一:基于 PaddleHub 命令行工具,PaddleHub 的安装参考 [PaddleHub](https://github.com/PaddlePaddle/PaddleHub)
```bash
# download baseline model # download baseline model
hub download lexical_analysis hub download lexical_analysis
tar xvf lexical_analysis-1.0.0.tar.gz
# download ERNIE finetuned model # download ERNIE finetuned model
hub download lexical_analysis_finetuned hub download lexical_analysis_finetuned
tar xvf lexical_analysis_finetuned-1.0.0.tar.gz
``` ```
我们基于百度的海量数据训练了一个词法分析的模型,可以直接用这个模型对开放的测试集 ./data/test.tsv 进行验证, 方式二:直接下载
```bash ```bash
sh run.sh test # download baseline model
``` wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/lexical_analysis-1.0.0.tar.gz
tar xvf lexical_analysis-1.0.0.tar.gz
也可以用该模型预测新的数据,
```bash
sh run.sh infer
```
用户也可以选择在自己的数据集上训练自己的词法分析模型,这里我们提供用于训练的脚本和代码, # download ERNIE finetuned model
``` wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/lexical_analysis_finetuned-1.0.0.tar.gz
sh run.sh train tar xvf lexical_analysis_finetuned-1.0.0.tar.gz
``` ```
### 使用 ERNIE 进行 finetune 注:下载 ERNIE 开放的模型请参考 [ERNIE](https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE),下载后可放在 `./pretrained/` 目录下。
原 ERNIE 开放的模型参考 [ERNIE](https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE),这里我们为了方便,把下载的命令也放到 `download.sh` 中了。下载的预训练的 ERNIE 模型文件会放在 `./pretrained/` 目录中。
词法分析的模型在 `ERNIE` 上 finetune 之后取得了不错的提升效果,这里我们也开放此模型,模型放在了 `./model_finetuned` 中。运行下面的脚本在测试集上验证效果, ### 模型评估
我们基于自建的数据集训练了一个词法分析的模型,可以直接用这个模型对测试集 `./data/test.tsv` 进行验证,
```bash ```bash
sh run_ernie.sh test # baseline model
``` sh run.sh eval
也可以用该模型预测新的数据, # ERNIE finetuned model
```bash sh run_ernie.sh eval
sh run_ernie.sh infer
``` ```
当然,您也可以用自己的数据去 finetune 在 ERNIE 上的效果, ### 模型训练
基于示例的数据集,可以运行下面的命令,在训练集 `./data/train.tsv` 上进行训练
```bash ```bash
# baseline model
sh run.sh train
# ERNIE finetuned model
sh run_ernie.sh train sh run_ernie.sh train
``` ```
### 模型预测
加载已有的模型,对未知的数据进行预测
```bash
# baseline model
sh run.sh infer
# ERNIE finetuned model
sh run_ernie.sh infer
```
## 3. 进阶使用 ## 3. 进阶使用
...@@ -129,7 +152,11 @@ sh run_ernie.sh train ...@@ -129,7 +152,11 @@ sh run_ernie.sh train
``` ```
### 如何组建自己的模型 ### 如何组建自己的模型
如果您需要定制自己的词法分析模型,可以在 `../models/sequence_labeling/nets.py` 中添加自己的网络结构,具体接口要求可以参考默认的 `lex_net` 函数。
可以根据自己的需求,组建自定义的模型,具体方法如下所示:
1. 定义自己的词法分析模型,可以在 `../models/sequence_labeling/nets.py` 中添加自己的网络结构,具体接口要求可以参考默认的 `lex_net` 函数。
2. 模型训练、评估、预测的逻辑,需要在 `run.sh``run_ernie.sh` 中修改对应的模型路径、数据路径和词典路径等参数。
## 4. 其他 ## 4. 其他
### 在论文中引用 LAC ### 在论文中引用 LAC
......
...@@ -32,8 +32,8 @@ function run_train() { ...@@ -32,8 +32,8 @@ function run_train() {
--word_rep_dict_path ./conf/q2b.dic --word_rep_dict_path ./conf/q2b.dic
} }
function run_test() { function run_eval() {
echo "testing" echo "evaluating"
echo "this may cost about 5 minutes if run on you CPU machine" echo "this may cost about 5 minutes if run on you CPU machine"
python run_sequence_labeling.py \ python run_sequence_labeling.py \
--do_train False \ --do_train False \
...@@ -77,8 +77,8 @@ function main() { ...@@ -77,8 +77,8 @@ function main() {
train) train)
run_train "$@"; run_train "$@";
;; ;;
test) eval)
run_test "$@"; run_eval "$@";
;; ;;
infer) infer)
run_infer "$@"; run_infer "$@";
...@@ -89,7 +89,7 @@ function main() { ...@@ -89,7 +89,7 @@ function main() {
;; ;;
*) *)
echo "unsupport command [${cmd}]"; echo "unsupport command [${cmd}]";
echo "Usage: ${BASH_SOURCE} {train|test|infer}"; echo "Usage: ${BASH_SOURCE} {train|eval|infer}";
return 1; return 1;
;; ;;
esac esac
......
...@@ -40,8 +40,8 @@ function run_train() { ...@@ -40,8 +40,8 @@ function run_train() {
} }
function run_test() { function run_eval() {
echo "testing" echo "evaluating"
python run_ernie_sequence_labeling.py \ python run_ernie_sequence_labeling.py \
--ernie_config_path "${ERNIE_PRETRAINED_MODEL_PATH}/ernie_config.json" \ --ernie_config_path "${ERNIE_PRETRAINED_MODEL_PATH}/ernie_config.json" \
--init_pretraining_params "${ERNIE_PRETRAINED_MODEL_PATH}/params/" \ --init_pretraining_params "${ERNIE_PRETRAINED_MODEL_PATH}/params/" \
...@@ -90,8 +90,8 @@ function main() { ...@@ -90,8 +90,8 @@ function main() {
train) train)
run_train "$@"; run_train "$@";
;; ;;
test) eval)
run_test "$@"; run_eval "$@";
;; ;;
infer) infer)
run_infer "$@"; run_infer "$@";
...@@ -102,7 +102,7 @@ function main() { ...@@ -102,7 +102,7 @@ function main() {
;; ;;
*) *)
echo "unsupport command [${cmd}]"; echo "unsupport command [${cmd}]";
echo "Usage: ${BASH_SOURCE} {train|test|infer}"; echo "Usage: ${BASH_SOURCE} {train|eval|infer}";
return 1; return 1;
;; ;;
esac esac
......
...@@ -19,11 +19,20 @@ ...@@ -19,11 +19,20 @@
1. paddle安装 1. paddle安装
本项目依赖于 Paddlepaddle Fluid 1.3,请参考安装指南进行安装。 本项目依赖于 PaddlePaddle Fluid 1.3.1 及以上版本,请参考 [安装指南](http://www.paddlepaddle.org/#quick-start) 进行安装
2. 安装代码 2. 安装代码
克隆数据集代码库到本地
```shell
git clone https://github.com/PaddlePaddle/models.git
cd models/PaddleNLP/neural_machine_translation/transformer
```
3. 环境依赖 3. 环境依赖
请参考PaddlePaddle[安装说明](http://paddlepaddle.org/documentation/docs/zh/1.3/beginners_guide/install/index_cn.html)部分的内容
### 开始第一次模型调用 ### 开始第一次模型调用
1. 数据准备 1. 数据准备
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
## 快速开始 ## 快速开始
本项目依赖于 Paddlepaddle Fluid 1.3.2,请参考 [安装指南](http://www.paddlepaddle.org/#quick-start) 进行安装 本项目依赖于 Paddlepaddle 1.3.2 及以上版本,请参考 [安装指南](http://www.paddlepaddle.org/#quick-start) 进行安装
python版本依赖python 2.7 python版本依赖python 2.7
#### 安装代码 #### 安装代码
...@@ -31,7 +32,7 @@ cd models/PaddleNLP/sentiment_classification ...@@ -31,7 +32,7 @@ cd models/PaddleNLP/sentiment_classification
#### 数据准备 #### 数据准备
下载经过预处理的数据,运行该脚本之后,data目录下会存在训练数据(train.tsv)、开发集数据(dev.tsv)、测试集数据(test.tsv)以及对应的词典(word_dict.txt) 下载经过预处理的数据,文件解压之后,senta_data目录下会存在训练数据(train.tsv)、开发集数据(dev.tsv)、测试集数据(test.tsv)以及对应的词典(word_dict.txt)
```shell ```shell
wget https://baidu-nlp.bj.bcebos.com/sentiment_classification-dataset-1.0.0.tar.gz wget https://baidu-nlp.bj.bcebos.com/sentiment_classification-dataset-1.0.0.tar.gz
tar -zxvf sentiment_classification-dataset-1.0.0.tar.gz tar -zxvf sentiment_classification-dataset-1.0.0.tar.gz
......
#! /bin/bash #! /bin/bash
export FLAGS_enable_parallel_graph=1 export FLAGS_enable_parallel_graph=1
export FLAGS_sync_nccl_allreduce=1 export FLAGS_sync_nccl_allreduce=1
export CUDA_VISIBLE_DEVICES=3 export CUDA_VISIBLE_DEVICES=1
export FLAGS_fraction_of_gpu_memory_to_use=0.95 export FLAGS_fraction_of_gpu_memory_to_use=0.95
export CPU_NUM=1 export CPU_NUM=1
......
...@@ -28,7 +28,7 @@ wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/simnet_dataset-1.0.0 ...@@ -28,7 +28,7 @@ wget --no-check-certificate https://baidu-nlp.bj.bcebos.com/simnet_dataset-1.0.0
tar xzf simnet_dataset-1.0.0.tar.gz tar xzf simnet_dataset-1.0.0.tar.gz
``` ```
#### 模型准备 #### 模型准备
我们开源了基于大规模数据训练好的pairwise模型(基于bow模型训练),我们提供两种下载方式,模型保在./model_files/simnet_bow_pairwise_pretrained_model/下。 我们开源了基于大规模数据训练好的```pairwise```模型(基于bow模型训练),我们提供两种下载方式,模型保在```./model_files/simnet_bow_pairwise_pretrained_model/```下。
##### 方式一:基于PaddleHub命令行工具(PaddleHub[安装方式](https://github.com/PaddlePaddle/PaddleHub)) ##### 方式一:基于PaddleHub命令行工具(PaddleHub[安装方式](https://github.com/PaddlePaddle/PaddleHub))
```shell ```shell
...@@ -66,14 +66,20 @@ sh run.sh infer ...@@ -66,14 +66,20 @@ sh run.sh infer
sh run.sh train sh run.sh train
``` ```
## 进阶使用 ## 进阶使用
### 任务定义与建模 ### 任务定义与建模
传统的文本匹配技术如信息检索中的向量空间模型 VSM、BM25 等算法,主要解决词汇层面的相似度问题,这种方法的效果在实际应用中受到语言的多义词和语言结构等问题影响。SimNet 在语义表示上沿袭了隐式连续向量表示的方式,但对语义匹配问题在深度学习框架下进行了 End-to-End 的建模,将point-wise与 pair-wise 两种有监督学习方式全部统一在一个整体框架内。在实际应用场景下,将海量的用户点击行为数据转化为大规模的弱标记数据,在网页搜索任务上的初次使用即展现出极大威力,带来了相关性的明显提升。
传统的文本匹配技术如信息检索中的向量空间模型 VSM、BM25 等算法,主要解决词汇层面的相似度问题,这种方法的效果在实际应用中受到语言的多义词和语言结构等问题影响。SimNet 在语义表示上沿袭了隐式连续向量表示的方式,但对语义匹配问题在深度学习框架下进行了 End-to-End 的建模,将```point-wise``````pair-wise```两种有监督学习方式全部统一在一个整体框架内。在实际应用场景下,将海量的用户点击行为数据转化为大规模的弱标记数据,在网页搜索任务上的初次使用即展现出极大威力,带来了相关性的明显提升。
### 模型原理介绍 ### 模型原理介绍
SimNet如下图所示: SimNet如下图所示:
![struct](https://github.com/PaddlePaddle/models/blob/paddle-nlp/PaddleNLP/similarity_net/struct.jpg) ![struct](https://github.com/PaddlePaddle/models/blob/paddle-nlp/PaddleNLP/similarity_net/struct.jpg)
### 数据格式说明 ### 数据格式说明
训练模式一共分为pairwise和pointwise两种模式。
训练模式一共分为```pairwise``````pointwise```两种模式。
#### pairwise模式: #### pairwise模式:
训练集格式如下: query \t pos_query \t neg_query。 训练集格式如下: query \t pos_query \t neg_query。
query、pos_query和neg_query是以空格分词的中文文本,中间使用制表符'\t'隔开,pos_query表示与query相似的正例,neg_query表示与query不相似的随机负例,文本编码为utf-8。</br> query、pos_query和neg_query是以空格分词的中文文本,中间使用制表符'\t'隔开,pos_query表示与query相似的正例,neg_query表示与query不相似的随机负例,文本编码为utf-8。</br>
...@@ -104,7 +110,7 @@ query1和query2表示以空格分词的中文文本,label为0或1,1表示que ...@@ -104,7 +110,7 @@ query1和query2表示以空格分词的中文文本,label为0或1,1表示que
#### infer数据集: #### infer数据集:
pairwise和pointwise的infer数据集格式相同:query1 \t query2。</br> ```pairwise```和```pointwise```的infer数据集格式相同:query1 \t query2。</br>
query1和query2为以空格分词的中文文本。 query1和query2为以空格分词的中文文本。
``` ```
...@@ -120,11 +126,15 @@ python tokenizer.py --test_data_dir ./test.txt.utf8 --batch_size 1 > test.txt.ut ...@@ -120,11 +126,15 @@ python tokenizer.py --test_data_dir ./test.txt.utf8 --batch_size 1 > test.txt.ut
其中test.txt.utf8为待分词的文件,一条文本数据一行,utf8编码,分词结果存放在test.txt.utf8.seg文件中 其中test.txt.utf8为待分词的文件,一条文本数据一行,utf8编码,分词结果存放在test.txt.utf8.seg文件中
### 代码结构说明 ### 代码结构说明
- run_classifier.py:该项目的主函数,封装包括训练、预测、评估的部分</br> ```text
- config.py:定义该项目模型的配置类,读取具体模型类别、以及模型的超参数等</br> .
- reader.py:定义了读入数据的相关函数</br> ├── run_classifier.py:该项目的主函数,封装包括训练、预测、评估的部分
- utils.py:定义了其他常用的功能函数</br> ├── config.py:定义该项目模型的配置类,读取具体模型类别、以及模型的超参数等
- Config: 定义多种模型的配置文件</br> ├── reader.py:定义了读入数据的相关函数
├── utils.py:定义了其他常用的功能函数
├── Config: 定义多种模型的配置文件
```
### 如何训练 ### 如何训练
```shell ```shell
python run_classifier.py \ python run_classifier.py \
...@@ -154,13 +164,14 @@ python run_classifier.py \ ...@@ -154,13 +164,14 @@ python run_classifier.py \
i. 定义自己的网络结构 i. 定义自己的网络结构
用户可以在nlp_tools/models/matching下定义自己的模型; 用户可以在```../models/matching```下定义自己的模型;
ii. 更改模型配置 ii. 更改模型配置
用户仿照config中的文件生成自定义模型的配置文件。 用户仿照```config```中的文件生成自定义模型的配置文件。
用户需要保留配置文件中的```net```、```loss```、```optimizer```、```task_mode```和```model_path```字段。```net```为用户自定义的模型参数,```task_mode```表示训练模式,为```pairwise```或```pointwise```,要与训练命令中的```--task_mode```命令保持一致,```model_path```为模型保存路径,```loss```和```optimizer```依据自定义模型的需要仿照```config```下的其他文件填写。
用户需要保留配置文件中的net、loss、optimizer、task_mode和model_path字段。net为用户自定义的模型参数,task_mode表示训练模式,为pairwise或pointwise,要与训练命令中的--task_mode命令保持一致,model_path为模型保存路径,loss和optimizer依据自定义模型的需要仿照config下的其他文件填写。
iii.模型训练,运行训练、评估、预测脚本即可(具体方法同上)。 iii.模型训练,运行训练、评估、预测脚本即可(具体方法同上)。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册