栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

百度AnyQ之二—简单使用和添加自己的FAQ数据

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

百度AnyQ之二—简单使用和添加自己的FAQ数据

1 基础使用

继续跟着这个走:

  • 小白编译AnyQ-docker&linux[CentOs]——AnyQ系列之一
    容器创建时使用的命令是:
docker run -itd --name centos-anyq -p 0.0.0.0:8888:8999 centos:centos7  
# 这句话其实有问题,把容器放到后台执行了
docker exec -it centos-anyq /bin/bash
# 把容器放回到前台

demo查看

# 获取anyq定制solr,anyq示例配置
cp ../tools/anyq_deps.sh .
sh anyq_deps.sh # 这步是下载一个model

# 启动solr, 依赖python-json, jdk>=1.8
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs
# 如果没有java 这句会报错 可以按照上面的安装再走一次
java -version
> java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

#运行
./run_server

# 退出记得 ctrl+Z 不要直接关掉,不然端口会被占用

如果重新进入docker 记得切换到build目录

cd /home/AnyQ-master/build/

# 如果端口不幸被占用  查看容器内的端口 
netstat -tnlp | grep 8999 
# yum install net-tools
> tcp    0   0 0.0.0.0:8999   0.0.0.0:*      LISTEN   111723/./run_server 

> lsof -i:8999
COMMAND      PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
run_serve 111723 root    3u  IPv4 23682314      0t0  TCP *:bctp (LISTEN)
run_serve 111723 root    9u  IPv4 30077501      0t0  TCP a14447576c14:bctp->192.168.30.159:11545 (ESTABLISHED)


运行之后,访问自己的服务器ip:8888就可以看到:

或者可以 服务器ip:8888/anyq?question=使用什么帐号? 。 不过我返回的东西很奇怪。。

似乎编码有些问题。然后反应过来可以在控制台查看啊,浏览器的开发者工具。(但是我不太会,但是我知道人家这个是任务台搞出来的。)

但是后台log信息就很棒咧

或者容器内调用 curl "127.0.0.1:8999/anyq?question=需要使用什么账号登录"。

也可以多尝试尝试其他的例子,比如:

仔细查看输出,可以发现,anyQ的大致步骤

  1. 以某种方式找到与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系统的语义匹配能力

  2. 计算这些候选问题的jaccard,使用的是jaccard_sim.cpp这个文件,可以点击这里查看详细情况,其实这个文件挺简单的,就是jaccard相似度,Python里调一行的事情,换成c++加速了。

    Jaccard index , 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。

  3. 将候选结果排序,找出最后选定的那个候选query。主要使用这个rank_strategy.cpp文件,点击这里查看详细情况
  4. 返回上面选定的query对应的回答,作为最终的回答。主要使用这个 anyq_strategy.cpp,点击这里查看文件详情。

也可以尝试其他的问题,比如:今日日期,但是没有返回值,所以自带的FAQ问答对集合非常有限。可能需要自己添加一些。

2. 无聊的尝试

从这个数据上猜测这个anyq是不是就是百度AI平台的人工客服,试了一下,应该不是。

找了一下,这个anyq的数据来自solr/sample_docs

所以接下来就是尝试加入自己的数据进行尝试了。

  • https://blog.csdn.net/u011818766/article/details/104117469
  • https://www.jianshu.com/p/0647b27b9284
  • https://blog.csdn.net/weixin_37792714/article/details/103984292
3. 加入自己的数据 3.1 验证保存的镜像运行容器情况

之前保存过镜像了,刚好试一把,

参考

  • AnyQ如何配置solr动态读取数据库——AnyQ系列之二
  • Solr的基本使用

注意:

  • 这里8999端口是 anyq问答的端口
  • 如果要查看solr,solr的webapp页面端口是8900
  • 所以启动容器的时候,要么写两个接口映射,要么就是不使用默认的bridge模式,直接使用host模式。
    • 关于这两个模式,参考:docker的四种网络模式(Bridge、Host、Container、None 网络模式),自定义网络(创建自定义网桥、使两个不同网桥的容器通信、跨主机容器容器通讯等)
    • bridge是默认的,要通过特定规则(比如指定端口映射)完成容器和外接的通信
    • host是需要--network=host来指定的,host模式下的容器直接使用宿主机的 IP 地址与外界进行通信。
  • 这里可以使用多个端口映射的方式:
    docker run
    --name definedName(自定义容器名称)
    -p 8080:8080(端口映射  本机端口: docker端口 )
    -p 8081:8081
    -p ....    
    -d imagesName(镜像名称)
    

实际使用以下代码:

# -p -p ip:hostPort:containerPort
# -p 8888:8999   这里多个端口映射 其中 solr端口 本机和容器端口号用了一样的
docker run -itd --name anyq-faq -p 0.0.0.0:8886:8999 -p 0.0.0.0:8900:8900 anyq/base 

# 如果不小心创建失败,提示容器名称被占用 可以
docker stop anyq-self
# 暂停容器
docker rm anyq-self
# 删除容器

# 如果是端口名称被占用 要么换一个端口 要么找到占用端口的那个容器 删了

docker exec -it anyq-self /bin/bash

这里注意,虽然基于的这个镜像是之前配好的容器保存的,但是java还是没有配置在系统路径中,所以每次重新开一个容器,都要重新配置一次java的系统路径

java -version
> bash: java: command not found

cd /home
##6.配置java环境
export PATH=`pwd`/jdk1.8.0_171/bin:$PATH

> java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

# 这步可以不执行
cd AnyQ-master/build/
sh anyq_deps.sh # 这步是下载一个model

