自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RAG技術(shù)性能提升之文檔分塊策略方案 原創(chuàng)

發(fā)布于 2024-7-9 07:20
瀏覽
0收藏

在人工智能領(lǐng)域,尤其是大型語言模型(LLM)的應(yīng)用中,檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)技術(shù)正變得越來越重要。RAG技術(shù)通過結(jié)合檢索和生成能力,為模型提供了豐富的外部知識源,從而生成更準(zhǔn)確、更符合上下文的答案。本文將深入探討RAG技術(shù)中的文檔分塊策略,這些策略對于提高檢索效率和生成質(zhì)量具有決定性作用。

RAG技術(shù)性能提升之文檔分塊策略方案 -AI.x社區(qū)

一、文檔分塊策略的重要性

文檔分塊是RAG技術(shù)中的關(guān)鍵步驟,它影響著模型對信息的檢索和理解。合理的分塊策略可以:

  • 提高檢索的準(zhǔn)確性和效率。
  • 保持文本的邏輯和語義完整性。
  • 增強(qiáng)模型對文本內(nèi)容的理解和生成能力。

二、固定大小分塊

固定大小分塊是一種簡單且計(jì)算成本低的方法,適用于對文本進(jìn)行均勻劃分,便于模型處理。

核心優(yōu)勢:

  • 簡單易實(shí)現(xiàn),計(jì)算成本低,不需要復(fù)雜的NLP處理。
  • 適用于對文本進(jìn)行標(biāo)準(zhǔn)化處理的場景。

示例代碼:

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)

三、基于結(jié)構(gòu)的分塊

基于結(jié)構(gòu)的分塊方法利用文檔的固有結(jié)構(gòu),如HTML或Markdown中的標(biāo)題和段落,以保持內(nèi)容的邏輯性和完整性。

核心優(yōu)勢:

  • 利用文檔結(jié)構(gòu)信息,提高分塊的語義相關(guān)性。
  • 適用于結(jié)構(gòu)化文檔的處理。

示例代碼:

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)

四、基于語義的分塊

基于語義的分塊策略關(guān)注于文本的語義獨(dú)立性,確保每個分塊包含完整的語義信息??梢酝ㄟ^標(biāo)點(diǎn)符號、自然段落或使用NLTK、Spacy等工具實(shí)現(xiàn)。

核心優(yōu)勢:

  • 保持語義完整性,提高文本的可讀性和理解性。
  • 適用于需要深入理解文本內(nèi)容的場景。

示例代碼:

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)

五、遞歸分塊

遞歸分塊是一種動態(tài)的分塊方法,可以使用一組分隔符,以分層和迭代的方式將文本劃分為更小的塊,動態(tài)適應(yīng)不同類型的文本數(shù)據(jù)。

核心優(yōu)勢:

  • 適應(yīng)性強(qiáng),能夠處理不同類型和結(jié)構(gòu)的文本。
  • 提高分塊的靈活性和準(zhǔn)確性。

示例代碼:

from langchain.text_splitter import RecursiveCharacterTextSplitter


text_splitter = RecursiveCharacterTextSplitter(
    # 指定每個文本塊(chunk)的大小為100個字符
chunk_size=100, 
    # 設(shè)置相鄰文本塊之間的重疊字符數(shù)為20
chunk_overlap=20,
    # 指定用于測量文本長度的函數(shù)
length_function=len,
    # 不使用正則表達(dá)式作為分隔符來分割文本
is_separator_regex=False,
)
texts = text_splitter.create_documents([state_of_the_union])


print(texts[0])
print(texts[1])

總結(jié):

選擇合適的文檔分塊策略對于提升RAG技術(shù)的效果至關(guān)重要。不同的分塊策略適用于不同的場景,可以根據(jù)應(yīng)用需求和數(shù)據(jù)特性選擇單一策略或組合使用多種策略。通過合理的分塊,可以增強(qiáng)RAG技術(shù)結(jié)合檢索和生成能力,為大模型語言提供更準(zhǔn)確、高效的答案。


本文轉(zhuǎn)載自公眾號頂層架構(gòu)領(lǐng)域

原文鏈接:??https://mp.weixin.qq.com/s/sSnZbEbiKUe5GMS6eBtuXg??


?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
標(biāo)簽
已于2024-7-9 11:15:11修改
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