ASC20 比赛在 1 月 6 号正式开始了,我在 1 月 10 号也正是接题开始了比赛的相关工作。因为这是我第一次以学校的名义参加全球性的赛事,所以特地记录下这段时间内的学习历程和思路。
题目
这一次的赛题是有关 NLP 方向的,要在只使用 Pytorch 框架的情况下完成 Cloze 下游任务的设计,并且以准确率作为最终的分数计算。
主办方并未提供 baseline,只提供了数据集,格式为 json,具体如下:
{
'article': '...',
'options': [[words * 4] * 20],
'answers': ['A','B'... * 20]
}
学习
这一次的路线就非常直观了,需要走 NLP 方向,而 NLP 目前最为热门的网络模型就是 BERT。类似 ResNet 之于图像识别的网络,这是一个 NLP 中炙手可热,同时也十分常用的模型,而我们可以通过这个模型达到 word2vec 的效果,提取出文字中的向量信息,并输送到下层网络以完成下游任务。
所以我就打算使用 BERT 作为网络中的 embedding 部分,然后下层在进行 Cloze 的填空操作。在网上简单查找并且学习了 NLP的一些实现细节,我发现了 transformer 这个网红模型,并且有了许多的预训练模型,所以我便选择了以 transformer 为基础去完成题目。
目前的进展及思路
目前我已经基本看完了 transformer 中的 example 代码文件,并且对其工作原理有了基础的了解,可以开始准备数据集进行训练了。
我此外则有着以下的一些不成熟的小想法:
- 以我在观摩别人打比赛和自己比赛的经验,我会偏向于直接使用 pretrained 模型或者以其为底作迁移学习;
- 通过 BERT 提取特征并且进行猜词,然后与选项进行比对,如果不存在于选项中则需要通过比对 similarity,然后比较取最为相似的单词作为选择。
- 把选项放入原句中,然后通过 MRPC 下游任务计算句子的连贯性,取连贯性最高者。
- 考虑到上下文(比如 He or She 性别判断之类的选择),可能还需要通过另一个网络提取关键信息。
我针对第 2 点完成了基本的代码工作,但是目前就成果和效率来看,还是存在一定的不足,后续会对其进行改进,同时也会往多个方向进行探索~~,毕竟现在时间还多~~。