QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。

您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。

目前已支持格式: PDFWord(doc/docx)PPTMarkdownEmlTXT图片(jpg,png等)网页链接,更多格式,敬请期待...

  • 特点

    • 数据安全,支持全程拔网线安装使用。
    • 支持跨语种问答,中英文问答随意切换,无所谓文件是什么语种。
    • 支持海量数据问答,两阶段向量排序,解决了大规模数据检索退化的问题,数据越多,效果越好。
    • 高性能生产级系统,可直接部署企业应用。
    • 易用性,无需繁琐的配置,一键安装部署,拿来就用。
    • 支持选择多知识库问答。
  • 架构

1.两阶段检索优势

知识库数据量大的场景下两阶段优势非常明显,如果只用一阶段embedding检索,随着数据量增大会出现检索退化的问题,如下图中绿线所示,二阶段rerank重排后能实现准确率稳定增长,即数据越多,效果越好

BCEmbedding是由网易有道开发的中英双语和跨语种语义表征算法模型库,其中包含 EmbeddingModel和 RerankerModel两类基础模型。EmbeddingModel专门用于生成语义向量,在语义搜索和问答中起着关键作用,而 RerankerModel擅长优化语义搜索结果和语义相关顺序精排。

BCEmbedding作为有道的检索增强生成式应用(RAG)的基石,特别是在QAnything [github]中发挥着重要作用。QAnything作为一个网易有道开源项目,在有道许多产品中有很好的应用实践,比如有道速读和有道翻译。

QAnything使用的检索组件BCEmbedding有非常强悍的双语和跨语种能力,能消除语义检索里面的中英语言之间的差异,

从而实现:

  • 双语和跨语种优势

    • 现有的单个语义表征模型在双语和跨语种场景中常常表现不佳,特别是在中文、英文及其跨语种任务中。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

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 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-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)两阶段检索、支持海量数据、跨语种问答的更多相关文章

  1. 以小25倍参数量媲美GPT-3的检索增强自回归语言模型:RETRO

    NLP论文解读 原创•作者 | 吴雪梦Shinemon 研究方向 | 计算机视觉 导读说明: 一个具有良好性能的语言模型,一定量的数据样本必不可少.现有的各种语言模型中,例如GPT3具有1750亿的参 ...

  2. jdbc-plus是一款基于JdbcTemplate增强工具包, 基于JdbcTemplate已实现分页、多租户等插件,可自定义扩展插件

    jdbc-plus简介 jdbc-plus是一款基于JdbcTemplate增强工具包, 基于JdbcTemplate已实现分页.多租户等插件,可自定义扩展插件.项目地址: https://githu ...

  3. 基于指定文本的百度地图poi城市检索的使用(思路最重要)

    (转载请注明出处哦)具体的百度地图权限和apikey配置以及基础地图的配置不叙述,百度地图定位可以看这个链接的http://blog.csdn.net/heweigzf/article/details ...

  4. 基于两阶段提交的分布式事务实现(UP-2PC)

    引言:分布式事务是分布式数据库的基础性功能,在2017年上海MySQL嘉年华(IMG)和中国数据库大会(DTCC2018)中作者都对银联UPSQL Proxy的分布式事务做了简要介绍,受限于交流形式难 ...

  5. Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。

    Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...

  6. 字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化

    背景 字节跳动开发套件数据集成团队(DTS ,Data Transmission Service)在字节跳动内基于 Flink 实现了流批一体的数据集成服务.其中一个典型场景是 Kafka/ByteM ...

  7. 基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用

    由于我们有时候需要在基于.net framework的项目上使用(如Winform端应用),有时候有需要在.net core的项目上使用(如.net core的WebAPI),那么我们把基于SQLSu ...

  8. 基于Hash算法的高维数据的最近邻检索

    一.摘要 最紧邻检索:一种树基于树结构,一种是基于hash a.随机投影算法,需要产生很多哈希表,才能提高性能. b.基于学习的哈希算法在哈希编码较短时候性能不错,但是增加编码长度并不能显著提高性能. ...

  9. 技术方案:在外部网址调试本地js(基于fiddler)

    1 解决的问题 1)        场景1:生产环境报错 对前台开发来说,业务逻辑都在js中,所以报错90%以上都是js问题. 如果生产环境出现报错,但是测试环境正常.这时修改了代码没有环境验证效果, ...

  10. TogetherJS本地部署,基于websocket的网页即时视频、语音、文字聊天

    TogetherJS分为两大部分,一个是hu文件夹中的服务端:另外一个是TogetherJS文件夹中的Together.JS文件,包含了所有的网页文字.语音等操作. 需要预先安装Node.js,可以百 ...

随机推荐

  1. 负载均衡 —— SpringCloud Netflix Ribbon

    Ribbon 简介 Ribbon 是 Netfix 客户端的负载均衡器,可对 HTTP 和 TCP 客户端的行为进行控制.为 Ribbon 配置服务提供者地址后,Ribbon 就可以基于某种负载均衡算 ...

  2. 服务器上TIME_WAIT过多怎么处理

    正常情况下,TIME_WAIT是需要存在的 为了保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文,服务 ...

  3. Nginx--安装&&配置文件

    官网:http://nginx.org/en/download.html nginx版本:1.18   一 安装 1 下载预编译环境(预编译报错需要安装什么库 直接在库名后面接 -devel 使用yu ...

  4. WPF 水印装饰器

    使用AdornerDecorator装饰器实现WPF水印 水印装饰器WatermarkAdorner类代码: using System; using System.Collections.Generi ...

  5. SELinux 入门 pt.2

    哈喽大家好,我是咸鱼 在<SELinux 入门 pt.1>中,咸鱼向各位小伙伴介绍了 SELinux 所使用的 MAC 模型.以及几个重要的概念(主体.目标.策略.安全上下文) 我们还讲到 ...

  6. 聚焦 AIGC,函数计算为 AI 应用插上腾飞翅膀

    6月1日,2023 阿里云峰会·粤港澳大湾区在广州举办,Serverless 加速创新分论坛如约亮相,阿里云函数计算 FC 聚焦 AIGC 应用开发,GPU 性能体验再升级,让 AIGC 应用开发更简 ...

  7. vue 引入echars 亲测版

    网上找了很多例子,其中有修改main.js的配置的,反正我没搞成功,最后实验成功的步骤如下 1.首先创建一个Vue CLI 的工程 . 注:具体步骤查看以前的博客 https://www.cnblog ...

  8. Java 内存管理最佳实践

    本文翻译自国外论坛 medium,原文地址:https://medium.com/@fullstacktips/best-practices-for-memory-management-in-java ...

  9. shell脚本(4)-格式化输入

    一.read命令 1.概念: 默认接受键盘的输入,回车符代表输入结束 2.read命令选项 -p:打印信息 -t:限定时间 -s:不回显 -n:输入字符个数 3.举例说明 (1)模拟登录 [root@ ...

  10. 昆虫科学院 AtCoder Race Ranking 2023 Autumn

    概况 为提高选手们的训练 / 比赛热情,我们(昆虫科学院)通过商讨,在 \(2023-5-25\) 仿照 AtCoder Race Ranking (WTF) 机制,设立了"昆虫科学院 At ...