Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

咨询问题 #9

Open
Eric-Chen-007 opened this issue Jul 12, 2023 · 6 comments
Open

咨询问题 #9

Eric-Chen-007 opened this issue Jul 12, 2023 · 6 comments

Comments

@Eric-Chen-007
Copy link

document_bert_architectures.py
class DocumentBertSentenceChunkAttentionLSTM
def forward(...)

bert_output 的size = (batch_size, max_seq_len, num_hiddens),其中有些数据未达到max_seq_len, 会是0,
[
[[x,x,...x],[x,x,...,x]...,[x,x,...,x]], --- 达到max_seq_len的数据,
[[x,x,...x],[x,x,...,x]...,[0,0,...,0]], ----未达到max_seq_len的数据,
]

但经过LSTM之后,相应部分值为非0,
后续这部分非0值还参与了之后的attention score,这部分是不是有问题?不知道我理解的对不对。

@Eric-Chen-007
Copy link
Author

Eric-Chen-007 commented Jul 12, 2023

如果我理解的没问题,可以设计一个list,记录之前每个数据分成chunk时的数目,传入forward函数作为参数
chunk_length = [......] # size = document_batch.shape[0]

假设已经有了长度记录的chunk_length,修改代码如下
bert_output = torch.zeros(size=(document_batch.shape[0],
min(document_batch.shape[1],
bert_batch_size),
self.bert.config.hidden_size), dtype=torch.float, device=device)
##添加代码
mask_tmp = torch.zeros(size=(document_batch.shape[0],
min(document_batch.shape[1],
bert_batch_size),
1), dtype=torch.bool, device=device)

for doc_id in range(document_batch.shape[0]):
bert_output[doc_id][:bert_batch_size] = self.dropout(self.bert(document_batch[doc_id][:bert_batch_size,0],
token_type_ids=document_batch[doc_id][:bert_batch_size, 1],
attention_mask=document_batch[doc_id][:bert_batch_size, 2])[1])
##添加代码
mask_tmp[doc_id][chunk_length[doc_id]:] = 1

....
....
##添加代码
attention_u = torch.where(mask_tmp, float('-inf'), attention_u) # (batch_size, seq_len, 1)
attention_score = F.softmax(attention_u, dim=1) # (batch_size, seq_len, 1)
....
....

@Eric-Chen-007
Copy link
Author

Eric-Chen-007 commented Jul 13, 2023

I tried your this method in oral english essay scoring. But it didn't work (get a better result).
(我在我这边的口语作文评分任务上尝试了下您的算法,但是它不work(没有提升性能))
I have some questions:
(我有一些问题:)

  1. Adding segment scale didn't help much in my essay scoring (almost 0 improve), although it's a different problem but very similar. You mentioned in your paper, this method helps a lot, QWK 0.768->0.782.
    The DOC CLS already include lots of information, so segment and then using LSTM and attention will get more information? I doubt that.
    (添加不同尺度分段的方法对口语作文评分几乎没帮助,虽然它是一个不同的任务,但很类似。你的论文中提到,该方法提升很大,QWK 0.768->0.782。
    整体DOC的CLS已经能包含比较多的信息,分段并用LSTM及attention,能学到更多的信息?我表示怀疑。)

  2. Different scale factor, for example "90_30_130_10", they share same attention score vector (especially "u_omega"), does it make sense?
    (不同的分段因子90/30/130/10,它们公用同一个attention的向量(特别是u_omega),它有道理吗?)

  3. You seperate BERT for DOC/Token and Segment scale. But i find using just one BERT may get better result. So why using seperate BERT?
    (对于DOC/Token 和分段,你使用了不同的BERT模型,但我发现,在我的任务上,使用同一个BERT能获得更好的结果。所以为什么要分开?出发点是什么?)

  4. You fix previous 11 layers of BERT, and tune the 12th layer. But i find tuing all 12 layers will get better result.
    (你固定了前11层的BERT,只tune最后一层,但我发现所有的12层都tune,能获得更好的结果。)

There are other questions, like Adam vs AdamW, and the 0 problems about LSTM and attetion i mentioned in this slot.

Maybe there is someghing wrong with my implementation, but these code is limited and most using your inference code, I will try to figure out if there is anything wrong with my code. Hope for your reply. Thanks.

@iamhere1
Copy link

iamhere1 commented Jul 17, 2023

document_bert_architectures.py class DocumentBertSentenceChunkAttentionLSTM def forward(...)

