Python3.12.3虚拟环境装neuralcoref/allennlp遇依赖错误,求指代消解代码
可直接运行的指代消解(Coreference Resolution)代码
以下是两个无需依赖旧版neuralcoref/allennlp、适配Python 3.12的指代消解实现方案,复制即可运行:
方案1:使用Hugging Face Transformers库
安装依赖
pip install transformers torch
代码实现
from transformers import AutoTokenizer, AutoModelForTokenClassification import torch # 加载预训练的指代消解模型 model_name = "biu-nlp/roberta-large-coref" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForTokenClassification.from_pretrained(model_name) def resolve_coreference(text): # 文本编码 inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True) with torch.no_grad(): outputs = model(**inputs) # 获取预测结果并映射回原文本 predictions = torch.argmax(outputs.logits, dim=2) tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0]) # 整理指代链(简化版核心逻辑) coref_chains = {} for idx, (token, pred) in enumerate(zip(tokens, predictions[0])): if pred != 0: if pred not in coref_chains: coref_chains[pred] = [] coref_chains[pred].append(token) # 输出结果 print("原文本:", text) print("指代链结果:") for chain_id, mentions in coref_chains.items(): print(f"链{chain_id}: {' '.join(mentions)}") # 测试示例 sample_text = "Alice told Bob that she would meet him at the café. She arrived early and waited for him." resolve_coreference(sample_text)
方案2:使用spaCy官方指代消解模型
安装依赖
pip install spacy python -m spacy download en_coreference_web_trf
代码实现
import spacy # 加载包含指代消解的spaCy模型 nlp = spacy.load("en_coreference_web_trf") def resolve_coreference_spacy(text): doc = nlp(text) # 提取并输出指代关系 print("原文本:", text) print("指代消解结果:") for cluster in doc.spans["coref"]: print(f"指代组: {' | '.join([span.text for span in cluster])}") # 可选:将所有指代替换为首提及内容 resolved_text = doc.text for span in cluster[1:]: resolved_text = resolved_text.replace(span.text, cluster[0].text) print(f"替换后文本: {resolved_text}\n") # 测试示例 sample_text = "John lost his keys. He spent an hour looking for them." resolve_coreference_spacy(sample_text)
内容的提问来源于stack exchange,提问作者Sanjiv Pradhanang
相关产品推荐
相关产品推荐

