Incoraggia l'uso di recensioni prodotto con l'IA web lato client

Maud Nalpas
Maud Nalpas
Kenji Baheux
Kenji Baheux
Alexandra Klepper
Alexandra Klepper

Data di pubblicazione: 16 maggio 2024

Le recensioni positive e negative possono influenzare la decisione di acquisto di un acquirente.

Secondo una ricerca esterna, l'82% degli acquirenti online cerca attivamente recensioni negative prima di effettuare un acquisto. Queste recensioni negative sono utili per i clienti e le attività, perché la disponibilità di recensioni negative può contribuire a ridurre le percentuali di reso e aiutare i produttori a migliorare i loro prodotti.

Ecco alcuni modi per migliorare la qualità delle recensioni:

  • Controlla ogni recensione per rilevare contenuti tossici prima che venga inviata. Potremmo incoraggiare gli utenti a rimuovere il linguaggio offensivo, nonché altre osservazioni inutili, in modo che la loro recensione aiuti al meglio gli altri utenti a prendere una decisione di acquisto migliore.
    • Negativa: questa borsa fa schifo e la odio.
    • Feedback negativo con informazioni utili Le cerniere sono molto rigide e il materiale sembra di scarsa qualità. Ho restituito questa borsa.
  • Genera automaticamente una valutazione in base al linguaggio utilizzato nella recensione.
  • Stabilisci se la recensione è negativa o positiva.
Screenshot di una recensione di esempio con un sentiment e una valutazione a stelle.
In questo esempio, al commento del recensore viene assegnato un sentiment positivo e una valutazione di cinque stelle.

In ultima analisi, l'utente deve avere l'ultima parola sulla valutazione del prodotto.

Il seguente codelab offre soluzioni lato client, on-device e nel browser. Non sono richieste conoscenze di sviluppo dell'IA, server o chiavi API.

Prerequisiti

Sebbene l'AI lato server con soluzioni (come l'API Gemini o l'API OpenAI) offra soluzioni solide per molte applicazioni, in questa guida ci concentriamo sull'AI web lato client. L'inferenza lato client avviene nel browser per migliorare l'esperienza degli utenti web rimuovendo i round trip del server.

In questo codelab utilizziamo un mix di tecniche per mostrarti cosa hai a disposizione per l'IA lato client.

Utilizziamo le seguenti librerie e modelli:

  • TensforFlow.js per l'analisi della tossicità. TensorFlow.js è una libreria di machine learning open source sia per l'inferenza sia per l'addestramento sul web.
  • transformers.js per l'analisi del sentiment. Transformers.js è una libreria di IA web di Hugging Face.
  • Gemma 2B per le valutazioni a stelle. Gemma è una famiglia di modelli aperti leggeri basati sulla ricerca e sulla tecnologia che Google ha utilizzato per creare i modelli Gemini. Per eseguire Gemma nel browser, lo utilizziamo con l'API sperimentale di inferenza LLM di MediaPipe.

Considerazioni relative all'esperienza utente e alla sicurezza

Ecco alcune considerazioni per garantire un'esperienza utente e la sicurezza ottimali:

  • Consenti all'utente di modificare la valutazione. In definitiva, l'utente deve avere l'ultima parola sulla valutazione del prodotto.
  • Indica chiaramente all'utente che la valutazione e le recensioni sono automatiche.
  • Consentire agli utenti di pubblicare una recensione classificata come dannosa, ma eseguire un secondo controllo sul server. In questo modo si evita un'esperienza frustrante in cui una recensione non tossica viene classificata erroneamente come tossica (un falso positivo). Questo vale anche per i casi in cui un utente malintenzionato riesce ad aggirare il controllo lato client.
  • Un controllo della tossicità lato client è utile, ma può essere aggirato. Assicurati di eseguire anche un controllo lato server.

Analizzare la tossicità con TensorFlow.js

È facile iniziare ad analizzare la tossicità di una recensione dell'utente con TensorFlow.js.

  1. Installa e import la libreria TensorFlow.js e il modello di tossicità.
  2. Imposta una confidenza minima della previsione. Il valore predefinito è 0,85 e, nel nostro esempio, è stato impostato su 0,9.
  3. Carica il modello in modo asincrono.
  4. Classifica la recensione in modo asincrono. Il nostro codice identifica le previsioni che superano una soglia di 0,9 per qualsiasi categoria.

