paint-brush
通过检索增强生成 (RAG) 和矢量数据库集成提升企业法学硕士经过@vpenikal
3,762 讀數
3,762 讀數

通过检索增强生成 (RAG) 和矢量数据库集成提升企业法学硕士

太長; 讀書

本博客探讨了检索增强生成 (RAG) 与向量数据库(特别是 Milvus)的集成,以增强企业应用程序中的语言学习模型 (LLM)。它涵盖了法学硕士的挑战,介绍了 RAG 和向量数据库,并提供了实际示例和教程。该博客详细介绍了 RAG 和 Milvus 本地环境的设置,包括安装和配置,最后总结了结合这些技术来改善企业 AI 应用程序中 AI 驱动的响应和上下文理解的巨大潜力。
featured image - 通过检索增强生成 (RAG) 和矢量数据库集成提升企业法学硕士
Venkata Karthik Penikalapati HackerNoon profile picture


利用上下文感知技术增强法学硕士应用程序

大型语言模型的应用在各个领域都带来了变革,塑造了自然语言处理和理解的新领域。法学硕士以生成类人文本而闻名,它彻底改变了聊天机器人、内容创建,甚至复杂的问题解决任务。


然而,尽管法学硕士拥有令人印象深刻的能力,但它们仍面临着显着的挑战,特别是在上下文感知和在扩展交互中保持准确性方面。一个常见的陷阱是他们倾向于“幻觉”,其中生成的内容虽然流畅,但可能会变得不准确或无关紧要。


这就是检索增强生成 (RAG)矢量数据库等技术变得至关重要的地方。通过将 LLM 与 RAG 集成(从大量数据集中动态检索相关信息),我们可以显着缓解这些限制。法学硕士和矢量数据库之间的协同作用,能够有效地处理和检索结构化矢量数据,有望为法学硕士应用程序带来新的深度、背景和可靠性水平。


在这篇博客中,读者可以期待:


  • 全面洞察法学硕士挑战:了解法学硕士的局限性,例如上下文意识和准确性问题。
  • RAG 和向量数据库简介:探索这些技术如何解决传统法学硕士的缺点。
  • 实践演示和教程:实践示例展示 RAG 与矢量数据库的集成以增强 LLM 应用程序。
  • 实际应用:探索如何在企业环境中有效应用这些集成。
  • 适合各种受众的实用知识:无论您是技术爱好者、人工智能从业者还是商业专业人士,该博客都旨在提供有价值的见解和实用知识。



了解检索增强生成 (RAG)

检索增强生成(RAG)是人工智能和自然语言处理领域的创新范例。通过将信息检索集成到语言生成过程中,它标志着传统语言模型的重大转变。这种混合方法增强了人工智能模型生成响应的能力,这些响应不仅上下文准确,而且还注入了来自外部数据源的最新知识。


RAG 的诞生可以追溯到克服标准语言模型局限性的探索,例如 GPT(生成式预训练变压器)。传统模型尽管能够熟练地生成连贯的文本,但通常难以提供准确的、基于事实的响应,特别是对于需要特定的实时知识的查询。




RAG流量




以下是检索增强生成 (RAG) 如何与矢量数据库集成的工作原理的描述:


  1. 摄取和索引:工作流程从全面的知识库开始,这是系统智能的基础。该知识库通常是包含用户可能查询的信息的大型文档语料库。这些文档可以是从常见问题解答表和文章到结构化信息数据库的任何内容。在使用这些文档之前,它们会经历一个摄取过程,其中它们被预处理并转换为嵌入。嵌入模型(通常是复杂的机器学习算法)用于将文本信息转换为向量嵌入。这些嵌入以数字方式表示多维空间中文档的语义内容,这对于相似性比较是最佳的。


  2. 客户交互:这一切都始于客户与应用程序交互并提出查询。该查询是客户期望人工智能回答的信息请求或问题。


  3. 查询嵌入:然后由嵌入模型处理原始客户查询。该模型将文本查询转换为向量,这是一种在高维空间中捕获查询语义的数字表示形式。


  4. 矢量数据库搜索:查询矢量被发送到矢量数据库,这是一个专门用于处理高维矢量数据的数据库。数据库执行相似性搜索以检索最相关的文档嵌入。这些嵌入表示来自知识库的预处理知识,这些知识已被摄取到系统中。


  5. 上下文检索:检索到的文档嵌入与原始查询相结合,形成包含查询和相关上下文的提示。


  6. 语言模型响应生成:然后将这种丰富的提示输入到语言学习模型(LLM)中。法学硕士使用检索到的文档中的上下文来生成准确、信息丰富且与客户查询上下文相关的响应。


  7. 生成响应:最后,法学硕士会生成生成响应,并通过应用程序返回给客户。该响应不仅基于模型预先训练的知识,而且还使用从知识库检索的特定信息进行增强,使其与用户的请求高度相关。

矢量数据库

矢量数据库存储和管理已转换为数值矢量形式的数据,通常通过机器学习中的嵌入模型等过程。嵌入是数据的数字表示,通常是高维向量,它捕获原始输入的语义或上下文特征。对于文本数据,嵌入将单词、句子或整个文档转换为计算机可以处理的形式。机器学习模型,特别是神经网络,用于生成这些嵌入,以便相似的含义在向量空间中接近。这些数据库旨在有效地执行相似性搜索,从而定位向量空间内最接近给定查询向量的数据点。



来源 - https://www.sbert.net/examples/applications/semantic-search/README.html



