[论文阅读笔记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代码运行记录 的相关文章

  • 如果两点之间的距离低于某个阈值,则从列表中删除点

    我有一个点列表 只有当它们之间的距离大于某个阈值时 我才想保留列表中的点 因此 从第一个点开始 如果第一个点和第二个点之间的距离小于阈值 那么我将删除第二个点 然后计算第一个点和第三个点之间的距离 如果该距离小于阈值 则比较第一点和第四点
  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我

随机推荐

  • 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 来就行