在人工智能畛域,尤其是大型言语模型(LLM)的运行中,检索增强生成(Retrieval-Augmented Generation,RAG)技术正变得越来越关键。RAG技术经过联合检索和生成才干,为模型提供了丰盛的外部常识源,从而生成更准确、更合乎高低文的答案。本文将深化讨论RAG技术中的文档分块战略,这些战略关于提高检索效率和生成品质具备选择性作用。
一、文档分块战略的关键性
文档分块是RAG技术中的关键步骤,它影响着模型对消息的检索和了解。正当的分块战略可以:
二、固定大小分块
固定大小分块是一种便捷且计算老本低的方法,适用于对文本启动平均划分,便于模型处置。
**长处:
示例代码:
from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter.from_tiktoken_encoder(encoding="cl100k_base",chunk_size=100,chunk_overlap=0)texts = text_splitter.split_text(state_of_the_union)
三、基于结构的分块
基于结构的分块方法应用文档的固有结构,如HTML或Markdown中的题目和段落,以坚持内容的逻辑性和完整性。
**长处:
示例代码:
from langchain.text_splitter import HTMLHeaderTextSplitterhtml_string = "<html>...</html>"headers_to_split_on = [("h1", "Header 1"), ("h2", "Header 2"), ("h3", "Header 3")]html_splitter = HTMLHeaderTextSplitter(headers_to_split_notallow=headers_to_split_on)html_header_splits = html_splitter.split_text(html_string)
四、基于语义的分块
基于语义的分块战略关注于文本的语义独立性,确保每个分块蕴含完整的语义消息。可以经过标点符号、人造段落或经常使用NLTK、Spacy等工具成功。
**长处:
示例代码:
from langchain_experimental.text_splitter import SemanticChunkerfrom langchain.embeddings import OpenAIEmbeddingstext_splitter = SemanticChunker(OpenAIEmbeddings())docs = text_splitter.create_documents([state_of_the_union], breakpoint_threshold_type="percentile")print(docs[0].page_content)
五、递归分块
递归分块是一种灵活的分块方法,可以经常使用一组分隔符,以分层和迭代的模式将文本划分为更小的块,灵活顺应不同类型的文本数据。
**长处:
示例代码:
from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(# 指定每个文本块(chunk)的大小为100个字符chunk_size=100,# 设置相邻文本块之间的堆叠字符数为20chunk_overlap=20,# 指定用于测量文本长度的函数length_function=len,# 不经常使用正则表白式作为分隔符来宰割文本is_separator_regex=False,)texts = text_splitter.create_documents([state_of_the_union])print(texts[0])print(texts[1])
总结:
选用适宜的文档分块战略关于优化RAG技术的成果至关关键。不同的分块战略适用于不同的场景,可以依据运行需求和数据个性选用繁多战略或组合经常使用多种战略。经过正当的分块,可以增强RAG技术联合检索和生成才干,为大模型言语提供更准确、高效的答案。
原文链接:
© 版权声明