Les avis positifs et négatifs peuvent éclairer la décision d'achat de l'acheteur.
Selon une étude externe, 82% des acheteurs en ligne recherchent activement des avant d'effectuer un achat. Ces avis négatifs sont utiles pour aux clients et aux entreprises, car la disponibilité d'avis négatifs peut aider de réduire les taux de retour et d'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 toute autre remarque inutile, afin que leur avis aide au mieux les autres utilisateurs à prendre une meilleure décision d'achat.
- Négatif: ce sac est nul, et je déteste ça.
- Négative avec commentaires utiles: les fermetures éclair sont très rigides et le matériau n'est pas cher. J'ai retourné ce sac.
- Générez automatiquement une note en fonction de la langue utilisée dans l'avis.
- Déterminez si l'avis est négatif ou positif.
L'utilisateur doit avoir le dernier mot concernant la note du produit.
L'atelier de programmation suivant propose des solutions sur l'appareil, dans le navigateur. Aucune IA en développement, serveurs ou clés API nécessaires.
Prérequis
Bien que l'IA côté serveur avec des solutions (comme l'API Gemini ou OpenAI API) offrent des solutions robustes pour de nombreuses applications. Dans ce guide, nous nous concentrons sur l'IA Web sur l'appareil. IA Web sur l'appareil consiste à exécuter des modèles d'IA dans le navigateur pour améliorer l'expérience des internautes sans aller-retours du serveur.
Dans cet atelier de programmation, nous allons utiliser différentes techniques pour vous montrer ce qu'il y a dans votre boîte à outils pour l'IA Web sur l'appareil.
Nous utilisons les bibliothèques et les 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 légers et ouverts basés sur la recherche et la technologie que Google a utilisées pour créer les modèles Gemini. Pour exécuter Gemma dans le navigateur, nous l'utilisons avec l'API expérimentale d'inférence LLM 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:
- Autoriser l'utilisateur à modifier la note. En fin de compte, l'utilisateur doit avoir sur la note du produit.
- Indiquez clairement à l'utilisateur que la note et les avis sont automatiques.
- Autoriser les utilisateurs à publier un avis classé comme toxique, mais effectuer une seconde vérification le serveur. Cela permet d'éviter une expérience frustrante où un avis non toxique est classé à tort comme toxique (faux positif). Cela concerne également les cas lorsqu’un utilisateur malveillant parvient à contourner la vérification côté client.
- Une vérification de la toxicité côté client est utile, mais peut être contournée. Assurez-vous que exécuter une vérification côté serveur également.
Analyser la toxicité avec TensorFlow.js
TensorFlow.js permet d'analyser rapidement la toxicité d'un avis d'utilisateur.
- Installer et importer la bibliothèque TensorFlow.js et le modèle de toxicité.
- Définissez un indice de confiance minimal pour la prédiction. La valeur par défaut est 0.85, et dans notre exemple, nous l'avons défini sur 0,9.
- Charger le modèle de manière asynchrone
- Classez l'avis de manière asynchrone. Notre code identifie les prédictions qui dépassent un seuil de 0,9 pour n'importe quelle catégorie.
Ce modèle peut catégoriser la toxicité dans différents cas (attaques d'identité, insultes, obscénités, 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
Installer et importer la bibliothèque Transformers.js.
Configurer l'analyse des sentiments tâche à l'aide d'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.
Classez l'avis de manière asynchrone. Définir le niveau à l'aide d'un seuil personnalisé de confiance que vous jugez utiles 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érer une note avec Gemma et MediaPipe
Avec l'API LLM Inference, vous pouvez exécuter de grands modèles de langage (LLM) dans le navigateur.
Cette nouvelle fonctionnalité est particulièrement révolutionnaire, compte tenu de la mémoire et de calcul des LLM, qui sont plus de cent fois plus élevées que modèles traditionnels sur l'appareil. Les optimisations dans toute la pile sur l'appareil rendent y compris l'ajout de nouvelles opérations, la quantification, la mise en cache et le partage des pondérations. Source : "Large Language Models On-Device with MediaPipe and TensorFlow Lite"
- Installer et importer avec l'API d'inférence LLM MediaPipe.
- Téléchargez un modèle. Ici, nous utilisons Gemma 2B, téléchargée depuis Kaggle. Gemma 2B est le plus petit des modèles à pondération ouverte de Google.
- Faire pointer le code vers les fichiers de modèle appropriés avec l'
FilesetResolver
C'est car les modèles d'IA générative peuvent avoir une structure de répertoire spécifique pour leurs ressources. - Charger et configurer le modèle avec l'interface LLM de MediaPipe Préparez le modèle à utiliser: spécifier l'emplacement du modèle, la longueur préférée des réponses, et votre niveau de créativité préféré en fonction de la température.
- Envoyez une requête au modèle (voir un exemple).
- Attendez la réponse du modèle.
- Analyser pour la note: extrayez la note à partir 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, le reste du code correspond à un développement Web standard.
Les modèles sur l'appareil sont assez précis. Si vous exécutez les extraits de vous constatez que l'analyse de la toxicité et des sentiments donne des résultats précis. Pour la plupart, les notes Gemma correspondaient au modèle Gemini pour quelques avis de référence testés. Afin de vérifier cette exactitude, d'autres tests sont nécessaires.
Cela dit, la conception de la requête pour Gemma 2B demande du travail. Parce que Gemma 2B est un petit LLM, il a besoin d'une requête détaillée pour produire des résultats satisfaisants, notamment plus détaillé que ce qui est nécessaire avec l'API Gemini.
L'inférence peut être extrêmement rapide. Si vous exécutez les extraits de ce document, vous devez constater que l'inférence peut devenir plus rapide, potentiellement plus rapide pour 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. Nous attendons que l'appareil l'inférence pour gagner en rapidité avec les mises à jour de Web GPU, WebAssembly et de bibliothèque. Par exemple, Transformers.js ajoute Compatibilité avec les 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 dans le navigateur est rapide, charger des modèles d'IA peut s'avérer compliqué. Pour exécuter l'IA dans le navigateur, vous avez besoin à la fois d'une bibliothèque et d'un modèle, ce qui augmente 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) de quelques kilo-octets, les modèles d'IA générative comme le modèle d'analyse des sentiments atteint 60 Mo. Les grands modèles de langage comme Gemma peuvent être jusqu'à 1,3 Go. Cette valeur dépasse la médiane Taille de page Web de 2,2 Mo, soit soit beaucoup plus grande que celle recommandée pour obtenir de meilleures performances. Sur l'appareil l'IA générative est viable dans des scénarios spécifiques.
Le domaine de l'IA générative sur le Web évolue à toute vitesse. Plus petite, les modèles optimisés pour le Web sont émergent à 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 la tester.