Questo modello può classificare la tossicità attraverso attacchi all'identità, insulti, oscenità e altro ancora.

Ad esempio:

import * as toxicity from '@tensorflow-models/toxicity';

// Minimum prediction confidence allowed
const TOXICITY_COMMENT_THRESHOLD = 0.9;

const toxicityModel = await toxicity.load(TOXICITY_COMMENT_THRESHOLD);
const toxicityPredictions = await toxicityModel.classify([review]);
// `predictions` is an array with the raw toxicity probabilities
const isToxic = toxicityPredictions.some(
    (prediction) => prediction.results[0].match
);

Determinare il sentiment con Transformers.js

  1. Installa e importa la libreria Transformers.js.

  2. Configura l'attività di analisi del sentiment con una pipeline dedicata. Quando una pipeline viene utilizzata per la prima volta, il modello viene scaricato e memorizzato nella cache. Da quel momento in poi, l'analisi del sentiment dovrebbe essere molto più veloce.

  3. Classifica la recensione in modo asincrono. Utilizza una soglia personalizzata per impostare il livello di attendibilità che ritieni utilizzabile per la tua applicazione.

Ad esempio:

import { pipeline } from '@xenova/transformers';

const SENTIMENT_THRESHOLD = 0.9;
// Create a pipeline (don't block rendering on this function)
const transformersjsClassifierSentiment = await pipeline(
  'sentiment-analysis'
);

// When the user finishes typing
const sentimentResult = await transformersjsClassifierSentiment(review);
const { label, score } = sentimentResult[0];
if (score > SENTIMENT_THRESHOLD) {
  // The sentiment is `label`
} else {
  // Classification is not conclusive
}

Suggerire una valutazione a stelle con Gemma e MediaPipe

Con l'API LLM Inference, puoi eseguire modelli linguistici di grandi dimensioni (LLM) completamente nel browser.

Questa nuova funzionalità è particolarmente trasformativa se si considerano le esigenze di memoria e calcolo degli LLM, che sono oltre cento volte superiori a quelle dei modelli lato client. Le ottimizzazioni nell'intero stack web lo rendono possibile, tra cui nuove operazioni, quantizzazione, memorizzazione nella cache e condivisione dei pesi. Fonte: "Modelli linguistici di grandi dimensioni on-device con MediaPipe e TensorFlow Lite".

  1. Installa e importa l'API di inferenza LLM MediaPipe.
  2. Scarica un modello. Qui utilizziamo Gemma 2B, scaricato da Kaggle. Gemma 2B è il più piccolo dei modelli a peso aperto di Google.
  3. Indirizza il codice ai file del modello corretti con FilesetResolver. Questo è importante perché i modelli di IA generativa possono avere una struttura di directory specifica per i loro asset.
  4. Carica e configura il modello con l'interfaccia LLM di MediaPipe. Prepara il modello per l'uso: specifica la posizione, la lunghezza preferita per le risposte e il livello di creatività preferito con la temperatura.
  5. Fornisci un prompt al modello (vedi un esempio).
  6. Attendi la risposta del modello.
  7. Analizza la valutazione: estrai la valutazione a stelle dalla risposta del modello.
import { FilesetResolver, LlmInference } from '@mediapipe/tasks-genai';

