【论文复现】QuestEval:《QuestEval: Summarization Asks for Fact-based Evaluation》

以下是复现论文《QuestEval: Summarization Asks for Fact-based Evaluation》(NAACL 2021)代码https://github.com/ThomasScialom/QuestEval/的流程记录:

  1. 在服务器上conda创建虚拟环境questeval(python版本于readme保持一致,為3.9)

    bash 复制代码
    conda create -n questeval python=3.9
  2. git clone下载项目代码于本地,用pycharm打开并远程连接到服务器的该环境中。

  3. 服务器上进入该项目目录,安裝本项目需要的库。

    bash 复制代码
    pip install -e .
  4. 这个项目作者开源的其实是功能 ,真正的主程序要自己创建,不过作者封装得很漂亮,只需要在项目根目录下新建一个python文件,如run.py,然后拷贝以下内容:(大体作者都在README.md中给出了,这里我是想用QuestEval模型去做摘要事实一致性检测

    python 复制代码
    from questeval.questeval_metric import QuestEval
    questeval = QuestEval(no_cuda=False, task="summarization", do_weighter=True)
    
    source_1 = "Since 2000, the recipient of the Kate Greenaway medal has also been presented with the Colin Mears award to the value of 35000."
    prediction_1 = "Since 2000, the winner of the Kate Greenaway medal has also been given to the Colin Mears award of the Kate Greenaway medal."
    references_1 = [
        "Since 2000, the recipient of the Kate Greenaway Medal will also receive the Colin Mears Awad which worth 5000 pounds",
        "Since 2000, the recipient of the Kate Greenaway Medal has also been given the Colin Mears Award."
    ]
    
    source_2 = "He is also a member of another Jungiery boyband 183 Club."
    prediction_2 = "He also has another Jungiery Boyband 183 club."
    references_2 = [
        "He's also a member of another Jungiery boyband, 183 Club.",
        "He belonged to the Jungiery boyband 183 Club."
    ]
    
    
    if __name__ == "__main__":
        score = questeval.corpus_questeval(
            hypothesis=[prediction_1, prediction_2],
            sources=[source_1, source_2],
            list_references=[references_1, references_2]
        )
    
        print(score)
  5. 如果服务器能够顺利连接huggingface,那么直接执行就跑通了,作者的代码没有任何bug。然而对于服务器访问不了huggingface的朋友们(比如我qwq),那么就需要把++所有涉及远程加载模型的代码修改成本地加载的逻辑++。

    1. 先在huggingface把需要的模型给传进服务器里。我个人把下载好的模型文件会放在/dev_data_2/zkyao/pretrain_model/下。这里需要下载的模型有:t5-qa_squad2neg-en,t5-qg_squad1-en,t5-weighter_cnndm-en,bert-base-multilingual-cased

    2. 首先修改questeval/questeval_metric.py。作者把加载QuestEval框架 所涉及到的模型的逻辑全部写在了_load_all_models()方法中。修改这几个部分:

      python 复制代码
      # models['hyp']['QA'] = f'{HF_ORGANIZATION}/t5-qa_squad2neg-en'
      models['hyp']['QA'] = "/dev_data_2/zkyao/pretrain_model/t5-qa_squad2neg-en"
      # models['hyp']['QG'] = f'{HF_ORGANIZATION}/t5-qg_squad1-en'
      models['hyp']['QG'] = "/dev_data_2/zkyao/pretrain_model/t5-qg_squad1-en"
      python 复制代码
      # models['Weighter'] = self.get_model(model_name=f'{HF_ORGANIZATION}/t5-weighter_cnndm-en')
      models['Weighter'] = self.get_model(model_name="/dev_data_2/zkyao/pretrain_model/t5-weighter_cnndm-en")
    3. 接下來就是特别隐蔽的库源码了,因为huggingface提供的metrics组件内部实现逻辑,是要加载模型的。然而正不巧的是,这里用到的metric------bert_score,源码的开发者显然不会考虑到服务器访问不了huggingface的我们。

      bert_score库的scorer.py代码的这部分,将模型类型和模型路径同时用self.model_type属性指代,导致把逻辑写死了必须远程加载模型。

      为了能本地加载模型,不得不这样了。打开/{path_to_your_env}/lib/python3.9/site-packages/bert_score/scorer.py,作出如下修改:

  6. 接下来整个测试程序就能顺利执行了!

相关推荐
gravity_w1 天前
Hugging Face使用指南
人工智能·经验分享·笔记·深度学习·语言模型·nlp
未来之窗软件服务5 天前
幽冥大陆(九十三 ) PHP分词服务源码 —东方仙盟练气期
人工智能·nlp·仙盟创梦ide·东方仙盟·分词服务
云蝠呼叫大模型联络中心6 天前
BATH不再一家独大?深入测评2026大模型呼叫市场新秩序
人工智能·深度学习·神经网络·自然语言处理·nlp·语音识别·信息与通信
natide7 天前
图结构差异-1-邻域重叠率(Neighborhood Overlap)
人工智能·深度学习·机器学习·自然语言处理·nlp
技术狂人1689 天前
(三)模型微调技术 20 题!LoRA/Q-LoRA/PPO/DPO 落地细节,面试说清微调全流程(实战篇)
人工智能·深度学习·算法·nlp
橘色的狸花猫10 天前
简历与岗位要求相似度分析系统
java·nlp
小马过河R10 天前
混元世界模型1.5架构原理初探
人工智能·语言模型·架构·nlp
玄同76511 天前
Python 异常捕获与处理:从基础语法到工程化实践的万字深度指南
开发语言·人工智能·python·自然语言处理·正则表达式·nlp·知识图谱
庚昀◟12 天前
用AI来“造AI”!Nexent部署本地智能体的沉浸式体验
人工智能·ai·nlp·持续部署
玄同76512 天前
Python 正则表达式:LLM 噪声语料的精准清洗
人工智能·python·自然语言处理·正则表达式·nlp·知识图谱·rag