丁云鹏 5 kuukautta sitten
vanhempi
commit
c0d265e3d1

+ 0 - 142
recommend-model-produce/src/main/python/models/dssm/readme.md

@@ -1,142 +0,0 @@
-# DSSM文本匹配模型
-
-[中文教程](https://paddlerec.readthedocs.io/en/latest/models/match/dssm.html#id5)
-
-**[AI Studio在线运行环境](https://aistudio.baidu.com/aistudio/projectdetail/3238124)**
-
-以下是本例的简要目录结构及说明: 
-
-```
-├── data #样例数据
-    ├── train
-        ├── train.txt #训练数据样例
-    ├── test
-        ├── test.txt #测试数据样例
-    ├── preprocess.py #数据处理程序
-    ├── data_process #数据一键处理脚本
-├── __init__.py
-├── README.md #文档
-├── config.yaml # sample数据配置
-├── config_bigdata.yaml # 全量数据配置
-├── net.py # 模型核心组网(动静统一)
-├── static_model.py # 构建静态图
-├── dygraph_model.py # 构建动态图
-├── transform.py #将数据整理成合适的格式方便计算指标
-├── run.sh #全量数据集中的训练脚本,从训练到预测并计算指标
-├── bq_reader_train.py #训练时数据读取程序
-├── bq_reader_infer.py #预测时数据读取程序
-```
-
-注:在阅读该示例前,建议您先了解以下内容:
-
-[paddlerec入门教程](https://github.com/PaddlePaddle/PaddleRec/blob/master/README.md)  
-[readthedocs文档](https://paddlerec.readthedocs.io/en/latest/models/match/dssm.html)  
-
-
-## 内容
-
-- [模型简介](#模型简介)
-- [数据准备](#数据准备)
-- [运行环境](#运行环境)
-- [快速开始](#快速开始)
-- [模型组网](#模型组网)
-- [效果复现](#效果复现)
-- [进阶使用](#进阶使用)
-- [FAQ](#FAQ)
-
-## 模型简介
-DSSM是Deep Structured Semantic Model的缩写,即我们通常说的基于深度网络的语义模型,其核心思想是将query和doc映射到到共同维度的语义空间中,通过最大化query和doc语义向量之间的余弦相似度,从而训练得到隐含语义模型,达到检索的目的。DSSM有很广泛的应用,比如:搜索引擎检索,广告相关性,问答系统,机器翻译等。    
-
-## 数据准备
-BQ是一个智能客服中文问句匹配数据集,该数据集是自动问答系统语料,共有120,000对句子对,并标注了句子对相似度值。数据中存在错别字、语法不规范等问题,但更加贴近工业场景。
-原始数据集样例:
-```
-请问一天是否都是限定只能转入或转出都是五万。    微众多少可以赎回短期理财        0
-微粒咨询电话号码多少    你们的人工客服电话是多少        1
-已经在银行换了新预留号码。      我现在换了电话号码,这个需要更换吗      1
-每个字段以tab键分隔,第1,2列表示两个文本。第3列表示类别(0或1,0表示两个文本不相似,1表示两个文本相似)。
-```
-
-## 运行环境
-PaddlePaddle>=2.0
-
-python 2.7/3.5/3.6/3.7
-
-os : windows/linux/macos 
-12234
-## 快速开始
-本文提供了样例数据可以供您快速体验,在任意目录下均可执行。在dssm模型目录的快速执行命令如下: 
-```bash
-# 进入模型目录
-# cd models/match/dssm # 在任意目录均可运行
-# 动态图训练
-python -u ../../../tools/trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml 
-# 动态图预测
-python -u ../../../tools/infer.py -m config.yaml 
-
-# 静态图训练
-python -u ../../../tools/static_trainer.py -m config.yaml # 全量数据运行config_bigdata.yaml 
-# 静态图预测
-python -u ../../../tools/static_infer.py -m config.yaml 
-``` 
-
-## 模型组网
-DSSM 的输入采用 BOW(Bag of words)的方式,相当于把字向量的位置信息抛弃了,整个句子里的词都放在一个袋子里了。将一个句子用这种方式转化为一个向量输入DNN中。  
-Query 和 Doc 的语义相似性可以用这两个向量的 cosine 距离表示,然后通过softmax 函数选出与Query语义最相似的样本 Doc 。  
-
-模型的具体细节可以阅读论文[DSSM](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/cikm2013_DSSM_fullversion.pdf):
-<p align="center">
-<img align="center" src="../../../doc/imgs/dssm.png">
-<p>
-
-## 效果复现
-为了方便使用者能够快速的跑通每一个模型,我们在每个模型下都提供了样例数据。如果需要复现readme中的效果,请按如下步骤依次操作即可。  
-在全量数据下模型的指标如下:  
-
-| 模型 | 正序率 | batch_size | epoch_num| Time of each epoch |
-| :------| :------ | :------ | :------| :------ | 
-| DSSM | 0.93 | 128 | 1 | 约9分钟 |  
-
-1. 确认您当前所在目录为PaddleRec/models/match/dssm
-2. 进入paddlerec/datasets/BQ_dssm目录下,执行该脚本,会从国内源的服务器上下载我们预处理完成的BQ全量数据集,并解压到指定文件夹。  
-``` bash
-cd ../../../datasets/BQ_dssm
-sh run.sh
-```
-3. 切回模型目录,直接一键运行:bash run.sh 即可得到复现的论文效果.
-执行该脚本后,会开始自动训练并测试模型,将测试的结果保存到result.txt文件,再执行transform.py整理格式,最后通过执行../../../tools/cal_pos_neg.py进行评估得到数据的正序率指标   
-```bash
-cd - # 切回模型目录
-bash run.sh #动态图训练并测试,最后得到指标
-```
-
-## 进阶使用
-DSSM作为推荐系统中一种向量召回的方式,一般需要将doc侧的向量预先计算出来,灌入向量搜索引擎(例如milvus)中,同时保存的模型仅为query侧的模型。线上使用阶段,输入query侧的数据,计算出query侧向量后,直接通过向量搜索引擎召回对应的doc。  
-一般在训练的过程中,增加预测阶段,dump出全量的doc侧向量,需要做如下修改: 
-1. 为了区分dump出的向量,预测阶段使用的数据需要增加insid和content两个字段,其中insid唯一标记样本,content指明对应的doc。并在数据处理脚本中对这两个字段进行解析,详见bq_reader_train_insid.py脚本。
-2. dataset选择InmemoryDataset,同时设置
-```python
-dataset.set_parse_ins_id(True)
-dataset.set_parse_content(True)
-```
-3. 在static_model.py中配置需要dump的变量(doc侧最上层输出)
-```python
-self.infer_dump_fields = [dssm_model.doc_pos_fc]
-```
-4. 配置文件中,打开预测阶段的dump功能,并配置dump_path
-```bash
-need_infer_dump: True
-infer_dump_fields_dir: "./infer_dump_data"
-```
-保存模型时,只需要保存query侧网络
-1. 配置文件中,打开裁剪网络开关
-```bash
-need_prune: True
-```
-2. 在static_model.py中配置裁剪网络的输入和输出
-```python
-self.prune_feed_vars = [query]
-self.prune_target_var = dssm_model.query_fc
-```
-  
-## FAQ

+ 3 - 1
recommend-model-produce/src/main/python/tools/static_ps_infer_v2.py

@@ -316,7 +316,9 @@ class Main(object):
         output_file = os.path.join(output_dir, f"epoch_{epoch}_results.jsonl")
         
         # 创建处理器实例
-        fetch_handler = FetchHandler(var_dict=self.metrics, period_secs=1)
+        fetch_handler = InferenceFetchHandler(output_file)
+        fetch_handler.set_var_dict(self.metrics)
+        
         print(paddle.static.default_main_program()._fleet_opt)
         self.exe.infer_from_dataset(
             program=paddle.static.default_main_program(),