Encourager les avis utiles sur les produits grâce à l'IA Web intégrée à l'appareil

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

Les avis positifs et négatifs peuvent orienter la décision d'achat d'un acheteur.

D'après une étude externe, 82% des acheteurs en ligne recherchent activement des avis négatifs avant d'effectuer un achat. Ces avis négatifs sont utiles pour les clients et les entreprises, car ils peuvent contribuer à réduire les taux de retour et aider les fabricants à améliorer leurs produits.

Voici quelques conseils pour améliorer la qualité des avis:

  • Vérifiez la toxicité de chaque avis avant de l'envoyer. Nous pourrions encourager les utilisateurs à supprimer les propos choquants, ainsi que d'autres remarques inutiles, afin que leurs avis aident au mieux les autres utilisateurs à prendre une meilleure décision d'achat.
    • Négatif: ce sac est nul, et je le déteste.
    • Négatif avec des commentaires utiles: les fermetures éclair sont très rigides et le matériau n'est pas cher. J'ai rendu ce sac.
  • Il génère automatiquement une note en fonction de la langue utilisée dans l'avis.
  • Déterminez si l'avis est négatif ou positif.
Capture d'écran d'un exemple d'avis avec un sentiment et une note.
Dans cet exemple, le commentaire de l'auteur de l'avis reçoit un sentiment positif et une note de cinq étoiles.

En définitive, l'utilisateur doit pouvoir terminer l'évaluation du produit.

L'atelier de programmation suivant propose des solutions sur l'appareil, dans le navigateur. Aucune connaissance en développement d'IA, aucun serveur ni aucune clé API n'est requis.

Prérequis

Bien que l'IA côté serveur avec des solutions (telles que l'API Gemini ou l'API OpenAI) offrent des solutions robustes pour de nombreuses applications, ce guide se concentre sur l'IA Web sur les appareils. On parle d'IA Web sur l'appareil lorsque des modèles d'IA s'exécutent dans le navigateur afin d'améliorer l'expérience des internautes sans aller-retour des serveurs.

Dans cet atelier de programmation, nous utilisons une combinaison de techniques pour vous montrer ce que contient votre boîte à outils pour l'IA Web sur l'appareil.

Nous utilisons les bibliothèques et modèles suivants:

  • TensforFlow.js pour l'analyse de la toxicité. TensorFlow.js est une bibliothèque de machine learning Open Source pour l'inférence et l'entraînement sur le Web.
  • transformers.js pour l'analyse des sentiments. Transformers.js est une bibliothèque d'IA Web de Hugging Face.
  • Gemma 2B pour les notes. Gemma est une famille de modèles ouverts et légers conçus à partir de la recherche et de la technologie utilisées par Google pour créer les modèles Gemini. Pour exécuter Gemma dans le navigateur, nous l'utilisons avec l'API expérimentale LLM Inference de MediaPipe.

Considérations relatives à l'expérience utilisateur et à la sécurité

Voici quelques points à prendre en compte pour garantir une expérience utilisateur et une sécurité optimales:

  • Autorisez l'utilisateur à modifier la note. En fin de compte, c'est le dernier mot à propos de l'évaluation du produit.
  • Indiquez clairement à l'utilisateur que la note et les avis sont automatisés.
  • Autoriser les utilisateurs à publier des avis classés comme toxiques, mais effectuer une deuxième vérification sur le serveur. Cela permet d'éviter une expérience frustrante où un avis non toxique serait classé à tort comme toxique (faux positif). Cela couvre également les cas où un utilisateur malveillant parvient à contourner la vérification côté client.
  • Une vérification de la toxicité côté client est utile, mais elle peut être contournée. Veillez également à effectuer une vérification côté serveur.

Analyser la toxicité avec TensorFlow.js

Vous pouvez rapidement commencer à analyser la toxicité d'un avis d'utilisateur avec TensorFlow.js.

  1. Installez et import la bibliothèque TensorFlow.js et le modèle de toxicité.
  2. Définissez un niveau de confiance de prédiction minimal. La valeur par défaut est 0,85, et dans notre exemple, nous l'avons définie sur 0,9.
  3. Chargez le modèle de manière asynchrone.
  4. Classez l'avis de manière asynchrone. Notre code identifie les prédictions dépassant un seuil de 0,9 pour n'importe quelle catégorie.

Ce modèle peut catégoriser la toxicité par type d'attaque, d'insulte, d'obscénité, etc.

Exemple :

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
);

