百度AnyQ之三—anyq系统框架和功能
1. 基本介绍
https://github.com/baidu/AnyQ.git
AnyQ系统框架主要由Question Analysis(问题分析 )、Retrieval、Matching、Re-Rank等部分组成(上图绿色圆角矩形Question
开始,一直走到绿色圆角矩形Answer
结束)。其他两部分:
- 一个是SimNet语义匹配框架的训练过程,
- 一个是问答数据集的索引(倒排索引:基于开源倒排索引Solr,加入百度开源分词;
语义检索:基于SimNet语义表示,使用ANNOY进行ANN检索)
整体流程控制的代码,参考:include/strategy/anyq_strategy.h以及对应的src/strategy/anyq_strategy.cpp
- 问题分析,包括NER命名实体识别,Reformulation,重组,POS词性标注。
- 其中,问题输入到solr里的时候,就已经进行过分词了。关于分词部分的配置,比如停用词等,可以参考:百度开源 FAQ 问答系统(AnyQ)|问题分析模块(Analysis)。
- NER,POS和Reformulation这三个任务是在问题分析中完成的,参考文件:include/analysis/analysis_strategy.h和对应的src文件src/analysis/analysis_strategy.cpp以及AnyQ系统配置教程中:config_tutorial.md#analysis部分。
- 检索(Retrieval),包括Semantic Retrieval(语义检索)和Term Retrieval(基于关键词的检索)。
- 输入的问题通过分析模块(Analysis)对问题进行分词,词向量表示等操作后,再输入到问题检索模块(Retrieval),由该模块将问题带入到FAQ数据集中进行检索,得到前N个候选问题。
- 可以查看2.2部分的截图,分析输入的query,然后找到与query相关的FAQ集合中的候选问题,candidate query。从输出的log提示中,可以知道使用的是
simnet_paddle_sim.cpp
这个文件,可以点击这里了解这个文件(主要是完成语义匹配的功能)
SimNet是百度自然语言处理部于2013年自主研发的语义匹配框架,该框架在百度各产品上广泛应用,主要包括BOW、CNN、RNN、MM-DNN等核心网络结构形式,同时基于该框架也集成了学术界主流的语义匹配模型,如MatchPyramid、MV-LSTM、K-NRM等模型。SimNet使用PaddleFluid和Tensorflow实现,可方便实现模型扩展。使用SimNet构建出的模型可以便捷的加入AnyQ系统中,增强AnyQ系统的语义匹配能力
百度语义匹配模型-simnet代码整理- 看不太懂C++,伤不起。
- 总之Question Analysis中的NER(命名实体识别)、Reformulation(信息重组)、POS(position of speech)词性标注 都不是在simnet_paddle_sim这个文件中进行的。
- 计算这些候选问题的jaccard,使用的是
jaccard_sim.cpp
这个文件,可以点击这里查看详细情况,其实这个文件挺简单的,就是jaccard相似度,Python里调一行的事情,换成c++加速了。
Jaccard index , 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。
- 将候选结果排序,找出最后选定的那个候选query。主要使用这个
rank_strategy.cpp
文件,点击这里查看详细情况 - 返回上面选定的query对应的回答,作为最终的回答。主要使用这个 anyq_strategy.cpp,点击这里查看文件详情。
框架中包含的功能均通过插件形式加入,如Analysis中的中文切词,Retrieval中的倒排索引、语义索引,Matching中的Jaccard特征、SimNet语义匹配特征。
2 运行结果反推
2.1 solr分词说明
运行的第一步,运行下列shell脚本
cp ../tools/anyq_deps.sh .
sh anyq_deps.sh
这个脚本内容很少,完成的功能也很简单,下载定制版本solr。在solr-4.10.3版本基础上加入了百度开源词法分析作为中文分词插件。
之前有看过solr-4.10.3-anyq/example/solr/collection1/conf/schema.xml.bak
这个文件,其实最下面一部分就是语言分词器的配置。
经过尝试不难发现,
从分词结果里可以看出,这个功能仅仅就是分词。
所以默认下载的这个solr已经集成了百度的分词工具了,如果需要自己添加别的分词工具,可以参考:Solr学习总结(八)IK 中文分词的配置和使用
可以查看/home/Anyq-master/build/solr-webapp/webapp/WEB-INF/lib
这个文件夹,就可以看到libbaidusegmenter.so
和libpaddle_fluid.so
这两个一看就是百度的库:
关于配置的话,自己看不见就直接搜吧,参考:Linux中find常见用法示例
[root@567b3aed2b1c build]# find . -name "*schema.xml" -print
./solr-4.10.3-anyq/example/multicore/core0/conf/schema.xml
./solr-4.10.3-anyq/example/multicore/core1/conf/schema.xml
./solr-4.10.3-anyq/example/solr_config_set/common/managed-schema.xml ✅
./solr-4.10.3-anyq/example/solr/collection1/conf/managed-schema.xml
./solr-4.10.3-anyq/example/example-DIH/solr/tika/conf/schema.xml
./solr-4.10.3-anyq/example/example-DIH/solr/rss/conf/schema.xml
./solr-4.10.3-anyq/example/example-DIH/solr/solr/conf/schema.xml
./solr-4.10.3-anyq/example/example-DIH/solr/mail/conf/schema.xml
./solr-4.10.3-anyq/example/example-DIH/solr/db/conf/schema.xml
./solr-4.10.3-anyq/example/example-schemaless/solr/collection1/conf/schema.xml
vi ./solr-4.10.3-anyq/example/solr_config_set/common/managed-schema.xml
这个文件,终于看到了百度分词的配置。
<fieldType name="text_multi_lang" class="solr.TextField"><analyzer class="org.apache.lucene.analysis.baiducn.BaiduAnalyzer"/>
2.2 其他运行结果说明
# 启动solr, 依赖python-json, jdk>=1.8
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs#运行
./run_server
在完整的一次问答的响应的log输出中,可以看到
开始就是加载一些配置文件
然后检查网络服务怎么样,分词,和solr通信
和solr通信,找到返回的FAQ的结果,然后进行检索,还有排序策略
最后才是使用语义匹配看得分
–
2.2文件结构说明
.
├── AUTHORS
├── build # 编译生成的文件夹
│ ├── annoy_index_build_tool
│ ├── anyq_deps.sh
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── demo_anyq
│ ├── demo_anyq_multi
│ ├── example
│ ├── example.tar.gz
│ ├── faq
│ ├── feature_dump_tool
│ ├── libanyq.a
│ ├── logs
│ ├── Makefile
│ ├── nohup.out
│ ├── proto_build-prefix
│ ├── rpc_data
│ ├── run_server
│ ├── solr-4.10.3-anyq
│ ├── solr-4.10.3-anyq.tar.gz
│ ├── solr_script
│ ├── solr-webapp
│ └── third_party
├── cmake # cmake的脚本,指定需要的第三方库的处理方式
│ ├── external
│ └── proto_build.cmake
├── CMakeLists.txt # CMakeLists 就是cmake的脚本
├── demo
│ ├── annoy_index_build.cpp
│ ├── demo_anyq.cpp
│ ├── demo_anyq_multi.cpp
│ ├── feature_dump.cpp
│ └── run_server.cpp
├── docs
│ ├── config_tutorial.md
│ ├── images
│ ├── plugin_tutorial.md
│ └── semantic_retrieval_tutorial.md
├── include
│ ├── analysis
│ ├── common
│ ├── config
│ ├── dict
│ ├── matching
│ ├── rank
│ ├── retrieval
│ ├── server
│ └── strategy
├── LICENSE
├── proto
│ ├── anyq.proto
│ └── http_service.proto
├── README.EN.md
├── README.md
├── src
│ ├── analysis
│ ├── common
│ ├── config
│ ├── dict
│ ├── matching
│ ├── rank
│ ├── retrieval
│ ├── server
│ └── strategy
└── tools├── anyq_deps.sh├── common├── ltr├── simnet└── solr
参考:
- 百度 AnyQ 配置说明
- 百度开源 FAQ 问答系统—AnyQ
- 百度开源 FAQ 问答系统(AnyQ)试用及系统架构
百度AnyQ之三—anyq系统框架和功能相关推荐
- 【SSH框架/国际物流商综平台】-01-分三期(仓储管理,货运全流程管理,决策分析)- 项目背景 界面原型 用例图 企业组织结构 功能模块图 系统框架 项目表单收集
项目背景 商务综合管理平台是国际物流行业一家专门从事进出口玻璃器皿贸易的公司.业务遍及欧美.随着公司不断发展壮大,旧的信息系统已无法满足公司的快速发展需求,妨碍公司成长,在此背景下,公司领导决定研发& ...
- 【Lin-CMS内容管理系统框架 v0.3.6】内置用户管理/权限管理/日志系统等常见功能
[Lin-CMS内容管理系统框架 v0.3.6]内置用户管理/权限管理/日志系统等常见功能 Lin-CMS 是林间有风团队经过大量项目实践所提炼出的一套内容管理系统框架. Lin-CMS 可以有效的帮 ...
- 通用 漂亮 功能强大的BS架构系统框架
不需要写任何代码就可以创建一个漂亮,功能强大的应用系统框架,包含通用的系统权限管控和个性化界面设置两大通用模块. 此项目模板在.net4.0环境下开发,可以部署到VS2010及以上版本的开发工具里. ...
- rola物联网框架_如何搭建一个物联网系统框架?
下面将谈到几个关键问题: 设备如何接入网络? 设备间如何通信? 物联网数据的用途? 如何搭建起一个物联网系统框架呢?它的技术架构又是怎么样呢? 物联网终端软件系统架构? 物联网云平台系统架构? 1.物 ...
- IOT(5)---物联网系统框架介绍
转载: https://blog.csdn.net/robert_tin 物联网系统框架介绍 下面将谈到几个关键问题: 设备如何接入网络? 设备间如何通信? 物联网数据的用途? 如何搭建起一个物联网系 ...
- NLP工具——doccano标注系统自动标注功能使用
NLP工具--doccano标注系统自动标注功能使用 0. 简介 1. doccano安装 2. 创建标注任务 3. 写一个命名实体识别的接口 4. 添加自动标注功能 5. 增加标注员用户 6. 数据 ...
- 百度人脸活体检测系统通过信通院“护脸计划”首批优秀级安全防护能力评估
11月2日,百度人脸活体检测系统(V2.0)以全项通过的优异成绩,顺利通过信通院"可信人脸应用守护计划"(以下简称"护脸计划")测试,获评为优秀级(四级)安全防 ...
- (转)核心银行系统 之三 核心系统的国内外厂商介绍
https://www.cnblogs.com/luscinia/p/8586330.html 随笔:核心银行系统 之三 核心系统的国内外厂商介绍 核心系统的国内外厂商介绍 为什么要介绍厂商?我不是在 ...
- IOT [02] -- 物联网系统框架介绍
IOT [02] -- 物联网系统框架介绍 物联网系统框架介绍 1. 物联网设备如何接入到网络? 网络通信方式 物联网设备接入网络后如何开展M2M,M2C通信? 1. 基础应用:监控 2.进阶应用: ...
最新文章
- Linux日常运维--6
- 为什么你学C++就那么难?
- linux io负载解决方法,看你的linux负载 io值
- 早上起床时需要的重力
- Java类class cast()方法及示例
- 152. 乘积最大子序列
- php base64_decode 图片,php读取和保存base64编码图片
- 15、工作流Web流程设计器及表单设计器
- 最新字节跳动面试题之堆排序
- QQ桌球瞄准器开发(5)使用注册表保存配置
- 2020.9.2丨个体重测序、KASP分型产品介绍
- 第一次软工作业(构建之法)
- 压敏电阻的作用有哪些?
- 【牛客网OJ题】计算糖果
- 微软最走运、最倒霉的十个瞬间 1
- 微信小程序之图片压缩
- 成交量放大600317点评
- 关于错误:	[Error] ld returned 1 exit status
- 【IBM官方文档】DB2 SQLSTATE 消息
- Golang 火焰图