Ricerca semantica multimodale con immagini e testo
Come esseri umani, interpretiamo il mondo attraverso i nostri sensi. Sentiamo suoni, vediamo immagini, video e testi, spesso sovrapposti. Comprendiamo il mondo attraverso queste modalità multiple e la relazione tra di esse. Affinché l'intelligenza artificiale possa davvero eguagliare o superare le capacità umane, deve sviluppare la stessa capacità di comprendere il mondo attraverso più lenti contemporaneamente.
In questo post e nel video che lo accompagna (sopra) e nel notebook, presenteremo i recenti progressi dei modelli in grado di elaborare insieme testo e immagini. Lo dimostreremo costruendo un'applicazione di ricerca semantica che va oltre la semplice corrispondenza delle parole chiave: comprende la relazione tra ciò che gli utenti chiedono e il contenuto visivo che stanno cercando.
Ciò che rende questo progetto particolarmente interessante è che è costruito interamente con strumenti open-source: il database vettoriale Milvus, le librerie di machine learning di HuggingFace e un set di dati di recensioni di clienti Amazon. È straordinario pensare che solo un decennio fa, costruire qualcosa di simile avrebbe richiesto notevoli risorse proprietarie. Oggi questi potenti componenti sono liberamente disponibili e possono essere combinati in modi innovativi da chiunque abbia la curiosità di sperimentare.
La nostra applicazione di ricerca multimodale è del tipo retrieve-and-rerank. Se avete familiarità con la retrieval-augmented-generation (RAG), è molto simile, solo che l'output finale è un elenco di immagini che sono state rerankizzate da un modello di visione linguistica di grandi dimensioni (LLVM). La query di ricerca dell'utente contiene sia testo che immagini e l'obiettivo è un insieme di immagini indicizzate in un database vettoriale. L'architettura prevede tre fasi - indicizzazione, recupero e riclassificazione (simile alla "generazione") - che riassumiamo di seguito.
Indicizzazione
La nostra applicazione di ricerca deve avere qualcosa da cercare. Nel nostro caso, utilizziamo un piccolo sottoinsieme del dataset "Amazon Reviews 2023", che contiene sia testo che immagini di recensioni di clienti Amazon di tutti i tipi di prodotti. Si può immaginare che una ricerca semantica come quella che stiamo costruendo sia un'utile aggiunta a un sito web di commercio elettronico. Utilizziamo 900 immagini e scartiamo il testo, anche se osserviamo che questo notebook può raggiungere le dimensioni di produzione con il giusto database e le giuste implementazioni di inferenza.
Il primo elemento "magico" della nostra pipeline è la scelta del modello di incorporazione. Utilizziamo un modello multimodale di recente sviluppo, chiamato Visualized BGE, in grado di incorporare testo e immagini insieme, o separatamente, nello stesso spazio con un unico modello in cui i punti vicini sono semanticamente simili. Recentemente sono stati sviluppati altri modelli di questo tipo, come ad esempio MagicLens.
La figura sopra illustra: l'embedding per [un'immagine di un leone di lato] più il testo "vista frontale di questo", è vicino all'embedding per [un'immagine di un leone di fronte] senza testo. Lo stesso modello viene utilizzato sia per gli input con testo e immagine che per quelli con sola immagine (e per quelli con solo testo). In questo modo, il modello è in grado di comprendere l'intento dell'utente nel modo in cui il testo della query si relaziona con l'immagine della query.
Abbiamo incorporato le nostre 900 immagini di prodotti senza il testo corrispondente e abbiamo memorizzato le incorporazioni in un database vettoriale utilizzando Milvus.
Recupero
Ora che il nostro database è stato costruito, possiamo servire una query all'utente. Immaginiamo che un utente si presenti con la domanda: "una custodia per telefono con questo" più [un'immagine di Leopard]. In altre parole, sta cercando custodie per telefoni con stampe leopardiane.
Si noti che il testo della query dell'utente diceva "questo" piuttosto che "una pelle di Leopardo". Il nostro modello di embedding deve essere in grado di collegare "questo" a ciò a cui si riferisce, il che è un'impresa impressionante dato che la precedente iterazione di modelli non era in grado di gestire istruzioni così aperte. Il documento MagicLens fornisce ulteriori esempi.
Incorporiamo il testo e l'immagine della query ed eseguiamo una ricerca di similarità nel nostro database vettoriale, restituendo i nove risultati migliori. I risultati sono mostrati nella figura qui sopra, insieme all'immagine del leopardo. Sembra che il primo risultato non sia il più rilevante per la query. Il settimo risultato sembra essere il più rilevante: si tratta di una cover per telefono con una stampa leopardata.
Generazione
Sembra che la nostra ricerca sia fallita perché il primo risultato non è il più pertinente. Tuttavia, possiamo risolvere il problema con una fase di reranking. Forse conoscete il reranking degli elementi recuperati come una fase importante di molte pipeline RAG. Utilizziamo Phi-3 Vision come modello di reranking.
Per prima cosa chiediamo a LLVM di generare una didascalia dell'immagine richiesta. L'LLVM produce:
"L'immagine mostra un primo piano del volto di un leopardo, con particolare attenzione alla sua pelliccia maculata e agli occhi verdi".
Quindi, dopo aver inserito questa didascalia, una singola immagine con i nove risultati e l'immagine di query, costruiamo un prompt testuale che chiede al modello di riordinare i risultati, fornendo la risposta sotto forma di elenco e motivando la scelta della corrispondenza migliore.
Il risultato è visualizzato nella figura qui sopra: l'elemento più pertinente è ora il top match e la motivazione fornita è:
"L'articolo più adatto è quello con il tema del leopardo, che corrisponde alla richiesta dell'utente di una custodia per telefono con un tema simile".
Il nostro re-ranker LLVM è stato in grado di eseguire la comprensione tra immagini e testo e di migliorare la rilevanza dei risultati della ricerca. Un artefatto interessante è che il re-ranker ha fornito solo otto risultati e ne ha abbandonato uno, il che evidenzia la necessità di guardrail e di output strutturati.
Sintesi
In questo post e nei video e quaderni che lo accompagnano, abbiamo costruito un'applicazione per la ricerca semantica multimodale su testo e immagini. Il modello di embedding è stato in grado di incorporare testo e immagini congiuntamente o separatamente nello stesso spazio, mentre il modello di fondazione è stato in grado di inserire testo e immagini generando testo in risposta. È importante notare che il modello di embedding è stato in grado di mettere in relazione l'intento dell'utente di un'istruzione aperta con l'immagine della query e di specificare in questo modo come l'utente voleva che i risultati si riferissero all'immagine inserita.
Questo è solo un assaggio di ciò che avverrà nel prossimo futuro. Vedremo molte applicazioni di ricerca multimodale, comprensione e ragionamento multimodale e così via attraverso diverse modalità: immagini, video, audio, molecole, social network, dati tabellari, serie temporali, il potenziale è illimitato.
Al centro di questi sistemi c'è un database vettoriale che costituisce la "memoria" esterna del sistema. Milvus è una scelta eccellente per questo scopo. È open-source, completo di tutte le funzionalità (si veda questo articolo sulla ricerca full-text in Milvus 2.5) e scala in modo efficiente fino a miliardi di vettori con un traffico su scala web e una latenza inferiore a 100ms. Per saperne di più, consultate i documenti di Milvus, unitevi alla nostra comunità Discord e spero di vedervi al nostro prossimo meetup sui dati non strutturati. Fino ad allora!
Risorse
Appunti: "Ricerca multimodale con recensioni Amazon e LLVM Reranking".
Modello di incorporazione: Scheda modello BGE visualizzata
Modello di incorporamento alternativo: Repo del modello MagicLens
Documento: "MagicLens: recupero di immagini auto-supervisionato con istruzioni aperte".
Set di dati: Recensioni Amazon 2023
- Indicizzazione
- Recupero
- Generazione
- Sintesi
- Risorse
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word