# 这步需要执行,启动solr脚本,不然会报错
# AnyQ RAW: curl_easy_perform Failed[Couldn't connect to server];
sh solr_script/anyq_solr.sh solr_script/sample_docs

# 然后运行服务
./run_server

然后就可以像之前一样正常启动,看看效果了。浏览器里输入:192.168.20.137:8886/anyq?question=使用什么账号?
至此,保存为镜像,验证基于此镜像重新弄容器的步骤验证完成。

3.2 查看solr

访问http://ip:8900/solr/这个链接,注意,这里不能只访问http://ip:8900,必须到后面的solr,不然会报错。
然后就会看到solr的这个简易的界面

要稍微了解一下这个solr,可以查看下面的solr简介部分。

ctrl+Z # 暂停当前的 run_server

jobs # 看一下这个被终止的run_server服务的后台序号
> [1]+  Stopped                 ./run_server

bg 1
# 放到后台继续运行 然后CLI就暂时空出来可以看其他东西了


找找这个目录,其实就在build目录下

查看一下这个目录,可以看到有以下内容

网上大部分其他关于solr的博客主要都会看一下这个example目录中solr目录,这里先看一下example目录(注意,以下内容皆为solr的示例,而不是anyq的数据)

再看一下solr目录

这就与什么是Solr,它能为我们解决什么问题,怎么用? 文章中示例的图一模一样了。里面出现了collection1这个文件夹

这里有16条文档,刚好和之前anyq测试时看到的那个数据集FAQ数量相同。仔细看一下collection文件夹的内容

其中那个core.properties配置文件里只有一行字:name=collection1。另外,data文件夹的结构如下,查看后,以下文件打开全都是乱码字符,找不到可以使用的内容。

conf配置文件夹中的conf/managed-schema.xml文件就是对数据库的模式描述,主键,还有样本的属性等等。

  • 参考:Solr【一】:初识Solr,其中有solr连接mysql的讲解。

    与之类似的还有一个 conf/schema.xml.bak文件。
  • 参考:Solr的基本使用
    • 该配置文件是Solr数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括FieldTypes、Fields和其他的一些缺省设置。
    • field:进行索引,需要创建document,document中包括 了很多的field(域)。
    • field属性:是否索引、是否存储、是否分词 ,是否多值multiValued
    • multiValued:该Field如果要存储多个值时设置为true,solr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图),通过使用solr查询要看出返回给客户端是数组:
    • Fieldtype:在solr中对每个Field都有一个Type类型。
    • 在Solr中进行索引、搜索时需要用哪些field需要提前在schema.xml文件中定义!!!!

另外,可以看一下这个和collections同级的solr.xml配置文件



  
    ${host:}
    ${jetty.port:8983}
    ${hostContext:solr}
    ${zkClientTimeout:30000}
    ${genericCoreNodeNames:true}
  

  
    ${socketTimeout:0}
    ${connTimeout:0}
  



solr简介

  • 什么是Solr,它能为我们解决什么问题,怎么用? :这里也有solr配置中文分词的教程
  • Solr百度百科

简单来说:Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr是一个可扩展的,可部署,搜索/存储引擎,优化搜索大量以文本为中心的数据。

和数据库的区别:

  1. solr本身也可以看成数据库,(no sql类型),但它比数据库搜索速度更快,所以在项目中我们一般把搜搜的部分交给solr,就像我们在京东首页所看到的商品信息,并不是来自数据库,而是来源于sorl的索引库
  2. 数据库本身不能实现分词效果,而只能使用模糊查询,但是模糊查询非常低效,查询速度比较慢,由于在实际生活中,一般搜索是用的比较多的,这样数据库压力自然就很大,所以我们就让供专业的solr来做搜索功能
3.3 加入自己的测试数据

一条一条加进去

  • AnyQ如何配置solr动态读取数据库——AnyQ系列之二
  • Solr的基本使用
  • AnyQ solr一键启动
  • https://github.com/baidu/AnyQ/blob/master/tools/solr/sample_docs
3.4 和mysql连接

留个坑,暂时先不尝试了,去看看这个anyq的整体框架和功能支持。


无意义的尝试

********无意义的尝试 可以不加privileged这个参数的  ********
********按照以前的方式创建就没问题 那个博主写的有问题********
docker run -it --name=anyq-self --ipc=host -p 8886:8999 --privileged=true anyq/base /usr/sbin/init 
> [FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.
# 使用上句报错了  不加--network=host  就会报错。
 
>  docker run -itd --name=anyq-faq -p 0.0.0.0:8886:8999 --privileged=true --network=host anyq/base  /usr/sbin/init
WARNING: Published ports are discarded when using host network mode
# 但是这里使用--network=host 虽然

docker run -itd --name=anyq-host --privileged=true --network=host anyq-host  /usr/sbin/init
docker run -itd --name centos-anyq -p 0.0.0.0:8888:8999 centos:centos7  
  • 使用--privileged=true和/usr/sbin/init参数确保在容器中可以用systemctl命令,关于这个systemctl命令,参考:Systemd 入门教程:命令篇

    • 不然会报错:

    [FAILED] Failed to start LSB: Bring up/down networking.
    See ‘systemctl status network.service’ for details.

    • 错误解决:stack obverflow:Docker service start failed
    • centos:7 container failed to start with /usr/sbin/init after update 12/16/2015 #39
    • 而且目前看下来,似乎只有centos这个linux发行版会有这个问题,ubuntu好像没有。
  • 关于警告信息:

    • 参考: WARNING: Published ports are discarded when using host network mode 解决方法
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/334581.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号