# PaddlePrompt **Repository Path**: tifacloud/paddle-prompt ## Basic Information - **Project Name**: PaddlePrompt - **Description**: 使用BertForMaskedLM训练的一个分类模型 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-23 - **Last Updated**: 2023-02-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 这是使用PaddlePaddle框架写的关于Prompt的代码 这是一个使用Prompt参加[飞浆学习赛]([飞桨学习赛:中文新闻文本标题分类 - 飞桨AI Studio](https://aistudio.baidu.com/aistudio/competition/detail/809/0/introduction))的记录 ## Prompt 我认为这里面的代码思想是有问题的。最大的问题在于,BERT 模型最后给出了被MASK字符是哪个字的概率, 这两万多个字都有它们的概率,但是我只关注其中的两个字,这里面是否有许多浪费?这样的做法,是否是正确的? 我并没有系统地读过有关prompt的论文,因此这些谜题还需要进一步地阅读论文研究。 ## 接下来的工作 - ~~日志相关的内容~~ - 实验意外失败后保存功能 - ~~- test,dev方法~~ - 预测阶段存储了全部的Tensor,会占用大量的内存,这也是一个优化的点。 - ~~实际运用的函数~~ - 探索warm_up的运用 - 探究不同的预训练模型对结果的影响。 - 探究两个字的完形填空,即让模型直接生成标签。 ## 笔记 我设计的模板是:**这句话与label[MASK]关:txt**。 其中[MASK]是”有“或者是”无“这两个标签。 paddle中的 BertForMaskedLM 可以很好的完成这个任务,尤其是其中的 labels 参数,几乎解决了我的困惑,模型会关注我设计的两个标签,其他的都忽略。 本次使用了dev数据的十分之八作为训练集,使用的是最原始的BERT,得到的成绩是83分,记得上次使用BERT微调的成绩是86左右,有3个点的差距,但是这次是一个完全不同的思路,直接使用Prompt进行的预测。 在本次训练过程中,为了节省时间,我为每个标题生成了一个随机的类别和一个正确的类别。而目前正在使用服务器进行全量训练,为每个标题生成了13个错误的类别和一个正确的类别,这个将数据集扩充了13倍,也影响了平衡,等训练结束后看一下效果如何。 接下来应该也有一定的改进空间,有时间会进行进一步的研究。比如我只是映射了“有”,“无”这两个标签在上面,而在debug中,我发现“相”这个字出现的概率也不低。能否将多个标签映射到这上面呢?我觉得这是可行的,可能也能够提高得分。 ## 日志 ### 2/24 - 扩充数据集进行14个类别验证后,确实有效,效果上升了3个点,达到了86。 - 训练过程中出现了新的状况,准确率出道即巅峰,随后一路下坡。可能是因为学习率的问题? - 我认为不仅train的loss重要,dev的loss也重要,应该记录下来dev的loss。 - 准备使用模型直接生成需要预测的类别,看看这样的效果 使用两个字直接生成结果后,在验证集的效果达到了99%,但是我看了一下测试集的结果,估计还不是很高。不知道为什么测试集和验证集能掉点掉这么多。差不多掉10个点啊。 -