AnyQ

开源 FAQ 问答系统
授权协议 Apache-2.0
开发语言 C/C++ Python SHELL
所属分类 建站系统、 开源问答系统
软件类型 开源软件
地区 国产
投 递 者 魏晨
操作系统 跨平台
开源组织 百度
适用人群 未知
 软件概览

AnyQ(ANswer Your Questions)

AnyQ(ANswer Your Questions) 开源项目主要包含面向FAQ集合的问答系统框架、文本语义匹配工具SimNet。

问答系统框架采用了配置化、插件化的设计,各功能均通过插件形式加入,当前共开放了20+种插件。开发者可以使用AnyQ系统快速构建和定制适用于特定业务场景的FAQ问答系统,并加速迭代和升级。

SimNet是百度自然语言处理部于2013年自主研发的语义匹配框架,该框架在百度各产品上广泛应用,主要包括BOW、CNN、RNN、MM-DNN等核心网络结构形式,同时基于该框架也集成了学术界主流的语义匹配模型,如MatchPyramid、MV-LSTM、K-NRM等模型。SimNet使用PaddleFluid和Tensorflow实现,可方便实现模型扩展。使用SimNet构建出的模型可以便捷的加入AnyQ系统中,增强AnyQ系统的语义匹配能力
(English)

详细介绍

FAQ问答系统框架

AnyQ系统框架主要由Question Analysis、Retrieval、Matching、Re-Rank等部分组成,框架中包含的功能均通过插件形式加入,如Analysis中的中文切词,Retrieval中的倒排索引、语义索引,Matching中的Jaccard特征、SimNet语义匹配特征,当前共开放了20+种插件。AnyQ系统的配置化、插件化设计有助于开发者快速构建、快速定制适用于特定业务场景的FAQ问答系统,加速迭代和升级。 AnyQ的框架结构如下图:

配置化

AnyQ系统集成了检索和匹配的众多插件,通过配置的方式生效;以检索方式和文本匹配相似度计算中的插件为例:

  • 检索方式(Retrieval)

    • 倒排索引:基于开源倒排索引Solr,加入百度开源分词;

    • 语义检索:基于SimNet语义表示,使用ANNOY进行ANN 检索;

    • 人工干预:通过提供精准答案,控制输出;

  • 匹配计算(Matching)

    • SimNet语义匹配:使用语义匹配SimNet架构训练的模型,构建问题在语义层面的相似度;

    • Cosine相似度

    • Jaccard相似度

    • BM25

    • 字面匹配相似度:在对中文问题进行切词等处理之后,计算字面匹配特征

    • 语义匹配相似度

插件化

除框架外,AnyQ的所有功能都是通过插件形式加入,用户自定义的插件很容易加到AnyQ系统中,只需实现对应的接口即可,如自定义词典加载、Question分析方法、检索方式、匹配相似度、排序方式等,真正实现可定制和插件化。

文本语义匹配框架SimNet

SimNet是百度自然语言处理部于2013年自主研发的语义匹配框架,该框架在百度各产品上广泛应用,主要包括BOW、CNN、RNN、MM-DNN等核心网络结构形式,同时基于该框架也集成了学术界主流的语义匹配模型,如MatchPyramid、MV-LSTM、K-NRM等模型。SimNet使用PaddleFluid和Tensorflow实现,可方便实现模型扩展。使用SimNet构建出的模型可以便捷的加入AnyQ系统中,增强AnyQ系统的语义匹配能力。

按照文本语义匹配网络结构, 可将SimNet中实现的网络模型主要分为如下两类:

  • Representation-based Models 如:BOW, CNN, RNN(LSTM, GRNN) 特点:文本匹配任务的两端输入,分别进行表示,之后将表示进行融合计算相似度;

  • Interaction-based Models 如:MatchPyramid, MV-LSTM, K-NRM, MM-DNN 特点:在得到文本word级别的序列表示之后,根据两个序列表示计算相似度匹配矩阵,融合每个位置上的匹配信息给出最终相似度打分;

SimNet使用PaddleFluid和Tensorflow实现,更多文档请参考:

代码编译

Linux

cmake 3.0以上(推荐3.2.2版本),g++ >=4.8.2,

mkdir build && cd build && cmake .. && make

Others

针对MacOS、Windows等环境,推荐使用docker方式

# 使用paddle官方镜像
docker pull paddlepaddle/paddle:lastest-dev

Demo

构建索引、配置

# 获取anyq定制solr,anyq示例配置
cp ../tools/anyq_deps.sh .
sh anyq_deps.sh

# 启动solr, 依赖python-json, jdk>=1.8
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs
  • HTTP-Server

./run_server

# 请求示例:
http:${host}:${port}/anyq?question=XXX
  • lib

./demo_anyq sample_input_json

更多文档

如何贡献

  • 可以在AnyQ框架下定制特定功能的插件,教程参考AnyQ如何添加插件

  • 如果觉得自己定制的插件功能足够通用&漂亮,欢迎给我们提交PR

Copyright and License

