Przygotowanie do rozmowy rekrutacyjnej z multimodalnego ML
Pytania rekrutacyjne dla inżynierów uczenia maszynowego multimodalnego
15 wybranych pytań rekrutacyjnych z zakresu multimodalnego uczenia maszynowego, pogrupowanych według poziomu doświadczenia. Użyj ich, aby powtórzyć podstawy, praktyczne kompromisy i rozumowanie dotyczące wdrożeń produkcyjnych na poziomie seniorskim.
1Wyjaśnij główną ideę uczenia kontrastywnego dla wyrównywania reprezentacji obrazu i tekstu oraz dlaczego wspólna przestrzeń osadzeń (embedding space) jest użyteczna.
Główną ideą uczenia kontrastywnego dla reprezentacji obrazu i tekstu jest projektowanie wejść obrazu i tekstu do wspólnej ukrytej przestrzeni wektorowej w taki sposób, aby pary pasujące semantycznie (pozytywne) były przyciągane bliżej siebie, natomiast pary niepasujące (negatywne) były odpychane dalej. Poprzez szkolenie oddzielnych enkoderów wizyjnych i tekstowych przy użyciu celów podobieństwa (takich jak podobieństwo cosinusowe), model wyrównuje semantykę ciągłych pikseli wizualnych z dyskretnymi tokenami tekstowymi.
Wspólna przestrzeń osadzeń jest użyteczna, ponieważ pozwala na rozwiązywanie zadań multimodalnych bezpośrednio poprzez wyszukiwanie podobieństwa wektorowego. W tej ujednoliconej przestrzeni między-modalne wyszukiwanie (znajdowanie obrazów na podstawie zapytań tekstowych lub odwrotnie) i klasyfikacja zero-shot (ocenianie osadzenia obrazu względem osadzeń podpowiedzi, np. 'zdjęcie psa') stają się prostymi, bardzo efektywnymi wyszukiwaniami najbliższego sąsiada lub iloczynu skalarnego, bez potrzeby używania głowic klasyfikatorów specyficznych dla zadania.
import torch
import torch.nn.functional as F
# image_features: [B, D], text_features: [B, D]
image_norm = F.normalize(image_features, dim=-1)
text_norm = F.normalize(text_features, dim=-1)
# Pairwise cosine similarity matrix: [B, B]
sim_matrix = image_norm @ text_norm.T
# Positive pairs lie on the diagonal; off-diagonals are negatives
2Wyjaśnij architekturę dwu-enkoderową w stylu CLIP (Contrastive Language-Image Pre-training) i założenia, które przyjmuje ona dotyczące interakcji obraz-tekst.
Architektura dwu-enkoderowa w stylu CLIP składa się z dwóch oddzielnych, rozłącznych sieci neuronowych: enkodera wizualnego (np. `Vision Transformer` lub `ResNet`), który przetwarza obrazy na wektory cech wizualnych, oraz enkodera tekstowego (np. `Transformer`), który przetwarza tekst na wektory cech tekstowych. Obie reprezentacje są projektowane do wspólnego wymiaru osadzenia (embedding dimension), gdzie wyrównanie jest mierzone za pomocą prostej metryki podobieństwa (takiej jak znormalizowane podobieństwo kosinusowe lub iloczyn skalarny). Fundamentalne założenie architektoniczne to fuzja późna (lub sfaktoryzowana interakcja między-modalna): modalności obrazu i tekstu nie oddziałują na poziomach pośrednich poprzez uwagę krzyżową (cross-attention) ani interakcje na poziomie tokenów. Zamiast tego, zakłada się, że pełna semantyka każdej modalności jest kompresowalna do pojedynczego gęstego wektorowego podsumowania, a interakcja między-modalna jest w pełni rozkładalna na iloczyn wewnętrzny. Ten kompromis priorytetyzuje ekstremalną wydajność wyszukiwania (umożliwiając wstępne obliczenia osadzeń obrazów offline dla wyszukiwania wektorowego na skalę miliardów) ponad szczegółowe rozumowanie między-modalne (takie jak uziemianie tokenów do regionów (token-to-region grounding) lub złożone kompozycyjne relacje przestrzenne).
3Opisz intuicję stojącą za rzutowaniem cech obrazu i tekstu do wspólnej znormalizowanej przestrzeni i optymalizowaniem podobieństwa cosinusowego.
Rzutowanie cech obrazu i tekstu do wspólnej znormalizowanej przestrzeni (zazwyczaj na jednostkowej hipersferze za pomocą normalizacji L2) i optymalizowanie podobieństwa cosinusowego oddziela semantyczny kierunek osadzenia od jego długości wektora. Bez normalizacji, nieograniczony iloczyn skalarny pozwala modelowi minimalizować stratę treningową przez trywialne zwiększanie norm cech dla łatwych lub częstych próbek, zamiast dopasowywania ich kierunków semantycznych. Normalizacja wektorów na jednostkowej hipersferze ogranicza wartości podobieństwa ściśle w przedziale [-1, 1], zapewniając, że odległość odpowiada wyłącznie separacji kątowej. Stabilizuje to gradienty optymalizacji, zapobiega eksplozji lub załamaniu reprezentacji i zapewnia, że każda próbka w partii (batch) przyczynia się równie sprawiedliwie do straty, niezależnie od rozbieżności skali specyficznych dla modalności. W połączeniu z parametrem temperatury, który można nauczyć (learnable temperature parameter), kontroluje ostrość rozkładu prawdopodobieństwa na hipersferze, aby zrównoważyć dopasowanie prawdziwych par z równomiernym rozproszeniem par negatywnych.
import torch
import torch.nn.functional as F
# Unnormalized embeddings with extreme norm differences
v = torch.tensor([[10.0, 0.0], [0.1, 0.0]])
t = torch.tensor([[5.0, 0.0], [0.1, 0.0]])
# Raw dot products: heavily distorted by magnitude (50.0 vs 0.01)
raw_dot = v @ t.T
# L2 Normalized:
v_norm = F.normalize(v, p=2, dim=-1)
t_norm = F.normalize(t, p=2, dim=-1)
cosine_sim = v_norm @ t_norm.T
print('Cosine similarity matrix:\n', cosine_sim)
4Wyjaśnij ugruntowanie wizualne (visual grounding) i rozumienie wyrażeń referencyjnych (referring expression comprehension) jako lokalizację warunkowaną językiem, oraz czym różnią się one od podobieństwa na poziomie obrazu.
Ugruntowanie wizualne (visual grounding) (często realizowane jako Rozumienie Wyrażeń Referencyjnych, czyli REC (Referring Expression Comprehension)) to zadanie lokalizowania określonego obszaru wizualnego, ramki ograniczającej (bounding box) lub maski segmentacji (segmentation mask) w obrazie, na podstawie wyrażenia referencyjnego w języku naturalnym (np. „mężczyzna w niebieskiej kurtce obok lampy”). Traktuje lokalizację jako warunkowaną językiem, wymagając od modelu rozwiązania językowych relacji przestrzennych, atrybutów i tożsamości obiektów aż do współrzędnych pikseli lub przestrzennych. Różni się to zasadniczo od podobieństwa na poziomie obrazu (image-level similarity), które oblicza pojedynczy, holistyczny wynik podobieństwa semantycznego między całym obrazem a ciągiem tekstowym (np. określanie, czy obraz pasuje do podpisu „mężczyzna w parku”). Podobieństwo na poziomie obrazu nie generuje współrzędnych przestrzennych, może dopasowywać obrazy, w których obiekt referencyjny nie jest jednoznacznie zlokalizowany, i często zawodzi przy rozwiązywaniu precyzyjnego rozstrzygania niejednoznaczności referencyjnej między wieloma podobnymi obiektami w tej samej scenie.
# Image-level similarity:
# Input: Image I, Text T ("black dog sitting on the left")
# Output: scalar score s in [0, 1] or dot product
similarity_score = image_text_model(image, text)
# Referring Expression Comprehension (Visual Grounding):
# Input: Image I, Text T ("black dog sitting on the left")
# Output: Bounding box coordinates [x_min, y_min, x_max, y_max]
bbox = grounding_model.predict_box(image, text)
5Wyjaśnij uwaga krzyżowa (cross-attention) jako mechanizm fuzji między tokenami wizualnymi a tokenami tekstowymi w transformerach multimodalnych.
W transformerach multimodalnych uwaga krzyżowa (cross-attention) działa jako asymetryczny mechanizm fuzji, w którym jedna modalność kieruje zapytania (Q) do zwrócenia uwagi na klucze (K) i wartości (V) wydobyte z innej modalności. Na przykład, gdy tokeny wizualne działają jako zapytania, a tokeny tekstowe jako klucze i wartości, każdy token wizualny oblicza sumę ważoną uwagą na podstawie reprezentacji tekstowych, dynamicznie warunkując cechy wizualne kontekstem tekstowym (i odwrotnie, gdy tekst zapytuje tokeny wizualne).
Matematycznie, dla danej sekwencji wizualnej $X_v$ i sekwencji tekstowej $X_t$, uwaga krzyżowa oblicza:
`CrossAttention(Q_v, K_t, V_t) = softmax((Q_v * K_t^T) / sqrt(d)) * V_t`
gdzie $Q_v = X_v * W_Q$, $K_t = X_t * W_K$, i $V_t = X_t * W_V$. Mechanizm ten pozwala modelowi na wykonywanie szczegółowego semantycznego dopasowania token-do-tokena między modalnościami, niezależnie od różnic w długościach sekwencji czy początkowych przestrzeniach cech. Dwukierunkowa fuzja może być osiągnięta za pomocą dwóch symetrycznych warstw uwagi krzyżowej (np. wizja-do-języka i język-do-wizji) lub poprzez naprzemienne bloki uwagi krzyżowej.
6Wyjaśnij, jak augmentacje obrazu, takie jak przycinanie (cropping), jitter koloru (color jitter) i kompresja, mogą pomóc lub zaszkodzić kontrastowemu wyrównaniu obraz-tekst.
W wielomodalnym uczeniu kontrastowym (takim jak CLIP), augmentacje obrazu służą innemu celowi niż w jednomodalnym uczeniu bez nadzoru (takim jak SimCLR). Ponieważ obrazy są kontrastowane z sparowanymi podpisami tekstowymi, a nie z innym augmentowanym widokiem tego samego obrazu, augmentacje mogą zarówno korzystnie wpływać, jak i psuć uczenie reprezentacji.
**Jak augmentacje pomagają:**
1. **Zapobieganie uczeniu się skrótami (Shortcut Learning):** Łagodne augmentacje (takie jak losowe przycinanie, łagodne odwracanie w poziomie i umiarkowany jitter koloru) zapobiegają poleganiu kodera wizyjnego na trywialnych, niskopoziomowych artefaktach wizualnych (np. rozkłady kolorów tła, znaki wodne w rogach lub stronniczości pozycji przestrzennej).
2. **Niezmienność punktu widzenia i skali:** Umiarkowane skalowanie i przycinanie zachęcają model do identyfikowania obiektów semantycznych w różnych ogniskowych i perspektywach, zapewniając solidną generalizację typu zero-shot.
**Jak augmentacje mogą szkodzić (Niewspółosiowość semantyczna):**
1. **Agresywne losowe przycinanie (Random Cropping):** Jeśli podpis opisuje konkretny obiekt ('ptak siedzący na gałęzi'), a agresywne przycięcie całkowicie usuwa ptaka, pozostałe przycięcie (tylko liście/niebo) jest nadal zmuszone do dopasowania się do podpisu o ptaku. Wprowadza to fałszywy szum nadzorujący i obniża precyzję wyszukiwania.
2. **Silny jitter koloru / Inwersja odcienia:** Wiele podpisów wyraźnie opisuje atrybuty kolorystyczne ('żółta taksówka', 'czerwone jabłko'). Silne zmiany kolorów zmieniają taksówkę na niebieską lub jabłko na zielone, powodując bezpośrednią sprzeczność semantyczną między wejściem wizualnym a podpisem tekstowym.
3. **Silne rozmycie i kompresja:** Agresywne zmniejszanie rozdzielczości przestrzennej, kompresja JPEG lub rozmycie Gaussa niszczą szczegółowe wskazówki tekstowe (tekst OCR na znakach, logo, drobne tekstury), które są wyraźnie opisane w sparowanych podpisach.
**Praktyczna zasada:** Wielomodalne uczenie kontrastowe wymaga znacznie bardziej konserwatywnych augmentacji (np. Random Resized Crop z zakresem skali [0.5, 1.0] i łagodne odwracanie) niż jednomodalne uczenie bez nadzoru.
7Wyjaśnij zadanie wyszukiwania obrazów i tekstu (image-text retrieval) oraz różnicę między dopasowaniem w zbiorze zamkniętym (closed-set matching) a wyszukiwaniem w otwartym świecie (open-world retrieval) w odniesieniu do dużych korpusów.
Wyszukiwanie obrazów i tekstu (image-text retrieval) to zadanie polegające na znajdowaniu odpowiadających sobie danych w różnych modalnościach, na podstawie zapytania w jednej modalności (tekst-do-obrazu lub obraz-do-tekstu). Zazwyczaj osiąga się to poprzez mapowanie zarówno obrazów, jak i tekstów do wspólnej przestrzeni reprezentacji, gdzie podobieństwo koreluje z trafnością. Dopasowanie w zbiorze zamkniętym (closed-set matching) zakłada stałą, predefiniowaną pulę kandydatów ze znanymi prawdziwymi parami (ground-truth), takimi jak standardowe zbiory testowe (benchmarks) Flickr30k czy MS-COCO, co pozwala na wyczerpujące obliczenia podobieństwa parami lub uwagę krzyżową (cross-attention) wszystkich ze wszystkimi. Wyszukiwanie w otwartym świecie (open-world retrieval) operuje na masowych, dynamicznych, niekuratorowanych korpusach (np. od milionów do miliardów pozycji z sieci lub katalogów), gdzie pule kandydatów są nieograniczone, rozpraszacze i fałszywe negatywy są powszechne, a skalowalne indeksy wyszukiwania przybliżonych najbliższych sąsiadów (ANN - Approximate Nearest Neighbor), takie jak Faiss czy HNSW, są wymagane, ponieważ wyczerpująca uwaga krzyżowa (cross-attention) wszystkich par jest obliczeniowo niepraktyczna.
import torch
import torch.nn.functional as F
# Closed-set matching: full pairwise similarity matrix over fixed evaluation set
image_embeds = F.normalize(torch.randn(1000, 512), dim=-1)
text_embeds = F.normalize(torch.randn(1000, 512), dim=-1)
sim_matrix = torch.matmul(text_embeds, image_embeds.T) # (1000, 1000)
# Open-world retrieval: query vector queried against an indexed corpus using ANN
# index = faiss.IndexHNSWFlat(512, 32)
# distances, indices = index.search(query_embed, k=10)
8Porównaj kontrastywne funkcje straty typu InfoNCE z funkcją softmax z parami sigmoidowych funkcji straty dla uczenia osadzeń (embeddingów) obrazowo-tekstowych.
Kontrastywne funkcje straty typu InfoNCE (takie jak w CLIP) traktują dopasowanie jako kategoryczny problem klasyfikacji wieloklasowej. Dla każdej próbki obliczają rozkład softmax dla wszystkich kandydatów na pary negatywne w partii (batch), normalizując podobieństwa w całej puli partii. Natomiast parami sigmoidowe funkcje straty kontrastywnej (takie jak w SigLIP) traktują każdy wpis w macierzy podobieństwa obraz-tekst jako niezależne zadanie klasyfikacji binarnej, stosując funkcję sigmoid i binarną funkcję straty entropii krzyżowej (binary cross-entropy loss) dla każdej pary (pary pozytywne celują w +1, pary negatywne w -1). Kluczowe różnice to:
1. **Sprzężenie kontra rozprzężenie**: InfoNCE sprzęga wszystkie negatywy poprzez globalny mianownik partycji softmax, powodując konkurencję, gdzie najtrudniejsze negatywy dominują gradienty. SigLIP rozprzęga wszystkie pary, oceniając każdą niezależnie.
2. **Skalowalność rozproszona i wydajność**: InfoNCE wymaga zbierania macierzy podobieństwa z różnych GPU dla globalnej normalizacji (wąskie gardło komunikacji typu all-gather). Niezależna parami funkcja straty SigLIP może być obliczana lokalnie bez globalnej normalizacji softmax między GPU, poprawiając efektywność skalowania i pozostając stabilną zarówno przy małych, jak i bardzo dużych rozmiarach partii (batch sizes).
import torch
import torch.nn.functional as F
def siglip_loss(sim_matrix, temperature, bias):
# sim_matrix: [B, B] dot product of normalized embeddings
# targets: 1 on diagonal (positive), -1 on off-diagonals (negative)
B = sim_matrix.size(0)
targets = 2 * torch.eye(B, device=sim_matrix.device) - 1.0
logits = sim_matrix * temperature + bias
# Pairwise binary cross entropy with log-sigmoid
return -torch.mean(F.logsigmoid(targets * logits))
9Wyjaśnij, jak trudne negatywy i fałszywe negatywy wpływają na kontrastowe uczenie się obraz-tekst.
Trudne negatywy i fałszywe negatywy mają przeciwstawne efekty na kontrastowe uczenie się obraz-tekst:
1. **Trudne negatywy** to niepasujące pary, które są semantycznie lub wizualnie bardzo bliskie kotwicy (np. obraz husky syberyjskiego sparowany z podpisem „malamut alaskański”). Trudne negatywy dostarczają silnych, informacyjnych sygnałów gradientowych. Zmuszają model do wyjścia poza ogólne cechy kategorii i uczenia się szczegółowych wizualno-lingwistycznych detali oraz ostrych granic decyzyjnych.
2. **Fałszywe negatywy** występują, gdy losowo próbkowane „negatywne” pary w partii są w rzeczywistości prawidłowymi dopasowaniami semantycznymi (np. dwa różne zdjęcia golden retrieverów, gdzie jedno jest sparowane jako negatyw wobec „uroczego golden retrievera w parku”). Fałszywe negatywy karzą poprawne dopasowania semantyczne, zmuszając model do rozsuwania prawidłowo dopasowanych reprezentacji. To psuje gradienty, obniża jakość reprezentacji i tłumi uzasadnioną synonimię oraz wariancję wizualną. Strategie łagodzenia fałszywych negatywów obejmują cele kontrastowe z wygładzaniem etykiet/miękkie, odchylone kontrastowe uczenie się, deduplikację zbioru danych i dopasowywanie wielopozytywowe.
import torch
import torch.nn.functional as F
# Image 0 and Image 1 both depict 'a red sports car'
# Text 0: 'a red sports car', Text 1: 'a fast red car'
# In standard InfoNCE, Text 1 is treated as a negative for Image 0.
sim = torch.tensor([[0.95, 0.90], # Image 0 similarities
[0.88, 0.94]]) # Image 1 similarities
loss_img0 = -F.log_softmax(sim / 0.07, dim=-1)[0, 0]
print(f'InfoNCE loss for Image 0: {loss_img0.item():.4f}')
# High similarity to false negative Text 1 (0.90) heavily penalizes the model
10Porównaj globalne dopasowanie obrazu do tekstu z celami dopasowania na poziomie regionu-słowa lub tokenu.
Globalne dopasowanie obrazu do tekstu mapuje cały obraz i całą sekwencję tekstową w pojedyncze, holistyczne wektory osadzeń (np. poprzez agregowane cechy w CLIP) i dopasowuje je za pomocą celu kontrastywnego, takiego jak InfoNCE. Zapewnia to doskonałe właściwości skalowania, szybkie, indeksowalne reprezentacje do wyszukiwania oraz silne grupowanie semantyczne. Cierpi jednak na grubą ziarnistość przestrzenną, ma problemy z drobnymi szczegółami wizualnymi, kompozycyjnością, liczeniem i relacjami przestrzennymi, a także często wykazuje problemy z wiązaniem atrybutów. Natomiast dopasowanie na poziomie regionu-słowa lub tokenu działa na drobnoziarnistych poziomach podobrazu (np. tokeny łat, cechy ramek ograniczających obiektów) i podzdania (np. tokeny słów lub pod-słów). Metody takie jak FILIP, GLIP czy VinVL dopasowują tokeny za pomocą drobnoziarnistych strat kontrastywnych (takich jak maksymalne podobieństwo tokenów lub podobieństwo Chamfer) lub dopasowania za pomocą transportu optymalnego / uwagi krzyżowej (cross-attention). Wyraźnie zachowuje to przestrzenne i językowe szczegóły kompozycyjne, umożliwiając detekcję obiektów, uziemienie wizualne (visual grounding) i precyzyjne wiązanie atrybutów, ale kosztem wyższej złożoności obliczeniowej i pamięciowej, większego opóźnienia wnioskowania i bardziej zaszumionych sygnałów dopasowania.
import torch
import torch.nn.functional as F
# visual_tokens: [B, N_v, D], text_tokens: [B, N_t, D]
def token_level_maxsim_similarity(visual_tokens, text_tokens):
v_norm = F.normalize(visual_tokens, dim=-1)
t_norm = F.normalize(text_tokens, dim=-1)
# Compute similarity matrix between all visual and text tokens: [B, N_t, N_v]
sim_matrix = torch.bmm(t_norm, v_norm.transpose(1, 2))
# Text-to-image: For each word token, find maximum visual token similarity and average
t2i_sim = sim_matrix.max(dim=-1).values.mean(dim=-1) # [B]
return t2i_sim
11Porównaj fuzję wczesną (early fusion), fuzję późną (late fusion), fuzję pośrednią (intermediate fusion), fuzję z uwagą krzyżową (cross-attention fusion), fuzję bramkowaną (gated fusion) i konkatenację dla modeli multimodalnych.
Strategie fuzji multimodalnej integrują sygnały wzrokowe i językowe na różnych poziomach głębokości i w różnych konfiguracjach strukturalnych:
1. **Fuzja Wczesna (Early Fusion):** Surowe lub niskopoziomowe cechy (np. osadzenia fragmentów obrazu i osadzenia tokenów słów) są łączone na etapie wejściowym i wprowadzane do pojedynczego, współdzielonego rdzenia (backbone). Umożliwia to głębokie interakcje między-modalne od warstwy zerowej, ale jest kosztowne obliczeniowo i utrudnia ponowne wykorzystanie pre-treningu unimodalnego.
2. **Fuzja Późna (Late Fusion):** Modalności są przetwarzane niezależnie przez głębokie unimodalne rdzenie (backbones) na globalne wektory reprezentacji, które są łączone dopiero na samym końcu za pomocą prostej agregacji (np. iloczyn skalarny, podobieństwo kosinusowe lub płytki MLP – Multi-Layer Perceptron). Jest to niezwykle wydajne i idealne do wyszukiwania indeksowalnego, ale nie jest w stanie uchwycić drobnoziarnistych interakcji między-modalnych.
3. **Fuzja Pośrednia (Intermediate Fusion):** Unimodalne rdzenie (backbones) przetwarzają dane wejściowe przez kilka warstw, a fuzja następuje na etapach pośrednich poprzez współdzielone warstwy lub połączenia boczne, co stanowi równowagę między specjalizacją unimodalną a interakcją multimodalną.
4. **Fuzja z Uwagą Krzyżową (Cross-Attention Fusion):** Wykorzystuje uwagę wielogłowicową (multi-head attention), gdzie jedna modalność dostarcza zapytań (queries), a druga kluczy/wartości (keys/values). Oferuje wysoką zdolność reprezentacyjną z warunkowaniem typu token-to-token, uwzględniając heterogeniczne długości sekwencji.
5. **Fuzja Bramkowana (Gated Fusion):** Wykorzystuje nauczone mechanizmy bramkowania (np. bramki sigmoidalne lub tanh), aby dynamicznie ważyć wkład każdej modalności lub warstwy fuzji w oparciu o pewność kontekstową, zapobiegając dominacji jednej modalności lub uszkodzeniu wstępnie wytrenowanych wag.
6. **Konkatenacja (Concatenation):** Łączy wektory cech lub sekwencje tokenów wzdłuż wymiaru cech (konkatenacja cech) lub wymiaru długości sekwencji (konkatenacja tokenów przed ujednoliconym transformatorem). Jest to proste i nieparametryczne, ale konkatenacja cech wymaga wyrównanych wymiarów przestrzennych/czasowych, podczas gdy konkatenacja tokenów skaluje się kwadratowo z całkowitą długością sekwencji w mechanizmie self-attention.
12Porównaj modele wyszukiwania z dwoma enkoderami (dual-encoder retrieval models) z re-rankerami z enkoderami krzyżowymi (cross-encoder rerankers) w kontekście dopasowania obrazu do tekstu pod względem pojemności interakcji, dokładności i opóźnienia.
Modele z dwoma enkoderami (dual-encoder, bi-encoder) i re-rankery z enkoderami krzyżowymi (cross-encoder) reprezentują dwa odrębne paradygmaty dopasowywania obrazu do tekstu, oferując fundamentalne kompromisy między pojemnością interakcji, dokładnością i opóźnieniem:
1. **Pojemność interakcji:**
* **Dwa enkodery (np. CLIP):** Przetwarzają obraz i tekst za pomocą oddzielnych, rozłączonych architektur bazowych (backbones). Interakcja multimodalna jest ściśle późna i płytka, ograniczona do pojedynczego iloczynu skalarnego (dot product) lub podobieństwa kosinusowego (cosine similarity) między globalnie uśrednionymi wektorami. Brakuje im interakcji między modalnościami na poziomie tokenów.
* **Enkodery krzyżowe (np. UNITER, ViLT, ALBEF multimodal branch):** Łączą tokeny wizualne i tekstowe w jednym wspólnym transformerze lub używają warstw uwagi krzyżowej (cross-attention layers). Każdy token wizualny może oddziaływać z każdym tokenem tekstowym w wielu warstwach, umożliwiając głębokie wnioskowanie między modalnościami.
2. **Dokładność:**
* Dwa enkodery osiągają niższą dokładność w przypadku złożonych zapytań kompozycyjnych, relacji przestrzennych, negacji i dopasowywania atrybutów o wysokiej granularności ze względu na wąskie gardło reprezentacji jednowektorowych.
* Enkodery krzyżowe osiągają znacznie wyższą dokładność w złożonych, szczegółowych i kompozycyjnych zadaniach dopasowania obrazu do tekstu.
3. **Opóźnienie i skalowalność:**
* Dwa enkodery umożliwiają wstępne obliczanie i indeksowanie embeddingów obrazów offline w wektorowej bazie danych (np. Milvus, FAISS). W czasie wnioskowania (inference time) tylko zapytanie tekstowe jest kodowane, a wyszukiwanie wśród milionów kandydatów wymaga jedynie lekkich iloczynów skalarnych dla przybliżonego wyszukiwania najbliższych sąsiadów (ANN - Approximate Nearest Neighbor) (opóźnienie poniżej milisekundy).
* Enkodery krzyżowe wymagają uruchomienia pełnej wspólnej sieci neuronowej dla każdej pary kandydatów (obraz, tekst) w czasie zapytania (O(N) przejść w przód dla N kandydatów), co skutkuje opóźnieniem o rzędy wielkości większym i czyni je obliczeniowo zaporowymi dla wyszukiwania pierwszego etapu (first-stage retrieval) w dużych korpusach. W praktycznych systemach produkcyjnych standardowy jest dwuetapowy potok: dwu-enkoder pobiera top-K kandydatów (np. K=100) z niskim opóźnieniem, a następnie enkoder krzyżowy re-rankuje je dla wysokiej dokładności.
13Zaprojektuj multimodalny system RAG (Retrieval Augmented Generation) dla plików PDF lub instrukcji zawierających tekst, tabele, wykresy, zrzuty ekranu, diagramy i osadzone obrazy.
Kompleksowy multimodalny system RAG (Retrieval Augmented Generation) dla złożonych dokumentów wizualnych (PDF, instrukcje, raporty) obejmuje cztery główne etapy architektury:
1. **Ingestia i parsowanie z uwzględnieniem układu (Layout-Aware Parsing):** Strony PDF są przetwarzane za pomocą modeli dokumentów uwzględniających układ (np. LayoutLM, DocTR) lub potoków parsowania wizualnego w celu segmentacji treści na ustrukturyzowane bloki: fragmenty tekstu, ustrukturyzowane tabele (konwertowane do HTML/Markdown z rozpiętościami komórek), renderowane obrazy wykresów z seriami danych oraz samodzielne diagramy lub zrzuty ekranu z przestrzennymi ramkami ograniczającymi (bounding boxes).
2. **Multimodalne indeksowanie i podwójna reprezentacja:**
* **Zasoby wizualne (Wykresy, Zrzuty ekranu, Diagramy):** Przechowywane jako wycinki obrazów z gęstymi osadzeniami multimodalnymi (np. SigLIP, CLIP lub wizualne tokeny łatek ColPali) wraz z syntetycznymi podsumowaniami tekstowymi i tekstem OCR (Optical Character Recognition) generowanym przez model wizualno-językowy (Vision-Language Model – VLM), przechowywane w gęstym indeksie tekstowym.
* **Tabele:** Przechowywane jako ustrukturyzowany Markdown/HTML w wektorowych indeksach tekstowych i indeksach BM25.
* **Tekst:** Dzielony na sekcje semantyczne i indeksowany za pomocą gęstych osadzeń oraz rzadkich słów kluczowych.
3. **Hybrydowe wyszukiwanie (Hybrid Retrieval) i multimodalne ponowne rankowanie (Multimodal Reranking):**
* **Wyszukiwanie pierwszego etapu:** Uruchamia równoległe wyszukiwanie w rzadkich indeksach BM25 (słowa kluczowe, tekst OCR, oznaczenia tabel), gęstych wektorach tekstowych i wizualnych indeksach osadzeń (wyszukiwanie ANN (Approximate Nearest Neighbor)).
* **Fuzja i ponowne rankowanie:** Łączy kandydatów (np. za pomocą Reciprocal Rank Fusion) i punktuje najlepsze elementy przy użyciu multimodalnego koder-krzyżowego (cross-encoder) lub wizualnego modelu późnej interakcji (oceniającego tekst zapytania względem obrazów o wysokiej rozdzielczości i sparsowanego tekstu).
4. **Agregacja kontekstu multimodalnego i ugruntowana generacja (Grounded Generation):** Najlepsze \(k\) kontekstu multimodalnego — renderowane fragmenty obrazów, schematy tabel i fragmenty tekstu z metadanymi dokumentu/strony — są przekazywane do modelu VLM dostrojonego do instrukcji (np. GPT-4o, Claude 3.5 Sonnet lub open-source Qwen2-VL). Prompt generacyjny wymusza pochodzenie źródła, wymagając jawnych cytatów (numery stron, numery figur lub ramki ograniczające).
from dataclasses import dataclass
from typing import Optional, List
@dataclass
class MultimodalChunk:
chunk_id: str
document_id: str
page_number: int
modality_type: str # 'text', 'table', 'chart', 'diagram'
text_payload: str # Raw text or structured Markdown/HTML
vlm_caption: Optional[str] = None # Synthetic summary of visual content
bbox: Optional[List[float]] = None # [x0, y0, x1, y1]
image_crop_path: Optional[str] = None
dense_embedding: Optional[List[float]] = None
# Indexing strategy: Text search covers text_payload + vlm_caption;
# Multimodal search matches dense_embedding or visual tokens.
14Wyjaśnij, jak ewaluacja multimodalnego RAG (Retrieval Augmented Generation) powinna oddzielnie mierzyć jakość wyszukiwania, wykorzystanie dowodów, pochodzenie i wierność ostatecznej odpowiedzi.
Ewaluacja multimodalnego RAG wymaga rozłożenia systemu na cztery rozdzielone wymiary oceny, aby precyzyjnie określić, czy błędy pochodzą z wyszukiwania, zużycia kontekstu, dokładności cytowania czy generacji:
1. **Jakość wyszukiwania**: Ocenia, czy moduł wyszukiwania (retriever) identyfikuje niezbędne wizualne i tekstowe fragmenty. Kluczowe metryki obejmują multimodalne Recall@K, NDCG@K i MRR. Dla elementów wizualnych obejmuje to również wizualne IoU (Intersection over Union) / trafność ramek ograniczających (Bounding-Box Recall) (czy pobrany wycinek obrazu zawiera odpowiedni schemat/wykres) oraz równowagę kompletności modalności (Modality Recall Balance) (zapewnienie, że modalności nietekstowe, takie jak tabele i wykresy, nie są systematycznie pomijane).
2. **Wykorzystanie dowodów (wystarczalność i niezbędność)**: Mierzy, czy model generujący faktycznie opiera się na pobranych multimodalnych dowodach, a nie generuje odpowiedzi wyłącznie z pamięci parametrycznej. Jest to mierzone za pomocą trafności kontekstu (Context Relevance) (precyzja pobranych wizualnych/tekstowych tokenów wspierających pytanie), niezbędności dowodów / testów ablacji (Evidence Necessity / Ablation Testing) (maskowanie lub usuwanie pobranego wykresu/tabeli w celu weryfikacji, czy odpowiedź staje się błędna) oraz analizy atrybucji uwagi krzyżowej (cross-attention attribution analysis).
3. **Pochodzenie i dokładność cytowania**: Mierzy, czy przypisania źródeł są precyzyjne i weryfikowalne. Oceniane za pomocą Precision, Recall i F1 dla cytowań (nazwy dokumentów, numery stron, identyfikatory figur lub współrzędne ramek ograniczających). Automatyczne sprawdzenia weryfikują, czy cytowana ramka ograniczająca lub strona faktycznie zawiera dowody oparte na prawdzie podstawowej (ground-truth evidence), niezbędne do odpowiedzi na pytanie.
4. **Wierność i poprawność ostatecznej odpowiedzi**:
* **Wierność / Ugruntowanie (Faithfulness / Grounding)**: Ocenia, czy każde wygenerowane twierdzenie jest implikowane przez pobrany multimodalny kontekst bez halucynacji (zazwyczaj oceniane za pomocą VLM (Vision-Language Model) jako sędziego sprawdzającego implikację twierdzenia względem wycinków tekstu i obrazu).
* **Poprawność faktograficzna (Factual Correctness)**: Ocenia, czy wygenerowana odpowiedź odpowiada prawdzie podstawowej (ground truth).
* **Odporność na odmowę (Refusal Robustness)**: Testuje, czy model poprawnie odmawia odpowiedzi, gdy pobrany kontekst jest nieistotny lub sprzeczny.
# Evaluation record schema for a single Multimodal RAG query:
eval_record = {
'retrieval_quality': {
'hit_at_k': True, # Top-3 chunks contain target diagram
'visual_bbox_iou': 0.85 # Retrieved crop overlap with true figure region
},
'evidence_utilization': {
'necessity_ablation_passed': True # Removing chart causes answer to fail
},
'provenance': {
'page_match': True, # Cited Page 12 (Ground Truth Page 12)
'figure_id_match': True # Cited 'Figure 4'
},
'faithfulness': {
'claim_entailment_score': 1.0, # All claims entailed by context
'hallucination_detected': False
}
}
all_passed = all(all(metrics.values()) for metrics in eval_record.values())
print(f'System passes all decoupled checks: {all_passed}')
15Omów aktualizację produkcyjnych multimodalnych modeli wyszukiwania, gdy osadzenia galerii i indeksy muszą być odświeżane na dużą skalę.
Aktualizacja multimodalnego systemu wyszukiwania na dużą skalę stanowi problem dryfu reprezentacji (representation drift): nowo wygenerowane osadzenia (embeddings) znajdują się w innej geometrycznej przestrzeni ukrytej i nie mogą być bezpośrednio porównywane z istniejącymi osadzeniami galerii bez poważnego pogorszenia kompletności (recall degradation). W konsekwencji aktualizacje bez przestojów (zero-downtime) wymagają albo wdrożeń blue/green z podwójnym indeksem, albo nauki kompatybilności (takiej jak szkolenie wstecznie kompatybilne lub adaptery transformacji), albo etapowych potoków ponownego indeksowania.
W standardowym procesie ponownego indeksowania blue/green, zadania wsadowe offline obliczają nowe osadzenia w całej galerii i budują nowy indeks wektorowy (taki jak HNSW lub IVF). Podczas gdy przebudowa trwa, ruch wyszukiwania na żywo kontynuuje odpytywanie aktywnego starego indeksu. Nowe przychodzące elementy są obsługiwane za pomocą podwójnego zapisu (dual-writing) lub strumieniowych logów przechwytywania zmian danych (CDC - Change Data Capture), tak aby oba indeksy pozostawały aktualne. Gdy nowy indeks zostanie zwalidowany za pomocą ruchu w tle (shadow traffic) i rozgrzany w pamięci, ruch przełącza się atomowo na nowy enkoder i indeks, po czym stary indeks jest wycofywany z użycia. Alternatywnie, uczenie wstecznie kompatybilne (backward-compatible learning) ogranicza nowy enkoder zapytań, aby dopasować go do przestrzeni starej galerii, umożliwiając natychmiastowe aktualizacje modelu zapytań, jednocześnie asynchronicznie uzupełniając galerię w czasie.
class MultimodalRetrievalRouter:
def __init__(self, v1_service, v2_service, dual_write=True):
self.v1 = v1_service # Model v1 + Index v1
self.v2 = v2_service # Model v2 + Index v2
self.active_version = "v1"
self.dual_write = dual_write
def search(self, query_multimodal):
# Route query strictly to the encoder matching the active index
if self.active_version == "v1":
return self.v1.search(query_multimodal)
return self.v2.search(query_multimodal)
def ingest_new_item(self, item):
# Dual-write during migration window so the new index is up-to-date at cutover
self.v1.index_item(item)
if self.dual_write and self.v2.is_ready_for_ingest:
self.v2.index_item(item)