diff --git a/doc/imgs/match-pyramid.png b/doc/imgs/match-pyramid.png new file mode 100644 index 0000000000000000000000000000000000000000..8692150752a669a8ece98f864e8c58b32b8c4a79 Binary files /dev/null and b/doc/imgs/match-pyramid.png differ diff --git a/models/match/match-pyramid/readme.md b/models/match/match-pyramid/readme.md index c0aaa483d1517cd8cb61e45dddb94716c7ec9639..2960d58e64b80bed8f4c5b0f6f2ff67ce14aed00 100644 --- a/models/match/match-pyramid/readme.md +++ b/models/match/match-pyramid/readme.md @@ -1,6 +1,42 @@ # match-pyramid文本匹配模型 -## 介绍 +以下是本例的简要目录结构及说明: + +``` +├── data #样例数据 + ├── process.py #数据处理脚本 + ├── relation.test.fold1.txt #评估计算指标时用到的关系文件 + ├── train + ├── train.txt #训练数据样例 + ├── test + ├── test.txt #测试数据样例 +├── __init__.py +├── README.md #文档 +├── model.py #模型文件 +├── config.yaml #配置文件 +├── data_process.sh #数据下载和处理脚本 +├── eval.py #计算指标的评估程序 +├── run.sh #一键运行程序 +├── test_reader.py #测试集读取程序 +├── train_reader.py #训练集读取程序 +``` + +注:在阅读该示例前,建议您先了解以下内容: + +[paddlerec入门教程](https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md) + +## 内容 + +- [模型简介](#模型简介) +- [数据准备](#数据准备) +- [运行环境](#运行环境) +- [快速开始](#快速开始) +- [论文复现](#论文复现) +- [进阶使用](#进阶使用) +- [FAQ](#FAQ) + + +## 模型简介 在许多自然语言处理任务中,匹配两个文本是一个基本问题。一种有效的方法是从单词,短语和句子中提取有意义的匹配模式以产生匹配分数。受卷积神经网络在图像识别中的成功启发,神经元可以根据提取的基本视觉模式(例如定向的边角和边角)捕获许多复杂的模式,所以我们尝试将文本匹配建模为图像识别问题。本模型对齐原作者庞亮开源的tensorflow代码:https://github.com/pl8787/MatchPyramid-TensorFlow/blob/master/model/model_mp.py, 实现了下述论文中提出的Match-Pyramid模型: ```text @@ -19,8 +55,23 @@ 3.关系文件:关系文件被用来存储两个句子之间的关系,如query 和document之间的关系。例如:relation.train.fold1.txt, relation.test.fold1.txt 4.嵌入层文件:我们将预训练的词向量存储在嵌入文件中。例如:embed_wiki-pdc_d50_norm -## 数据下载和预处理 -本文提供了数据集的下载以及一键生成训练和测试数据的预处理脚本,您可以直接一键运行:bash data_process.sh +## 运行环境 +PaddlePaddle>=1.7.2 +python 2.7/3.5/3.6/3.7 +PaddleRec >=0.1 +os : windows/linux/macos + +## 快速开始 + +本文提供了样例数据可以供您快速体验,在paddlerec目录下直接执行下面的命令即可启动训练: + +``` +python -m paddlerec.run -m models/match/match-pyramid/config.yaml +``` + +## 论文复现 +1. 确认您当前所在目录为PaddleRec/models/match/match-pyramid +2. 本文提供了原数据集的下载以及一键生成训练和测试数据的预处理脚本,您可以直接一键运行:bash data_process.sh 执行该脚本,会从国内源的服务器上下载Letor07数据集,删除掉data文件夹中原有的relation.test.fold1.txt和relation.train.fold1.txt,并将完整的数据集解压到data文件夹。随后运行 process.py 将全量训练数据放置于`./data/train`,全量测试数据放置于`./data/test`。并生成用于初始化embedding层的embedding.npy文件 执行该脚本的理想输出为: ``` @@ -69,9 +120,11 @@ data/embed_wiki-pdc_d50_norm [./data/relation.test.fold1.txt] Instance size: 13652 ``` +3. 打开文件config.yaml,更改其中的参数 + +将workspace改为您当前的绝对路径。(可用pwd命令获取绝对路径) -## 一键训练并测试评估 -本文提供了一键执行训练,测试和评估的脚本,您可以直接一键运行:bash run.sh +4. 随后,您直接一键运行:bash run.sh 即可得到复现的论文效果 执行该脚本后,会执行python -m paddlerec.run -m ./config.yaml 命令开始训练并测试模型,将测试的结果保存到result.txt文件,最后通过执行eval.py进行评估得到数据的map指标 执行该脚本的理想输出为: ``` @@ -79,16 +132,7 @@ data/embed_wiki-pdc_d50_norm 13651 336 ('map=', 0.420878322843591) -``` - -## 每个文件的作用 -paddlerec可以: -通过config.yaml规定模型的参数 -通过model.py规定模型的组网 -使用train_reader.py读取训练集中的数据 -使用test_reader.py读取测试集中的数据。 -本文额外提供: -data_process.sh用来一键处理数据 -run.sh用来一键启动训练,直接得出测试结果 -eval.py通过保存的测试结果,计算map指标 -如需详细了解paddlerec的使用方法请参考https://github.com/PaddlePaddle/PaddleRec/blob/master/README_CN.md 页面下方的教程。 +``` +## 进阶使用 + +## FAQ diff --git a/models/match/match-pyramid/run.sh b/models/match/match-pyramid/run.sh index 3eccc10a990d563ed1dd5db2ad8ec3a73042ee69..9384899ee30b145f9d10ff66f9bdf6a18b1d8860 100644 --- a/models/match/match-pyramid/run.sh +++ b/models/match/match-pyramid/run.sh @@ -1,6 +1,6 @@ #!/bin/bash echo "................run................." python -m paddlerec.run -m ./config.yaml >result1.txt -grep -A1 "prediction" ./result1.txt >./result.txt +grep -i "prediction" ./result1.txt >./result.txt rm -f result1.txt python eval.py