You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:11:00