Llama指数:轻松增强您的法学硕士申请与定制数据

美妆指南:轻松提升您的法学硕士申请与个性化数据

大型语言模型(LLM)如OpenAI的GPT系列已经通过各种公开可访问的数据进行了训练,展示了在文本生成、摘要、问答和规划方面的非凡能力。尽管它们具有多样性,但经常出现的问题是如何无缝地将这些模型与自定义的、私有的或专有的数据集进行集成。

企业和个人面临大量独特的定制数据,通常保存在诸如Notion、Slack和Salesforce之类的应用程序中,或者存储在个人文件中。为了利用LLM处理这些特定数据,已经提出并尝试了几种方法。

微调是其中一种方法,它通过调整模型的权重来融入特定数据集的知识。然而,这个过程并不是没有挑战的。它需要大量的数据准备工作,加上一个复杂的优化过程,需要一定的机器学习专业知识。此外,在处理大型数据集时,经济成本可能相当可观。

在上下文学习中,提供其必要上下文以生成准确输出成为一种可行替代方案。这种方法减少了对模型重新训练的需求,提供了一种更高效而且易于使用的方式来集成私有数据。

但是,这种方法的缺点在于它依赖于用户在提示工程方面的技能和专业知识。此外,在处理高度专业化或技术性数据时,上下文学习可能并不总是像微调那样精确可靠。模型的预训练并不能保证对特定行话或上下文的理解,这可能导致不准确或无关的输出。当私有数据来自一个利基领域或行业时,这一点尤为严重。

此外,在单个提示中提供的上下文量是有限的,随着任务复杂性的增加,LLM的性能可能会降低。还有隐私和数据安全的挑战,因为提示中提供的信息可能涉及敏感或机密数据。

随着社区对这些技术的探索,像LlamaIndex这样的工具现在开始受到关注。

Llama Index

Llama Index

它是由前Uber研究科学家Jerry Liu创办的。在去年秋天尝试GPT-3的过程中,Liu注意到该模型在处理个人文件等私有数据方面存在的限制。这一观察结果导致开源项目LlamaIndex的开展。

该举措已吸引投资者,在最近的种子融资轮中获得850万美元的资金。

LlamaIndex使得LLM能够与自定义数据进行整合,弥合预训练模型与自定义数据用例之间的差距。通过LlamaIndex,用户可以利用自己的数据与LLM进行协作,从而实现知识生成和推理的个性化洞察。

用户可以轻松地给LLM提供自己的数据,从而营造一个知识生成和推理深度个性化和有洞察力的环境。LlamaIndex通过提供一个更加用户友好和安全的平台进行数据交互来解决上下文学习的局限性,确保即使对机器学习专业知识有限的用户也能充分利用LLM与他们的私有数据的潜力。

高级概念和一些见解

1. 检索增强生成(RAG)

LlamaIndex RAG

LlamaIndex RAG

RAG是一个设计成将LLM与自定义数据相结合的双重过程,从而提高模型提供更准确和知情的回答的能力。该过程包括:

  • 索引阶段:这是准备阶段,为创建知识库打下了基础。

LlamaIndex INDEXES

LlamaIndex索引

  • 查询阶段:在这里,知识库被搜索以寻找相关背景信息,帮助LLM(Language and Learning Models)回答查询。

LlamaIndex查询阶段

LlamaIndex查询阶段

LlamaIndex索引之旅

  • 数据连接器:将数据连接器视为您的数据通往LlamaIndex的护照。它们有助于从各种来源和格式导入数据,并将其封装成简单的“文档”表示。数据连接器可以在LlamaHub中找到,这是一个开源存储库,充满了数据加载器。这些加载器经过精心设计,可轻松集成,实现与任何LlamaIndex应用程序的即插即用体验。

Llama hub

