元数据提取#
简介#
在许多情况下,特别是处理长文档时,文本片段可能缺乏必要的上下文来与其他类似文本片段进行区分。
为解决这个问题,我们使用大语言模型(LLM)提取与文档相关的特定上下文信息,以更好地帮助检索和语言模型区分看似相似的段落。
我们在示例笔记本中展示了这一功能,并演示了其在处理长文档时的有效性。
使用方法#
首先,我们定义一个元数据提取器,该提取器接收一系列将按顺序处理的特征提取器。
然后将其传递给节点解析器,解析器会为每个节点添加额外的元数据。
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.extractors import (
SummaryExtractor,
QuestionsAnsweredExtractor,
TitleExtractor,
KeywordExtractor,
)
from llama_index.extractors.entity import EntityExtractor
transformations = [
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 IngestionPipeline
pipeline = IngestionPipeline(transformations=transformations)
nodes = pipeline.run(documents=documents)
以下是提取的元数据示例:
{'page_label': '2',
'file_name': '10k-132.pdf',
'document_title': 'Uber Technologies, Inc. 2019 Annual Report: Revolutionizing Mobility and Logistics Across 69 Countries and 111 Million MAPCs with $65 Billion in Gross Bookings',
'questions_this_excerpt_can_answer': '\n\n1. How many countries does Uber Technologies, Inc. operate in?\n2. What is the total number of MAPCs served by Uber Technologies, Inc.?\n3. How much gross bookings did Uber Technologies, Inc. generate in 2019?',
'prev_section_summary': "\n\nThe 2019 Annual Report provides an overview of the key topics and entities that have been important to the organization over the past year. These include financial performance, operational highlights, customer satisfaction, employee engagement, and sustainability initiatives. It also provides an overview of the organization's strategic objectives and goals for the upcoming year.",
'section_summary': '\nThis section discusses a global tech platform that serves multiple multi-trillion dollar markets with products leveraging core technology and infrastructure. It enables consumers and drivers to tap a button and get a ride or work. The platform has revolutionized personal mobility with ridesharing and is now leveraging its platform to redefine the massive meal delivery and logistics industries. The foundation of the platform is its massive network, leading technology, operational excellence, and product expertise.',
'excerpt_keywords': '\nRidesharing, Mobility, Meal Delivery, Logistics, Network, Technology, Operational Excellence, Product Expertise, Point A, Point B'}
自定义提取器#
如果提供的提取器不符合您的需求,您也可以像这样定义自定义提取器:
from llama_index.core.extractors import BaseExtractor
class CustomExtractor(BaseExtractor):
async def aextract(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 从节点内容和现有元数据中提取特征。更多细节请参考提供的元数据提取器源代码。
模块#
以下是各种元数据提取器的指南和教程: