分享好友 最新动态首页 最新动态分类 切换频道
QAnything-1.3.0,支持纯python笔记本运行,支持混合检索
2024-12-26 15:59

QAnything 1.3.0 更新了,这次带来两个主要功能,一个是纯python的安装,另一个是混合检索。更多详情见

https://github.com/netease-youdao/QAnything/releases

纯python安装

我们刚发布qanything开源的时候,希望用户可以用这个代码来直接在生产环境中部署使用,为了性能,它引入了很多第三方的库和服务,比如milvus,mysql,tritonserver,elasticsearch等。这些服务本身也非常庞大复杂,我们做了docker镜像和dockerfiles,试图将一些依赖打包起来,用户只要拉下来就可以用。但是还是有很多人遇到麻烦。比如不能在mac等笔记本上运行。

所以这次,这次我们发布了一个纯python的轻量级的版本可以在mac等笔记本上跑起来,可以不依赖gpu。安装过程极其简单

第一步:拉代码到本地

 

如果是国内的访问不了github的,可以用gitee,我们已经同步了代码。

 

第二步:安装

首先需要将代码分支切换到develop_for_v1.3.1的版本(因为这个版本还在开发中,然后执行安装

 

在这一步,系统会自动检测所有依赖的东西,包括vllm,transformer,pytorch等库。为了提高国内用户的下载速度,里面大部分的源都已经针对国内环境做了优化。

注意,如果是Mac下,需要先安装xcode(在mac app store上可以找到,因为它依赖了lamma.cpp,需要编译一下。

第三步:使用

为了方便用户使用,我们在scripts下面放了针对多个机器环境配置的一键启动的脚本:​​​​​​​

 

以笔者的电脑为例(mac m1),我可以选择用

scripts/run_for_openai_api_in_M1_mac.sh

这个脚本使用了本地的embedding/rerank/ocr,但是得配置一下openai的接口。这个需要大家找一下,有很多代理openai的接口,可以配置baseurl和key。

假设我们已经配置好了,就可以通过这个脚本(我隐去了里面的url和key,用*替代)启动qanything了:​​​​​​​

 

然后就可以通过浏览器访问:http://127.0.0.1:8777/qanything/#/home 来体验qanything了。

当然,也可以使用本地的大模型,qanything已经通过lamma.cpp以及vllm 集成了多个本地大模型。在mac的笔记本上是千问7b和4b的int4的量化版本,我测试了感觉效果一般。在linux + nvidia显卡上用的是千问7b的int8的版本,效果还行。

目前python版(develop_v1.3.1分支)相比docker版本(master 分支)在易用性上有优势,但是一些性能相关的东西还没有迁移过来,比如docker版本支持tensortllm,推理性能更高一些。docker版本里面的ocr解析模型质量也略好点。

混合检索

这次我们同时支持了混合检索 BM25 + embedding。

embedding语义检索

qanything自带了bcembedding的模型,可以做语义检索,大部分情况下已经能取得比较好的效果。

BM25关键字搜索

在实际使用中,我们发现有一些特殊情况用关键字搜索效果会更好,包括

  1. 特定名字的搜索。比如iphone 15。如果用向量检索可能会把所有的iphone都给检索出来了,而我只要iphone 15这个型号的。

  2. 罕见的短词、缩略词搜索。这个因为训练语料中见的很少,可能会导致语义理解发生偏差,检索不出来。

  3. 一些id的检索。需要做精确匹配的。

BM25算法的解释

BM25算法是比较经典的关键字搜索算法,它是由tf/idf算法改进而来的。2016年Elasticsearch 5.0的默认检索器从tf/idf改成了bm25算法。这里简单科普下这个算法

tf/idf算法

搜索query和doc的匹配度的score计算公式为

score(D, T) = tf * idf = termFrequency(D, T) * log(N / docFrequency(T))

其中 termFrequency 是词频,代表query的词在某个文档中出现的次数,出现的越多次就越相关。idf代表这个词的区分度,如果一个词(比如“的”、“地”、“得”之类副词)在很多文档都出现,这种词就不太重要。N是文档总数,docFrequency代表这个词在多少个文档中出现。其中Log是为了平滑,否则细微的docFrequency的变化会导致score的剧烈波动。

BM25算法

bm25算法在tf/idf算法上做了几点改进

1.词频贡献有个上限。比如一个文档出现了太多次query里面的某个词了,这个贡献不应一直累加,而是有个上限。所以它用tf/(tf+k) 来做抑制。这带来的一个好处是,算法会青睐不同query的词同时在文档中出现的情况。比如,搜索 cat dog,如果cat 和 dog都在文档中出现1次,它的分值会比只有dog在文档中出现2次的分值要高。如果k=1的话,一个词出现两次的score=1/2,两个词出现1次的socre = 2/3。

2. 惩罚长文档的影响力。如果文档词比较多,那么命中关键字的可能性当然就大很多。把 |D|/(avg doc length)作为k,可以达到这个目的。

3. 词的重要性。这个还是按idf的那套策略来算。这里用的是log (N-DF+.5)/(DF+.5),这是由学术理论算出来的最优值(在一些简化的假设条件下)。

重排序(rerank)

两路检索出来的的chunks要按照重要性做重新排序。重排序也有多种算法,比如基于倒数的融合排序

不过在我们系统中,我们直接依赖BCE rerank做重排序,在各种场景下表现良好。

混合检索当前还只在docker版本(master 分支) 上支持。

qanything 1.3.0的更新

  1. 支持在纯Python环境中安装,可以在MAC上运行,也可以在纯CPU机器上运行。详见:纯Python环境安装教程

  2. 支持混合检索(BM25+Embedding)。

  3. 当系统命令缺失时,下载提示更清晰。

  4. 自动检测显卡的计算能力和内存大小,并根据情况自动调整默认启动参数,以提供用户最佳体验,并给予相关提示。

  5. 更新前置条件,最低支持 GTX1050Ti,支持更多显卡型号。

  6. 提示用户代码仓库是否为最新,仅适用于主分支。

  7. 优化启动流程,自动查询相关日志并在前端显示错误消息,避免连续输出 'waiting for coffee'。

  8. 在前端添加英文版本。

  9. 修复已知的错误,优化用户体验。(在 Milvus 插入失败时,请记得删除根目录下的 "volumes" 文件夹。

  • 修复启动脚本已知问题。由 @xixihahaliu 提交于 #92

  • 修复已知问题,优化用户体验。由 @xixihahaliu 提交于 #102

  • Milvus增加用户名、密码、数据库名支持。由 @cklogic 提交于 #97

  • feat_#114: 为 NVIDIA GeForce RTX 4090D 添加 GPU 兼容性检查。由 @johnymoo 提交于 #115

  • 修复:由 @pinkcxy 提交的轮次控制问题。#131

  • 问题修复:调用api/api/local_doc_qa/local_doc_chat返回数据为None。由 @leehom0123 提交于 #137

  • 优化解析 csv 和 xlsx 文件的逻辑。此外,现在支持离线运行 Docker 镜像。由 @xixihahaliu 提交于 #139

  • 混合搜索。由 @shenlei1020 提交于 #194

QAnything开源代码地址

https://github.com/netease-youdao/QAnything

更多信息见

  1. 纯python的安装说明:https://github.com/netease-youdao/QAnything/blob/qanything-python-v1.3.1/README.md#pure-python-environment-installation-guide

  2. bce embedding 和 rerank: https://github.com/netease-youdao/BCEmbedding

  3. bm25算法的解释:https://kmwllc.com/index.php/2020/03/20/understanding-tf-idf-and-bm-25/

最新文章
2025广告联盟变现APP激励展示视频软件开发
以下是一些常见的广告联盟变现APP激励展示视频软件:### 优量汇穿山甲激励视频广告联盟变现APP- **特点**:这是一款集成了广告展示、用户激励、数据分析等功能的综合性平台。拥有庞大的广告资源库,能够提供高质量的激励视频广告内容;支持
dede 网站入侵/潍坊网站建设方案咨询
1、日志相关:adb logcat    //显示全部日志adb logcatc:est.log //将日志保存到文件test.log从当前开始显示logcat 有缓存,如果仅需要查看当前开始的 log,需要清空之前的。adb logcat -cadb logcatadb logcat | grep
2024年口碑极佳耐玩手游网游排行榜:精选网络游戏大全
本文目录导读:一、策略与战略类二、休闲与益智类三、角色扮演与经营类四、射击与竞技类五、传奇与MMORPG类六、其他热门手游1、战争与冲突发布公司:厦门哟咯科技有限公司游戏描述:玩家需要组成强力的军队,在战场上与其他玩家一决高下。2
360搜狗高速浏览器哪个好?360搜狗高速浏览器对比
搜狗高速浏览器是一款搜索浏览非常便捷的软件,这款软件的线上资讯非常的丰富,不管是关心什么类型的新闻都可以一键掌握,使用超级的方便,软件还有各种精彩的短视频可以使用手机掌握,使用手机就可以刷各种精彩的短视频内容,无需下载软件
332期[游俊熙]排列五专家预测下期必出号
中国体彩中心排列五上期奖码->71227 排列三上期奖码->712大小小小大,大小比2:3,012路比0:3:2,奇奇偶偶奇,质质质质质,质合比5:0,和值19点,和尾9点,跨度6。最大号:7,最小号:1[第一位]上期开出1路号码7,历史近五期第一位012路走势由近-
C#.NET WEBUPLOADER 分片上传
前端:vue2,vue3,vue-cli,html,jquery 后端:asp.net,.net core 平台:Windows,macOS,Linux,中标麒麟,银河麒麟,统信UOS,信创国产化 CPU:x86,arm,龙芯(mips),龙芯(LoongArch) 场景:内网,外网,
2024年上半年国内外科技创新政策回顾与未来趋势展望
科技创新政策是政府支持科学、技术和创新产生及传播的公共措施。近年来,受全球地缘政治格局急剧变化、新一轮科技革命和产业变革加速演进的影响,世界主要经济体均把科技发展放在更加重要位置,推动科技创新政策加速转型和体系重构,通过制
2024年度趣味猜人物游戏排行榜TOP5揭晓:精选好玩合集来袭!
本文目录导读:一、《看图猜明星》二、《猜人物》三、《猜猜我是谁啊》四、《人物测验》五、《谁是卧底》2024年度趣味猜人物游戏排行榜TOP5涵盖了多款精彩纷呈的游戏,这些游戏不仅考验玩家的知识储备和推理能力,还能带来丰富的娱乐体验,
AI实操精英课:玩转Excel与PPT、AI绘画技巧、爆款文案打造、轻松实现流量变现
通过AI技术的实战应用提升效率和内容质量。课程内容包括对GPT及AI绘画的基础知识与实际应用场景的讲解,帮助用户快速熟悉工具特性和操作方法。通过调教技巧和自迭代方法,用户能更精准地使用GPT生成高质量文案、处理Excel和PPT任务,并通过
AI机器人智能聊天系统的开发与解决方案
你是否曾经在网上咨询过某个问题,却被客服回复得支离破碎,甚至让人感到更加困惑?在这样的时刻,你是否也曾想过,为什么不让一个AI机器人来帮忙呢?今天,我们就来聊聊AI机器人智能聊天系统的开发与解决方案,看看它如何为用户提供更流畅
相关文章
推荐文章
发表评论
0评