const mediaPipeGenAi = await FilesetResolver.forGenAiTasks();
const llmInference = await LlmInference.createFromOptions(mediaPipeGenAi, {
    baseOptions: {
        modelAssetPath: '/gemma-2b-it-gpu-int4.bin',
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.5,
    randomSeed: 101,
});

const prompt = …
const output = await llmInference.generateResponse(prompt);

const int = /\d/;
const ratingAsString = output.match(int)[0];
rating = parseInt(ratingAsString);

Testo di esempio

const prompt = `Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and 5.
1 is the worst rating, and 5 is the best rating. A strongly dissatisfied review
that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to 5). \n\n
  \n\n
  Here are some examples of reviews and their corresponding analyses and ratings:
  \n\n
  Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor use,
  but it's perfect for urban exploring.'
  Analysis: The reviewer appreciates the product's style and basic
  functionality. They express some uncertainty about its ruggedness but overall
  find it suitable for their intended use, resulting in a positive, but not
  top-tier rating.
  Rating (integer): 4
  \n\n
  Review: 'It's a solid backpack at a decent price. Does the job, but nothing
  particularly amazing about it.'
  Analysis: This reflects an average opinion. The backpack is functional and
  fulfills its essential purpose. However, the reviewer finds it unremarkable
  and lacking any standout features deserving of higher praise.
  Rating (integer): 3
  \n\n
  Review: 'The waist belt broke on my first trip! Customer service was
  unresponsive too. Would not recommend.'
  Analysis: A serious product defect and poor customer service experience
  naturally warrants the lowest possible rating. The reviewer is extremely
  unsatisfied with both the product and the company.
  Rating (integer): 1
  \n\n
  Review: 'Love how many pockets and compartments it has. Keeps everything
  organized on long trips. Durable too!'
  Analysis: The enthusiastic review highlights specific features the user loves
  (organization and durability), indicating great satisfaction with the product.
  This justifies the highest rating.
  Rating (integer): 5
  \n\n
  Review: 'The straps are a bit flimsy, and they started digging into my
  shoulders under heavy loads.'
  Analysis: While not a totally negative review, a significant comfort issue
  leads the reviewer to rate the product poorly. The straps are a key component
  of a backpack, and their failure to perform well under load is a major flaw.
  Rating (integer): 1
  \n\n
  Now, here is the review you need to assess:
  \n
  Review: "${review}" \n`;

Concetti principali

Non è richiesta alcuna esperienza in IA/ML. La progettazione di un prompt richiede iterazioni, ma il resto del codice è di sviluppo web standard.

I modelli lato client sono abbastanza accurati. Se esegui gli snippet di questo documento, noterai che sia l'analisi della tossicità sia quella del sentiment forniscono risultati accurati. Per la maggior parte, le valutazioni di Gemma corrispondevano alle valutazioni del modello Gemini per alcune recensioni di riferimento testate. Per convalidare questa accuratezza, sono necessari ulteriori test.

Detto questo, la progettazione del prompt per Gemma 2B richiede molto lavoro. Poiché Gemma 2B è un LLM di piccole dimensioni, ha bisogno di un prompt dettagliato per produrre risultati soddisfacenti, in particolare più dettagliati rispetto a quanto richiesto dall'API Gemini.

L'inferenza può essere velocissima. Se esegui gli snippet da questo documento, dovresti notare che l'inferenza può diventare veloce, potenzialmente più veloce dei viaggi di andata e ritorno del server, su diversi dispositivi. Detto questo, la velocità di inferenza può variare molto. È necessario un benchmarking approfondito sui dispositivi target. Prevediamo che l'inferenza del browser continuerà ad aumentare di velocità con gli aggiornamenti di WebGPU, WebAssembly e delle librerie. Ad esempio, Transformers.js aggiunge il supporto della GPU web nella versione 3, che può velocizzare notevolmente l'inferenza on-device.

Le dimensioni di download possono essere molto grandi. L'inferenza nel browser è veloce, ma caricare i modelli di IA può essere una sfida. Per eseguire l'IA nel browser, in genere è necessaria sia una libreria sia un modello, che aumentano le dimensioni del download della tua app web.

Sebbene il modello di tossicità di Tensorflow (un classico modello di elaborazione del linguaggio naturale) sia costituito da pochi kilobyte, i modelli di IA generativa come il modello di analisi del sentiment predefinito di Transformers.js raggiungono i 60 MB. I modelli linguistici di grandi dimensioni come Gemma possono avere dimensioni fino a 1,3 GB. Questo valore supera la media di 2, 2 MB di dimensioni della pagina web, che è già molto più grande di quanto consigliato per ottenere le migliori prestazioni. L'IA generativa lato client è valida in scenari specifici.

Il campo dell'IA generativa sul web è in rapida evoluzione. In futuro si prevede che emergano modelli più piccoli e ottimizzati per il web.

Passaggi successivi

Chrome sta sperimentando un altro modo per eseguire l'IA generativa nel browser. Puoi registrarti al programma di anteprima in anteprima per testarlo.