本文共 1533 字,大约阅读时间需要 5 分钟。
LlamaIndex中的元数据提取:增强文档处理
在处理长文档时,文本块可能缺乏必要的上下文来区分与其他相似的文本块。为了解决这个问题,我们可以利用大型语言模型(LLMs)提取与文档相关的某些上下文信息,以更好地帮助检索和语言模型区分相似的段落。
首先,我们定义一个元数据提取器,它接受一系列特征提取器,这些提取器将按顺序处理。然后,我们将这个元数据提取器传递给节点解析器,节点解析器将为每个节点添加额外的元数据。
以下是一个示例代码:
from llama_index.core.node_parser import SentenceSplitterfrom llama_index.core.extractors import ( SummaryExtractor, QuestionsAnsweredExtractor, TitleExtractor, KeywordExtractor,)from llama_index.extractors.entity import EntityExtractortransformations = [ SentenceSplitter(), TitleExtractor(nodes=5), QuestionsAnsweredExtractor(questions=3), SummaryExtractor(summaries=["prev", "self"]), KeywordExtractor(keywords=10), EntityExtractor(prediction_threshold=0.5),]
然后,我们可以在输入文档或节点上运行这些转换:
from llama_index.core.ingestion import IngestionPipelinepipeline = IngestionPipeline(transformations=transformations)nodes = pipeline.run(documents=documents)
如果提供的提取器不符合你的需求,你也可以定义一个自定义提取器。例如:
from llama_index.core.extractors import BaseExtractorclass CustomExtractor(BaseExtractor): async def extract(self, nodes) -> List[Dict]: metadata_list = [ { "custom": node.metadata["document_title"] + "\n" + node.metadata["excerpt_keywords"] } for node in nodes ] return metadata_list extractor.extract() 将自动在底层调用 aextract(),以提供同步和异步的入口点。
在一个更高级的示例中,它还可以利用LLM从节点内容和现有元数据中提取特征。有关更多详细信息,请参阅提供的元数据提取器的源代码。
通过这些方法,你可以在LlamaIndex中高效地提取和利用元数据,从而增强文档处理的效率和准确性。元数据提取就像是一位魔法师,用魔法棒一挥,就能从海量数据中变出你想要的任何信息。
转载地址:http://xyhfk.baihongyu.com/