\u200E
AnyQ-SimNet
类别 自然语言处理(PaddleNLP)
应用 问答系统 对话系统 智能客服
模型概述
SimNet 是百度自主研发的语义匹配框架,该框架在百度内有广泛的应用,主要包括 BOW、CNN、RNN、MM-DNN 等核心网络结构形式,同时基于该框架也集成了学术界主流的语义匹配模型。使用 SimNet 构建出的模型可以便捷的加入AnyQ系统中,增强AnyQ系统的语义匹配能力。
模型说明
# Paddle版SimNet Paddle版本Simnet提供了BOW,CNN,LSTM及GRU四种网络实现,您可以通过配置文件的形式灵活选择您需要的网络,损失函数,训练方式。 ## 代码结构 ``` simnet |- paddle |- date //示例数据 |- examples //示例配置文件 |- layers //网络中使用操作层的实现 |- losses //损失函数实现 |- nets //网络结构实现 |- optimizers //优化方法实现 |- util //工具类 ``` ## 安装 Paddle版SimNet需要PaddlePaddle Fluid v1.0.2,详细安装方式见[PaddlePaddle官网](http://www.paddlepaddle.org/)。 ## 数据准备 SimNet可以使用Pointwise与Pairwise两种类型的数据进行训练 **Pointwise训练及测试数据格式** * *训练数据格式*:训练数据包含三列,依次为Query1的ID序列(ID间使用空格分割),Query2的ID序列(ID间使用空格分割),Label,每列间使用TAB分割,例如; ``` 1 1 1 1 1 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 1 ... ``` * *测试数据格式*:Pointwise测试数据格式与训练数据格式相同。 **Pairwise训练及测试数据格式** * *训练数据格式*:训练数据包含三列,依次为Query1的ID序列(ID间使用空格分割),Positive Query2的ID序列(ID间使用空格分割),Negative Query3的ID序列(ID间使用空格分割),每列间使用TAB分割,例如; ``` 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 ... ``` * *测试数据格式*:测试数据格式包含四列,依次为QID(用于标记唯一Query1), Label,Query1的ID序列(ID间使用空格分割),Query2的ID序列(ID间使用空格分割),每列间使用TAB分割,例如; ``` 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 2 2 2 2 2 2 1 3 3 3 3 3 3 3 3 3 3 ... ``` ## 模型训练 数据准备完毕后,可以通过执行脚本run_train.sh启动示例训练,也可以通过如下方式启动自定义训练: ``` python paddle_simnet.py --task_type train --conf_file_path examples/cnn_pointwise.json ``` **参数说明:** * **task_type**: 任务类型 ,可选择train或predict。 * **conf_file_path**: 使用配置文件地址 **配置文件说明:** 通过配置文件您可以灵活的选择网络类型,数据类型,损失函数以及其他超参数,例如: ``` { //网络类型 "net": { "module_name": "cnn", // 网络对应模块名 "class_name": "CNN", // 网络对应类名 "emb_dim": 128, //Embedding Dimension "filter_size": 3, //卷机核大小 "num_filters": 256, //卷机核数量 "hidden_dim": 128 //隐藏层维度 }, //损失函数 "loss": { "module_name": "softmax_cross_entropy_loss", //损失函数对应模块名 "class_name": "SoftmaxCrossEntropyLoss" //损失函数对应类名 }, //优化方法 "optimizer": { "class_name": "SGDOptimizer", //优化方法对应类名 "learning_rate" : 0.0001 //学习率 }, "dict_size": 10, //词典大小 "task_mode": "pointwise", //数据类型 "train_file_path": "data/train_pointwise_data", //训练数据文件路径 "test_file_path": "data/test_pointwise_data", //测试数据文件路径 "result_file_path": "result", //存储测试结果文件路径 "epoch_num": 10, //Number of Epoch "model_path": "models/cnn_pointwise", //模型保存目录 "use_epoch": 0, //使用哪个epoch产生的模型测试,其值范围为[0, epoch_num)的整数 "batch_size": 64, //Batch Size "num_threads": 4 //训练线程数 } ``` ## 模型推断 模型推断可以得到模型预测结果或得分,您可以通过执行脚本run_infer.sh启动示例训练,也可以通过如下方式启动自定义训练: ``` python paddle_simnet.py --task_type predict --conf_file_path examples/cnn_pointwise.json ``` **参数说明:** 同模型训练部分 **配置文件说明:** 同模型训练部分