Déterminer les sentiments avec Transformers.js

  1. Installez et importez la bibliothèque Transformers.js.

  2. Configurez la tâche d'analyse des sentiments avec un pipeline dédié. Lorsqu'un pipeline est utilisé pour la première fois, le modèle est téléchargé et mis en cache. L'analyse des sentiments devrait alors être beaucoup plus rapide.

  3. Classez l'avis de manière asynchrone. Utilisez un seuil personnalisé pour définir le niveau de confiance que vous considérez comme pouvant être utilisé pour votre application.

Exemple :

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
}

Suggérez une note avec Gemma et MediaPipe

Avec l'API LLM Inference, vous pouvez exécuter de grands modèles de langage (LLM) entièrement dans le navigateur.

Cette nouvelle fonctionnalité est particulièrement transformatrice compte tenu des demandes en mémoire et en calcul des LLM, qui sont plus de cent fois plus importantes que les modèles traditionnels sur l'appareil. Cela est possible grâce aux optimisations de la pile sur l'appareil, y compris de nouvelles opérations, la quantification, la mise en cache et le partage de pondération. Source: "Large Language Models On-Device with MediaPipe and TensorFlow Lite".

  1. Installez et importez l'API d'inférence LLM MediaPipe.
  2. Téléchargez un modèle. Ici, nous utilisons Gemma 2B, téléchargé depuis Kaggle. Gemma 2B est le plus petit modèle de poids ouvert de Google.
  3. Faites pointer le code vers les fichiers de modèle appropriés à l'aide de FilesetResolver. C'est important, car les modèles d'IA générative peuvent avoir une structure de répertoires spécifique pour leurs éléments.
  4. Chargez et configurez le modèle à l'aide de l'interface LLM de MediaPipe. Préparez le modèle à utiliser: spécifiez son emplacement, la longueur préférée des réponses et le niveau de créativité souhaité avec la température.
  5. Envoyez une requête au modèle (voir un exemple).
  6. Attendez la réponse du modèle.
  7. Analyser la note: extrayez la note de la réponse du modèle.
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);

Exemple de requête

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`;

Points à retenir

Aucune expertise en IA/ML n'est requise. La conception d'une requête nécessite des itérations, mais le reste du code correspond au développement Web standard.

Les modèles intégrés à l'appareil sont assez précis. Si vous exécutez les extraits de ce document, vous constaterez que la toxicité et l'analyse des sentiments donnent des résultats précis. Pour la plupart, les notes Gemma correspondaient à celles du modèle Gemini pour quelques avis de référence testés. Pour valider cette précision, des tests supplémentaires sont nécessaires.

Cela dit, la conception de la requête pour Gemma 2B demande du travail. Gemma 2B étant un petit LLM, il a besoin d'une invite détaillée pour produire des résultats satisfaisants, nettement plus détaillés que ce qui est requis avec l'API Gemini.

L'inférence peut être ultra-rapide. Si vous exécutez les extraits de ce document, vous devez observer que l'inférence peut être plus rapide, voire potentiellement plus rapide que les allers-retours du serveur, sur un certain nombre d'appareils. Cela dit, la vitesse d'inférence peut varier considérablement. Une analyse comparative approfondie des appareils cibles est nécessaire. L'inférence sur l'appareil devrait être encore plus rapide avec les mises à jour du GPU Web, de WebAssembly et de la bibliothèque. Par exemple, Transformers.js ajoute la compatibilité avec le GPU Web dans la version 3, ce qui peut accélérer considérablement l'inférence sur l'appareil.

La taille de téléchargement peut être très importante. L'inférence est rapide dans le navigateur, mais le chargement des modèles d'IA peut s'avérer compliqué. Pour exécuter l'IA dans le navigateur, vous avez généralement besoin d'une bibliothèque et d'un modèle, qui augmentent la taille de téléchargement de votre application Web.

Alors que le modèle de toxicité de TensorFlow (un modèle classique de traitement du langage naturel) ne représente que quelques kilo-octets, les modèles d'IA générative tels que le modèle d'analyse des sentiments par défaut de Transformers.js atteint 60 Mo. Les grands modèles de langage comme Gemma peuvent atteindre 1,3 Go. Cette valeur dépasse la médiane 2, 2 Mo pour la page Web, qui est de loin beaucoup plus importante que celle recommandée pour des performances optimales. L'IA générative sur l'appareil est viable dans des scénarios spécifiques.

Le domaine de l'IA générative sur le Web évolue rapidement ! De plus petits modèles optimisés pour le Web devraient voir le jour à l'avenir.

Étapes suivantes

Chrome teste une autre façon d'exécuter l'IA générative dans le navigateur. Vous pouvez vous inscrire au programme en accès anticipé pour le tester.