正在进行的AI革命正在给我们带来各个方向的创新。OpenAI的GPT(s)模型正在领导发展,并展示了基础模型实际上可以使我们的日常任务变得更加简单。从帮助我们写得更好到优化我们的一些任务,每天我们都看到有新模型发布的消息。
许多机会在我们面前展开。可以帮助我们在工作中的AI产品将成为我们未来几年中最重要的工具之一。
我们将在哪些领域看到最有影响力的变化?我们在哪些方面可以帮助人们更快地完成任务?AI模型最令人兴奋的应用之一是医疗AI工具。
在这篇博客文章中,我将PLIP(病理学语言和图像预训练)描述为病理学的第一批基础模型之一。PLIP是一种视觉语言模型,可以用于将图像和文本嵌入到相同的向量空间中,从而实现多模态应用。PLIP源自OpenAI在2021年提出的原始CLIP模型,并最近发表在《自然医学》上:
Huang, Z., Bianchi, F., Yuksekgonul, M., Montine, T., Zou, J., A visual–language foundation model for pathology image analysis using medical Twitter. 2023, Nature Medicine.
在我们开始冒险之前,以下是一些有用的链接:
我们展示,通过在社交媒体上进行数据收集以及使用一些额外的技巧,我们可以构建一个可用于医疗AI病理学任务的模型,而无需注释数据。
虽然介绍CLIP(PLIP派生的模型)及其对比损失略超出了本博客文章的范围,但首次了解/回顾一下仍然是有益的。CLIP背后的非常简单的思想是,我们可以构建一个模型,将图像和文本放在一个向量空间中,其中“图像和其描述将会彼此靠近”。
上面的GIF还显示了将图像和文本嵌入到相同向量空间的模型如何用于分类的示例:通过将所有内容放在同一个向量空间中,我们可以通过考虑向量空间中的距离来将每个图像与一个或多个标签相关联:描述与图像越接近,越好。我们期望最接近的标签是图像的真实标签。
清楚一点:一旦CLIP被训练,你可以嵌入任何你拥有的图像或文本。请考虑,这个GIF显示的是一个2D空间,但通常在CLIP中使用的空间具有更高的维度。
这意味着一旦图像和文本位于相同的向量空间中,我们可以做很多事情:从零样本分类(找到与图像更相似的文本标签)到检索(找到与给定描述更相似的图像)。
我们如何训练CLIP?简单地说,该模型被提供了许多图像-文本对,并尝试将相似的匹配项放在一起(如上图所示),并将其余的所有内容远离。你拥有的图像-文本对越多,你将学到的表示就越好。
CLIP已经被训练成一个非常通用的图像文本模型,但它在特定用例(例如时尚(Chia等,2022))中效果不佳,并且还有一些情况下,CLIP表现不佳,领域特定的实现效果更好(Zhang等,2023)。
现在我们来介绍一下我们如何构建PLIP,这是原始CLIP模型的经过微调的版本,专门用于病理学。
尽管网络上有大量病理学数据,但它经常缺乏注释,并且可能以非标准格式(例如PDF文件、幻灯片或YouTube视频)存在。
我们需要在其他地方寻找,而这个其他地方将是社交媒体。通过利用社交媒体平台,我们有可能获取大量与病理学相关的内容。病理学家使用社交媒体在线分享他们的研究,并向同行提出问题(请参见Isom等人,2017年,有关病理学家如何使用社交媒体的讨论)。此外,还有一组通常推荐的Twitter标签,病理学家可以使用这些标签进行交流。
除了Twitter数据,我们还从LAION数据集(Schuhmann等人,2022年)中收集了一部分图像,这是一个包含50亿图像文本对的庞大集合。LAION是通过网络爬取收集的,用于训练许多流行的OpenCLIP模型。
病理学Twitter
我们使用病理学Twitter标签收集了超过10万条推文。这个过程非常简单,我们使用API来收集与一组特定标签相关的推文。我们移除包含问号的推文,因为这些推文通常包含对其他病变的请求(例如,“这是什么类型的肿瘤?”),而不包含我们实际需要来构建模型的信息。
我们提取具有特定关键词的推文,并删除敏感内容。此外,我们还删除所有包含问号的推文,因为这些推文通常用于病理学家向同事提问有关可能的罕见病例。
从LAION数据集中抽样
LAION包含50亿图像文本对,我们收集数据的计划如下:我们可以使用来自Twitter的自有图像,并在这个庞大的语料库中找到相似的图像;这样,我们应该能够获得相当相似的图像,并希望这些相似的图像也是病理学图像。
现在,手动执行这个任务是不可行的,嵌入和搜索50亿的嵌入是一项非常耗时的任务。幸运的是,对于LAION,有预先计算的向量索引,我们可以使用API来查询实际图像!
因此,我们只需嵌入我们的图像,然后使用K-NN搜索在LAION中查找相似的图像。请记住,每个图像都附带有标题,这对我们的用例非常完美。
确保数据质量
我们收集的并非所有图像都是好的。例如,从Twitter上,我们收集了许多医学会议的集体照片。从LAION中,有时会得到一些类似分形的图像,它们可能模糊地类似某种病理模式。
我们做的事情非常简单:我们使用一些病理学数据作为正类数据,使用ImageNet数据作为负类数据,来训练一个分类器。这种分类器的精确度非常高(实际上很容易将病理图像与网络上的随机图像区分开来)。
此外,对于LAION数据,我们应用了一个英语语言分类器,以删除不是英语的示例。
数据收集是最困难的部分。一旦完成并且我们信任我们的数据,我们可以开始训练。
为了训练PLIP,我们使用了原始的OpenAI代码进行训练 - 我们实现了训练循环,添加了余弦退火以用于损失,以及一些其他小调整,以确保一切顺利运行,并且可以验证(例如,Comet ML跟踪)。
我们训练了许多不同的模型(数百个),并比较了参数和优化技术。最终,我们能够找到一个我们满意的模型。在论文中有更多的细节,但在构建这种对比模型时,其中一个最重要的组成部分是在训练过程中确保批处理大小尽可能大,这允许模型学习尽可能多的元素。
现在是时候测试一下我们的PLIP了。这个基础模型在标准基准测试中表现如何?
下面的GIF图演示了如何使用像PLIP这样的模型进行零样本分类。我们使用点积作为向量空间中相似度的度量(值越高,越相似)。
在图表中,你可以看到PLIP与CLIP在我们用于零样本分类的数据集中性能的快速比较。使用PLIP替代CLIP在性能上有显著提升。
PLIP与CLIP性能(加权宏F1)在两个零样本分类数据集上的对比。请注意,y轴在0.6左右而不是1。
使用PLIP的另一种方式是作为病理图像的特征提取器。在训练过程中,PLIP会看到许多病理图像,并学会为它们构建向量嵌入。
假设你有一些注释的数据,你想训练一个新的病理分类器。你可以使用PLIP提取图像嵌入,然后在这些嵌入之上训练逻辑回归(或你喜欢的任何类型的回归器)。这是执行分类任务的一种简单有效的方法。
为什么这样做?其想法是,为了训练分类器,PLIP嵌入是病理学特有的,应该比CLIP嵌入更好,CLIP嵌入是通用的。
以下是CLIP和PLIP在两个数据集上的性能比较示例。虽然CLIP获得了良好的性能,但我们使用PLIP获得的结果要高得多。
如何使用PLIP?以下是一些如何在Python中使用PLIP的示例,以及一个可以用来播放该模式的Streamlight演示。
我们的GitHub存储库提供了几个额外的示例,你可以遵循。我们已经建立了一个API,使你能够轻松地与模型交互:
你还可以使用更标准的HF API来加载和使用模型:
我们还相信PLIP和未来的模型可以有效用作医疗AI的教育工具。PLIP允许用户进行零样本检索:用户可以搜索特定关键词,PLIP将尝试找到最相似/匹配的图像。我们构建了一个简单的Streamlit网络应用程序,你可以在这里找到。
虽然我们的结果很有趣,但PLIP有很多不同的限制。数据不足以学习病理学的所有复杂方面。我们构建了数据过滤器来确保数据质量,但我们需要更好的评估指标来了解模型做得对和做得错的方面。
更重要的是,PLIP并不能解决当前的病理学挑战;PLIP不是一个完美的工具,可能会出现许多需要调查的错误。我们看到的结果确实很有希望,为将来结合视觉和语言的病理学模型打开了一系列可能性。然而,在这些工具可以在日常医学中使用之前,还有很多工作要做。