[论文阅读笔记36]CASREL代码运行记录

2023-11-17

《[论文阅读笔记33]CASREL:基于标注与bert的实体与关系抽取》https://blog.csdn.net/ld326/article/details/116465089
总的来说,文档都还是写得很好的,按文档(readme.md)来就行,不过有点小小不同就是文件的命名,作一个补充记录。

0. 关于代码结构—值得学习,十分清晰

1. 关于环境

按说明的关键的几个句进行,可是依赖的包还是版本不对。这个是requirement.txt, 不过还是有些警告,先不处理警告:

absl-py==0.12.0
astor==0.8.1
blessings==1.7
cached-property==1.5.2
certifi==2020.12.5
gast==0.4.0
gpustat==0.4.1
grpcio==1.37.1
h5py==2.10.0
importlib-metadata==4.0.1
Keras==2.2.4
Keras-Applications==1.0.8
keras-bert==0.80.0
keras-embed-sim==0.8.0
keras-layer-normalization==0.14.0
keras-multi-head==0.27.0
keras-pos-embd==0.11.0
keras-position-wise-feed-forward==0.6.0
Keras-Preprocessing==1.1.2
keras-self-attention==0.46.0
keras-transformer==0.30.0
Markdown==3.3.4
mock==4.0.3
numpy==1.20.2
nvidia-ml-py3==7.352.0
protobuf==3.16.0
psutil==5.8.0
PyYAML==5.4.1
scipy==1.6.3
six==1.16.0
tensorboard==1.13.1
tensorflow-estimator==1.13.0
tensorflow-gpu==1.13.1
termcolor==1.1.0
tqdm==4.60.0
typing-extensions==3.10.0.0
Werkzeug==1.0.1
zipp==3.4.1
2. 关于数据

google那里,下载不是很方便,上传了一份(NYT)到csdn:https://download.csdn.net/download/ld326/18544111

3. 下载Bert

4. 数据预测处理

第一步,把下载下来的内容,把数字转成字符串;
这里把代码修改一下,想要做的工作是,把train,dev,test都要处理的:

for file_type in ['train', 'valid', 'test']:
    file_name = f'{file_type}.json'
    output = f'new_{file_type}.json'
    output_normal = f'new_{file_type}_normal.json'
    output_epo = f'new_{file_type}_epo.json'
    output_seo = f'new_{file_type}_seo.json'
    with open('relations2id.json', 'r') as f1, open('words2id.json', 'r') as f2:
        rel2id = json.load(f1)
        words2id = json.load(f2)
    rel_dict = {j: i for i, j in rel2id.items()}
    word_dict = {j: i for i, j in words2id.items()}
    load_data(file_name, word_dict, rel_dict, output, output_normal, output_epo, output_seo)

另外,build文件,修改一下文件路径,修改为对应生成的新文件就行;
还有两个test文件夹,修改一下文件路径,修改为对应生成的新文件;

5. 训练
python run.py --train=True --dataset=NYT

默认的参数为:

{
    "bert_model": "cased_L-12_H-768_A-12",
    "max_len": 100,
    "learning_rate": 1e-5,
    "batch_size": 6,
    "epoch_num": 100,
}

模型结构:
在这里插入图片描述

6. 预测评估
python run.py --dataset=NYT

在这里插入图片描述

结果与论文报告的基本相符的。
另外,抽取的结果也是可以看到:

"text": "But that spasm of irritation by a master intimidator was minor compared with what Bobby Fischer , the erratic former world chess champion , dished out in March at a news conference in Reykjavik , Iceland .",
"triple_list_gold": [
    {
        "subject": "Fischer",
        "relation": "/people/person/nationality",
        "object": "Iceland"
    },
    {
        "subject": "Fischer",
        "relation": "/people/deceased_person/place_of_death",
        "object": "Reykjavik"
    },
    {
        "subject": "Iceland",
        "relation": "/location/location/contains",
        "object": "Reykjavik"
    },
    {
        "subject": "Iceland",
        "relation": "/location/country/capital",
        "object": "Reykjavik"
    }
],
"triple_list_pred": [
    {
        "subject": "Fischer",
        "relation": "/people/person/nationality",
        "object": "Iceland"
    },
    {
        "subject": "Iceland",
        "relation": "/location/location/contains",
        "object": "Reykjavik"
    },
    {
        "subject": "Iceland",
        "relation": "/location/country/capital",
        "object": "Reykjavik"
    }
],
"new": [],
"lack": [
    {
        "subject": "Fischer",
        "relation": "/people/deceased_person/place_of_death",
        "object": "Reykjavik"
    }
]
7. 关于代码可能会出现的问题

