如何利用向量数据库提升大型语言模型

目录

  1. 向量数据库简介2. 向量数据库与传统数据库的比较3. 向量数据库性能提升策略 - 索引策略 - 优化的额外考虑因素4. 向量数据库在LLMs中的应用5. 构建闭环问答机器人案例 - 环境设置 - 构建“知识库” - 生成基本答案 - 生成具有上下文意识的答案6. 总结

向量数据库简介

大型语言模型(LLMs)在科技领域产生了深远影响,但单独使用时可能无法发挥全部潜力。向量数据库通过存储数据的“向量嵌入”格式,增强了LLMs的上下文理解和信息利用能力。

向量嵌入

向量嵌入是将原始数据转换为人工智能系统可以理解的数值格式,涉及将数据转换为高维空间中的一系列数字,即向量。

向量数据库与传统数据库的比较

向量数据库与传统数据库的主要区别在于它们对向量嵌入的优化存储和查询能力,特别是在处理非结构化数据时。

向量数据库性能提升策略

索引策略

索引策略是提升向量数据库性能的关键。

优化的额外考虑因素

除了索引策略外,还有其他因素需要考虑以进一步优化性能。

向量数据库在LLMs中的应用

使用向量数据库可以丰富LLMs的上下文,使其更加准确和有用。

构建闭环问答机器人案例

环境设置

介绍如何设置环境以支持LLMs和向量数据库的结合。

构建“知识库”

展示如何构建支持LLMs的知识库。

生成基本答案

说明如何利用向量数据库生成基本答案。

生成具有上下文意识的答案

探讨如何生成不仅准确而且具有上下文意识的答案。

总结

本指南提供了如何结合LLMs和向量数据库来创建具有上下文意识和可靠性的应用程序的方法。

img

向量数据库与LLMs的结合:提升AI应用的上下文理解与性能

向量数据库的关键用例

向量数据库在机器学习和人工智能领域扮演着重要角色,尤其是在处理向量嵌入方面。以下是向量数据库的几个关键应用:

相似性搜索向量数据库能够快速在高维空间中找到与给定查询相似的数据点,这在图像或音频检索等应用中至关重要。

  • 电子商务:通过视觉相似性搜索增强产品发现。- 音乐流媒体服务:推荐具有相似音频特征的歌曲。- 医疗影像:协助放射科医生进行比较分析。

推荐系统向量数据库支持推荐系统,通过处理用户和项目嵌入来匹配用户兴趣。

  • 流媒体平台:个性化推荐电影和电视节目。- 在线零售商:根据用户历史推荐产品。- 新闻聚合器:提供个性化新闻订阅。

基于内容的检索向量数据库根据内容本身而非传统元数据进行搜索,尤其适用于非结构化数据。

  • 数字资产管理:管理数字媒体库。- 法律与合规:搜索大量文件以找到相关信息。- 学术研究:找到语境相似的学术文章。

增强LLMs的上下文理解向量数据库通过存储和处理文本嵌入,使LLMs能够执行更加细致和具有上下文意识的信息检索。

向量数据库与传统数据库的比较

传统SQL数据库擅长管理结构化数据,而向量数据库则填补了非结构化数据语义和上下文细微差别的空白,为AI应用提供了关键支持。

提升向量数据库性能的策略

优化向量数据库性能至关重要,主要涉及提高查询速度、确保高准确性,并保持可扩展性。

索引策略向量数据库中的索引策略包括:

  • 量化:通过压缩向量数据加快搜索过程。- 分层可导航小世界(HNSW)图:通过分层图快速遍历数据集。- 倒排文件索引(IVF):通过聚类相似项有效缩小搜索空间。

优化的额外考虑因素- 降维:在应用索引策略前降低向量维度。- 并行处理:提高大规模应用的吞吐量。- 动态索引:允许有效插入和删除向量。

用向量数据库丰富LLMs的上下文

大型语言模型(LLMs)如Facebook的LLama2或TIIUAE的Falcon,通过其类人文本生成能力推进了AI能力。然而,它们在处理专业上下文时面临挑战,可以通过以下方式解决:

  1. 定向训练:在特定领域的数据集上重新训练或微调LLM。2. 通过向量数据库增加上下文:使用向量数据库存储的专业信息来增强LLM的响应。

结论向量数据库通过其高效的索引策略和优化技术,为AI应用提供了强大的支持,特别是在增强LLMs的上下文理解方面展现出巨大潜力。

img

使用Falcon-7B和ChromaDB构建闭合问答机器人

概述本文介绍了如何利用向量数据库构建大型语言模型(LLMs)的闭合问答机器人。这种机器人能够高效回答科学相关的查询。

技术组件

