Migliorare la ricerca di prodotti di e-commerce utilizzando LLM

Migliorare la ricerca di prodotti di e-commerce con LLM

Applicare LLM per rendere i motori di ricerca di e-commerce robusti alle query colloquiali

Foto di Oberon Copeland @veryinformed.com su Unsplash

Negli ultimi anni, i motori di ricerca web hanno rapidamente adottato i Large Language Models (LLMs) per aumentare le loro capacità di ricerca. Uno degli esempi più riusciti è la ricerca di Google alimentata da BERT [1]. In confronto, molte piattaforme di e-commerce sono relativamente più conservative nell’applicare questa tecnica emergente alla ricerca dei loro prodotti. In questo articolo, dimostrerò come i LLM possono essere applicati per migliorare la capacità di comprensione della ricerca dei prodotti di e-commerce quando si trovano query di ricerca colloquiali e implicite.

Enunciato del problema

Nonostante i pionieri come Amazon [2], molte piattaforme di e-commerce si affidano ancora pesantemente a tecniche di recupero tradizionali come TFIDF e BM25 per la ricerca di prodotti. Questi metodi sparsi richiedono di solito ai clienti di digitare query esplicite che corrispondano alle informazioni sui prodotti e faticano a ottenere una buona rilevanza per le query colloquiali e implicite. Di conseguenza, il motore di ricerca restituisce o nessun risultato o risultati con bassa rilevanza che ignorano l’esistenza di quelli rilevanti, danneggiando l’esperienza del cliente e le metriche aziendali.

Ad esempio, Ebay restituisce “Nessuna corrispondenza esatta trovata” per la query “Quali sono i migliori regali per ragazzi sotto i 5 anni?”. Anche se la soluzione “Risultati che corrispondono a meno parole” evita la situazione di “nessun risultato”, la sua rilevanza di ricerca ha un evidente potenziale di miglioramento.

Figura 1. Risultati di ricerca di Ebay per la query 'Quali sono i migliori regali per ragazzi sotto i 5 anni?' | Fonte: Ebay.com

Alcune persone potrebbero sostenere che sia raro che si verifichino tali query. Tuttavia, non è raro che molte opportunità e progressi siano effettivamente guidati dai casi d’uso che vengono sottovalutati all’inizio.

Soluzione basata su LLM

Oggi, grazie allo sviluppo rapido dei LLM, è possibile creare rapidamente prototipi senza preoccuparsi dello sforzo necessario per costruire soluzioni interne da zero. Questo mi permette di scoprire rapidamente come affrontare il problema.

Come mostrato nell’immagine sottostante, l’idea è piuttosto semplice. Il LLM viene sfruttato per tradurre la query grezza in una query migliorata che mira a contenere le informazioni esplicite sul prodotto per la ricerca. Potenzialmente, la gamma di prodotti coperti nella query migliorata potrebbe essere ampia per la query grezza che è implicita e sfocata. Di conseguenza, inviare direttamente la query migliorata al motore di ricerca basato su parole chiave probabilmente porterà a risultati scadenti a causa della sua ambiguità e incertezza. Come soluzione, viene adottata l’incorporazione del LLM per affrontare la complessità semantica. In particolare, la query migliorata viene proiettata nello spazio di incorporazione che contiene le incorporazioni di prodotto preelaborate. Successivamente, il recupero del prodotto viene effettuato confrontando la similarità tra l’incorporazione della query e le incorporazioni dei prodotti, che generano quindi i prodotti migliori come risultati di ricerca.

Figura 2. Flusso di lavoro della soluzione proposta | Immagine dell'autore

Esistono una vasta gamma di tecniche per implementare l’idea poiché esistono molte opzioni per ogni passaggio. Qui, fornisco un esempio di implementazione basato su Hugging Face e LangChain. Il codice effettivo è ospitato nel repository Github sottostante, con i dettagli spiegati come segue.

ML_experiments/LLM_search_exp.ipynb su main · simon19891101/ML_experiments

Contribuisci allo sviluppo di simon19891101/ML_experiments creando un account su GitHub.

github.com

Genera la query migliorata

Prima di tutto, viene adottato il recentemente annunciato Llama 2 come LLM per generare la query migliorata per una determinata query grezza. Come mostrato di seguito, viene utilizzato il pipeline di Hugging Face, considerando la sua semplicità. È importante notare che il pipeline stesso è sufficiente per completare il compito, quindi l’uso di LangChain è completamente opzionale. Il template di prompt adottato qui mira a generare nomi di prodotti rilevanti e diversi per affrontare l’incertezza della query grezza.