代码运行过程问题记录:

Traceback (most recent call last):
  File "/opt/data/private/code/CasRel/run.py", line 40, in <module>
    subject_model, object_model, hbt_model = E2EModel(bert_config_path, bert_checkpoint_path, LR, num_rels)
  File "/opt/data/private/code/CasRel/model.py", line 15, in E2EModel
    bert_model = load_trained_model_from_checkpoint(bert_config_path, bert_checkpoint_path, seq_len=None)
  File "/opt/data/private/pyenvs/cas_rel_env/lib/python3.7/site-packages/keras_bert/loader.py", line 169, in load_trained_model_from_checkpoint
    **kwargs)
  File "/opt/data/private/pyenvs/cas_rel_env/lib/python3.7/site-packages/keras_bert/loader.py", line 58, in build_model_from_config
    **kwargs)
  File "/opt/data/private/pyenvs/cas_rel_env/lib/python3.7/site-packages/keras_bert/bert.py", line 126, in get_model
    adapter_activation=gelu,
TypeError: get_encoders() got an unexpected keyword argument 'use_adapter'

https://github.com/weizhepei/CasRel/issues/54

8. 关于是否支持中文

修改两个地方:第一处是pre-trained BERT; 第二处triple extraction 部分;

Hi, @fresh382227905. To make the model support Chinese, you may need
to change the pre-trained BERT and the triple extraction part (due to
the different tokenization between English and Chinese) with minor
revisions. You can also refer to @longlongman’s great work : )

参考:https://github.com/weizhepei/CasRel/issues/23
有这样的说法:

同意 @Phoeby2618
的说法,我试了(1)把中文分割成带空格的类似英文的格式,用代码里面的HBTokenizer(2)中文用原文,tokenizer用原生的Tokenier加上[unused1],metric函数中把’
‘.join(sub.split(’[unused1]’))也改过来了。(3)中文用原文,tokenizer用原生的Tokenier不加[unused1],metric同上。
前2者结果差不多。最后一种情况,pred的关系实体总是为0。应该是[unused1]不能随便去掉,暂时没搞清楚咋回事。

参考:https://github.com/weizhepei/CasRel/issues/50

另外还有一个项目直接是中文的:
https://github.com/longlongman/CasRel-pytorch-reimplement
对于项目要进行分词,采用DEMO例子[CMED数据集的结果]运行两者结果为:
CasRel-pytorch:

correct_num: 4927, predict_num: 8899, gold_num: 10610
epoch  39, eval time: 49.97s, f1: 0.51, precision: 0.55, recall: 0.46
saving the model, epoch:  39, best f1: 0.51, precision: 0.55, recall: 0.46

CasRel:

correct_num:4863.0000000001
predict_num:8697.0000000001
gold_num:10475.0000000001
f1: 0.5073, precision: 0.5592, recall: 0.4642, best f1: 0.5093

两都运行的结果差不多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[论文阅读笔记36]CASREL代码运行记录 的相关文章