1. HuggingFace 数据集 - databricks-dolly-15k- 链接: databricks-dolly-15k- 描述:由Databricks员工生成的开源数据集,用于训练LLMs、合成数据生成和数据增强。包含多种类别的提示和响应。

2. Chroma作为向量存储(知识库)- 角色:作为主要的向量存储,充当问答机器人的知识库。

3. Sentence Transformers用于语义搜索- 模型: ‘multi-qa-MiniLM-L6-cos-v1’- 描述:优化用于语义搜索的模型,负责生成Chroma中的嵌入。

4. Falcon 7B Instruct模型- 链接: Falcon 7B Instruct- 描述:开源生成模型,70亿参数的解码器模型。在RefinedWeb数据集上训练,由TII开发。

环境设置为了实现本文讨论的代码,需要进行以下安装步骤:

  1. 安装必要的库和框架。2. 配置Chroma数据库作为知识库。3. 设置Sentence Transformers进行语义搜索。4. 集成Falcon 7B Instruct模型以生成回答。

注意事项- 确保所有组件正确安装并配置。- 根据项目需求调整模型参数。- 定期更新数据集和模型以保持最新状态。

!pip install -qU \
    transformers==4.30.2 \
    torch==2.0.1+cu118 \
    einops==0.6.1 \
    accelerate==0.20.3 \
    datasets==2.14.5 \
    chromadb \
    sentence-transformers==2.2.2```  
  


  
  

这段代码最初在 Qwak 的 Workspaces 上的 gpu.a10.2xl 实例 上运行。需要注意的是,运行 Falcon-7B-Instruct 模型所需的特定代码可能会因使用的硬件配置而有所不同。

构建“知识库”

首先,我们获取 Databricks-Dolly 数据集,专注于 closed_qa 类别。这些条目通常以对精确信息的需求为特征,对于一般训练的大型语言模型(LLM)来说,由于其特定性,这些条目构成了挑战。

在Python中使用`datasets`库加载和过滤数据集示例:
1. 导入`datasets`库:
    ```python
    from datasets import load_dataset
    ```
2. 加载特定数据集的训练部分:
    ```python
    train_dataset = load_dataset('databricks/databricks-dolly-15k', split='train')
    ```
3. 过滤数据集,只保留'closed_qa'类别的条目:
    ```python
    closed_qa_dataset = train_dataset.filter(lambda example: example['category'] == 'closed_qa')
    ```
4. 打印过滤后数据集中的第一个条目:
    ```python
    print(closed_qa_dataset[0])
    ```  

典型的数据集条目如下所示:

Tomoaki Komorida,日本足球运动员,以其在多个俱乐部的职业生涯而闻名。以下是关于他的一些重要信息:
- **出生日期**:1981年7月10日,Komorida在熊本县开始了他的人生旅程。- **职业起步**:2000年,Komorida高中毕业后,立即加入了J1联赛的Avispa Fukuoka俱乐部,开始了他的职业足球生涯。- **职业生涯**:作为一名多才多艺的运动员,Komorida在多个位置上展现了自己的才能。他最初作为中场球员开始,随后在Oita Trinita、Montedio Yamagata、Vissel Kobe和Rosso Kumamoto等俱乐部担任防守型中场和中后卫。- **国际经历**:Komorida的足球生涯不仅限于日本国内,他还曾在印度尼西亚的Persela Lamongan队效力,这表明了他的足球技能受到了国际认可。- **退役**:在经历了一段丰富多彩的足球生涯后,Komorida于2012年在日本的Giravanz Kitakyushu俱乐部结束了他的职业生涯。
Komorida的足球生涯体现了他对这项运动的热爱和奉献,以及他在不同俱乐部和国家所展现的卓越才能。  

接下来,我们专注于为每组指令及其相应上下文生成词嵌入,并将其整合到我们的向量数据库 ChromaDB 中。

Chroma DB 是一个开源的向量存储系统,擅长管理向量嵌入。它专为语义搜索引擎等应用而设计,这在自然语言处理和机器学习领域至关重要。Chroma DB 的高效性,特别是作为内存数据库,有助于快速数据访问和操作,这对高速数据处理至关重要。其友好的 Python 设置增强了其在我们项目中的吸引力,简化了其整合到我们的工作流程中。详细文档请参阅:Chroma DB 文档

img

来源

为了为答案生成嵌入,我们使用了专门针对语义搜索用例进行训练的 multi-qa-MiniLM-L6-cos-v1 模型。给定一个问题/搜索查询,该模型能够找到相关的文本段落,这正是我们的目标。

在下面的示例中,我们说明了嵌入是如何存储在 Chroma 的内存集合中的。

![img](https://cdn.jsdelivr.net/gh/zshipu/imagesv2@main/2024/downloadedImage598daebe2a0e9504a27936a4.png)  


[来源](http://zshipu.com/t/index.html?url=https://docs.trychroma.com/)

为了为答案生成嵌入,我们使用了专门针对语义搜索用例进行训练的 multi-qa-MiniLM-L6-cos-v1 模型。给定一个问题/搜索查询,该模型能够找到相关的文本段落,这正是我们的目标。

在下面的示例中,我们说明了嵌入是如何存储在 Chroma 的内存集合中的。

img
在探索语义搜索的领域中,我们采用了一种特别训练的模型——multi-qa-MiniLM-L6-cos-v1,它专为语义搜索用例而设计。该模型的核心功能是,当给定一个问题或搜索查询时,能够精准地定位到与之相关的文本段落,这正是我们所追求的目标。

示例演示以下是对模型如何将答案嵌入存储于Chroma内存集合中的一个示例说明:

  1. 模型训练:multi-qa-MiniLM-L6-cos-v1模型经过专门训练,以适应语义搜索的需求。2. 问题/查询输入:用户提出一个问题或进行搜索查询。3. 文本段落匹配:模型分析查询,并在文本库中找到最相关的段落。4. 嵌入生成:将找到的相关文本段落转换成嵌入形式,以便存储和检索。 这种技术的应用,使得Chroma能够高效地处理和回应用户的查询,提供更为精确和相关的信息。
import chromadb
from sentence_transformers import SentenceTransformer

class VectorStore:

    def __init__(self, collection_name):
       # 初始化嵌入模型
        self.embedding_model = SentenceTransformer('sentence-transformers/multi-qa-MiniLM-L6-cos-v1')
        self.chroma_client = chromadb.Client()
        self.collection = self.chroma_client.create_collection(name=collection_name)
    
    # 从数据集中填充向量存储的方法
    def populate_vectors(self, dataset):
        for i, item in enumerate(dataset):
            combined_text = f"{item['instruction']}. {item['context']}"
            embeddings = self.embedding_model.encode(combined_text).tolist()
            self.collection.add(embeddings=[embeddings], documents=[item['context']], ids=[f"id_{i}"])
    
    # 根据查询搜索 ChromaDB 集合中的相关上下文的方法
    def search_context(self, query, n_results=1):
        query_embeddings = self.embedding_model.encode(query).tolist()
        return self.collection.query(query_embeddings=query_embeddings, n_results=n_results)


# 示例用法
if __name__ == "__main__":
   # 使用集合名称初始化处理程序
    vector_store = VectorStore("knowledge-base")
    
    # 假设 closed_qa_dataset 已定义并可用
    vector_store.populate_vectors(closed_qa_dataset)

  

利用Falcon-7b-instruct LLM进行文本生成任务

1. 背景介绍在本项目,我们为每个数据集条目生成并存储了“指令”和“上下文”的组合嵌入。这些嵌入将作为LLM提示中检索的文档,以展示我们知识库的丰富性。

2. Falcon-7b-instruct模型应用我们将使用Hugging Face提供的falcon-7b-instruct模型来生成对封闭信息查询的响应,无需额外上下文。

3. Falcon-7B-Instruct模型特点- 高效平衡:Falcon-7B-Instruct在先进功能和可管理大小之间实现了高效平衡。- 文本理解与生成:专为复杂的文本理解和生成任务设计,提供与更大、闭源模型相媲美的性能。- 简化方式:以更简化的方式呈现,适合需要深入语言理解的项目,同时避免大型模型的额外开销。

4. 硬件要求- 最低要求:至少16GB RAM。- 推荐配置:使用GPU以获得最佳性能和更快的响应时间。

5. 文档与资源有关Falcon-7B-Instruct模型的更多信息和文档,请访问HuggingFace模型页面

6. 注意事项- 确保满足硬件要求,以保证模型运行的流畅性。- 对于本地或远程服务器的部署,需要特别注意硬件配置。

结语通过Falcon-7b-instruct模型的应用,我们能够有效地生成对封闭信息查询的响应,同时保持了项目的性能和效率。


import transformers
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

class Falcon7BInstructModel:

    def __init__(self):
        # 模型名称
        model_name = "tiiuae/falcon-7b-instruct"
        self.pipeline, self.tokenizer = self.initialize_model(model_name)
    
    def initialize_model(self, model_name):
        # 初始化分词器
        tokenizer = AutoTokenizer.from_pretrained(model_name)
    
        # 用于文本生成的管道设置
        pipeline = transformers.pipeline(
            "text-generation",
            model=model_name,
            tokenizer=tokenizer,
            torch_dtype=torch.bfloat16,
            trust_remote_code=True,
            device_map="auto",
        )
    
        return pipeline, tokenizer
    
    def generate_answer(self, question, context=None):
        # 准备输入提示
        prompt = question if context is None else f"{context}\n\n{question}"
    
        # 生成响应
        sequences = self.pipeline(
            prompt,
            max_length=500,
            do_sample=True,
            top_k=10,
            num_return_sequences=1,
            eos_token_id=self.tokenizer.eos_token_id,
        )
    
        # 提取并返回生成的文本
        return sequences['generated_text']

  

自然语言处理模型的关键组件解析

在自然语言处理(NLP)中,模型如Falcon-7B-Instruct的高效运作依赖于几个核心组件。以下是对这些组件的详细解析,以帮助我们更好地理解其工作原理:

分词器的作用与重要性

分词器是将输入文本转换为模型能够理解的格式的关键工具。它负责将文本分解成更小的单元,这些单元可以是单词、子词或字符。对于Falcon-7B-Instruct模型,使用AutoTokenizer.from_pretrained(model)可以加载一个专为该模型设计的分词器,确保分词过程与模型训练时保持一致性。

管道的高级抽象功能在transformers库中,管道是一个高级实用程序,它简化了数据处理和模型预测的复杂流程。它内部自动处理分词、传递标记给模型以及将模型输出转换为易于理解的格式等多个步骤。在本脚本中,管道被设置为text-generation,优化用于接受提示并生成基于该提示的文本。

示例用法[示例用法的详细说明]

此部分将展示如何使用上述组件来实现具体的功能。


# 初始化 Falcon 模型类
falcon_model = Falcon7BInstructModel()

user_question = "Tomoaki Komorida 出生于哪一天?"

# 使用 LLM 为用户问题生成答案
answer = falcon_model.generate_answer(user_question)

print(f"结果: {answer}")

正如您可能已经猜到的那样,这是针对给定用户问题的模型输出:


{ answer: “我没有关于 Tomoaki Komorida 出生日期的信息。” }

在某些情况下,AI模型如Falcon-7B-Instruct可能对一些非主流或较少知名的信息缺乏足够的训练,导致在生成答案时出现负面响应。为了解决这个问题,我们可以利用向量存储技术来提供丰富的上下文信息,从而提高答案的针对性和有用性。以下是对这一过程的详细描述:

  1. 问题识别:首先,我们需要识别出AI模型在处理哪些类型的问题时可能会遇到困难。
  2. 上下文检索:接着,我们从向量存储中检索与问题相关的上下文信息。这一步骤是关键,因为它能够为模型提供必要的信息来生成更准确的答案。
  3. 上下文整合:将检索到的上下文信息与用户的问题进行整合,以确保生成的答案不仅准确,而且具有相关性。
  4. 模型训练:在提供上下文信息的基础上,对AI模型进行进一步的训练,以提高其对特定问题的处理能力。
  5. 生成答案:最后,利用训练后的模型生成具有上下文意识的答案,确保答案的质量和相关性。 这个过程不仅提高了AI模型的生成能力,也为用户提供了更加丰富和有用的信息。

# 假设 vector_store 和 falcon_model 已经被初始化

# 从 VectorStore 中获取上下文,假设已经填充
context_response = vector_store.search_context(user_question)

# 从响应中提取上下文文本
# 假定上下文位于 'context' 键的第一个元素中
context = "".join(context_response['context'][0]) 

# 使用 Falcon 模型生成答案,结合提取的上下文
enriched_answer = falcon_model.generate_answer(user_question, context=context)

print(f"结果: {enriched_answer}")

田智明,生于1981年7月10日。

img

如何打造基于大型语言模型的应用程序

简介在本文中,我们将探讨构建基于大型语言模型(LLM)的应用程序的过程,并讨论如何利用自定义数据集来丰富模型的理解和表达能力。管理这样一个模型,尝试不同数据集的实验,建立必要的基础设施,以及实现一个功能性解决方案,是一项复杂且具有挑战性的任务。

学习大模型的途径

随着大型模型在社会中的普及,越来越多的人希望投身于这一领域。然而,许多人在寻找学习路径时感到困惑和无助。作为一名经验丰富的程序员,我在初涉大模型领域时也经历了许多困难和挫折。现在,我愿意分享我的经验和知识,帮助你们在学习AI大模型的过程中克服困难。

学习资源分享我已整理并分享了一系列重要的AI大模型学习资料,包括但不限于:

  • 市面上各大AI大模型的白皮书- AGI大模型系统学习路线图- AI大模型视频教程- 实战学习录播视频 这些资料对于希望深入了解和掌握AI大模型的你来说,将是宝贵的学习资源。感兴趣的朋友可以通过扫描提供的二维码获取这些资料。

注意事项请注意,获取资料的过程中,请确保遵循相关法律法规和平台规定,合理使用这些资源以促进个人学习和发展。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。