[译] Understanding Incremental Decoding in fairseq

💡 原文中文,约3400字,阅读约需8分钟。
📝

内容提要

近来一直在使用fairseq做项目,因为其功能较多而源码也比较复杂。ankur6ue的一篇文章对fairseq中的增量解码操作做了详尽的介绍。增量解码使用增量状态的数据结构保存先前计算结果,用于后续的卷积计算。增量解码可以节省计算开销。集束搜索在每个步骤只考虑B个前缀序列,搜索空间由V×V下降至B×V,相比暴力搜索更高效。集束搜索的缺陷是解码结果缺乏多样性,但可以通过Diverse Beam Search等方法解决。

🎯

关键要点

  • 使用fairseq进行项目时,源码复杂,难以理解。
  • 增量解码通过增量状态保存先前计算结果,节省计算开销。
  • 集束搜索在每个步骤只考虑B个前缀序列,搜索空间显著减少,效率高于暴力搜索。
  • 集束搜索的缺陷是解码结果缺乏多样性,可以通过Diverse Beam Search等方法解决。
  • 增量解码在推理过程中只需对当前token进行计算,避免重复计算。
  • input_buffer用于记录先前步骤的结果,节省计算开销。
  • 在每一步开始前,需重排增量状态以适应集束搜索的前缀token顺序变化。
  • 集束搜索返回的token数量是集束数量的两倍,以避免过早停止。
  • fairseq的代码会重新排列编码器的状态,但在某些情况下并不必要。
🏷️

标签

➡️

继续阅读