随机推荐

  • ubuntu1804安装python3.8+odoo14

    如题 博主废了不少劲 折腾了一个上午终于搞定了 本次采用环境是ubuntu1804系统的docker容器 并且容器内部已更换阿里源 编辑阿里源 vi etc apt sources list 然后粘贴下面内容 再保存 deb http mi
  • 打印图像模糊问题解决方法

    思路 核心 图像转换 1 修改图像dpi值 2 使用高质量的双三次插值法 3 指定高质量 C Code 如下
  • 期货交易的主要特征(期货交易特征五大特征)

    期货交易的特点有哪些 一 合约标准化 期货交易是通过买卖期货合约进行的 而期货合约是标准化的 期货合约标准化指的是除价格外 期货合约的所有条款都是预先由期货交易所规定好的 具有标准化的特点 二 交易集中化 期货交易必须在期货交易所内进行 期
  • NGINX代理导致 获取不到请求头中的token信息

    原因 NGINX对header有所限制 下划线 不支持 解决方式1 请求头参数不用带下划线参数 解决方式2 在nginx里的nginx conf配置文件中的http部分中添加如下配置 underscores in headers on 默认
  • 生信人的20个R语言习题

    生信人的20个R语言习题 题目原文 http www bio info trainee com 3409 html 参考答案 https www jianshu com p dd4e285665e1 https www jianshu co
  • 多变量处理的LASSO方法

    1 lasso方法 其中 因变量是Y 自变量是X 数据中的变量众多 但如何选择X 就使用了lasso lasso能够对变量进行筛选和对模型的复杂程度进行降低 这里的变量筛选是指不把所有的变量都放入模型中进行拟合 而是有选择的把变量放入模型从
  • Longest Common Substring

    给出两个字符串 找到最长公共子串 并返回其长度 注意事项 子串的字符应该连续的出现在原字符串中 这与子序列有所不同 Lintcode上的一道题目 非常经典 需要找到最长的连续公共子串的长度 因为有两个序列且前后顺序不可以打乱 所以为双序列问
  • ESP8266基础开发(一)---读DHT11温湿度传感器

    注 对于ESP8266开源技术感兴趣的可以加群 我们一起探索交流学习 群号 579932824 群名 ESP8266开源技术交流群 这篇文章的目的是展示如何将DHT11传感器连接到ESP8266并编写一个简单的程序来测量温度和湿度 我们假设
  • 【Git】保姆级教程:如何在 GitHub 上传大文件(≥100M)?(含自己的操作流程)

    文章目录 一 问题导读 二 自己的实际操作流程 2 1 准备工作 2 2 初始化仓库 2 3 安装git lfs 一个仓库里面执行一次就好了 2 4 跟踪一下你要上传 push 的文件或指定文件类型 2 5 添加 gitattributes
  • FPGA开发流程

    流程 设计定义 设计输入 分析和综合 功能仿真 modelsim altera 布局布线 时序仿真 modelsim altera 时序约束 IO分配以及配置文件的生成 配置 烧写FPGA 在线调试 设计定义 二选一多路器 两个输入IO a
  • Amazon SDE实习机会面试经验分享

    我通过大学申请了Amazon SDE实习 在线回合 有一个在线回合 其中包含技术性MCQ和2个编码问题 编码部分非常简单 面试过程中有7 8人入围 第一轮面对面访谈 这一回合持续了一个小时 首先 面试官要求自我介绍 后来有3个编码问题 对包
  • HTML img 强制刷新加载

    img刷新机制为url变化则刷新 当url不变时想要刷新可做如下处理 let url http pic27 nipic com 20130321 9678987 225139671149 2 jpg const time new Date
  • 浏览器默认行为(原生事件)、浏览器中网页渲染顺序

    一 浏览器的原生事件 1 浏览器中存在一些默认行为 比如 文本可复制 图片可 拖拽 这是伪拖拽 实际并没有移动 松开鼠标后 会弹出新的链接 右键会出现菜单 a标签单击会跳转等 2 为什么要阻止默认行为 如某些时候 我们需要写一个a标签 但是
  • docker的联合文件系统(UnionFS)

    docker最大的贡献就是定义了容器镜像的分层的存储格式 docker镜像技术的基础是联合文件系统 UnionFS 其文件系统是分层的 这样既可以充分利用共享层 又可以减少存储空间占用 联合挂载系统的工作原理 读 如果文件在upperdir
  • vue常用标签

    一 内容绑定 1 v text 会替换掉html的内容 eg p p 2 插值表达式占位内容 放在html中 eg p username p 3 v html 可将html内容渲染到页面 v text和 不支持 eg div div con
  • 用于通过声波捕获显示视觉,触觉和音频的全息显示(A volumetric display for visual, tactile and audio presentation using acous)

    Ryuji Hirayama Diego Martinez Plasencia Nobuyuki Masuda Sriram Subramanian 2019年1月31日接收 2019年8月15日收录 2019年11月13日网上公开 摘要
  • java token redis生成算法_java秒杀系列(1)- 秒杀方案总体思路

    前言 首先 要明确一点 高并发场景下系统的瓶颈出现在哪里 其实主要就是数据库 那么就要想办法为数据库做层层防护 减轻数据库的压力 一 简单图示 我用一个比较简单直观的图来表达大概的处理思路 二 生产环境中秒杀抢购的解决方案 1 前端 1 动
  • Qt自定义滑动条

    最近要用到滑动条 Qt自带的QSlider虽然能满足需求 但是操作起来有很多不舒服的地方 于是在它的基础上改了改 分享给大家使用 先放效果图 在QSlider的基础上 改变了样式 绘制了刻度 增加了取整功能 只需要微调就能适应各种需求 头文
  • JavaWeb12(实现基础分页&模糊查询的分页)

    目录 一 效果预览 编辑 二 实现基本分页 2 1 分页sql 每页3条 取第二页 由于伪列不能作用与大于符号也不能作用于between and 因此需要将伪列 gt 名列 2 2 万能公式 2 3 首页 上一页 下一页实现 前端代码 2
  • [论文阅读笔记36]CASREL代码运行记录

    论文阅读笔记33 CASREL 基于标注与bert的实体与关系抽取 https blog csdn net ld326 article details 116465089 总的来说 文档都还是写得很好的 按文档 readme md 来就行