从台风天过去以后到现在,因为实在没感觉学到十分有用的东西,就没有写博客。
不过最近掌握了一些新工具,机器学习的话,知道了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要快。
还有两周就要开学了,有点想又有点不想,但夏天确实该结束了,真充实呀。