摘要
Automatically Impression Generation (AIG) can summarize as much critical information of the “Findings” section as possible, thus promoting more effective communication between radiologists and physicians. Different from general abstractive summarization, AIG is more challenging for data-driven neural models. This may be due to two critical issues: the serious data bias and the shallow and rough use of available data. To alleviate data bias problem and make best use of available data, we propose a novel ChatGPT based Contrastive Learning (CCL) approach. Specifically, CCL progressively learns to generate impressions to address the above problems. Firstly, we input “findings” and its target “impression” into model for fine-tuning, namely WarmUp; Secondly, we propose CCL to alleviate exposure bias by adding its self-generation as negative samples, and treat all negative samples differently according to their sample quality. This can make full use of the available limited data; Thirdly, we select the non-dominant data in data bias by assessing model and input them into ChatGPT for data augmentation. By iteratively doing the second step and third step, CCL can gradually improve its summarization performance on radiology reports. Experimental results on the public OpenI and MIMIC-CXR datasets confirm effectiveness of our proposed approach.
关键词:Text summarization, Radiology, ChatGPT, Contrastive learning
前言
感谢老师和学长的指导,让我第一次有了发表正式论文的机会! 二月份开始参与这篇论文的准备工作,先后学习了ChatGPT API的使用、Pytorch、对比学习、OPEN-I数据集等相关自然语言处理知识的使用,受益颇丰。 关于该科研项目的详细介绍放在第二页及之后中,希望能够抛砖引玉给同为人工智能方向的同学一些启发。
准备阶段
关于GPT的发展历史
自 GPT 的首次发布以来,它经历了多个版本和改进:
GPT-1: 这是最初的 GPT 模型,由 OpenAI 在 2018 年发布。它包含 117 亿个参数,并在各种自然语言处理任务上表现出色。
GPT-2: 在 2019 年初,OpenAI 发布了 GPT-2,这是 GPT-1 的改进版本。GPT-2 模型更大,包含了 15 亿到 17 亿个参数,但出于担忧其潜在的滥用,OpenAI 最初选择不发布完整的模型。后来,他们发布了一些规模较小的版本,以及其源代码和模型的详细说明。
GPT-3: 在 2020 年,OpenAI 推出了 GPT-3,这是目前规模最大的版本。GPT-3 模型包含了 1750 亿个参数,这是 GPT-2 的几倍。GPT-3 在多种自然语言处理任务上表现出色,甚至可以生成逼真的人类文本。
GPT-3.5: 在 2021 年,OpenAI 发布了 GPT-3.5,这是对 GPT-3 进行了一些改进和优化的版本,提高了模型的性能和效率。
除了这些主要版本外,OpenAI 还不断对 GPT 进行改进,并发布了许多中间版本和更新,以提高模型的性能、效率和安全性。这些改进通常涉及参数数量的增加、训练数据的扩充以及模型架构的调整。
ChatGPT(以及其他 GPT 变种)的学习过程基于大规模的自监督学习,其主要步骤如下:
- 数据收集: 首先,需要大量的文本数据作为训练模型的输入。这些数据可以来自互联网上的各种来源,例如网页、论坛、新闻文章、书籍等。
- 数据预处理: 收集到的文本数据需要进行预处理,包括分词、去除停用词、标点符号等。这些预处理步骤有助于减少模型的输入维度,并使其更易于处理。
- 模型架构设计: 在确定数据集后,需要设计一个适合处理文本数据的神经网络架构。对于 GPT 系列模型,通常采用了 Transformer 架构,它包含了多个自注意力机制层。
- 自监督学习: GPT 模型使用自监督学习进行训练,这意味着模型从输入文本中学习,而无需人类为其提供标签。在训练过程中,模型会尝试预测文本序列中的下一个词或一段文本,以最大化其预测准确性。
- 微调和优化: 在完成初始训练后,模型可能需要进行微调和优化,以提高其性能和适应特定任务。这可以通过在特定任务的数据集上进行有监督学习来实现。
- 评估和调试: 训练完成后,需要对模型进行评估和调试,以确保其在各种任务上都能表现良好,并且没有出现严重的错误或偏差。
- 部署和应用: 最后,训练完成的模型可以部署到实际应用中,用于自然语言处理任务,如对话系统、文本生成、文本分类等。
整个过程涉及大量的计算资源、数据和算法优化,以确保训练出的模型具有良好的性能和泛化能力。
数据集
数据集主要使用OPEN-I测试:OPEN-I是一个由Indiana大学主持收集的关于放射学图像及报告等资料的数据集,包含了大约7,470 张胸部 X 光片和 3,955 份放射学报告,来自 NLM 医学史收藏的 67,517 张图像和 2,064 幅骨科插图。我们这次实验过程中主要使用到的是放射学报告文本部分,该数据集提供的报告为XML格式,在数据预处理过程中,我们将XML格式的报告提取出其中的“发现”和“印象”文本内容,并转化为ChatGPT可用的数据集格式。、
数据集预处理
JSON 行文本格式,也称为换行分隔的 JSON。JSON 行是一种存储结构化数据的便捷格式,一次可以处理一条记录。它适用于 unix 风格的文本处理工具和 shell 管线。这是日志文件的一种很好的格式。它也是一种在协作进程之间传递消息的灵活格式。它主要有3个要求:UTF-8编码、每一行都是一个有效的JSON值、行分隔符是’\n’。
样例:new_data.jsonl
{"prompt": "The heart is normal in size. The mediastinum is unremarkable. Mild blunting of right costophrenic XXXX. The lungs are otherwise grossly clear.", "completion": "No acute disease."}
{"prompt": "Cardiac and mediastinal contours are within normal limits. The lungs are clear. Left axillary surgical clips. Bony structures are intact.", "completion": "No active pulmonary disease."}
{"prompt": "The heart is normal in size and contour. The lungs are clear, without evidence of infiltrate. There is no pneumothorax or effusion.", "completion": "No acute cardiopulmonary disease."}
······
微调模型
- 数据集格式化
CLI数据准备工具 - 创建微调模型
使用文件API上传文件 -> 创建微调任务 -> 流式传输事件直到任务完成 - 使用微调模型
当微调任务成功时,使用fine_tuned_model字段填充模型名称。调用API创建模型并传递参数
生成摘要
- ada(微调)
- davinci3&curie
- 通俗化
改进方向
改进数据集格式:分隔符、标签化、信息量、结构化输入···
官方样例数据集格式
{"prompt": "Summary: <summary of the interaction so far>\n\n
Specific information:<for example order details in natural language>\n\n###\n\n
Customer: <message1>\n
Agent: <response1>\n
Customer: <message2>\n
Agent:",
"completion":" <response2>\n"}
测试阶段
模型预热
T5预训练模型
T5全称是Text-to-Text Transfer Transformer,是一种模型架构或者说是一种解决NLP任务的一种范式。
该模型给 NLP 预训练模型领域提供了一个通用框架,将所有任务转化都转化为文本到文本任务,也就可以用同样的模型、损失函数、训练过程和解码过程来完成所有 NLP 任务。
研究使用的数据集为C4,全称Colossal Clean Crawled Corpus,与GPT2、GPT3的训练数据来源相同,为一个公开的网页存档数据集,每个月大概抓取 20TB 文本数据。优点是数据量庞大且类型丰富,缺点是数据质量差,需要对数据进行过滤,包括脏词、含javascriptd的行、重复的段落等。
模型预热
模型预热有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳有助于保持模型深层的稳定性。
第一轮训练的时,每个数据点对模型来说都是新的,模型会很快地进行数据分布修正,如果这时候学习率就很大,极有可能导致开始的时候就对该数据“过拟合”,后面要通过多轮训练才能拉回来,浪费时间。当训练了一段时间(比如两轮、三轮)后,模型已经对对当前的batch而言有了一些正确的先验,较大的学习率就不那么容易会使模型学偏,所以可以适当调大学习率。
总结现在大batch size和大learning rate下的学习率变化和规律,其中学习率是呈现“上升——平稳——下降”的规律,该现象尤其在深层模型和具有多层MLP层的模型中较为显著。从模型学习的角度来说,学习率的这种变化对应了模型“平稳——探索——平稳”的学习阶段。
通过上图中可以看到,加入了warmup策略之后,模型能够学得更稳定。左下图中加入warmup后增加了模型最后几层的相似性,表明warmup可以避免FC层的不稳定的剧烈改变。
对比学习
对比学习(contrastive learning)是被看作是一种自监督学习方法(SSL,Self-supervised Learning),本质上是为了在数据标签的设定下为数据学习到一个良好的表示。因此,对比学习本质上仍然可以看做是一种表示(representation)学习。
对比学习允许我们的机器学习模型观察数据样本对的“相似”和“不同”,以便在执行分类或分割等任务之前了解数据更高阶的特征,从而可以在没有任何注释或标签的情况下,训练模型以学习很多关于数据的知识。通过对比学习,即使只有一小部分数据集被标记,也可以显著提高模型性能。
该文章中提出了一种新的文本对比学习生成神经框架 CoNT,该框架主要优化了三个方面:
- 对比示例的构建:从自己的预测中采样对比样例
- 对比损失的选择:使用N-pairs对比损失
- 解码策略:从距离函数中学习到的序列相似度直接纳入推理阶段
CoNT大大改进了传统的MLE baseline,特别是在摘要和机器翻译方面显著优于所有先前的对比生成模型。
数据增强
什么是数据增强
数据增强是扩充数据样本规模的一种有效地方法。深度学习是基于大数据的一种方法,我们当前希望数据的规模越大、质量越高越好。模型才能够有着更好的泛化能力,然而实际采集数据的时候,往往很难覆盖掉全部的场景,比如:对于光照条件,在采集图像数据时,我们很难控制光线的比例,因此在训练模型的时候,就需要加入光照变化方面的数据增强。再有一方面就是数据的获取也需要大量的成本,如果能够自动化的生成各种训练数据,就能做到更好的开源节流。
文本数据增强方法:
- BackTranslationAug---回译
- EasyDataAug---同义词替换、插入、交换和删除
- ContextualWordAug---上下文词嵌入
- CounterFittedEmbeddingAug---文本对抗性攻击
- ···
图像数据增强方法:
- 几何变换:裁剪、翻转、旋转、缩放、变形···
- 颜色变换:高斯模糊、锐化、噪声、灰度、对比度、色度、饱和度···
- 无监督:条件对抗生成网络GAN、自动学习出适合当前任务的方法Autoaugmentation
ChatGPT API
API文档:
https://platform.openai.com/docs/models/overview
3月1日官网公告:
Model: The ChatGPT model family we are releasing today, gpt-3.5-turbo, is the same model used in the ChatGPT product. It is priced at $0.002 per 1k tokens, which is 10x cheaper than our existing GPT-3.5 models. It’s also our best model for many non-chat use cases—we’ve seen early testers migrate from text-davinci-003 to gpt-3.5-turbo with only a small amount of adjustment needed to their prompts.
API: Traditionally, GPT models consume unstructured text, which is represented to the model as a sequence of “tokens.” ChatGPT models instead consume a sequence of messages together with metadata. (For the curious: under the hood, the input is still rendered to the model as a sequence of “tokens” for the model to consume; the raw format used by the model is a new format called Chat Markup Language (“ChatML”).)
We’ve created a new endpoint to interact with our ChatGPT models.
如何使用?
主要输入是messages参数。 messages必须是一个对象数组,其中每个对象都包含一个role(“system”、“user”或“assistant”)和content。
“system”消息有助于设置助手的行为。 “user”消息有助于指导助手,它们可以由程序面向的用户生成,或由开发人员设置为指令。 “assistant”消息帮助存储先前的响应,它们可以由开发人员编写,以帮助提供所需反应的示例。
传统上,GPT 模型使用非结构化文本。而 ChatGPT 模型期望一种称为聊天标记语言(简称 ChatML)的结构化格式。ChatML 文档由一系列消息组成。每条消息都包含一个标题和内容。当前版本 (ChatML v0) 可以用 “字典列表”JSON 格式表示,如下所示:
调用ChatGPT API做数据增强
- 初次对比学习训练过程中,保存BLEU-1分数低于0.2分值的语句。
- 借助ChatGPT API自动批量重写得分较低的语句,扩充数据集。
- 第一阶段:将扩充的数据集处理后加入到训练集中,继续做对比学习训练。第二阶段:对比计算损失时用作对比增强
具体实现代码可以参考我的另一篇文章:
https://blog.setekh.fun/programing/chatgpt-data-augmentation/
测试阶段报告摘要结果
T | Rouge-1 | Rouge-2 | Rouge-3 |
---|---|---|---|
R | 0.65 | 0.61 | 0.65 |
P | 0.64 | 0.56 | 0.64 |
F | 0.62 | 0.56 | 0.62 |
Comments 4 条评论
博主 喵喵
使用什么平台训练的?我跑个T5-base都费劲啊
博主 setekh
@喵喵 一开始用的自己台式机 3080-Ti 训练一次一天左右,之后为了优化Rouge评分使用了老师提供的并行云超算,2小时一次吧,大模型
博主 любовь
请问能否提供该模型的源码?
博主 setekh
@любовь 文章正式发表后会上传源码