下面是对这个过程的更深入的了解:


  1. 数据存储:当摄取文档时,嵌入模型(例如神经网络)将文本转换为高维向量。每个向量以数字形式表示文档的语义。然后将这些向量存储在向量数据库中。


  2. 索引:为了促进快速检索,数据库使用适合高维空间的算法在这些向量上构建索引,例如倒排文件索引(IVF)或分层可导航小世界(HNSW)。索引类型的选择要平衡搜索的速度和准确性。


  3. 相似性搜索:当进行查询时,也会使用相同的嵌入模型将其转换为向量。然后向量数据库使用索引快速找到与查询向量最相似的向量。相似度由欧几里德距离或余弦相似度等距离度量确定。


嵌入的优点


  1. 语义相似性:嵌入的设计使语义相似的项目在向量空间中更接近,使系统能够理解上下文和含义。例如,在基因组学领域,基因表达数据可以被编码为嵌入,以揭示指示不同基因和表型之间关系的模式。这可以帮助识别通过传统分析可能不明显的疾病的生物标志物。


  2. 复杂关系:它们可以捕获数据中的复杂关系和细微差别,而传统表示可能会忽略这些关系和细微差别。推荐系统是一个实际应用,例如 Netflix 或 Spotify 等流媒体服务所使用的推荐系统。这些平台使用嵌入来了解用户偏好和内容特征,从而推荐与用户之前的选择有相似之处的电影或歌曲。尽管内容多种多样,但嵌入可以提供超越流派或艺术家的细致入微的推荐,考虑到用户消费的更深层次模式。


  3. 一致性:嵌入将不同的数据类型转换为统一的向量格式,简化比较和检索等操作。


矢量数据库入门

为 RAG 和 Vector DB ( Milvus ) 创建本地开发环境涉及几个关键步骤。


这是一个结构化指南:


  1. 先决条件

    • 确保您的系统上安装了 Python 3.6+。

    • 运行 Milvus 需要 Docker。


  2. 虚拟环境

    • 创建一个新的虚拟环境并使用它:

       python3 -m venv rag-milvus-env source rag-milvus-env/bin/activate # Install supporting dependencies pip install transformers datasets faiss-cpu torch sentence-transformers pymilvus


  3. Milvus 使用 docker

  • 拉取并运行 Milvus Docker 镜像:(您也可以使用其他矢量数据库)

  • 您可以使用以下步骤或按照此处提供的入门指南进行操作。


     docker pull milvusdb/milvus:latest docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 milvusdb/milvus:latest


  • 设置数据

    现在让我们尝试下载一些示例数据,创建嵌入并将它们插入到集合中。

     import requests import csv url = "http://qim.fs.quoracdn.net/quora_duplicate_questions.tsv" # Download the file response = requests.get(url) response.raise_for_status() # This will raise an error if the download failed # Decode the content and split into lines lines = response.content.decode('utf-8').splitlines() questions = [] # Process the lines reader = csv.reader(lines, delimiter='\t') next(reader) # Skip the header row for row in reader: questions.extend([row[1], row[4]]) # Assuming the questions are in the 2nd and 3rd columns questions = questions[:10000]


  • 创建嵌入

    from sentence_transformers import SentenceTransformer # transformer to create embeddings model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(questions)


  • 插入矢量数据库。

     # connect to db connections.connect() embedding_size = 384 # Prepare the collection schema fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=embedding_size) ] schema = CollectionSchema(fields, "questions") collection = Collection("questions", schema) # Insert the document embeddings mr = collection.insert([embeddings]) # to get document, in practice this would be some external DB. id_to_question = {str(mr.primary_keys[i]): questions[i] for i in range(len(questions))} # List all collections collections = list_collections() print(collections)


  • 为集合建立索引。

     from pymilvus import Collection index_params = { "metric_type": "L2", "index_type": "HNSW", # Index of type HNSW, refer to docs for other types. "params": { "M": 16, # Example value, adjust as needed "efConstruction": 200 } } collection = Collection("questions") collection.create_index( field_name="embedding", index_params=index_params )


  • 查询文件

    query = "What is artificial intelligence?" query_embedding = model.encode(query) collection.load() # Define search parameters search_params = {"metric_type": "L2", "params": {"nprobe": 10}} # Perform the search results = collection.search( data=[query_vector], anns_field="embedding", param=search_params, limit=10, expr=None, consistency_level="Strong" ) # Process results for result in results: milvus_id = str(result.id) # Convert ID to string for dictionary lookup original_question = id_to_question[milvus_id] print(f"Milvus ID: {milvus_id}, Similar Question: {original_question}")


一旦我们从向量数据库中获得语义相似的文档,我们就可以将此上下文+输入查询传递给法学硕士,这将获得更好的结果,因为法学硕士现在拥有上下文。


结论

总之,RAG 与 Milvus 等矢量数据库的集成为法学硕士申请中一些最紧迫的挑战提供了有效的解决方案,特别是那些需要深入上下文理解和动态信息检索的挑战。通过将法学硕士的生成能力与矢量数据库的精度和效率相结合,企业可以极大地提高人工智能驱动的响应的相关性和准确性,为用户提供有价值且上下文丰富的交互。


随着人工智能的不断发展,这些技术的融合不仅代表了一步,而且代表了一次飞跃,预示着人工智能可以支持各个领域更复杂、更多样化、更细致的应用的未来。该博客为创新者和实践者开始尝试这些工具奠定了基础,突破了企业人工智能应用领域的可能界限。