文本分割器¶
原文: Text Splitters
載入文件後,您通常會想要對其進行轉換以更好地適合您的應用程式。最簡單的例子是,您可能想要將長文件分割成更小的區塊,以適合模型的上下文視窗(context-window)。
舉 GPT-3.5 模型為例:
MODEL | DESCRIPTION | CONTEXT WINDOW | TRAINING DATA |
---|---|---|---|
gpt-3.5-turbo-1106 | The latest GPT-3.5 Turbo model with improved instruction following, JSON mode, reproducible outputs, parallel function calling, and more. Returns a maximum of 4,096 output tokens. Learn more. | 16,385 tokens | Up to Sep 2021 |
gpt-3.5-turbo | Currently points to gpt-3.5-turbo-0613. | 4,096 tokens | Up to Sep 2021 |
gpt-3.5-turbo-16k | Currently points to gpt-3.5-turbo-16k-0613. | 16,385 tokens | Up to Sep 2021 |
gpt-3.5-turbo-instruct | Similar capabilities as GPT-3 era models. Compatible with legacy Completions endpoint and not Chat Completions. | 4,096 tokens | Up to Sep 2021 |
LangChain 有許多內建的文件轉換器,可以輕鬆拆分、組合、過濾和以其他方式操作文件。
當您想要處理長文本時,有必要將該文字分割成區塊(chunk)。這聽起來很簡單,但這裡存在著許多潛在的複雜性。理想情況下,您希望將語義相關的文字片段保留在一起。 語意相關 的意思可能取決於文本的類型。本文說明了實現此目的的幾種方法。
在較高層面上,文本分割器的工作原理如下:
- 將文字分成小的、具有語義意義的區塊(通常是句子)。
- 開始將這些小塊組合成一個更大的塊,直到達到一定的大小(透過某些函數測量)。
- 一旦達到該大小,請將該區塊設為自己的文字片段,然後開始建立具有一些重疊的新文字區塊(以保持區塊之間的上下文)。
這意味著您可以沿著兩個不同的維度來自訂或客製文字分割器:
- 文字如何分割
- 如何測量塊大小
文字分割器的類型¶
LangChain 提供了多種不同類型的文字分割器。下表列出了所有這些以及一些特徵:
Name
: 文字分割器的名稱Splits On
: 此文字分割器如何分割文字Adds Metadata
: 此文字分割器是否會添加有關每個區塊來自何處的元資料。Description
: 文字分割器的描述,包括何時使用它的建議。
Name | Splits On | Adds Metadata | Description |
---|---|---|---|
Recursive | A list of user defined characters | 遞歸地分割文字。遞歸地分割文本的目的是嘗試使相關的文本片段彼此相鄰。這是開始分割文字的推薦方法。 | |
HTML | HTML specific characters | ✅ | 根據 HTML 特定字元分割文字。值得注意的是,這添加了有關該區塊來自何處的相關資訊(基於 HTML) |
Markdown | Markdown specific characters | ✅ | 根據 Markdown 特定字元分割文字。值得注意的是,這添加了有關該區塊來自何處的相關資訊(基於 Markdown) |
Code | Code (Python, JS) specific characters | 根據特定於程式開發語言的字元分割文字。有 15 種不同的語言可供選擇。 | |
Token | Tokens | 根據特定的 token 來拆分文字。有幾種不同的方法來衡量 token。 | |
Character | A user defined character | 根據使用者定義的字元拆分文字。比較簡單的方法之一。 | |
[Experimental] Semantic Chunker | Sentences | 首先將句子分割。然後,如果它們在語義上足夠相似,則將它們相鄰地組合起來。 |
評估文字分割器¶
您可以使用 Greg Kamradt 建立的 Chunkviz 公用程式來評估文字分割器。 Chunkviz 是一個很好的工具,可以直觀地顯示文字分割器的工作情況。它將向您顯示文字是如何分割的,並幫助調整分割參數。
其他文件轉換¶
文字分割只是您在將文件傳遞給 LLM 之前可能想要對文件進行的轉換的一個範例。前往 Integration以取得更多內建文件轉換器與第三方工具整合的文件與資訊。