from transformers import AutoTokenizerimport transformersimport torchmodel = "meta-llama/Llama-2-7b-chat-hf"tokenizer = AutoTokenizer.from_pretrained(model, use_auth_token=True)pipeline = transformers.pipeline(    "text-generation",    model=model,    torch_dtype=torch.float16,    device_map="auto",    do_sample=False,    top_k=1,    num_return_sequences=1,    eos_token_id=tokenizer.eos_token_id,    max_length=200)from langchain.llms import HuggingFacePipelinefrom langchain import PromptTemplate, LLMChaintemplate='''[INST] <>Dimmi solo i nomi dei prodotti. La risposta dovrebbe includere solo dieci nomi.<>{prompt}[/INST]'''prompt_template = PromptTemplate(template=template, input_variables=["prompt"])llm = HuggingFacePipeline(pipeline=pipeline)llm_chain = LLMChain(prompt=prompt_template, llm=llm)

Crea gli embedding dei prodotti

Successivamente, vengono utilizzati il sentence transformer e FAISS in LangChain per creare e memorizzare gli embedding dei prodotti basati sui titoli dei prodotti nell’inventario. Qui, a causa della mancanza di accesso a motori di ricerca effettivi, il dataset offline dei prodotti Ebay “products.csv” viene adottato come simulazione dell’inventario dei prodotti di e-commerce. Questo dataset contiene circa 3.000 prodotti che coprono una vasta gamma di categorie.

Dataset dei prodotti Ebay UK – dataset di opensnippets

Dataset gratuito dei prodotti di e-commerce Ebay UK

data.world

import pandas as pdproducts = pd.read_csv('products.csv', usecols=['name'])from langchain.vectorstores import FAISSfrom langchain.embeddings import HuggingFaceEmbeddingsembeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2',                                   model_kwargs={'device': 'cpu'})product_names = products['name'].values.astype(str)product_embeddings = FAISS.from_texts(product_names, embeddings)

Recupero dei prodotti

Per quanto riguarda il recupero, viene utilizzato nuovamente il modello sentence transformer che codifica i prodotti per generare l’embedding della query per la query migliorata. Infine, vengono recuperati i primi 10 prodotti in base alla similarità tra l’embedding della query e gli embedding dei prodotti.

raw_query = 'esempio di query'enhanced_query = llm_chain.run(raw_query)product_embeddings.similarity_search_with_score(enhanced_query, k=10)

Esempio

Per dimostrare l’efficacia di questo approccio, analizziamo la query sopra menzionata “Quali sono i migliori regali per ragazzi sotto i 5 anni?” e confrontiamo l’ottimizzazione LLM con i risultati di ricerca originali di Ebay presentati nella Figura 1.

Prima di tutto, dopo aver ricevuto la query grezza, Llama 2 genera 10 prodotti come indicato dal template di prompt. Sono abbastanza impressionanti per le idee regalo per ragazzi anche se ci si aspetta una maggiore granularità a livello di prodotto.

Figura 3. Query migliorata LLM | Immagine dell'autore

Successivamente, diamo uno sguardo alla corrispondenza di similarità nello spazio di embedding. Quello che viene recuperato dalla simulazione dell’inventario dei prodotti non è affatto male in confronto con i risultati del motore di ricerca Ebay nel mondo reale nella Figura 1. A causa della limitata gamma di prodotti della simulazione dell’inventario, il confronto è un po’ ingiusto, ma siamo comunque in grado di osservare la differenza significativa prima e dopo l’applicazione di LLM. Nel complesso, il recupero nello spazio di embedding raggiunge sia la rilevanza che la diversità.

Figura 4. Risultati di ricerca migliorati da LLM | Immagine dell'autore

Pensieri finali

Dopo aver condotto la scoperta iniziale, è evidente che gli LLM sono uno strumento potente per migliorare la ricerca di prodotti delle piattaforme di e-commerce. Per questa attività, ci sono molte future esplorazioni da condurre, tra cui l’ingegneria dei prompt per generare query, l’elaborazione delle rappresentazioni del prodotto con attributi arricchiti, l’ottimizzazione della latenza online per il miglioramento delle query LLM, ecc. Spero che questo blog possa ispirare le piattaforme di e-commerce che hanno bisogno di soluzioni per migliorare la ricerca di prodotti.

Riferimenti

[1] Nayak, P. (2019) Capire le ricerche meglio che mai, Google. Disponibile su: https://blog.google/products/search/search-language-understanding-bert/ (Accesso: 09 agosto 2023).[2] Muhamed, A. et al. (s.d.) Ricerca semantica di prodotti su larga scala con modelli di lingua estesi, Amazon Science. Disponibile su: https://www.amazon.science/publications/web-scale-semantic-product-search-with-large-language-models (Accesso: 09 agosto 2023).