bert_output 的size = (batch_size, max_seq_len, num_hiddens),其中有些数据未达到max_seq_len, 会是0, [ [[x,x,...x],[x,x,...,x]...,[x,x,...,x]], --- 达到max_seq_len的数据, [[x,x,...x],[x,x,...,x]...,[0,0,...,0]], ----未达到max_seq_len的数据, ]

但经过LSTM之后,相应部分值为非0, 后续这部分非0值还参与了之后的attention score,这部分是不是有问题?不知道我理解的对不对。

你说的事实是可能发生的,有些较短的文章,最后确实会pad 0。 但我们认为模型在训练的过程中,应该能学习到这样的模式,在多份数据上实验,最后效果都是有较明显提升的。
如果感兴趣,你也可以做下实验,来验证你的结论,在计算attetion的时候,把这些片段对应的attention值设置为0,对比下效果

@iamhere1
Copy link

iamhere1 commented Jul 17, 2023

I tried your this method in oral english essay scoring. But it didn't work (get a better result). (我在我这边的口语作文评分任务上尝试了下您的算法,但是它不work(没有提升性能)) I have some questions: (我有一些问题:)

  1. Adding segment scale didn't help much in my essay scoring (almost 0 improve), although it's a different problem but very similar. You mentioned in your paper, this method helps a lot, QWK 0.768->0.782.
    The DOC CLS already include lots of information, so segment and then using LSTM and attention will get more information? I doubt that.
    (添加不同尺度分段的方法对口语作文评分几乎没帮助,虽然它是一个不同的任务,但很类似。你的论文中提到,该方法提升很大,QWK 0.768->0.782。
    整体DOC的CLS已经能包含比较多的信息,分段并用LSTM及attention,能学到更多的信息?我表示怀疑。)
  2. Different scale factor, for example "90_30_130_10", they share same attention score vector (especially "u_omega"), does it make sense?
    (不同的分段因子90/30/130/10,它们公用同一个attention的向量(特别是u_omega),它有道理吗?)
  3. You seperate BERT for DOC/Token and Segment scale. But i find using just one BERT may get better result. So why using seperate BERT?
    (对于DOC/Token 和分段,你使用了不同的BERT模型,但我发现,在我的任务上,使用同一个BERT能获得更好的结果。所以为什么要分开?出发点是什么?)
  4. You fix previous 11 layers of BERT, and tune the 12th layer. But i find tuing all 12 layers will get better result.
    (你固定了前11层的BERT,只tune最后一层,但我发现所有的12层都tune,能获得更好的结果。)

There are other questions, like Adam vs AdamW, and the 0 problems about LSTM and attetion i mentioned in this slot.

Maybe there is someghing wrong with my implementation, but these code is limited and most using your inference code, I will try to figure out if there is anything wrong with my code. Hope for your reply. Thanks.

  1. 我们在至少4个数据集上做过实验,效果比较稳定地好于不使用多尺度片段特征的情况。如果您在口语方向没有效果,建议先使用写作数据(比如ASAP)验证代码是否OK,如果写作文本效果OK,但口语效果不好,可以考虑下是否受到ASR准确率,语气词等影响,可能需要预处理下数据?
  2. 没太理解这点,公用一个attention向量具体是指论文的哪一部分?我来看看
  3. 这个结论挺有意思,我们在这方面没做太多验证和考量。用2个模型,复杂度更高些,1个模型复杂度更低一些,或许数据较少情况下,效果会更好些。
  4. 这个也挺有意思,估计和3有点类似,受数据量、任务难度等影响,为取得更好的效果,值得做更多的验证。

@Eric-Chen-007
Copy link
Author

Eric-Chen-007 commented Jul 18, 2023

