-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BUG] 最新版本查询faiss库内数据很慢2万条数据需要10秒 #4339
Comments
我也发现了这个问题,我这边采用的是xinference(GLM-4/bge-large-zh) 进行大模型推理和embedding,11M的文件数据,chunk 都是250 + 50进行分割,在4090服务器上进行测试,0.2.10版本知识库可以快速回答,0.3.0版本需要20s以上的时间! |
这个需要排查一下,新的 retriever 里加入了 bm25 检索,带来了多少额外的开销。 |
遇到了同样的问题。其实数据库构建时间长一点无所谓,但是影响检索时间有些难以接受 |
确实慢了不少 |
bm25检索确实慢了不少,导致没法使用0.3版本,望大佬尽早排查修复下 |
我判断是 bm25的问题,因为写的很简单,它是将所有的文档从数据库加载到内存,在进行搜索,文件越多,传输开销越大,所有算法没问题,而是加载数据的方法有问题,我改用es数据库,读取数据很慢 |
比0.2版本慢很多+1 |
大佬,这个bug修复提上日程了吗? 迟迟不敢升级到0.3版本 |
同样的问题,本地知识库反应太慢了 |
我在最新代码里面将BM25检索的部分注释掉,在Web界面RAG对话-知识库检索,阈值不管调到多少都检索不到答案可能是什么原因呢?有警告"/home/ubuntu/anaconda3/envs/langchain/lib/python3.10/site-packages/langchain_core/vectorstores.py:342: UserWarning: No relevant docs were retrieved using the relevance score threshold 0.98" 我替换成0.2的方法能快速检索,就是感觉召回率还是有点儿低。 |
可能是因为我的数据量少,然后0.2版本的时候,知识库问答是在1s之内,现在慢了600ms左右 |
注释掉这段代码对召回的结果肯定有一定的影响,这段代码的原意应该是综合了faiss_retriever和bm25_retriever,各占50%的比重,不过bm25_retriever的初始化有点简单粗暴,数据量稍微大一点性能就急剧下降,具体里面的东西我也没有深入去研究,注释掉bm25_retriever只是一个临时的解决方法,最终的解决方案还是等官方出新版本吧 |
这是提示的没有这个阈值的数据 你稍微拉低点 0.5左右试试呢 |
感谢解答,确实是阈值设置的高了,这个返回的score跟0.2的similarity_search_with_score_by_vector 是不一样的,我理解错了。 |
耗时是因为BM25_retriever在每一轮回答中都对知识库中的所有chunk做了一遍预处理,具体可参见: #4565 (comment) 。这里我提供一个简单的、经过验证的补丁方案,即服务启动前完成预处理操作并将结果固化为txt,之后在对话时只需读取该txt直接获得预处理结果即可,代码分为两块: 提前预处理
读取refer to: /python3.10/site-packages/langchain_community/retrievers/bm25.py: from_texts()
|
感觉应该有效果,现在测试的耗时是多少,是不是已经和注释掉bm25这一段代码时间差不多了 |
yeap |
现在 50W 数据量级别的知识库几乎不可用,得花 5 分钟来完成检索,删掉 bm25 后能够秒出结果。 |
有解决方案吗?我参考上述方案尝试修改BM25_retriever权重为0,没有效果提升,目前有几十G的文档数据,检索速度非常慢。 |
具体应该在哪个函数改呢 |
/python3.10/site-packages/langchain_community/retrievers/bm25.py: from_texts() |
“import os from chatchat.server.knowledge_base.kb_service.base import KBServiceFactory preprocess_func=jieba.lcut_for_search knowledge_base_name = "samples" |
1、"提前预处理"这步操作是单独放一个脚本里,跑完之后会将预处理的结果存到一个txt中;2、然后在我提到的那个函数中的对应位置进行"读取"操作,读取那个txt,同时注释掉那个位置上原来的代码,即 texts_processed = [preprocess_func(t) for t in texts] |
@firrice 我执行预处理脚本的时候报错了 The above exception was the direct cause of the following exception: Traceback (most recent call last): |
因为你没有连上sqlite数据库,大概率是路径问题(这个预处理脚本对应的是v0.3.0的文件目录架构)。你看一下具体知识库对应的info.db是否是这个路径: "***/libs/chatchat-server/chatchat/data/knowledge_base/info.db",还有注意os.environ[]那一行不要略掉 |
#4976 使用 sqlite 代替 faiss 做向量库,支持向量检索和bm25检索,欢迎大家测试。 |
我用的版本是: 0.0.354 , 索引文件只有170多M 呀, 总一个问题, 基本上回答不出来, 我计划按上面的方法测试一下. 后续会回复在这里. |
上传以及检索时间跟0.2版本的差距有点大
The text was updated successfully, but these errors were encountered: