diff --git a/applications/neural_search/README.md b/applications/neural_search/README.md index f74083ee4d99..c5e3070820de 100644 --- a/applications/neural_search/README.md +++ b/applications/neural_search/README.md @@ -51,7 +51,7 @@ -以上是nerual_search的系统流程图,其中左侧为召回环节,核心是语义向量抽取模块;右侧是排序环节,核心是排序模型。召回环节需要用户通过自己的语料构建向量索引库,用户发起query了之后,就可以检索出最近的向量,然后找出向量对应的文本;排序环节主要是对召回的文本进行重新排序。下面我们分别介绍召回中的语义向量抽取模块,以及排序模型。 +以上是nerual_search的系统流程图,其中左侧为召回环节,核心是语义向量抽取模块;右侧是排序环节,核心是排序模型。召回环节需要用户通过自己的语料构建向量索引库,用户发起query了之后,就可以检索出相似度最高的向量,然后找出该向量对应的文本;排序环节主要是对召回的文本进行重新排序。下面我们分别介绍召回中的语义向量抽取模块,以及排序模型。 #### 2.2.2 召回模块 @@ -74,7 +74,9 @@ #### 2.2.3 排序模块 -排序模块基于前沿的预训练模型 ERNIE-Gram,训练 Pair-wise 语义匹配模型。召回模型负责从海量(千万级)候选文本中快速(毫秒级)筛选出与 Query 相关性较高的 TopK Doc,排序模型会在召回模型筛选出的 TopK Doc 结果基础之上针对每一个 (Query, Doc) Pair 对进行两两匹配计算相关性,排序效果更精准。 +召回模型负责从海量(千万级)候选文本中快速(毫秒级)筛选出与 Query 相关性较高的 TopK Doc,排序模型会在召回模型筛选出的 TopK Doc 结果基础之上针对每一个 (Query, Doc) Pair 对进行两两匹配计算相关性,排序效果更精准。 + +排序模块有2种选择,第一种基于前沿的预训练模型 ERNIE,训练 Pair-wise 语义匹配模型;第二种是基于RocketQA模型训练的Cross Encoder模形。第一种是Pair-wise的排序算法,基本思路是对样本构建偏序文档对,两两比较,从比较中学习顺序,第二种是Poinet-Wise的算法,只考虑当前Query和每个文档的绝对相关度,并没有考虑其他文档与Query的相关度,但是建模方式比较简单。第一种Pair-wise模型可以说是第二种point-wise模型的改进版本,但对于噪声数据更为敏感,即一个错误的标注会导致多个pair对的错误,用户可以先使用基于Point-wise的Cross Encoder构建一个基础模型,需要进一步优化可以使用Pair-wise的方法优化。 ## 3. 文献检索实践 @@ -86,7 +88,7 @@ 首先是利用 ERNIE模型进行 Domain-adaptive Pretraining,在得到的预训练模型基础上,进行无监督的 SimCSE 训练,最后利用 In-batch Negatives 方法进行微调,得到最终的语义索引模型,把建库的文本放入模型中抽取特征向量,然后把抽取后的向量放到语义索引引擎 milvus 中,利用 milvus 就可以很方便得实现召回了。 -**排序**:使用 ERNIE-Gram 的单塔结构对召回后的数据精排序。 +**排序**:使用 ERNIE-Gram 的单塔结构/RocketQA的Cross Encoder对召回后的数据精排序。 #### 3.1.2 评估指标 @@ -110,14 +112,14 @@ (3)使用文献的的query, title, keywords,构造带正标签的数据集,不包含负标签样本,基于 In-batch Negatives 策略进行训练; -(4)在排序阶段,使用点击(作为正样本)和展现未点击(作为负样本)数据构造排序阶段的训练集,使用ERNIE-Gram模型进行精排训练。 +(4)在排序阶段,使用点击(作为正样本)和展现未点击(作为负样本)数据构造排序阶段的训练集,进行精排训练。 | 阶段 |模型 | 训练集 | 评估集(用于评估模型效果) | 召回库 |测试集 | | ------------ | ------------ |------------ | ------------ | ------------ | ------------ | | 召回 | Domain-adaptive Pretraining | 2kw | - | - | - | | 召回 | 无监督预训练 - SimCSE | 798w | 20000 | 300000| 1000 | | 召回 | 有监督训练 - In-batch Negatives | 3998 | 20000 |300000 | 1000 | -| 排序 | 有监督训练 - ERNIE-Gram单塔 Pairwise| 1973538 | 57811 | - | 1000 | +| 排序 | 有监督训练 - ERNIE-Gram单塔 Pairwise/RocketQA Cross Encoder| 1973538 | 57811 | - | 1000 | 我们将除 Domain-adaptive Pretraining 之外的其他数据集全部开源,下载地址: @@ -187,7 +189,7 @@ query2 \t 用户点击的title2 ...... ``` -2. 对于排序模型的训练,排序模型目前提供了2种,第一种是Pairwise训练的方式,第二种是RocketQA的排序模型,对于第一种排序模型,需要准备训练集`train_pairwise.csv`,验证集`dev_pairwise.csv`两个文件, +2. 对于排序模型的训练,排序模型目前提供了2种,第一种是Pairwise训练的方式,第二种是RocketQA的排序模型,对于第一种排序模型,需要准备训练集`train_pairwise.csv`,验证集`dev_pairwise.csv`两个文件,除此之外还可以准备测试集文件`test.csv`或者`test_pairwise.csv`。 训练数据集`train_pairwise.csv`的格式如下: diff --git a/pipelines/FAQ.md b/pipelines/FAQ.md index 1a568b0aded1..0c199d611fbe 100644 --- a/pipelines/FAQ.md +++ b/pipelines/FAQ.md @@ -153,7 +153,7 @@ pip install paddlenlp --upgrade pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple ``` -#### Elastic search 日志显示错误 +#### Elastic search 日志显示错误 `exception during geoip databases update` 需要编辑config/elasticsearch.yml,在末尾添加: diff --git a/pipelines/README.md b/pipelines/README.md index d30705b1955a..59b24386ec73 100644 --- a/pipelines/README.md +++ b/pipelines/README.md @@ -202,9 +202,10 @@ GPU 镜像下载大概耗时 15 分钟左右,容器启动成功后,等待1 市面现已有的工程规范查询系统解决方案一直延续着传统关键字词匹配的查询方式,依赖用户对查询结果进行自行排序、筛选、鉴别,有时甚至还要再次由工程设计人员耗费一定时间精力人工查阅工程规范文件后,才能最终确认是否为想要查询的规范条款。传统规范查询系统至少需要进行 3~5 次查询才能找到用户想要的规范条款,而寻规系统是基于强大预训练模型构建起来的语义检索系统,针对 80% 的规范查询需求仅 **1 次查询** 就能精确命中查询意图,并返回真正符合工程设计人员查询意图的结果! ## :mortar_board: Tutorials -- Tutorial 1 - 语义检索 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442670) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/semantic-search/semantic_search_example.py) -- Tutorial 2 - 智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442857) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/question-answering/dense_qa_example.py) -- Tutorial 3 - FAQ智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4465498) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/frequently-asked-question/dense_faq_example.py) +- Tutorial 1 - Pipelines [Windows视频安装教程](https://www.bilibili.com/video/BV1DY4y1M7HE/?zw) +- Tutorial 2 - 语义检索 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442670) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/semantic-search/semantic_search_example.py) +- Tutorial 3 - 智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4442857) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/question-answering/dense_qa_example.py) +- Tutorial 4 - FAQ智能问答 Pipeline: [AIStudio notebook](https://aistudio.baidu.com/aistudio/projectdetail/4465498) | [Python](https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/frequently-asked-question/dense_faq_example.py) ## :vulcan_salute: 社区交流 微信扫描二维码并填写问卷之后,加入交流群与来自各行各业的小伙伴交流学习吧~
diff --git a/pipelines/docker/README.md b/pipelines/docker/README.md index f4adbe47ecb4..089a94cbea95 100644 --- a/pipelines/docker/README.md +++ b/pipelines/docker/README.md @@ -62,14 +62,15 @@ docker logs pip02 ## 3. Docker编译一个定制化CUDA版本的Pipelines的镜像 -Docker编译一个定制化CUDA版本的Pipelines的镜像流程分2步,第一步是构建一个基础镜像,第二步是构建一键启动镜像。第一步构建的镜像是一个可用的状态,但是启动后,需要进入容器,然后手工启动服务,然后需要把运行命令打包到镜像中,使得Docker启动的时候能够自动启动Pipelines的服务。 +Docker编译一个定制化CUDA版本的Pipelines的镜像流程分2步,第一步是利用Paddle镜像构建Pipelines基础镜像,第二步是构建一键启动镜像。第一步构建的镜像是一个可用的状态,但是启动后,需要进入容器,手工启动服务,第二步是需要把运行命令打包到镜像中,使得Docker启动的时候能够自动启动Pipelines的服务。 ### 3.1 基础镜像 -以CUDA 11.2镜像为例,编译一个镜像流程如下,首先构建一个包含Pipelines环境的镜像: +以CUDA 11.2环境为例,编译一个Pipelines基础镜像流程如下: ``` nvidia-docker run --name pipelines --net host --shm-size 4g -it registry.baidubce.com/paddlepaddle/paddle:2.3.2-gpu-cuda11.2-cudnn8 /bin/bash +cd /root git clone https://github.com/PaddlePaddle/PaddleNLP.git cd PaddleNLP/pipelines/ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple @@ -78,7 +79,7 @@ apt-get install lsof ``` 镜像构建完成可以使用`Ctrl+P+Q`组合键跳出容器。 -在第一步构建镜像的过程中,如果是CUDA的其他版本,则需要在[官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/docker/linux-docker.html)上查找是否有对应的CUDA版本的Docker,如果没有,则需要自己手工构建一个该CUDA版本的Docker,然后安装对应CUDA版本的PaddlePaddle,然后继续执行上面的流程。 +在第一步构建镜像的过程中,如果是CUDA的其他版本,则需要在[Paddle官网](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/docker/linux-docker.html)上查找是否有对应的CUDA版本的Paddle镜像,如果没有,则需要自己手工构建一个该CUDA版本的Docker,然后安装对应CUDA版本的PaddlePaddle,然后继续执行上面的流程。 ### 3.2 一键启动镜像 diff --git a/pipelines/examples/FAQ/Install_windows.md b/pipelines/examples/FAQ/Install_windows.md index bec6f73f4c76..fb1e50dcfe68 100644 --- a/pipelines/examples/FAQ/Install_windows.md +++ b/pipelines/examples/FAQ/Install_windows.md @@ -26,11 +26,8 @@ python setup.py install ```bash # 我们建议在 GPU 环境下运行本示例,运行速度较快 -# 设置 1 个空闲的 GPU 卡,此处假设 0 卡为空闲 GPU -export CUDA_VISIBLE_DEVICES=0 python examples/frequently-asked-question/dense_faq_example.py --device gpu -# 如果只有 CPU 机器,可以通过 --device 参数指定 cpu 即可, 运行耗时较长 -unset CUDA_VISIBLE_DEVICES +# 如果只有 CPU 机器,安装CPU版本的Paddle后,可以通过 --device 参数指定 cpu 即可, 运行耗时较长 python examples/frequently-asked-question/dense_faq_example.py --device cpu ``` diff --git a/pipelines/examples/question-answering/Install_windows.md b/pipelines/examples/question-answering/Install_windows.md index 5e2cec507d68..2a76d9ba09ff 100644 --- a/pipelines/examples/question-answering/Install_windows.md +++ b/pipelines/examples/question-answering/Install_windows.md @@ -29,11 +29,8 @@ python setup.py install ```bash # 我们建议在 GPU 环境下运行本示例,运行速度较快 -# 设置 1 个空闲的 GPU 卡,此处假设 0 卡为空闲 GPU -export CUDA_VISIBLE_DEVICES=0 python examples/question-answering/dense_qa_example.py --device gpu -# 如果只有 CPU 机器,可以通过 --device 参数指定 cpu 即可, 运行耗时较长 -unset CUDA_VISIBLE_DEVICES +# 如果只有 CPU 机器,安装CPU版本的Paddle后,可以通过 --device 参数指定 cpu 即可, 运行耗时较长 python examples/question-answering/dense_qa_example.py --device cpu ``` `dense_qa_example.py`中`DensePassageRetriever`,`ErnieRanker`和`ErnieReader`的模型介绍请参考[API介绍](../../API.md) diff --git a/pipelines/examples/semantic-search/Install_windows.md b/pipelines/examples/semantic-search/Install_windows.md index 51fd6eb94bd8..53a8a154f986 100644 --- a/pipelines/examples/semantic-search/Install_windows.md +++ b/pipelines/examples/semantic-search/Install_windows.md @@ -26,11 +26,8 @@ python setup.py install 我们预置了基于[DuReader-Robust数据集](https://github.com/baidu/DuReader/tree/master/DuReader-Robust)搭建语义检索系统的代码示例,您可以通过如下命令快速体验语义检索系统的效果 ```bash # 我们建议在 GPU 环境下运行本示例,运行速度较快 -# 设置 1 个空闲的 GPU 卡,此处假设 0 卡为空闲 GPU -export CUDA_VISIBLE_DEVICES=0 python examples/semantic-search/semantic_search_example.py --device gpu -# 如果只有 CPU 机器,可以通过 --device 参数指定 cpu 即可, 运行耗时较长 -unset CUDA_VISIBLE_DEVICES +# 如果只有 CPU 机器,安装CPU版本的Paddle后,可以通过 --device 参数指定 cpu 即可, 运行耗时较长 python examples/semantic-search/semantic_search_example.py --device cpu ``` `semantic_search_example.py`中`DensePassageRetriever`和`ErnieRanker`的模型介绍请参考[API介绍](../../API.md)