使用 Python 库 Chonkie 快速上手
在自然语言处理(NLP)领域,文本分块(chunking)是一种常见的任务,它将长文本分割成更小的块,以便于后续处理和分析。无论是构建 RAG(Retrieve-Augment-Generate)模型,还是进行大规模文本处理,分块都是一项基础且关键的步骤。然而,现有的许多分块工具要么功能过于复杂,要么过于简陋,难以满足开发者的实际需求。
幸运的是,现在有了 Chonkie —— 一个简单易用的 Python 库,它专注于提供高效且灵活的文本分块解决方案。本文将详细介绍如何使用 Chonkie 快速上手文本分块,并通过几个实际示例展示其强大的功能。
什么是 Chonkie?
Chonkie 是一个轻量级的 Python 库,旨在简化文本分块的过程。它提供了多种分块策略,包括基于句子的分块、递归分块、语义分块和双通道合并分块等,能够满足不同场景下的需求。Chonkie 的设计目标是简单、高效且易于扩展,让开发者能够专注于核心业务逻辑,而不是被复杂的分块逻辑所困扰。
安装 Chonkie
在开始之前,您需要先安装 Chonkie。可以通过以下命令快速安装:
示例文本
为了更好地展示 Chonkie 的功能,我们将使用以下示例文本:
1 2 3 4
   | text = '''团圆年|且行且思谋新篇 编者按:春节,是中华民族传统节日,是万家团圆、辞旧迎新的日子。新时代以来,每到年味渐浓之时,习近平总书记都会深入到群众当中,问冷暖送祝福、听民声解民忧。值此辞旧迎新之际,央视网推出系列特稿,与您一起循着总书记新春足迹,感悟深厚的人民情怀。 在中国传统文化中,春节是一年之始,也是万象更新的时刻。每年春节前夕走基层,习近平总书记总是一路调研、一路思索,为各地发展部署谋划。 为乡村振兴谋新篇'''
   | 
 
句子分块器(SentenceChunker)
句子分块器将文本拆分为多个块,同时保留完整的句子边界。这对于需要保持句子完整性的任务非常有用。
1 2 3 4 5 6 7 8 9 10 11 12 13
   | from chonkie import SentenceChunker
  chunker = SentenceChunker(     tokenizer="gpt2",       chunk_size=512,         chunk_overlap=128,      min_sentences_per_chunk=1   ) chunks = chunker.chunk(text) for chunk in chunks:     print(f"文本块内容: {chunk.text}")     print(f"令牌数量: {chunk.token_count}")     print(f"句子数量: {len(chunk.sentences)}")
   | 
 
递归分块器(RecursiveChunker)
递归分块器以递归方式将文档分块为较小的块,适用于结构良好的长文档。
1 2 3 4 5 6 7 8 9 10 11 12
   | from chonkie import RecursiveChunker, RecursiveRules
  chunker = RecursiveChunker(     tokenizer="gpt2",       chunk_size=512,         rules=RecursiveRules(),       min_characters_per_chunk=12   ) chunks = chunker.chunk(text) for chunk in chunks:     print(f"文本块内容: {chunk.text}")     print(f"令牌数量: {chunk.token_count}")
   | 
 
语义分块器(SemanticChunker)
语义分块器根据语义相似性将文本拆分为块,确保相关内容位于同一块中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | from chonkie import SemanticChunker
  chunker = SemanticChunker(     embedding_model="minishlab/potion-base-8M",       threshold=0.5,       chunk_size=512,       min_sentences=1   )
  chunks = chunker.chunk(text)
  for chunk in chunks:     print(f"文本块内容: {chunk.text}")     print(f"令牌数量: {chunk.token_count}")     print(f"分块中的句子数量: {len(chunk.sentences)}")
   | 
 
双通道合并分块器(SDPMChunker)
双通道合并分块器通过语义相似性分组,然后在跳过窗口中合并相似的组,适用于具有重复主题的文档。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | from chonkie import SDPMChunker
  chunker = SDPMChunker(     embedding_model="minishlab/potion-base-8M",       threshold=0.5,       chunk_size=512,       min_sentences=1,       skip_window=1   )
  chunks = chunker.chunk(text)
  for chunk in chunks:     print(f"分块内容: {chunk.text}")     print(f"令牌数量: {chunk.token_count}")     print(f"分块句子数量: {len(chunk.sentences)}")
   | 
 
总结
Chonkie 提供了多种灵活的分块策略,能够满足不同场景下的需求。无论是基于句子的分块、递归分块,还是语义分块和双通道合并分块,Chonkie 都能以简单高效的方式完成任务。通过本文的介绍,您应该已经掌握了如何使用 Chonkie 进行文本分块。更多详细信息和高级功能,可以参考 Chonkie 官方文档。