1.大型语言模型的模型语义搜索(一):关键词搜索(keyword Search)
2.深入 Dify 源码,定位知识库检索的检索大模型调用异常
3.基于Pair-wise和CrossEncoder训练单塔模型
4.使用Mistral-7B语言模型和LangChain框架构建自己的RAG(检索增强)系统
5.信息检索的研究内容有哪些?
6.用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统
大型语言模型的语义搜索(一):关键词搜索(keyword Search)
关键词搜索(Keyword Search)是信息搜索中的基础技术,广泛应用于各类应用,系统如Spotify、源码YouTube和Google地图等。模型其核心算法是检索Twitter开发源码Okapi BM,此算法基于概率检索框架,系统用于评估文档与搜索查询的源码相关性。Okapi BM在信息检索中被搜索引擎用于排序,模型提高搜索结果的检索精准度。
为了演示如何使用Cohere的系统API调用BM算法搜索维基百科数据库,首先需要配置Python环境。源码这里需要安装cohere和weaviate-client包,模型导入cohere和weaviate的检索API_key,进而创建weaviate client来连接在线数据库。系统
我们所使用的在线数据库是一个包含万条自维基百科数据记录的公共数据库,每条记录代表一段维基百科文章,涵盖了种不同语言,包括但不限于英语、德语、法语、西班牙语、意大利语、日语、阿拉伯语、中文、程序源码文字图片韩语和印地语。在执行查询时,可以设置不同的语言。
在实现关键词搜索功能时,我们将使用API KEY配置参数来确保与Cohere和Weaviate服务的连接。对于COHERE_API_KEY,需要在Cohere网站上注册账号并创建API Key;而WEAVIATE_API_KEY和WEAVIATE_API_URL则使用公开示例中的API Key和URL。
关键词搜索的原理是通过比较问题和文档中重复词汇的数量,从而确定最相关的结果。在搜索系统内部,关键词搜索分为检索和重新排名两个阶段。第一阶段使用倒排索引和BM算法对文档进行评分,第二阶段则对评分结果进行排序。
关键词检索存在局限性,尤其是在语义相关性上。当文档与问题在语义上相关但未出现重复词汇时,关键词检索可能无法准确检索到相关文档。为解决这一问题,后续将探讨如何借助语言模型进行改进,以实现更精准的语义搜索。
本文介绍了关键词搜索的基本概念、实现方法和局限性,并通过Cohere的API调用示例展示了如何搜索维基百科数据库。关键词搜索是搜索引擎中的核心功能,通过不断优化算法,上涨高度指标源码可以提高搜索效率和准确性。
深入 Dify 源码,定位知识库检索的大模型调用异常
深入分析Dify源码:大模型调用异常定位
在使用Dify服务与Xinference的THUDM/glm-4-9b-chat模型部署时,遇到了知识库检索节点执行时报错大模型GPT3.5不存在的问题。异常出乎意料,因为没有额外信息可供进一步定位。 通过源码和服务API调用链路的分析,我们发现问题的关键在于知识库检索的实现。该功能在api/core/rag/datasource/retrieval_service.py中,其中混合检索由向量检索和全文检索组成。我们关注了关键词检索、向量检索和全文检索这三个基础检索方式:关键词检索:仅使用jieba进行关键词提取,无大模型介入。
向量检索:通过向量库直接搜索,如Milvus,无大模型调用。
全文检索:使用BM,大部分向量库不支持,实际操作中返回空列表。
问题出现在知识库检索节点的多知识库召回判断中,N选1召回模式会调用大模型以决定知识库。在配置环节,前端HTTP请求显示配置错误,使用了不存在的GPT3.5模型。 经测试,cad 源码脚本解读手工创建的知识库检索节点使用了正确的glm-4-9b-chat模型,问题出在默认模板的配置上,即N选1召回模式默认选择了GPT3.5。本地部署时,如果没有配置相应模型,会导致错误出现。 总结来说,解决方法是修改默认模板,将知识库检索的默认模式改为多路召回,这样可以避免新手在本地部署时遇到困扰。建议Dify官方在模板中改进这一设置,以简化用户部署流程。基于Pair-wise和CrossEncoder训练单塔模型
华为云社区分享了一篇文章,探讨了基于ERNIE-Gram的Pair-wise和RocketQA的CrossEncoder的单塔模型在语义检索系统排序模块中的应用。作者汀丶详细介绍了排序模型的任务、技术方案、评估指标以及环境依赖等内容。
文章首先介绍了排序模型的背景,它利用双塔模型和预训练模型ERNIE-Gram,通过margin_ranking_loss进行训练,主要通过AUC指标评估排序效果。接下来,作者阐述了环境设置、代码结构,以及样例数据的校园外面源码介绍。
文章的核心部分涉及基于ERNIE-Gram的模型训练,包括单机多卡训练方法,展示了两种优化损失函数(pointwise和pairwise)在机器学习中的应用。ERNIE 3.0模型的选择和评估指标AUC也在文中有所涉及,展示了模型预测和FastTokenizer的使用以提升效率。
对于基于RocketQA的CrossEncoder的单塔模型,文章解释了其训练过程,对比了与Pair-wise模型的不同,指出CrossEncoder在数据有限的情况下更易实现,且提供了代码结构和部署步骤。
总结来说,本文提供了两种模型选择,Pair-wise适用于大规模数据,而CrossEncoder在数据有限时更优,且展示了如何通过FastTokenizer加速模型预测。读者可以通过本文深入了解如何在实际项目中运用这两种模型进行排序任务。
使用Mistral-7B语言模型和LangChain框架构建自己的RAG(检索增强)系统
使用Mistral-7B语言模型和LangChain框架构建自己的RAG(检索增强)系统
RAG的全称是Retrieval Augmented Generation,RAG通过提供外部数据访问,帮助LLMs在生成响应时获取额外的上下文信息。这些上下文信息可以是新闻、讲座的音频转录,或关于特定主题的新闻。
RAG可以看作是带向量搜索功能的语言模型。其工作原理简述如下:通过四个步骤实现。
加载量化后的Mistral-7B模型,建议查阅Mistral AI发布的公告文章,获取最新7B模型的详细信息。
使用Mistral 7B查询关于幻想足球的知识,显示出模型强大的连贯性。
量化工具帮助理解训练参数的详细数量。
认识到量化在大型语言模型工作中的重要性后,更新模型的7%参数,能够显著改变大型语言模型的行为。
利用LangChain创建RAGs。LangChain提供构建端到端POC所需的所有组件。FAISS作为向量数据库,允许高效相似度搜索和聚类,用于检索上下文。
通过FAISS API创建向量数据库,每个块的最大长度设定为个token,确保块之间没有重复内容,以提高搜索效率。
使用HuggingFaceEmbeddings()类编码文档,访问transformers模型(完整模型列表可查阅)。
测试数据库,检查是否能找到相关的内容块。
创建检索器组件,作为连接向量数据库和LLM的桥梁,确保两者之间的通信顺畅。
构建LLM链,改进提示信息以接收更多背景信息。
构建RAG链,通过少量文章利用大型语言模型(LLM),若外部知识源不断加载与问题相关的信息,LLM将立即变得更加强大。
信息检索的研究内容有哪些?
主要研究问题
信息检索理论: 例如 检索语言、检索模型、标引理论、相关性理论、知识表示理论等;
信息检索工具/系统:包括系统的结构、功能、设计开发、管理运营、应用评价等;
信息资源及其收集、加工
检索技术与方法
用户研究(检索需求、查询行为等)
用 Milvus 和 NVIDIA Merlin 搭建高效推荐系统
搭建一个高效的推荐系统是提升用户体验的关键,主要涉及数据获取、数据预处理、模型训练以及检索、过滤、排名和评分相关的超参数调整等多个阶段。要实现这一目标,通常需要依赖深度学习模型生成的低维向量表示(embedding)来表示商品,随后使用数据库存储并索引这些数据,最后对数据库中的数据进行近似最近邻(ANN)搜索。这些向量表示是通过深度学习模型获取的,这些模型基于用户和产品或服务之间的交互进行训练。为了生成向量表示并高效地对大规模数据集进行 top-k(即 k 个最相似)搜索,推荐系统会采用 NVIDIA Merlin 和 Milvus 这样的工具。
NVIDIA Merlin 是一个开源框架,用于训练端到端模型,为各类规模的数据生成推荐,并轻松集成高效的向量数据库索引和搜索框架。Milvus 作为大模型时代备受关注的向量数据库,提供高效索引和查询功能。Milvus 最近增加了对 NVIDIA GPU 加速的支持,大幅提升了查询的并发性和速度。通过与 Merlin 框架集成,Milvus 能够在检索阶段与高效的 top-k 向量搜索技术相结合,并在推断时使用 NVIDIA Triton Inference Server (TIS)。
使用 Merlin 模型生成向量并结合 GPU 加速的 Milvus 可以将搜索速度提升 至 倍。Milvus 与 Merlin 的集成代码和详细性能测试结果均在相关 GitHub 仓库中提供。Milvus 的框架对多阶段推荐系统的检索阶段贡献显著。面对推荐系统面临的挑战,如无缝集成所有组件以及加速整个推荐流程,Milvus 和 Merlin 提供了有效的解决方案。
了解向量数据库是解决推荐系统中与向量数据相关的挑战的关键。由于向量数据的特殊性,传统的关系型数据库无法提供有效的索引和搜索功能。Milvus 作为专为向量数据设计的数据库,能够高效地构建索引并提供搜索功能。向量数据索引可以分为聚类和图两大类,每类都有不同的算法,如 IVF、HNSW、DiskANN 等,各有优缺点。例如,IVF 索引在性能、召回率和内存使用之间提供了平衡,而基于压缩的索引如 IVF_SQ8 和 IVF_PQ 在速度和减少内存使用方面更强大,但可能会降低召回率。
GPU 在推荐系统中扮演着关键角色,尤其是当涉及大规模数据集和高吞吐量需求时。GPU 加速的向量索引与查询可以显著提高性能。例如,在使用 GPU 加速的 Milvus 进行向量相似性搜索时,性能可以提升 至 倍。这种加速效果对处理数百万用户的推荐系统尤其重要。
在本文提供的示例中,演示了如何在商品检索阶段集成 Milvus 与 Merlin,使用来自 RecSys Challenge 的数据集进行训练。通过 NVTabular 进行数据预处理,搭建双塔深度学习模型生成用户和商品向量。在 Milvus 中创建索引并进行相似性搜索。性能测试结果表明,在使用 GPU 加速的 Milvus 时,商品与商品、用户与用户以及用户与商品之间的相似度搜索性能都有显著提升,分别实现了 4 至 倍、 至 倍以及 4 至 倍的加速。
结论是,现代推荐系统复杂且多阶段,需要高效处理大规模数据。通过集成 NVIDIA Merlin 和 Milvus,可以构建高性能推荐系统。Milvus 的 GPU 加速功能与 Merlin 的高效推荐生成能力相结合,为推荐系统提供了强大的支持。推荐系统开发者应考虑在流程中集成这些工具以实现高效推荐。同时,对向量数据库有深入理解对于处理推荐系统中的向量数据至关重要。