关于最近的废物生活
2021-08-12 18:14:26

从台风天过去以后到现在,因为实在没感觉学到十分有用的东西,就没有写博客。

不过最近掌握了一些新工具,机器学习的话,知道了fairseq和huggingface的用法,起码能把数据输进去,huggingface多机多卡也十分方便,用accelerate配置一下就可以了。

由于是NMT比赛,要做bpe分词和tokenize处理,所以学会了写脚本,然后也试过字节的VOLT方法来分词,但bleu差太多了,于是就放弃了。由于MASS本身的代码就有回译和模型集成,所以这些不算是我完成的工作。

不过昨天学了一手R-drop,实现非常简单,但效果的确不错,单模型有1bleu的提升,但是集成起来好像就不多了。

之前想根据测试集和验证集的Embedding来筛选一部分训练数据做微调,但是发现由于是跨领域翻译,所以这个方法也失败了。

还有加改写模型的尝试,因为懒得重新训练一个bert来做,就直接拿预训练好的MASS对着预测结果和实际结果硬做,效果也不是很好,但我觉得是训练集太少的缘故,后面还可以继续尝试。

beam-size这个超参感觉越大越好。

所以现在就是会用很多东西,但是原理都不知道,所以立个todo list吧

  • BPE分词的原理
  • VOLT构建词表论文
  • Copy机制和指针网络
  • 简单问答数据生成的论文
  • R-drop的论文
  • 回译的论文
  • AutoEncoder的论文
  • Beam-Search的论文

然后还有就是最近用了新工具

linux:fzf (堪比Listary) Crontab(定时任务)

python: networkx(绘制图) jsonlines(把python对象dump成jsonline,没有json库的编码问题,而且很好用)

这里要说一下,这个是因为要用huggingface要求用json文件来储存数据,但对于(在NMT里)数据的要求实际是jsonline格式,就很离谱

然后除了机器学习,打超算比赛也出现了一些问题

因为要做向量化,用的AVX512,但是由于有一步是要把结果储存在一个二维数组的元素里,而且是跳着存储,所以用到了gather函数,但是avx512不管是load,gather,凡是涉及到读写内存的地方,一个要求地址连续,还有就是要求用_mm_malloc开辟空间,为了满足这两个条件,把原本的二维数组开辟成一维数组,然后用指针数组来指向它每一维的开头,这样地址就是连续的,但我的尝试最后还是失败了,gather函数太耗时了,然后结果最后也是错的。但是发现这种申请二维数组的方式比之前的快,_mm_malloc也比直接new要快。

还有两周就要开学了,有点想又有点不想,但夏天确实该结束了,真充实呀。