【自然语言处理与大模型】LlamaIndex快速入门②
LlamaIndex使用阿里百炼的大模型。给大家介绍LlamaIndex的数据加载、数据连接和文本分割。
(1)加载本地数据
SimpleDirectoryReader 是一个简单的本地文件加载器。它会遍历指定目录,并根据文件扩展名自动加载文件。支持的文件类型:.csv.docx.epub.hwp.ipynb.jpeg.jpg.mbox.md.mp3.mp4.pdf.png.ppt.pptm.pptx
from llama_index.core import SimpleDirectoryReaderreader = SimpleDirectoryReader(input_dir="./data", # 目标目录recursive=False, # 是否递归遍历子目录required_exts=[".pdf"] # (可选)只读取指定后缀的文件)
documents = reader.load_data()print(documents[0].text)
(2)数据连接器
Data Connectors 用于处理更丰富的数据类型,并将其读取为 Document 的形式。
# pip install llama-index-readers-webfrom llama_index.readers.web import SimpleWebPageReaderdocuments = SimpleWebPageReader(html_to_text=True).load_data(["https://baidu.com"]
)print(documents[0].text)
更多关于 Data Connectors 的用法可以参考官方说明。还可以使用第三方的数据加载器。
(3)文本分割
在 LlamaIndex 中,为了提高检索效率和准确性,通常会将 Document
切分为更小的单元,称为 Node
。每个 Node
代表一个文本块(chunk),是索引和检索的基本单位。
from llama_index.core import Document
from llama_index.core.node_parser import TokenTextSplitternode_parser = TokenTextSplitter(chunk_size=512, # 每个 chunk 的最大长度chunk_overlap=200 # chunk 之间重叠长度
)nodes = node_parser.get_nodes_from_documents(documents, show_progress=False
)
LlamaIndex 提供了丰富的 TextSplitter,例如:
-
SentenceSplitter:在切分指定长度的 chunk 同时尽量保证句子边界不被切断(用的最多);
-
CodeSplitter:根据 AST(编译器的抽象句法树)切分代码,保证代码功能片段完整;
-
SemanticSplitterNodeParser:根据语义相关性对将文本切分为片段。