CLIP是一种强大的零样本分类器,它利用对英语语言的知识来对图像进行分类,无需在特定数据集上进行训练。换句话说,CLIP在没有经过训练的情况下,已经能够理解图像内容的很多方面。有更深入的解释说明CLIP的工作原理,甚至如何使用CLIP进行内容审核。
提示工程简介
提示工程是利用CLIP进行图像分类的关键。CLIP能够将任意文本字符串映射到图像内容。例如,如果经营一个在线杂货订购和配送平台,并且有大量来自杂货店的水果图像,但商店没有标记每张图像中的水果种类,可以手动对图像进行分类,将葡萄放入葡萄图像文件夹,将苹果放入苹果图像文件夹等。也可以训练一个分类器来识别每种水果,然后运行所有图像通过该分类器进行排序——但这仍然需要用标记数据训练模型。有了CLIP,可以告诉CLIP显示“包含葡萄的图像”。这个提示的结构——告诉CLIP在图像中识别的陈述——是提示工程的基础。
剪刀石头布的手势识别案例
为了展示提示工程的重要性,假设想使用CLIP来识别经典游戏剪刀石头布的手势。提供了以下三个提示给CLIP,用于每张图像:一个人在展示剪刀石头布游戏中的石头,一个人在展示剪刀石头布游戏中的纸,一个人在展示剪刀石头布游戏中的剪刀。使用这些提示,CLIP在六张图像中正确识别了三张——石头和一张剪刀。实际上,除了一次正确识别剪刀外,CLIP将石头预测为所有图像的顶级类别。
经过一系列的试验和错误(下面描述),找到了以下提示,用于六张测试图像:一个人在握拳,一个人举起平坦的手,两个手指。使用这些提示,CLIP在六种测试案例中正确识别了五种。顺便说一句,它错过的是石头(“拳头”)提示之一。在这个过程中,意识到在提示中包含“一个人…”对于前两个信号(平坦的手和拳头)是有用的,但当包含第三个信号(剪刀)时,CLIP开始过度预测剪刀类别。
诚然,这种情况下的提示工程可能是对六种测试案例的过度拟合。通过在稍微大一点的82张图像数据集上尝试CLIP,使用CLIP Jupyter Notebook,以下提示似乎更有效:“做一个和平手势”,“握拳”,“平坦的手”。
从提示工程过程中,有几个明确的收获。首先,编写字面提示(例如“拳头”与“剪刀石头布中的石头”)可能是一个通常更好的方法。其次,提示工程中迭代的重要性不容忽视(例如,在提示中包含“一个人”与不包含)。