Skip to main content
语言模型有令牌限制。您不应超出令牌限制。因此,当您将文本分割成块时,计算令牌数量是一个好主意。有许多分词器。当您计算文本中的令牌时,应使用与语言模型中相同的分词器。

tiktoken

tiktoken 是由 OpenAI 创建的快速 BPE 分词器。
我们可以使用 tiktoken 来估算使用的令牌数。对于 OpenAI 模型,它可能更准确。
  1. 文本如何分割:按传入的字符分割。
  2. 块大小如何衡量:由 tiktoken 分词器衡量。
CharacterTextSplitterRecursiveCharacterTextSplitterTokenTextSplitter 可以直接与 tiktoken 一起使用。
要使用 CharacterTextSplitter 进行分割,然后使用 tiktoken 合并块,请使用其 .from_tiktoken_encoder() 方法。请注意,此方法产生的分割可能大于 tiktoken 分词器衡量的块大小。 .from_tiktoken_encoder() 方法接受 encoding_name 作为参数(例如 cl100k_base),或 model_name(例如 gpt-4)。所有其他参数如 chunk_sizechunk_overlapseparators 用于实例化 CharacterTextSplitter
为了对块大小实施硬性约束,我们可以使用 RecursiveCharacterTextSplitter.from_tiktoken_encoder,如果分割的大小较大,它将递归地进行分割:
我们也可以加载 TokenTextSplitter 分割器,它直接与 tiktoken 一起工作,并确保每个分割都小于块大小。
一些书面语言(例如中文和日文)的字符会编码为两个或更多令牌。直接使用 TokenTextSplitter 可能会将一个字符的令牌分割到两个块中,导致 Unicode 字符格式错误。请使用 RecursiveCharacterTextSplitter.from_tiktoken_encoderCharacterTextSplitter.from_tiktoken_encoder 以确保块包含有效的 Unicode 字符串。

spaCy

spaCy 是一个用于高级自然语言处理的开源软件库,使用 Python 和 Cython 编程语言编写。
LangChain 实现了基于 spaCy 分词器 的分割器。
  1. 文本如何分割:由 spaCy 分词器分割。
  2. 块大小如何衡量:按字符数衡量。

SentenceTransformers

SentenceTransformersTokenTextSplitter 是一个专门用于 sentence-transformer 模型的文本分割器。默认行为是将文本分割成适合您想使用的 sentence transformer 模型令牌窗口的块。 要根据 sentence-transformers 分词器分割文本并约束令牌数量,请实例化 SentenceTransformersTokenTextSplitter。您可以选择指定:
  • chunk_overlap:令牌重叠的整数计数;
  • model_name:sentence-transformer 模型名称,默认为 "sentence-transformers/all-mpnet-base-v2"
  • tokens_per_chunk:每个块的期望令牌数。

NLTK

自然语言工具包,或更常见的 NLTK,是一套用于英语符号和统计自然语言处理(NLP)的库和程序,使用 Python 编程语言编写。
我们可以使用 NLTK 基于 NLTK 分词器 进行分割,而不仅仅是按 “\n\n” 分割。
  1. 文本如何分割:由 NLTK 分词器分割。
  2. 块大小如何衡量:按字符数衡量。

KoNLPY

KoNLPy:Python 中的韩语 NLP 是一个用于韩语自然语言处理(NLP)的 Python 包。
令牌分割涉及将文本分割成称为令牌的更小、更易于管理的单元。这些令牌通常是单词、短语、符号或其他对进一步处理和分析至关重要的有意义元素。在英语等语言中,令牌分割通常涉及按空格和标点符号分隔单词。令牌分割的有效性在很大程度上取决于分词器对语言结构的理解,以确保生成有意义的令牌。由于为英语设计的分词器不具备理解其他语言(如韩语)独特语义结构的能力,因此它们不能有效地用于韩语处理。

使用 KoNLPy 的 kkma 分析器进行韩语令牌分割

对于韩语文本,KoNLPY 包含一个名为 Kkma(韩语知识语素分析器)的形态分析器。Kkma 提供韩语文本的详细形态分析。它将句子分解为单词,将单词分解为各自的语素,并为每个令牌识别词性。它可以将一段文本分割成单个句子,这对于处理长文本特别有用。

使用注意事项

虽然 Kkma 以其详细分析而闻名,但需要注意的是,这种精确性可能会影响处理速度。因此,Kkma 最适合分析深度优先于快速文本处理的应用程序。

Hugging Face 分词器

Hugging Face 有许多分词器。 我们使用 Hugging Face 分词器 GPT2TokenizerFast 来计算文本长度(以令牌为单位)。
  1. 文本如何分割:按传入的字符分割。
  2. 块大小如何衡量:由 Hugging Face 分词器计算的令牌数衡量。