xiongma / transformer-pointer-generator

A Abstractive Summarization Implementation with Transformer and Pointer-generator
MIT License
395 stars 79 forks source link

some questions about training in English dataset.(一些关于训练英文数据集的问题) #43

Closed shengqiangzhang closed 3 years ago

shengqiangzhang commented 3 years ago

@xiongma 你好,我将你的代码中关于数据的预处理部分,改成适应英文数据集输入的,更改的部分如下:

  1. 对所有list(sent1)list(sent1)操作分别改成sent1.split(" "), sent2.split(" ")。这里是为了适应英文分词,以空格为区分,并且输入粒度是word级别。
  2. 更改max1max2的大小,这里我根据我的数据集设定max1400max250
  3. rouge = RougeCalculator(stopwords=True, lang="zh")改成rouge = RougeCalculator(stopwords=True, lang="en")

以上是我预处理更改的部分,并且查看了输出的token,确实是以英文word为划分的。 模型部分我没有任何更改。

我的问题是:

  1. train中的loss正常下降,但是eval过程中,rouge_L在两个epoch过后就不再上升,且rouge_L分数(15.03)相比于我跑其他的baseline(seq2seq的rouge_L分数为28.53)至少少了10个百分点。且在pred过程中,生成的句子质量也是非常差的(生成的词有非常多的和非常多重复的token)
  2. 请问我将预处理部分改成适应英文的(以空格划分,输入为word级别)后,需要更改模型部分吗?我感觉是不需要动模型部分的。 参数部分除了max1max2,其余超参没做改动。
  3. 是否是beamsearchcopy机制这两部分需要改动呢,原因是train loss其实是正常下降的,但是eval和pred生成的句子质量非常差。

以下是相关截图:

  1. train loss(train loss从6.5降到1.7,并且会继续下降,由于时间关系我只截了下降到1.7的部分) image

  2. pred生成的句子(train loss为1.7时所保存的模型,第一行为预测的句子,第二行为参考句子) image

我目前正在看你的代码中关于beamsearchcopy机制这两部分,打算先将copy部分去掉,看看能不能回归到正常seq2seq模型的效果。

请问你觉得大概是什么原因导致了以上情况呢?

shengqiangzhang commented 3 years ago

我使用了https://github.com/lipiji/TranSummar的代码,目前效果正常。