1概览
本 notebook 演示了使用 EventDetector、CoreferenceResolver、TripletExtractor、SemanticAnalyzer、SemanticNetworkExtractor、LLMEnhancer 和 ExtractionValidator 进行的高级语义抽取。
文档:API 参考
学习目标
- 使用 EventDetector 检测事件
- 使用 CoreferenceResolver 消解共指
- 使用 TripletExtractor 抽取 RDF 三元组
- 使用 SemanticAnalyzer 进行语义分析
- 使用 SemanticNetworkExtractor 抽取语义网络
- 使用 LLMEnhancer 进行基于 LLM 的增强
- 使用 ExtractionValidator 验证抽取结果
2安装
从 PyPI 安装 Semantica:
pip install semantica
# 或安装所有可选依赖:
pip install semantica[all]
3工作流:事件检测 → 共指消解 → 三元组抽取 → 语义分析 → 网络抽取 → LLM 增强 → 验证
# 安装 Semantica
!pip install -q semantica
# 导入高级语义抽取所需的全部组件
from semantica.semantic_extract import (
EventDetector, CoreferenceResolver, TripletExtractor,
SemanticAnalyzer, SemanticNetworkExtractor, LLMEnhancer, ExtractionValidator
)
# 示例文本:包含事件、共指与三元组信息
text = "Apple Inc. was founded by Steve Jobs in 1976. The company is now led by Tim Cook."
# 步骤 1:事件检测
event_detector = EventDetector()
events = event_detector.detect_events(text)
print(f"Detected {len(events)} events")
for event in events[:3]:
print(f" Event: {event.event_type} - {event.text[:50]}")
4步骤 2:共指消解
消解文本中的共指。
# 步骤 2:共指消解——将指向同一实体的不同表述归并
coreference_resolver = CoreferenceResolver()
coreferences = coreference_resolver.resolve(text)
print(f"Resolved {len(coreferences)} coreference chains")
5步骤 3:三元组抽取
抽取 RDF 三元组。
# 步骤 3:抽取 RDF 三元组(主语-谓词-宾语)
triplet_extractor = TripletExtractor()
triplets = triplet_extractor.extract_triplets(text)
print(f"Extracted {len(triplets)} triplets")
for triplet in triplets[:3]:
print(f" ({triplet.get('subject', '')}, {triplet.get('predicate', '')}, {triplet.get('object', '')})")
6步骤 4:语义分析
执行语义分析。
# 步骤 4:语义分析——标注句子中的语义角色
semantic_analyzer = SemanticAnalyzer()
semantic_roles = semantic_analyzer.analyze_semantic_roles(text)
print(f"Analyzed semantic roles: {len(semantic_roles)}")
7步骤 5:语义网络抽取
抽取语义网络。
# 步骤 5:抽取语义网络(节点与边)
semantic_network_extractor = SemanticNetworkExtractor()
semantic_network = semantic_network_extractor.extract_network(text)
print(f"Extracted semantic network with {len(semantic_network.get('nodes', []))} nodes")
print(f"Edges: {len(semantic_network.get('edges', []))}")
8步骤 6:LLM 增强
使用 LLM 增强抽取结果。
# 步骤 6:使用 LLM 增强抽取结果
llm_enhancer = LLMEnhancer()
enhanced_extractions = llm_enhancer.enhance_extractions(events, text)
print(f"Enhanced {len(enhanced_extractions)} extractions")
9步骤 7:抽取验证
验证抽取结果。
# 步骤 7:验证抽取结果并输出置信度
extraction_validator = ExtractionValidator()
validation_result = extraction_validator.validate(events, text)
print(f"Extraction validation:")
print(f" Valid: {validation_result.valid}")
print(f" Confidence: {validation_result.confidence:.3f}")
10小结
你已经学习了高级抽取能力:
- EventDetector:事件检测与分类
- CoreferenceResolver:共指消解
- TripletExtractor:RDF 三元组抽取
- SemanticAnalyzer:语义分析与角色标注
- SemanticNetworkExtractor:语义网络抽取
- LLMEnhancer:基于 LLM 的抽取增强
- ExtractionValidator:抽取验证