QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。
您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。
目前已支持格式: PDF,Word(doc/docx),PPT,Markdown,Eml,TXT,图片(jpg,png等),网页链接,更多格式,敬请期待...
特点
- 数据安全,支持全程拔网线安装使用。
- 支持跨语种问答,中英文问答随意切换,无所谓文件是什么语种。
- 支持海量数据问答,两阶段向量排序,解决了大规模数据检索退化的问题,数据越多,效果越好。
- 高性能生产级系统,可直接部署企业应用。
- 易用性,无需繁琐的配置,一键安装部署,拿来就用。
- 支持选择多知识库问答。
架构
1.两阶段检索优势
知识库数据量大的场景下两阶段优势非常明显,如果只用一阶段embedding检索,随着数据量增大会出现检索退化的问题,如下图中绿线所示,二阶段rerank重排后能实现准确率稳定增长,即数据越多,效果越好。
BCEmbedding是由网易有道开发的中英双语和跨语种语义表征算法模型库,其中包含 EmbeddingModel和 RerankerModel两类基础模型。EmbeddingModel专门用于生成语义向量,在语义搜索和问答中起着关键作用,而 RerankerModel擅长优化语义搜索结果和语义相关顺序精排。
BCEmbedding作为有道的检索增强生成式应用(RAG)的基石,特别是在QAnything [github]中发挥着重要作用。QAnything作为一个网易有道开源项目,在有道许多产品中有很好的应用实践,比如有道速读和有道翻译。
QAnything使用的检索组件BCEmbedding有非常强悍的双语和跨语种能力,能消除语义检索里面的中英语言之间的差异,
从而实现:
- 强大的双语和跨语种语义表征能力【基于MTEB的语义表征评测指标】。
- 基于LlamaIndex的RAG评测,表现SOTA【基于LlamaIndex的RAG评测指标】。
- 双语和跨语种优势
- 现有的单个语义表征模型在双语和跨语种场景中常常表现不佳,特别是在中文、英文及其跨语种任务中。BCEmbedding充分利用有道翻译引擎的优势,实现只需一个模型就可以在单语、双语和跨语种场景中表现出卓越的性能。
EmbeddingModel支持中文和英文(之后会支持更多语种);RerankerModel支持中文,英文,日文和韩文。
1.1 一阶段检索(embedding)
模型名称 | Retrieval | STS | PairClassification | Classification | Reranking | Clustering | 平均 |
---|---|---|---|---|---|---|---|
bge-base-en-v1.5 | 37.14 | 55.06 | 75.45 | 59.73 | 43.05 | 37.74 | 47.20 |
bge-base-zh-v1.5 | 47.60 | 63.72 | 77.40 | 63.38 | 54.85 | 32.56 | 53.60 |
bge-large-en-v1.5 | 37.15 | 54.09 | 75.00 | 59.24 | 42.68 | 37.32 | 46.82 |
bge-large-zh-v1.5 | 47.54 | 64.73 | 79.14 | 64.19 | 55.88 | 33.26 | 54.21 |
jina-embeddings-v2-base-en | 31.58 | 54.28 | 74.84 | 58.42 | 41.16 | 34.67 | 44.29 |
m3e-base | 46.29 | 63.93 | 71.84 | 64.08 | 52.38 | 37.84 | 53.54 |
m3e-large | 34.85 | 59.74 | 67.69 | 60.07 | 48.99 | 31.62 | 46.78 |
bce-embedding-base_v1 | 57.60 | 65.73 | 74.96 | 69.00 | 57.29 | 38.95 | 59.43 |
- 更详细的评测结果详见Embedding模型指标汇总。
1.2二阶段检索(rerank)
模型名称 | Reranking | 平均 |
---|---|---|
bge-reranker-base | 57.78 | 57.78 |
bge-reranker-large | 59.69 | 59.69 |
bce-reranker-base_v1 | 60.06 | 60.06 |
- 更详细的评测结果详见Reranker模型指标汇总
- Reranker Evaluation Results
Language:
en
Task Type: Reranking
Model AskUbuntuDupQuestions MindSmallReranking SciDocsRR StackOverflowDupQuestions AVG bge-reranker-base 54.70 28.48 67.09 37.55 46.96 bge-reranker-large 58.73 28.84 71.30 39.04 49.48 bce-reranker-base_v1 56.54 30.73 75.79 42.88 51.48 Summary on
en
Model Reranking AVG bge-reranker-base 46.96 46.96 bge-reranker-large 49.48 49.48 bce-reranker-base_v1 51.48 51.48
Language:
zh
Task Type: Reranking
Model T2Reranking MMarcoReranking CMedQAv1 CMedQAv2 AVG bge-reranker-base 67.28 35.46 81.27 84.10 67.03 bge-reranker-large 67.60 37.64 82.14 84.18 67.89 bce-reranker-base_v1 70.25 34.13 79.64 81.31 66.33 Summary on
zh
Model Reranking AVG bge-reranker-base 67.03 67.03 bge-reranker-large 67.89 67.89 bce-reranker-base_v1 66.33 66.33
Language:
en-zh
Task Type: Reranking
Model T2RerankingEn2Zh MMarcoRerankingEn2Zh AVG bge-reranker-base 60.45 64.41 62.43 bge-reranker-large 61.64 67.17 64.41 bce-reranker-base_v1 63.63 67.92 65.78 Summary on
en-zh
Model Reranking AVG bge-reranker-base 62.43 62.43 bge-reranker-large 64.41 64.41 bce-reranker-base_v1 65.78 65.78
Language:
zh-en
Task Type: Reranking
Model T2RerankingZh2En MMarcoRerankingZh2En AVG bge-reranker-base 63.94 63.79 63.87 bge-reranker-large 64.13 67.89 66.01 bce-reranker-base_v1 65.38 67.23 66.31 Summary on
zh-en
Model Reranking AVG bge-reranker-base 63.87 63.87 bge-reranker-large 66.01 66.01 bce-reranker-base_v1 66.31 66.31 Summary on all langs:
['en', 'zh', 'en-zh', 'zh-en']
Model Reranking (12) AVG (12) bge-reranker-base 59.04 59.04 bge-reranker-large 60.86 60.86 bce-reranker-base_v1 61.29 61.29
1.3 基于LlamaIndex的RAG评测(embedding and rerank)
NOTE:
- 在WithoutReranker列中,我们的bce-embedding-base_v1模型优于所有其他embedding模型。
- 在固定embedding模型的情况下,我们的bce-reranker-base_v1模型达到了最佳表现。
- bce-embedding-base_v1和bce-reranker-base_v1的组合是SOTA。
- 如果想单独使用embedding和rerank请参阅:BCEmbedding
2.LLM
开源版本QAnything的大模型基于通义千问,并在大量专业问答数据集上进行微调;在千问的基础上大大加强了问答的能力。
如果需要商用请遵循千问的license,具体请参阅:通义千问
2.1快速开始
必要条件
- For Linux
|System| Required item | Minimum Requirement | Note |
|---------------------------|--------------------------|---------------------------|-------------------------------------------------------------------------|
|Linux | Single NVIDIA GPU Memory
or Double NVIDIA GPU Memory | >= 16GB
>= 11GB + 5G | NVIDIA 3090 x 1 recommended
NVIDIA 2080TI × 2 recommended |
| | NVIDIA Driver Version | >= 525.105.17 | |
| | CUDA Version | >= 12.0 | |
| | Docker version | >= 20.10.5 | Docker install |
| | docker compose version | >= 2.23.3 | docker compose install | - For Winodws 11 with WSL 2
|System| Required item | Minimum Requirement | Note |
|---------------------------|--------------------------|---------------------------|-----------------------------------------------------------------------------------------------|
|Windows 11 with WSL 2| Single NVIDIA GPU Memory
or Double NVIDIA GPU Memory | >= 16GB
>= 11GB + 5G | NVIDIA 3090
NVIDIA 2080TI × 2 | |
| | GEFORCE EXPERIENCE | >= 546.33 |GEFORCE EXPERIENCE download | |
| | Docker Desktop | >= 4.26.1(131620) | Docker Desktop for Windows |
下载安装
- step1: 下载本项目
git clone https://github.com/netease-youdao/QAnything.git
- step2: 进入项目根目录执行启动脚本
如果在Windows系统下请先进入wsl环境
cd QAnything
bash run.sh # 默认在0号GPU上启动
- 指定单GPU启动
cd QAnything
bash run.sh 0 # 指定0号GPU启动 GPU编号从0开始 windows机器一般只有一张卡,所以只能指定0号GPU
- 指定多GPU启动
cd QAnything
bash run.sh 0,1 # 指定0,1号GPU启动,请确认有多张GPU可用,最多支持两张卡启动
开始体验
- 前端页面
运行成功后,即可在浏览器输入以下地址进行体验。
- 前端地址: http://
your_host
:5052/qanything/
- API
如果想要访问API接口,请参考下面的地址:
- API address: http://
your_host
:8777/api/ - For detailed API documentation, please refer to QAnything API 文档
- 关闭服务
bash close.sh
3.demo展示
视频链接:https://blog.csdn.net/sinat_39620217/article/details/135743659
信息抽取
网页问答
文件大杂烩
4.常见问题
- 在windows上执行docker-compose命令启动时报错:/bin/bash^M: bad interpreter: No such file or directory
- 原因:在windows下创建编辑的shell脚本是dos格式的,而linux却是只能执行格式为unix格式的脚本,所以在windows上编辑过的文件在linux上(windows下执行wsl后的环境通常也是linux)执行时会报错。
- 解决方案:将回车符替换为空字符串
#通过命令查看脚本文件是dos格式还是unix格式,dos格式的文件行尾为^M$ ,unix格式的文件行尾为$:
cat -A scripts/run_for_local.sh # 验证文件格式
sed -i "s/\r//" scripts/run_for_local.sh
sed -i "s/^M//" scripts/run_for_local.sh
cat -A scripts/run_for_local.sh # 验证文件格式
在前端页面输入问题后,返回结果报错:Triton Inference Error (error_code: 4)
- 原因:显存不够了,目前在问答过程中大模型和paddleocr占用的显存会逐渐上升且不释放,可能造成显存不够。
- 解决方案:重启服务,优化显存的工作已在计划中
- 原因2:如果发现显存够用,那是因为新版模型与部分显卡型号不兼容。
- 解决方案:请更换为兼容模型和镜像,手动下载模型文件解压并替换models目录,然后重启服务即可。
- 将docker-compose-xxx.yaml中的freeren/qanyxxx:v1.0.9改为freeren/qanyxxx:v1.0.8
- git clone https://www.wisemodel.cn/Netease_Youdao/qanything.git
- cd qanything
- git reset --hard 79b3da3bbb35406f0b2da3acfcdb4c96c2837faf
- unzip models.zip
- 替换掉现有的models目录
- echo "v2.1.0" > models/version.txt # 手动避过版本检查
在前端页面输入问题后,返回结果是类似后面的乱码:omiteatures贶.scrollHeight㎜eaturesodo Curse.streaming pulumi窟IDI贶沤贶.scrollHeight贶贶贶eatures谜.scrollHeight她是
- 原因:显卡型号不支持,例如V100,请使用3080,3090,4080,4090等显卡,显存需要大于16G
服务启动报错,在api.log中显示:mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on 'mysql-container-local:3306' (111)
- 原因:将之前的QAnything代码拉取下来后,复制了一份代码到其他的地址,其中有一个volumes是mivlus和mysql默认的本地数据卷,复制后可能导致了mysql的数据卷冲突,导致mysql无法启动。
- 解决方案:删除冲突的数据卷volumes,重新启动服务
服务启动报错:ERROR: for qanything-container-local Cannot start service qanything_local: could not select device driver "nvidia" with capabilities: [[gpu]]
- 原因:查看nvidia显卡驱动版本是否满足要求,windows下建议直接更新到最新版;另外检查下是否安装了NVIDIA Container Toolkit, windows下需要进入wsl2环境,再参考linux下安装方法:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
服务启动报错:nvidia-container-cli: mount error: file creation failed: /var/lib/docker/overlay2/xxxxxx/libnvidia-ml.s0.1: file exists: unknown
- 原因:在windows系统上使用docker-compose-linux.yaml启动
- 解决方案:使用docker-compose-windows.yaml启动
参考链接:
https://github.com/netease-youdao/QAnything/blob/master
更多内容请关注:
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答的更多相关文章
- 以小25倍参数量媲美GPT-3的检索增强自回归语言模型:RETRO
NLP论文解读 原创•作者 | 吴雪梦Shinemon 研究方向 | 计算机视觉 导读说明: 一个具有良好性能的语言模型,一定量的数据样本必不可少.现有的各种语言模型中,例如GPT3具有1750亿的参 ...
- jdbc-plus是一款基于JdbcTemplate增强工具包, 基于JdbcTemplate已实现分页、多租户等插件,可自定义扩展插件
jdbc-plus简介 jdbc-plus是一款基于JdbcTemplate增强工具包, 基于JdbcTemplate已实现分页.多租户等插件,可自定义扩展插件.项目地址: https://githu ...
- 基于指定文本的百度地图poi城市检索的使用(思路最重要)
(转载请注明出处哦)具体的百度地图权限和apikey配置以及基础地图的配置不叙述,百度地图定位可以看这个链接的http://blog.csdn.net/heweigzf/article/details ...
- 基于两阶段提交的分布式事务实现(UP-2PC)
引言:分布式事务是分布式数据库的基础性功能,在2017年上海MySQL嘉年华(IMG)和中国数据库大会(DTCC2018)中作者都对银联UPSQL Proxy的分布式事务做了简要介绍,受限于交流形式难 ...
- Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。
Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...
- 字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化
背景 字节跳动开发套件数据集成团队(DTS ,Data Transmission Service)在字节跳动内基于 Flink 实现了流批一体的数据集成服务.其中一个典型场景是 Kafka/ByteM ...
- 基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
由于我们有时候需要在基于.net framework的项目上使用(如Winform端应用),有时候有需要在.net core的项目上使用(如.net core的WebAPI),那么我们把基于SQLSu ...
- 基于Hash算法的高维数据的最近邻检索
一.摘要 最紧邻检索:一种树基于树结构,一种是基于hash a.随机投影算法,需要产生很多哈希表,才能提高性能. b.基于学习的哈希算法在哈希编码较短时候性能不错,但是增加编码长度并不能显著提高性能. ...
- 技术方案:在外部网址调试本地js(基于fiddler)
1 解决的问题 1) 场景1:生产环境报错 对前台开发来说,业务逻辑都在js中,所以报错90%以上都是js问题. 如果生产环境出现报错,但是测试环境正常.这时修改了代码没有环境验证效果, ...
- TogetherJS本地部署,基于websocket的网页即时视频、语音、文字聊天
TogetherJS分为两大部分,一个是hu文件夹中的服务端:另外一个是TogetherJS文件夹中的Together.JS文件,包含了所有的网页文字.语音等操作. 需要预先安装Node.js,可以百 ...
随机推荐
- 【JAVA基础】时间处理
#时间处理 ##查询前台报表运单数据集 @ApiOperation(value = "查询前台报表运单数据集") @Permission(permissionPublic = tr ...
- 【每日一题】41. 德玛西亚万岁 (状态压缩DP)
补题链接:Here 经典状压DP问题 坑点,注意多组输入... const int N = 16, mod = 100000000; int f[N][1 << N]; int a[N]; ...
- 【每日一题】39. Contest(树状数组 / 容斥分治)
补题链接:Here 算法涉及:树状数组.CDQ分治 n支队伍一共参加了三场比赛. 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高. 求有多少组(x,y),使得x自己觉得比y强 ...
- Deltix Round, Spring 2021 (open for everyone, rated, Div. 1 + Div. 2) (ABCE补题记录)
补题链接:Here 1523A. Game of Life 生命游戏定义 本题中改编为一维坐标上的生命游戏 即使 \(m(m\in[1,1e9])\) 的范围很大,但每次进化不会超过 \(n\) 次, ...
- L2-012 关于堆的判断 (25分) (字符串處理)
将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are siblings:x和y是兄弟结 ...
- Spring cloud gateWay 限流器限流(一)
转载请注明出处: spring cloud 提供了限流操作的功能,其使用步骤如下: 1.引入maven依赖: <dependency> <groupId>org.springf ...
- 面试官:Redis持久化能关吗?怎么关?
数据持久化是指将数据从内存中,保存到磁盘或其他持久存储介质的过程,这样做的目的是为了保证数据不丢失. 而 Redis 的持久化功能默认是开启的,这样做的目的也是为了保证程序的稳定性(防止缓存雪崩.缓存 ...
- 如何在 Photoshop 中制作 GIF 动画
您可能已经使用过一些在线 gif 生成器来快速生成 gif 图像,但这些在线生成器无法提供与 Photoshop 相同的灵活性和结果. gif 就像您可以在 Photoshop 中创建的迷你动画.当你 ...
- Linux-运行级别-init
- 【面试题精讲】MySQL中覆盖索引是什么
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 在MySQL中,覆盖索引是一种特殊类型的索引,它 ...