I tried your this method in oral english essay scoring. But it didn't work (get a better result). (我在我这边的口语作文评分任务上尝试了下您的算法,但是它不work(没有提升性能)) I have some questions: (我有一些问题:)

  1. Adding segment scale didn't help much in my essay scoring (almost 0 improve), although it's a different problem but very similar. You mentioned in your paper, this method helps a lot, QWK 0.768->0.782.
    The DOC CLS already include lots of information, so segment and then using LSTM and attention will get more information? I doubt that.
    (添加不同尺度分段的方法对口语作文评分几乎没帮助,虽然它是一个不同的任务,但很类似。你的论文中提到,该方法提升很大,QWK 0.768->0.782。
    整体DOC的CLS已经能包含比较多的信息,分段并用LSTM及attention,能学到更多的信息?我表示怀疑。)
  2. Different scale factor, for example "90_30_130_10", they share same attention score vector (especially "u_omega"), does it make sense?
    (不同的分段因子90/30/130/10,它们公用同一个attention的向量(特别是u_omega),它有道理吗?)
  3. You seperate BERT for DOC/Token and Segment scale. But i find using just one BERT may get better result. So why using seperate BERT?
    (对于DOC/Token 和分段,你使用了不同的BERT模型,但我发现,在我的任务上,使用同一个BERT能获得更好的结果。所以为什么要分开?出发点是什么?)
  4. You fix previous 11 layers of BERT, and tune the 12th layer. But i find tuing all 12 layers will get better result.
    (你固定了前11层的BERT,只tune最后一层,但我发现所有的12层都tune,能获得更好的结果。)

There are other questions, like Adam vs AdamW, and the 0 problems about LSTM and attetion i mentioned in this slot.
Maybe there is someghing wrong with my implementation, but these code is limited and most using your inference code, I will try to figure out if there is anything wrong with my code. Hope for your reply. Thanks.

  1. 我们在至少4个数据集上做过实验,效果比较稳定地好于不使用多尺度片段特征的情况。如果您在口语方向没有效果,建议先使用写作数据(比如ASAP)验证代码是否OK,如果写作文本效果OK,但口语效果不好,可以考虑下是否受到ASR准确率,语气词等影响,可能需要预处理下数据?

我这边验证代码是否OK,主要通过只使用片段特征进行验证的,如只使用30片段特征,它和只使用篇章DOC的CLS效果基本相当,所以能大致能确定片段特征代码应该没问题。
看到这个结果也使我觉得,多尺度片段特征+DOC CLS+TOKEN CLS,如果有效,感觉更像一个多模型ensemble的结果。另外,篇章DOC的CLS直觉上应该较优,因为预训练模型BERT训练就是这么训练的,在此基础上再设计分段特征,感觉不能保证获得更优的架构,或者是提供什么互补的信息。

后续我这边也去通过写作数据,验证下代码是否OK。

  1. 没太理解这点,公用一个attention向量具体是指论文的哪一部分?我来看看

主要指不同的片段,使用不同的u_omega (query向量),比如片段30,使用一个u_omega_30, 换一个片段90,使用不同的u_omega,如u_omega_90。

  1. 这个结论挺有意思,我们在这方面没做太多验证和考量。用2个模型,复杂度更高些,1个模型复杂度更低一些,或许数据较少情况下,效果会更好些。
  2. 这个也挺有意思,估计和3有点类似,受数据量、任务难度等影响,为取得更好的效果,值得做更多的验证。

感谢答复指导,谢谢。

@iamhere1
Copy link

iamhere1 commented Jul 22, 2023

“我这边验证代码是否OK,主要通过只使用片段特征进行验证的,如只使用30片段特征,它和只使用篇章DOC的CLS效果基本相当,所以能大致能确定片段特征代码应该没问题。”

建议优先在写作数据上验证下:在DOC 特征、TOKEN特征基础上,继续加入单尺度片段特征是否有提升。
我们尝试过在DOC特征,TOKEN特征基础上,加入单尺度片段特征,效果基本会有些提升。

“看到这个结果也使我觉得,多尺度片段特征+DOC CLS+TOKEN CLS,如果有效,感觉更像一个多模型ensemble的结果。另外,篇章DOC的CLS直觉上应该较优,因为预训练模型BERT训练就是这么训练的,在此基础上再设计分段特征,感觉不能保证获得更优的架构,或者是提供什么互补的信息。”

可理解为一种特殊的ensemble(多个尺度去分析文章,并综合利用多个尺度的信息)。 DOC CLS 和 TOKEN特征都是比较有用的,多尺度片段特征其实就是一些mid level的特征,对最后的结果也起到还不错的作用,它虽然和BERT预训练数据不一定完全匹配,但也利用了其语言模型建模的能力。在paper中我们做了关于尺度方面的一些实验。

"主要指不同的片段,使用不同的u_omega (query向量),比如片段30,使用一个u_omega_30, 换一个片段90,使用不同的u_omega,如u_omega_90。"

这里和你其他2点疑问(3和4)类似,我们使用相同的参数建模片段特征,主要也考虑到复杂度的问题。
分开可以建模的更加精确,但也意味着提升了模型的复杂度,需要更多的训练数据。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants