RAG技術性能提升之文檔分塊策略方案 原創
在人工智能領域,尤其是大型語言模型(LLM)的應用中,檢索增強生成(Retrieval-Augmented Generation, RAG)技術正變得越來越重要。RAG技術通過結合檢索和生成能力,為模型提供了豐富的外部知識源,從而生成更準確、更符合上下文的答案。本文將深入探討RAG技術中的文檔分塊策略,這些策略對于提高檢索效率和生成質量具有決定性作用。
一、文檔分塊策略的重要性
文檔分塊是RAG技術中的關鍵步驟,它影響著模型對信息的檢索和理解。合理的分塊策略可以:
- 提高檢索的準確性和效率。
- 保持文本的邏輯和語義完整性。
- 增強模型對文本內容的理解和生成能力。
二、固定大小分塊
固定大小分塊是一種簡單且計算成本低的方法,適用于對文本進行均勻劃分,便于模型處理。
核心優勢:
- 簡單易實現,計算成本低,不需要復雜的NLP處理。
- 適用于對文本進行標準化處理的場景。
示例代碼:
from langchain.text_splitter import CharacterTextSplitter
text_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 HTMLHeaderTextSplitter
html_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 SemanticChunker
from langchain.embeddings import OpenAIEmbeddings
text_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 RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
# 指定每個文本塊(chunk)的大小為100個字符
chunk_size=100,
# 設置相鄰文本塊之間的重疊字符數為20
chunk_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技術結合檢索和生成能力,為大模型語言提供更準確、高效的答案。
本文轉載自公眾號頂層架構領域
原文鏈接:??https://mp.weixin.qq.com/s/sSnZbEbiKUe5GMS6eBtuXg??
?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
已于2024-7-9 11:15:11修改
贊
收藏
回復
分享
微博
QQ
微信
舉報

回復
相關推薦