域名备案网站源码,app一键生成器,网站建设技术保证怎么写,装酷网装修平台前言
RAG#xff08;检索增强生成#xff09;是一种创建基于大语言模型#xff08;LLM#xff09;应用的高效方式。它有助于生成对用户查询的准确回答。为了创建一个基于 RAG 的应用程序#xff0c;我们需要执行一些操作#xff0c;例如文档加载、将大文档拆分为多个小块…前言
RAG检索增强生成是一种创建基于大语言模型LLM应用的高效方式。它有助于生成对用户查询的准确回答。为了创建一个基于 RAG 的应用程序我们需要执行一些操作例如文档加载、将大文档拆分为多个小块、嵌入、嵌入索引并将它们存储在向量数据库中。然后根据用户查询系统从向量数据库中提取相关上下文并传递给提示词以及用户查询。然后 LLM 将用户查询和内容结合起来生成适当的响应。这是 RAG 系统的整体流程。 文本分割器 在 LangChain 中有助于将大文档分解为较小的块。在大文档或文本中很难根据用户查询找到相关的上下文。此外我们无法将整个大文档传递给 LLM 模型。每个 LLM 模型能处理的 Token 是有限的因此必须将大文本拆分为较小部分。这样我们就可以轻松地从这些小块中找到相关的上下文并将其作为输入传递给 LLM确保输入量低于模型的最大输入大小。因此文本分割器的 关键使用场景 如下 • 处理超过 LLM 模型 Token 限制的大文档文本分割技术有助于将文档划分为较小的部分以便模型处理。 • 在问答任务中较小的文本块在查询、索引和检索方面更有效而大文档则效率较低。 • 它通过在适当的点拆分段落或句子数量帮助将上下文保留在较小的部分中。这样每个块都包含适当的知识。 • LLM 在上下文窗口大小上有 Token 数量限制。即使上下文大小是无限的更多的输入 Token 也会导致更高的成本而金钱不是 无限的。
LangChain 中的文本分割技术
LangChain 提供了许多文本分割技术来适应不同类型的数据。今天我们将探索不同的文本分割技术例如字符文本分割器、递归字符文本分割器、Token 文本分割器、Markdown 标题文本分割器、Python 代码文本分割器、HTML 文本分割器、Spacy 文本分割器、Latex 文本分割器、递归 JSON 文本分割器。如果你有兴趣探索更多的分割技术请访问这个 LangChain 页面。建议你在自己的系统上运行代码深入理解这些概念。
首先安装执行分割技术所需的库。打开命令提示符或终端并运行以下命令。
pip install langchain spacy langchain_text_splitter langchain_core字符文本分割器
这是最基本的文本分割技术它根据特定的字符数来划分文本。它适用于简单且统一的文本分割任务。参数 separator 表示文本将只在换行符处拆分因为使用了 “\n” 作为分隔符。它避免在段落中间拆分。我们可以使用其他分隔符如空格。块大小表示每个块中的最大字符数而块重叠表示从前一个块中取多少字符到下一个块中。我们要注意每个块应该包含有用的知识。
from langchain.text_splitter importCharacterTextSplittertext 你的长文档文本在这里...splitter CharacterTextSplitter(separator\n\n,chunk_size10,chunk_overlap2
)chunks splitter.split_text(text)
print(chunks)
递归字符文本分割器
它使用字符分隔符将大文档分解为较小的块。它递归地尝试使用分隔符层次结构如段落 \n\n、句子 \n 和字符 .、,来拆分文本。它优先进行较高级别的拆分如段落如果需要则向下移动层次结构。当你需要灵活且分层的方法时可以尝试这种技术。
from langchain.text_splitter importRecursiveCharacterTextSplittertext 你的长文档文本在这里...splitter RecursiveCharacterTextSplitter(separators[\n\n,\n, ,],chunk_size1000,chunk_overlap200,length_functionlen
)chunks splitter.split_text(text)
print(chunks)Token 文本分割器
它根据 Token 而不是字符或单词来拆分文本。对于有 Token 限制的语言模型来说这是必要的。它使用模型的 Token 化方法将大文档分割成块。这里我们使用了 OpenAI 的编码来对文档进行 Token 化。
from langchain.text_splitter import TokenTextSplittertext 你的长文档文本在这里...splitter TokenTextSplitter(encoding_namecl100k_base, chunk_size100,chunk_overlap20
)chunks splitter.split_text(text)
print(chunks)Markdown 标题文本分割器
这种方法用于根据标题级别如 #、##、### 等拆分 Markdown 文档。它使用分层方法例如将特定标题及其子标题下的文本分开。当你想组织 Markdown 文件中的内容如技术文档时可以尝试这种分割方法。
from langchain.text_splitter importMarkdownHeaderTextSplittermarkdown_text
# 标题
## 部分 1
部分 1 的内容
## 部分 2
部分 2 的内容
### 子部分 2.1
子部分 2.1 的内容
headers_to_split_on [
(#,Header 1),
(##,Header 2),
(###,Header 3),
]splitter MarkdownHeaderTextSplitter(headers_to_split_onheaders_to_split_on)
chunks splitter.split_text(markdown_text)
print(chunks)Python 代码文本分割器
当你想将 Python 代码分解为较小的逻辑块时这种技术非常有用。它基于 Python 特定的分隔符如函数、类等来拆分代码。
from langchain.text_splitter importPythonCodeTextSplitterpython_code
def function1():print(Hello,World!)class MyClass:def __init__(self):self.value 42def method1(self):return self.value
splitter PythonCodeTextSplitter(chunk_size100,chunk_overlap20
)chunks splitter.split_text(python_code)
print(chunks)HTML 文本分割器
当你处理网页时想要基于 HTML 层次结构进行分割而不破坏文档结构。你可以使用这种技术它根据文档的结构来拆分 HTML 内容。它识别常见的 HTML 标签如 p、div、h1等并根据文档结构拆分文本。
from langchain_text_splitters importHTMLSectionSplitterhtml_text
html
body
h1主标题/h1
p这是一个段落。/p
divh2子部分/h2p另一个段落。/p
/div
/body
/html
headers_to_split_on [(h1,Header 1),(h2,Header 2)]
splitter HTMLSectionSplitter(headers_to_split_onheaders_to_split_on,chunk_size100,chunk_overlap20
)chunks splitter.split_text(html_text)
chunksSpacy 文本分割器
它使用 Spacy NLP 管道来分割文本利用 Spacy 的 Token 化和句子分割能力基于语言规则来拆分文本。当语言细微差别如句子边界很重要时可以尝试这种方法。
from langchain.text_splitter import SpacyTextSplittertext 你的长文档文本在这里。它可以是多种语言的。SpaCy 将处理语言的细微差别。splitter SpacyTextSplitter(chunk_size100,chunk_overlap20
)chunks splitter.split_text(text)
chunksLatex 文本分割器
当你处理科学论文、数学文档或任何 LaTex 格式的文本时可以使用这种技术它在保留其结构的同时拆分文本。它使用 latex 特定的分隔符如 \\documentclass{}、\\begin{}等将文本拆分为块。
from langchain.text_splitter importLatexTextSplitterlatex_text r
\documentclass{article}
\begin{document}
\section{引言}
这是引言部分。
\section{方法}
这是方法部分。
\end{document}
splitter LatexTextSplitter(chunk_size100,chunk_overlap20
)chunks splitter.split_text(latex_text)
chunks递归 JSON 文本分割器
你可以使用它将大型或嵌套的 JSON 对象分割为较小的可管理部分。它递归地拆分 JSON并通过遍历键和值保持层次结构的顺序。
from langchain_text_splitters importRecursiveJsonSplitterjson_data {
company:{
name:TechCorp,
location:{
city:Metropolis,
state:NY
},
departments:[
{
name:Research,
employees:[
{name:Alice,age:30,role:Scientist},
{name:Bob,age:25,role:Technician}
]
},
{
name:Development,
employees:[
{name:Charlie,age:35,role:Engineer},
{name:David,age:28,role:Developer}
]
}
]
},
financials:{
year:2023,
revenue:1000000,
expenses:750000
}
}splitter RecursiveJsonSplitter(max_chunk_size200, min_chunk_size20)chunks splitter.split_text(json_data, convert_listsTrue)for chunk in chunks:
print(len(chunk))
print(chunk)选择合适的文本分割器
我们之前讨论过递归字符文本分割技术。你也可以使用这种技术递归地分割编程语言。编程语言的结构不同于纯文本我们可以根据特定语言的语法来拆分代码。
from langchain_text_splitters importRecursiveCharacterTextSplitter,LanguagePYTHON_CODE
def add(a, b):return a bclass Calculator:def __init__(self):self.result 0def add(self, value):self.result valuereturn self.resultdef subtract(self, value):self.result - valuereturn self.result# 调用函数
def main():calc Calculator()print(calc.add(5))print(calc.subtract(2))if __name__ __main__:main()
python_splitter RecursiveCharacterTextSplitter.from_language(languageLanguage.PYTHON, chunk_size100, chunk_overlap0)python_docs python_splitter.create_documents([PYTHON_CODE])
python_docs如果你不确定哪种分割技术最适合你的 RAG 应用程序可以选择递归字符文本分割器技术。它作为通用的默认选项也可以执行专门的分割器如 MarkdownHeaderTextSplitter、PythonCodeTextSplitter 等它们为特定的文档格式提供解决方案。 最后的最后
感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。
因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。
这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 大模型知识脑图
为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。
经典书籍阅读
阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。 实战案例
光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。 面试资料
我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下 640套AI大模型报告合集
这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。 这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】