syuoni / eznlp

Easy Natural Language Processing
Apache License 2.0
130 stars 21 forks source link

关于decoder的参数'--ck_decoder'设置问题 #40

Closed ldsheng1998 closed 8 months ago

ldsheng1998 commented 11 months ago

你好,我想请教您: '--ck_decoder'参数有四个不同的选择:['sequence_tagging', 'span_classification', 'boundary_selection', 'specific_span'], 我发现对这三个参数('--ck_decoder'、'--use_interm1'、'--use_interm2')进行不同的设置会产生不同的模型组合,我想请问这三个参数如何设置可以让模型分别成为 Baseline 和 Baseline+BS。我不懂'span_classification'、'specific_span'有什么区别。我目前在conll2003数据集下尝试。

'--bert_arch':'RoBERTa_base'、'--ck_decoder': 'specific_span'、'--use_interm1':True、'--use_interm2':False、 '--enc_arch':‘LSTM’。这些参数的组合是Baseline吗?

还有一个问题是,对于数据集conll2003,我将'--doc_level'参数设置为True,并进行了截断之后,数据变成了文档级别的,每条数据很长,我的显卡不支持我将batch_size设置为48,因为一个batch的数据太多了,然后我就减小了batch,请问对于conll2003数据集,得到您的论文中的相应的结果,此时的实验的batch_size是48吗? 抱歉问题有点多。

syuoni commented 11 months ago

你好,

感谢你对我们项目的关注。Boundary smoothing 的文档在这个链接:https://github.com/syuoni/eznlp/blob/master/docs/boundary-smoothing.md

'--ck_decoder'参数有四个不同的选择:['sequence_tagging', 'span_classification', 'boundary_selection', 'specific_span'], 我发现对这三个参数('--ck_decoder'、'--use_interm1'、'--use_interm2')进行不同的设置会产生不同的模型组合,我想请问这三个参数如何设置可以让模型分别成为 Baseline 和 Baseline+BS。

  • Baseline 需要设置:--ck_decoder boundary_selection --use_interm2
  • Baseline + BS 需要设置:--ck_decoder boundary_selection --use_interm2 --sb_epsilon 0.1
  • 其他参数请查看上述链接

我不懂'span_classification'、'specific_span'有什么区别

  • span_classification 实现的是 Eberts et al. (2020) 中实体识别的模型
  • specific_span 实现的是 Zhu et al. (2023) 的模型(这篇也是我们的文章,文档在https://github.com/syuoni/eznlp/blob/master/docs/deep-span.md)
  • 两者都跟 Boundary smoothing 那篇文章没直接联系

还有一个问题是,对于数据集conll2003,我将'--doc_level'参数设置为True,并进行了截断之后,数据变成了文档级别的,每条数据很长,我的显卡不支持我将batch_size设置为48,因为一个batch的数据太多了,然后我就减小了batch,请问对于conll2003数据集,得到您的论文中的相应的结果,此时的实验的batch_size是48吗?

  • 降低 batch_size 之后,你可以对应增大 num_grad_acc_steps 通过梯度累加来模拟更大的 batch( batch_sizenum_grad_acc_steps的乘积是实际的 batch),这样就可以避免 OOM
  • 根据我个人的实验经验,设置一个较小的 batch size 能得到略微更好的实验结果

References