CLIP 文本编码器解析:AI 是怎么把一句话"读"进脑子里的
【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP
你有没有想过,为什么你随便输入一句"a photo of a dog",CLIP 就能在几十万张图里精准找出那只狗?这套 CLIP 模型靠 4 亿张"图片-文字"配对数据练出来一身本事:它不用人工标注,就能让文字和图片在同一个向量空间里直接"对暗号"。而文字这一半的秘密,就藏在它的文本编码器里。
读完这篇文章,你能带走:
- 理解CLIP 把一句文本变成 512 维向量的完整流水线
- 掌握自注意力(self-attention)和因果掩码(causal mask)的直观含义
- 跑通一段不到 10 行的文本编码示例,亲手验证输出形状
- 避开新手最常踩的坑:把"词嵌入维度"和"最终向量维度"搞混
📸 全景:一句话的"旅行路线"长什么样
文本编码器的职责一句话讲清:把一段人类语言,翻译成和图像特征住在同一个空间、可以直接算相似度的向量。整条流水线是:
图里绿色的 Image Encoder 和紫色的 Text Encoder 是两个"翻译官",各自把输入转成向量,然后在中间那张矩阵里算相似度(图右侧的零样本预测就是这么来的)。本文只盯紫色那条线。关键源码都在这两个文件里:clip/clip.py 管分词,clip/model.py 管编码,分词器的实现细节在 clip/simple_tokenizer.py。
🗣️ 一坨英文字母是怎么变成一串数字的?
模型不认字母,只认整数。所以第一步是把句子拆成一个个"语言积木"——标记(token)。"cat"够简单,一个标记搞定;但"unhappiness"这种词查不到,就得拆成"un-happi-ness"几块,这就像查字典查不到生词时,按偏旁部首拆着查。
CLIP 用的是字节对编码(BPE,Byte Pair Encoding),实现就在 clip/simple_tokenizer.py 里。拆完之后再套上两个特殊标记,装进长度固定为 77 的"表格"里,短了用 0 补齐:
# 摘自 clip/clip.py 的 tokenize() sot_token = _tokenizer.encoder["<|startoftext|>"] # 句首标记 eot_token = _tokenizer.encoder["【免费下载链接】CLIPCLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考