非正式的Pytorch实施
Electra:训练前文本编码是凯文·克拉克(Kevin Clark)的歧视者而不是发电机。钟长隆。 Quoc V. Le。克里斯托弗·D·曼宁
※对于将来的更新和更多工作,请遵循
我从头开始预算电气,并成功地将论文的结果复制在胶水上。
| 模型 | 可乐 | SST | MRPC | sts | QQP | mnli | Qnli | rte | avg。 avg。 |
|---|---|---|---|---|---|---|---|---|---|
| Electra-Small-Owt | 56.8 | 88.3 | 87.4 | 86.8 | 88.3 | 78.9 | 87.9 | 68.5 | 80.36 |
| electra-small-owt(我) | 58.72 | 88.03 | 86.04 | 86.16 | 88.63 | 80.4 | 87.45 | 67.46 | 80.36 |
表1:胶水设置的结果。官方结果来自预期的结果。分数是从同一检查点获得冠心的平均得分。 (请参阅此问题)我的结果来自从头开始的型号,并从每项任务的10个填充运行中平均进行。这两个结果均在OpenWebText语料库上进行培训
| 模型 | 可乐 | SST | MRPC | sts | QQP | mnli | Qnli | rte | avg。 |
|---|---|---|---|---|---|---|---|---|---|
| electra-small ++ | 55.6 | 91.1 | 84.9 | 84.6 | 88.0 | 81.6 | 88.3 | 63.6 | 79.7 |
| electra-small ++(我) | 54.8 | 91.6 | 84.6 | 84.2 | 88.5 | 82 | 89 | 64.7 | 79.92 |
表2:胶测试集的结果。我的结果Finetunes从拥抱面上加载的经过验证的检查点。
| 官方训练损失曲线 | 我的训练损失曲线 |
|---|---|
![]() | ![]() |
表3:两者都是在OpenWebText上训练的小型型号。官方是来自这里的。您应该用一粒盐的训练损失价值,因为它不能反映下游任务的性能。
您无需手动下载和处理数据集,Scirpt会自动照顾您。 (感谢HuggingFace/DataSet和HugginFace/Transformers)
Afaik是最接近原始的重新成真,负责许多容易被忽视的细节(如下所述)。
阿法克(Afaik),唯一通过复制论文中的结果来成功验证自己的人。
附带Jupyter笔记本电脑,您可以探索代码并检查处理后的数据。
您无需独自下载和预处理,您所需要的只是运行培训脚本。
| 意思是 | std | 最大限度 | 最小 | #models |
|---|---|---|---|---|
| 81.38 | 0.57 | 82.23 | 80.42 | 14 |
tabel 4:小型模型的胶水开发结果的统计数据。每个模型都可以从头开始鉴定,并对每个胶水任务进行10次随机运行进行填充。模型的得分是每个任务最佳10的平均值。 (该过程与本文中描述的过程一样),如我们所见,尽管Electra嘲笑Adeversarial训练,但它具有良好的训练稳定性。
| 模型 | 可乐 | SST | MRPC | sts | QQP | mnli | Qnli | rte |
|---|---|---|---|---|---|---|---|---|
| electra-small-owt(我) | 1.30 | 0.49 | 0.7 | 0.29 | 0.1 | 0.15 | 0.33 | 1.93 |
表5:每个任务的标准偏差。这是与表1的模型相同的模型,该模型为每个任务运行10个。
拥抱面论坛帖子
Fastai论坛帖子
注意:这个项目实际上是用于我的个人研究。因此,我并没有试图使所有用户易于使用,而是试图使其易于阅读和修改。
pip3 install -r requirements.txt
python pretrain.pyfinetune.py中将pretrained_checkcpoint设置为使用已预处理并保存在electra_pytorch/checkpoints/pretrain中的检查点。python finetune.py ( do_finetune设置为True )finetune.py中设置th_runs 。python finetune.py (将do_finetune设置为False ),此预测测试集对testset上的预测,然后可以在electra_pytorch/test_outputs/<group_name>/*.tsv中压缩并发送.tsv s,以获得测试得分。 我没有使用CLI参数,因此在运行Python文件中MyConfig中包含的选项以在运行之前。 (下面有评论显示香草设置的选项)
您将需要一个Neptune帐户,并在网站上创建一个Neptune项目,以记录胶水固定结果。不要忘记用海王星项目的名称代替richarddwang/electra-glue
python文件pretrain.py , finetune.py实际上是从Pretrain.ipynb和Finetune_GLUE.ipynb转换的。您也可以使用这些笔记本探索Electra培训和填充。
下面列出了原始实施/纸的详细信息,这些详细信息易于忽略,我已经照顾了。我发现这些细节是必不可少的,即可成功复制本文的结果。
ElectraClassificationHead黑头使用。如果您预先预处理并产生测试结果。 electra_pytorch将为您生成这些。
project root
|
|── datasets
| |── glue
| |── <task>
| ...
|
|── checkpoints
| |── pretrain
| | |── <base_run_name>_<seed>_<percent>.pth
| | ...
| |
| |── glue
| |── <group_name>_<task>_<ith_run>.pth
| ...
|
|── test_outputs
| |── <group_name>
| | |── CoLA.tsv
| | ...
| |
| | ...
@inproceedings{clark2020electra,
title = {{ELECTRA}: Pre-training Text Encoders as Discriminators Rather Than Generators},
author = {Kevin Clark and Minh-Thang Luong and Quoc V. Le and Christopher D. Manning},
booktitle = {ICLR},
year = {2020},
url = {https://openreview.net/pdf?id=r1xMH1BtvB}
}
@misc{electra_pytorch,
author = {Richard Wang},
title = {PyTorch implementation of ELECTRA},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/richarddwang/electra_pytorch}}
}