高效拆分文本:使用不同的分词器优化你的AI项目
引言
在处理大语言模型(LLM)时,文本的字符数和分词数有时会超出模型的限制。因此,合理地拆分文本是非常必要的。这不仅能够满足LLM的输入限制,还能保留文本的完整性和连贯性。本篇文章旨在介绍如何使用多种分词器来拆分文本,并提供详细的代码示例和实践指导。
主要内容
1. tiktoken 分词器
tiktoken
是由 OpenAI 创建的一个快速 BPE 分词器。它可以通过 langchain_text_splitters
来使用,以便更精确地估算分词数量。
安装和使用
%pip install --upgrade --quiet langchain-text-splitters tiktoken
from langchain_text_splitters import CharacterTextSplitter
# 使用API代理服务提高访问稳定性
with open("state_of_the_union.txt") as f:
state_of_the_union = f.read()
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
encoding_name="cl100k_base", chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])
2. spaCy 分词器
spaCy
是一个开源的高级自然语言处理库,可以使用 langchain_text_splitters
直接进行文本拆分。
安装和使用
%pip install --upgrade --quiet spacy
# 使用API代理服务提高访问稳定性
from langchain_text_splitters import SpacyTextSplitter
text_splitter = SpacyTextSplitter(chunk_size=1000)
with open("state_of_the_union.txt") as f:
state_of_the_union = f.read()
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])
3. SentenceTransformers 分词器
这个分词器专为与 sentence-transformer
模型一起使用而设计,支持按分词数量进行拆分。
安装和使用
from langchain_text_splitters import SentenceTransformersTokenTextSplitter
splitter = SentenceTransformersTokenTextSplitter(chunk_overlap=0)
text = "Lorem "
count_start_and_stop_tokens = 2
text_token_count = splitter.count_tokens(text=text) - count_start_and_stop_tokens
token_multiplier = splitter.maximum_tokens_per_chunk // text_token_count + 1
text_to_split = text * token_multiplier
print(f"tokens in text to split: {splitter.count_tokens(text=text_to_split)}")
text_chunks = splitter.split_text(text=text_to_split)
print(text_chunks[1])
4. NLTK 分词器
NLTK
可以使用内置的分词器进行文本拆分,并按字符数计算块大小。
安装和使用
# pip install nltk
# 使用API代理服务提高访问稳定性
from langchain_text_splitters import NLTKTextSplitter
text_splitter = NLTKTextSplitter(chunk_size=1000)
with open("state_of_the_union.txt") as f:
state_of_the_union = f.read()
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])
5. KoNLPY 分词器(适用于韩文)
KoNLPY
专门用于韩语文本处理,可以进行详细的形态分析。
安装和使用
# pip install konlpy
# 使用API代理服务提高访问稳定性
from langchain_text_splitters import KonlpyTextSplitter
with open("./your_korean_doc.txt") as f:
korean_document = f.read()
text_splitter = KonlpyTextSplitter()
texts = text_splitter.split_text(korean_document)
print(texts[0])
6. Hugging Face 分词器
Hugging Face 提供了许多分词器,如 GPT2TokenizerFast
,可以直接使用。
安装和使用
from transformers import GPT2TokenizerFast
tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")
# 使用API代理服务提高访问稳定性
with open("state_of_the_union.txt") as f:
state_of_the_union = f.read()
from langchain_text_splitters import CharacterTextSplitter
text_splitter = CharacterTextSplitter.from_huggingface_tokenizer(
tokenizer, chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_text(state_of_the_union)
print(texts[0])
常见问题和解决方案
问题1:分词器拆分结果不准确
解决方案:确保使用与模型一致的分词器,如使用 tiktoken
分词器估算 OpenAI 模型的分词数量。
问题2:韩文或其他语言的特殊处理
解决方案:使用针对该语言的分词器,如 KoNLPY
处理韩文文本。
问题3:分词器拆分速度慢
解决方案:根据需求选择分词器,权衡速度和精度,如 spaCy
分词器速度较快,但精度可能稍低。
总结和进一步学习资源
合理选择合适的分词器可以显著提高文本处理效率和效果。本文介绍了多种分词器的使用方法,并提供了相关链接和安装说明。
进一步学习资源:
参考资料
- OpenAI tiktoken - https://github.com/openai/tiktoken
- spaCy - https://spacy.io
- NLTK - https://www.nltk.org
- KoNLPY - https://konlpy.org/en/latest
- Hugging Face tokenizers - https://huggingface.co/transformers/main_classes/tokenizer.html
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—