AnyQ is provided under the Apache-2.0 license.

  • 1、依赖环境 Python 2.7 JDK >=1.8(我用的是这个版本:jdk1.8.0_171) wget -c http://anyq.bj.bcebos.com/jdk-8u171-linux-x64.tar.gz tar -xzvf jdk-8u171-linux-x64.tar.gz 修改~/.bash_profile vim ~/.bash_profile export JAVA_H

  • AnyQ 在Linux上的编译 一.系统下载及环境安装 (1)源码下载到对应的位置 git clone https://github.com/baidu/AnyQ.git   (2)cmake3安装 1)安装gcc/g++的软件依赖 yum install -y gcc gcc-c++ make automake 2)下载cmake源代码包(推荐3.3.2), 可以去官网查看最新版的下载地址:ht

  • AnyQ部署说明(无docker) #根据csdn上AnyQ的安装说明,进行AnyQ的安装。但是反复尝试后,总是出现问题。最主要的一个现象是,编译完成后,没有run_server这个服务,排查都没法排查。后来经过反复尝试,终于安装成功。发现,CSDN上的那篇文章“百度开源 FAQ 问答系统(AnyQ)安装—Linux(无docker)”,总体上是对的,但是完全按照这个安装,我们几个朋友都没成功。分

  • 系统:ubuntu 16.04 问题一: CMakeFiles/extern_paddle.dir/build.make:111: recipe for target ‘third_party/paddle/src/extern_paddle-stamp/extern_paddle-build’ failed 解决方案:所有重新编译,用 make -i 代替 make 问题二: Linking C

  • AnyQ 搭建 参考https://github.com/baidu/AnyQ文档 使用docker搭建百度开源框架AnyQ 1、拉取docker镜像 # paddle官方镜像 docker pull paddlepaddle/paddle:latest-dev # paddle国内镜像 docker pull docker.paddlepaddlehub.com/paddle:latest-de

  • 查看cmakelist文件可以知道: 项目生成的主要可执行程序run_server,对应的代码文件是: AnyQ/deme/run_server.cpp,详细代码如下: run_server.cpp主要是加载配置文件,服务初始化,并启动服务一直运行,等待请求。 run_server.cpp AnyQ/deme/run_server.cpp部分代码如下所示: #include <glog/loggi

  • 1、准备 硬件:内存8g以上(我编译的时候8g不行,需要16g) jdk>=1.8 安装、环境配好 官方建议cmake 3.2.2; g++>=4.8.2; bison>=3.0 ;(g++版本太高也不行;亲测版本:cmake 3.2.2; g++ 5; bison 3.0.4 ) 2、g++版本更换(满足版本可忽略) sudo apt-get install -y gcc-5 sudo apt-

 相关资料
  • 报警 Q: 能不能当网络流量超过某个阀值的时候,发报警邮件把占用流量Top3的程序找出来?each (endpoint=xxx metric=yyy tag1=tttt) expression可以这么写吗? @聂安_小米 A: 可以。如果endpoint不是机器名,可以用each表达式配置报警策略。如果endpoint是机器名,建议使用 hostgrp + template的方式 配置策略——这种

  • 如何引用 Keras? 如何在 GPU 上运行 Keras? 如何在多 GPU 上运行 Keras 模型? "sample", "batch", "epoch" 分别是什么? 如何保存 Keras 模型? 为什么训练集误差比测试集的误差高很多? 如何获取中间层的输出? 如何用 Keras 处理超过内存的数据集? 在验证集的误差不再下降时,如何中断训练? 验证集划分是如何计算的? 在训练过程中数据是

  • 系统使用: 安装升级 我第一次接触DedeCMS,请问我想使用这个系统需要那些条件? DedeCMS是基于PHP+MySQL进行开发的,首先需要确保您的服务器环境需要支持PHP,并且需要安装了MySQL数据库服务器,通常满足了这两个基本条件还不够,还需要您的服务器正确的配置,比如:是否安装GD库,权限是否配置正确等。一般织梦会推荐一些专用的主机,新人如果建站可以考虑选购,如果是本地架设进行调试,可

  • 本文向大家介绍开源操作系统,包括了开源操作系统的使用技巧和注意事项,需要的朋友参考一下 开源操作系统是根据许可发布的,版权所有者允许他人学习,更改并将软件分发给他人。可以出于任何原因完成此操作。市场上可用的不同开源操作系统是- 宇宙 这是一个主要使用C#语言编写的开源操作系统。其完整格式为C#开源托管操作系统。直到2016年,Cosmos都不打算成为一个完整的操作系统,而是一个允许其他开发人员轻松

  • 删除问题 DELETE /api/v2/qa/questions/{id} 1 仅拥有 [Q&A] Manage Questions 或者是问题发布者本人才有权限删除 响应: Status: 204 No Content 1 删除回答 DELETE /api/v2/qa/answers/{id} 1 仅拥有 [Q&A] Manage Answers 或者是回答发布者本人才有权限删除 响应: Sta

  • 这个产品可以用于生产环境吗?https://zeit.co 都是一直用 Next.js 写的。 它的开发体验和终端用户体验都很好,所以我们决定开源出来给大家共享。体积多大? 客户端大小根据应用需求不一样大小也不一样。 一个最简单 Next 应该用 gzip 压缩后大约65kb这个像 `create-react-app`? 是或不是. 是,因为它让你的 SSR 开发更简单。 不是,因为它规定了一定的