CLIP
CLIP (Contrastive Language–Image Pretraining) je technika a zároveň modelová rodina, ktorá spája text a obrázky do spoločného priestoru reprezentácií. V praxi je to základ pre vyhľadávanie obrázkov podľa textu, zero-shot klasifikáciu a pomocné mechanizmy v generatívnych modeloch. Pôvodný CLIP predstavila OpenAI v roku 2021 a odvtedy sa stal jedným z najpoužívanejších „mostov“ medzi rečou a obrazom.
1. Čo to je (definícia + analógia)
- Definícia: CLIP sa učí rozumieť tomu, ktoré texty „pasujú“ ku ktorým obrázkom, bez toho, aby si mu musel ručne štítkovať milióny kategórií.
- Analógia: predstav si dve mapy sveta — jednu „textovú“ a druhú „obrázkovú“. CLIP je prevodník, ktorý ich naučí tak, aby rovnaké miesta mali rovnaké súradnice v oboch mapách.
- Čo z toho máš: keď napíšeš vetu, nájdeš obrázky, ktoré sú jej „najbližšie“ — a naopak.
Kľúčový rozdiel oproti klasickým klasifikátorom: CLIP sa neučí pevný zoznam tried. Učí sa vzťah medzi ľubovoľným textom a ľubovoľným obrázkom.
2. Ako to funguje
Dva enkódery
- textový enkóder zoberie vetu a spraví z nej vektor (embedding),
- vizuálny enkóder (typicky Vision Transformer alebo CNN) zoberie obrázok a spraví z neho vektor.
Kontrastívne učenie
- model dostáva veľký batch párov (obrázok, popis),
- učí sa, aby správny pár bol v embedding priestore blízko,
- a aby bol ďaleko od všetkých nesprávnych párov v tom istom batchi.
V batchi o veľkosti N je N správnych párov a N²−N nesprávnych — model rieši, ktorý popis patrí ku ktorému obrázku (a naopak). To je tzv. symetrická kontrastívna strata (InfoNCE).
Použitie pri inferencii
- vyrobíš embedding pre text aj pre obrázky,
- spočítaš podobnosť (najčastejšie cosine similarity),
- vyberieš top-N najbližších.
3. Mentálny model toku dát
Text → textový enkóder → text embedding ─┐
├─→ cosine similarity → ranking
Obrázok → vizuálny enkóder → image embedding ─┘
Embeddingy sa zvyčajne normalizujú na jednotkovú dĺžku, takže podobnosť = skalárny súčin.
4. Zero-shot klasifikácia v praxi
Najefektnejšia ukážka CLIP je klasifikácia bez tréningu na konkrétne triedy. Stačí triedy opísať vetami:
import torch, clip
from PIL import Image
model, preprocess = clip.load("ViT-B/32")
image = preprocess(Image.open("foto.jpg")).unsqueeze(0)
# triedy ako textové popisy — žiadny tréning na ne netreba
labels = ["fotka psa", "fotka mačky", "fotka auta"]
text = clip.tokenize(labels)
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
# normalizácia + podobnosť
logits_per_image, _ = model(image, text)
probs = logits_per_image.softmax(dim=-1)
print(dict(zip(labels, probs[0].tolist())))
Chceš pridať novú triedu? Stačí pridať ďalší textový popis — netreba zbierať dáta ani pretrénovať.
5. Prečo je to dôležité / kde sa to používa
- Vyhľadávanie obrázkov podľa textu: zadáš „čierny biliardový stôl v zadymenej miestnosti“ a systém nájde najpodobnejšie fotky.
- Automatické tagovanie a organizácia knižníc: triedenie fotiek bez ručného popisu.
- Zero-shot klasifikácia: namiesto trénovania na pevný zoznam tried skúšaš textové popisy.
- Kvalita datasetov: CLIP-like modely filtrujú, či obrázok zodpovedá textu — dôležité pri tréningu generatívnych modelov.
- Stavebný blok multimodálnych systémov: CLIP enkóder je „v pozadí“ mnohých multimodálnych agentov a generátorov obrázkov (napr. ako vodítko pri difúznych modeloch).
6. CLIP a vektorové databázy
Typický produkčný pattern pre vyhľadávanie:
1. Pre každý obrázok v archíve spočítaj image embedding (offline).
2. Ulož embeddingy do vektorovej databázy (FAISS, pgvector, Qdrant...).
3. Pri dotaze spočítaj text embedding a nájdi najbližšie vektory (ANN).
Embeddingy z CLIP fungujú ako most medzi modalitami — uložíš obrázkové vektory, vyhľadávaš textom.
7. Výhody a obmedzenia
- Výhody:
- škáluje bez štítkovania v štýle „1 obrázok = 1 trieda“,
- výborný na retrieval (nájdi, čo sedí),
- umožňuje zero-shot tam, kde by si inak musel trénovať klasifikátor.
- Obmedzenia:
- citlivý na bias v dátach (učí sa z internetu),
- nejde o „porozumenie“ v ľudskom zmysle — je to podobnosť v embedding priestore,
- v špecifických doménach (medicína, priemyselné diely) býva bez doladenia slabší,
- problémy s počítaním objektov a presnými priestorovými vzťahmi.
| Stránka | Silné stránky | Typické limity |
|---|---|---|
| Retrieval | rýchle a praktické | omyly pri podobných konceptoch |
| Zero-shot | netreba trénovať triedy | závisí od kvality textových popisov |
| Robustnosť | často lepšia než „naškatuľkované“ modely | bias a doménové diery v dátach |
8. Praktické použitie (čo to znamená pre teba)
- Bežný používateľ: veľa nástrojov na „hľadaj v galérii podľa textu“ používa niečo CLIP-like, aj keď to tak nevolajú.
- Práca s obsahom: CLIP-štýl vyhľadávania je ideálny na interné archívy (marketing, eventy, fotobanky) — ľudia prestanú hľadať podľa názvu súboru.
- Vývoj: spravíš embeddingy obrázkov, uložíš do vektorovej DB, vyhľadávaš cez text embedding.
- Tip na lepšie výsledky: dotazy píš ako krátke popisy atribútov („červený neón, nočná ulica, dažďové odlesky“), nie ako sloh.
9. Príbuzné a nadväzujúce modely
CLIP odštartoval celú vlnu vision-language modelov:
- OpenCLIP — otvorené reimplementácie trénované na verejných dátach.
- SigLIP — náhrada kontrastívnej straty za sigmoidovú, lepšia efektivita.
- Vision-language modely používané v multimodálnych asistentoch často stavajú na CLIP-podobnom vizuálnom enkóderi.
Zhrnutie
- CLIP spája text a obraz do jedného embedding priestoru, takže vieš vyhľadávať a klasifikovať „podľa významu“, nie podľa názvov súborov.
- Funguje cez dva enkódery + kontrastívne učenie, ktoré pritiahne správne text–obrázok páry k sebe.
- Najväčší prínos je v retrieval a zero-shot scenároch; limity sú najmä bias a špecifické domény.
- Aj keď CLIP nie je generátor, je dôležitý „neviditeľný“ komponent mnohých multimodálnych produktov.