LlamaIndex Hub(https://llamahub.ai/)

  • 文档/节点:文档就像一个通用的手提箱,可以容纳各种数据类型,无论是PDF、API输出还是数据库条目。另一方面,节点是来自文档的片段或“块”,附加了元数据和与其他节点的关系,确保后续精确数据检索的坚实基础。
  • 数据索引:在数据摄取后,LlamaIndex将帮助将这些数据索引到可检索的格式中。在幕后,它将原始文档分解为中间表示,计算向量嵌入并推断元数据。在索引中,“VectorStoreIndex”常常是首选。

LlamaIndex的索引类型:有序数据的关键

LlamaIndex提供不同类型的索引,每个索引都用于不同的需求和用例。这些索引的核心是上述讨论的“节点”。让我们试着了解LlamaIndex索引及其机制和应用。

1. 列表索引

  • 机制:列表索引将节点按顺序排列,就像列表一样。在将输入数据分块成节点后,它们以线性方式排列,可以按顺序查询或使用关键字或嵌入进行查询。
  • 优点:当需要进行顺序查询时,这种索引类型非常有用。LlamaIndex通过聪明地查询每个节点的文本并在列表中下行时细化答案,确保利用整个输入数据,即使它超过LLM的令牌限制。

2. 向量存储索引

  • 机制:在这里,节点转化为向量嵌入,可以存储在本地或类似于Milvus的专门的向量数据库中。在查询时,它会获取与节点最相似的top_k个节点,并将它们传递给响应合成器。
  • 优点:如果您的工作流程依赖于通过向量搜索进行语义相似性的文本比较,可以使用此索引。

3. 树索引

  • 机制:在树索引中,输入数据演变为从叶节点(原始数据块)向上构建的树结构。父节点出现为叶节点的摘要,使用GPT进行构建。在查询时,树索引可以从根节点遍历到叶节点,或直接从选定的叶节点构建响应。
  • 优点:通过树索引,查询长文本块变得更高效,从各种文本段提取信息变得更简便。

4. 关键字索引

  • 机制:关键字到节点的映射构成了关键字索引的核心。在查询时,从查询中提取关键字,并将仅映射的节点放入重点关注的范围内。
  • 优点:当您有明确的用户查询时,可以使用关键字索引。例如,在浏览与COVID-19相关的医疗文件时,只关注相关文档会更加高效。

安装LlamaIndex

安装LlamaIndex是一个简单直接的过程。可以选择直接通过Pip或者通过源代码安装(确保已在系统上安装了Python或者可以使用Google Colab)

1. 通过Pip安装

  • 执行以下命令:pip install llama-index
  • 注意:在安装过程中,LlamaIndex可能会下载并保存一些包(如NLTK和HuggingFace)的本地文件。要为这些文件指定目录,请使用“LLAMA_INDEX_CACHE_DIR”环境变量。

2. 通过源代码安装

  • 首先,从GitHub克隆LlamaIndex代码库:git clone https://github.com/jerryjliu/llama_index.git
  • 克隆完成后,进入项目目录。
  • 为管理软件包依赖项,需要使用Poetry。
  • 现在,使用Poetry创建虚拟环境:poetry shell
  • 最后,使用以下命令安装核心软件包需求:poetry install

设置LlamaIndex的环境

1. OpenAI设置

  • 默认情况下,LlamaIndex使用OpenAI的gpt-3.5-turbo进行文本生成,使用text-embedding-ada-002进行检索和嵌入。
  • 要使用此设置,您需要拥有一个OPENAI_API_KEY。在OpenAI的网站上注册并创建一个新的API令牌。
  • 根据项目需求,您可以自定义基础大型语言模型(LLM)。根据LLM提供者的不同,您可能需要额外的环境密钥和令牌。

2. 本地环境设置

  • 如果您不想使用OpenAI,LlamaIndex会自动切换到本地模型-文本生成使用LlamaCPPllama2-chat-13B,检索和嵌入使用BAAI/bge-small-en
  • 要使用LlamaCPP,请按照提供的安装指南进行操作。确保安装llama-cpp-python软件包,最好编译以支持您的GPU。此设置将在CPU和GPU上使用约11.5GB的内存。
  • 对于本地嵌入,执行pip install sentence-transformers。此本地设置将使用约500MB的内存。

通过这些设置,您可以根据项目要求和资源来定制您的环境,以充分利用OpenAI的强大功能或在本地运行模型。

一个简单的用例:使用LlamaIndex和OpenAI查询网页

这是一个简单的Python脚本,演示了如何查询特定见解的网页:

!pip install llama-index html2text
import osfrom llama_index import VectorStoreIndex, SimpleWebPageReader# 在下面输入您的OpenAI密钥:os.environ["OPENAI_API_KEY"] = ""# 您要加载到向量存储的URL:url = "http://www.paulgraham.com/fr.html"# 将URL加载到文档中(可以加载多个文档)documents = SimpleWebPageReader(html_to_text=True).load_data([url])# 从文档中创建向量存储index = VectorStoreIndex.from_documents(documents)# 创建查询引擎以便进行提问:query_engine = index.as_query_engine()# 对加载的数据进行任意数量的提问:response = query_engine.query("Paul提供的三个最佳筹资建议是什么?")print(response)
Paul提供的三个最佳筹资建议是:1. 在初始筹资阶段,从一个较低的数字开始。这样可以增加灵活性,并提高长期筹款的机会。2. 如果可能,要有盈利计划。有一份在没有依赖额外资金的情况下实现盈利的计划,会使初创公司对投资者更有吸引力。3. 不要为估值进行优化。尽管估值很重要,但在筹款中并非最重要的因素。专注于获得必要的资金和找到好的投资者。

Google Colab Llama Index Notebook

Google Colab Llama Index 笔记本

通过使用此脚本,您可以创建一个强大的工具,通过简单地提问来提取网页上的特定信息。这只是在使用LlamaIndex和OpenAI查询网络数据时所能实现的一小部分。

LlamaIndex与Langchain之间的选择:根据目标选择

您在LlamaIndex和Langchain之间的选择将取决于项目的目标。如果您想要开发一个智能搜索工具,LlamaIndex是您的明智选择,它在作为智能数据检索的存储机制方面表现出色。另一方面,如果您想要创建类似ChatGPT带插件功能的系统,Langchain是您的首选。它不仅可以同时支持多个ChatGPT和LlamaIndex实例,还可以通过允许构建多任务代理来扩展功能。例如,使用Langchain,您可以创建能够同时执行Python代码和进行Google搜索的代理。简而言之,虽然LlamaIndex擅长于数据处理,但Langchain可以调度多个工具来提供全面的解决方案。

LlamaIndex Logo Artwork created using Midjourney

使用Midjourney创建的LlamaIndex标志艺术品