当前位置: 首页 > article >正文

【论文复现】DAE:《Annotating and Modeling Fine-grained Factuality in Summarization》

以下是复现论文《 Annotating and Modeling Fine-grained Factuality in Summarization》(NAACL 2021)代码https://github.com/tagoyal/factuality-datasets的流程记录:

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

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

  3. 服务器上首先升级pip(因为python3.6版本得到的pip太旧,下载不了requirements.txt中的某些库),再安裝本项目需要的库。

    pip install --upgrade pip
    pip install -r requirements.txt
    
  4. 下载模型文件。在作者提供的https://drive.google.com/drive/folders/1kcRCU-UlIqwDIGsaRQlRsCcHY4Mc-m3L中factuality_models_datasets/factuality_models路径下下载DAE_xsum_human_best_ckpt.zip,在项目根目录下创建目录models/,将该zip文件解压后放至models下。

  5. 下载本项目所依赖的StanfordCoreNLP本地文件——stanford-corenlp-full-2018-02-27,解压并将整个目录放至服务器/home/{your_username}/目录下。

  6. 激活StanfordCoreNLP至服务器端口9000上。

    cd ~/stanford-corenlp-full-2015-12-09
    java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000
    

    一般情况下让StanfordCoreNLP对象服务监听在服务器的9000端口,以供后续其它代码调用,应该没啥问题。

    但是我的服务器不知道出于什么原因,采用这种方式,就一定会报错,一直检测不到我有挂载该服务于9000端口。因此我这里使用了另一种方式加载StanfordCoreNLP。

  7. (6支).修改主程序evaluate_generated_outputs.py中加载StanfordCoreNLP的代码:

    # 原来的代码是采用pycorenlp的方法以直接访问本机9000端口的方式,获取nlp对象,从而调用后续的服务
    from pycorenlp import StanfordCoreNLP
    
    nlp = StanfordCoreNLP('http://localhost:9000')
    

    现作出如下修改:首先安装相同版本的stanfordcorenlp库。

    pip install stanfordcorenlp==3.9.1
    

    而后在对应位置将代码改为

    # 现在是直接从代码中先将本地存储的StanfordCoreNLP服务挂载在9000端口上(不用自己先专门开启一个终端执行java -mx4g -cp)
    # 然后再返回nlp对象,从而调用后续的服务
    from stanfordcorenlp import StanfordCoreNLP
    
    nlp = StanfordCoreNLP('/home/zkyao/stanford-corenlp-full-2018-02-27')
    
  8. 修改代码中的bug。不知道作者原先是什么原因没有发现这里的问题(按理说是一定会报错的)。打开train_utils.py,找到其中的下面两个部分:

    parse = nlp.annotate(line, properties={'annotators': 'tokenize,ssplit,pos,depparse', 'outputFormat': 'json', 'ssplit.isOneSentence': True})
    
    tokenized_json = nlp.annotate(input_text, properties={'annotators': 'tokenize', 'outputFormat': 'json', 'ssplit.isOneSentence': True})
    

    各自在其後加上:

    import json  # 记得要导入json包先
    parse = json.loads(parse)
    
    tokenized_json = json.loads(tokenized_json)
    

    原因:nlpStanfordCoreNLP的对象)的annotate方法,返回的是字符串(这个字符串的内容是一个字典),因此需要先把字符串处理成字典,才能进行后面的字典调用。

  9. 运行程序!

    python evaluate_generated_outputs.py \
            --model_type electra_dae \
            --model_dir models/DAE_xsum_human_best_ckpt  \
            --input_file sample_test.txt
    

http://www.kler.cn/a/134323.html

相关文章:

  • OpenGL ES 共享上下文实现多线程渲染
  • python魔术方法的学习
  • 【OceanBase 诊断调优】—— ocp上针对OB租户CPU消耗计算逻辑
  • Electron 项目启动外部可执行文件的几种方式
  • C++,STL 054(24.11.13)
  • Scala入门基础(17.1)Set集习题
  • 云原生专栏丨基于服务网格的企业级灰度发布技术
  • Go语言常用命令详解(二)
  • 【手写数据库toadb】数据库planner的整体架构,以及逻辑查询树的设计与实现流程
  • 深度学习损失函数
  • 微信小程序手写table表格
  • DevToys:开发者的多功能瑞士军刀,让编程更高效!
  • python基础 | 类与继承
  • 小迪安全笔记(2)——web应用架构搭建漏洞HTTP数据包代理服务器
  • hive sql多表练习
  • 【原创】WeChat Server搭建
  • 【开源】基于Vue和SpringBoot的教学过程管理系统
  • 【C++】【Opencv】霍夫直线检测即cv::HoughLinesP()函数详解和示例
  • 深度学习:到底怎么理解embedding
  • 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
  • 控制您的音乐、视频等媒体内容
  • 精通Nginx(15)-支持CORS
  • 基于单片机音乐弹奏播放DS1302万年历显示及源程序
  • 论文速览 Arxiv 2023 | DMV3D: 单阶段3D生成方法
  • 音视频技术在手机上的应用与挑战
  • GPT-4要点内容记录