wonderseen / PCKMT

Source codes of ACL 2022-Efficient Cluster-based k-Nearest-Neighbor Machine Translation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请问PCKMT是否依赖于多个domain?

lidh15 opened this issue · comments

您好,经过一段时间对PCKMT的研究发现这个工作是将多个domain各自做compact,那么如果只有一个domain的话是否和前作adaptive knn-mt没有区别?
另外数据集中的subtitles domain在两个工作中均没有涉及而只做了其余四个domain,请问是出于数据量的考虑吗?

您好,感谢您对PCKMT的关注。

关于PCKMT与前作的区别:

  • PCKMT和adaptive knn-mt的区别在于:PCKMT增设了提高context reprenstation判别能力的压缩子层compact layer,以及提供了裁减策略,使得形成更高效的datastore。因此,PCKMT和adaptive knn-mt的区别不在于domain的数目。
  • PCKMT同样可以只在单个domain上训练compact layer后,不微调就泛化到其他几个domain上(参考本文Table4的G-CKMT)。

关于subtitles与其余4个domain:

  • 关于4个domain
    • PCKMT以adaptive knn-mt为baseline,后者开展了这4个domain的实验。为了避免预处理因素的影响,我们严格采用了其release的预处理数据(见readme)。因此,PCKMT campact layer实验中采用了这4个domain。
  • 关于subtitles domain
    • 后续的裁剪实验中,我们发现这四个domain的冗余性较小,可裁剪空间有限,因此使用大规模的 subtitles进行了实验(见本文Section 4.5.2 Performance of Pruning Methods)。
    • Subtitles数据量级大,需要消耗大量的计算成本,因此推测其他人的工作可能会考虑到这个因素。以下是PCKMT实验中的经验:
      • CPU、内存方面:受限于当时有限的公用机器算力(内存256GB、硬盘可用空间长期不足350GB),datastore的构建无法按照in memory的方式进行,因此仅构造单个datastore就需消耗300+GB硬盘空间进行存储。解码生成datastore键值对、faiss index的量化训练、聚类、裁剪过程中,公用机器一旦有第二人同时使用,就容易内存溢出、异常退出(尤其是datastore聚类过程),进行地比较困难。
      • (tips)GPU方面:经过定位,在lambda-k network训练阶段,adaptive knn-mt原始实现中faiss index以单卡加载,在大规模datastore上会触发OOV(P100 GPU)。改用multi-gpu index可解决(参考PCKMT code)。

希望可以解答您的疑惑。

目前我执行了create datastore脚本生成了keys.npy和vals.npy,但是并没有生成key index文件,执行knn align时报错找不到knn index,请问这个文件该如何生成呢?

您好,该bug已修正[PR],请更新codes/fairseq/modules/knn_datastore.py 即可。

更新说明:create_datastore.sh生成的是原始nmt的datastore的key和value文件,同路径下的knn_index文件是原始匹配adaptive knn-mt构建的faiss index。对于knn_align.sh而言,可以忽略这个adaptive knn-mt的量化索引文件,因为knn_align训练中不依赖adaptive knn-mt的knn_index。

谢谢,现在已经可以完成整个流程。