Gepubliceerd: 16 mei 2024
Positieve en negatieve beoordelingen kunnen de aankoopbeslissing van een koper beïnvloeden.
Volgens extern onderzoek zoekt 82% van de online shoppers actief naar negatieve reviews voordat ze een aankoop doen. Deze negatieve reviews zijn nuttig voor zowel klanten als bedrijven, omdat de beschikbaarheid van negatieve reviews het aantal retouren kan verminderen en fabrikanten kan helpen hun producten te verbeteren.
Hier zijn een paar manieren waarop u de kwaliteit van de beoordelingen kunt verbeteren:
- Controleer elke review op schadelijke inhoud voordat u deze plaatst. We kunnen gebruikers aanmoedigen om aanstootgevende taal en andere nutteloze opmerkingen te verwijderen, zodat hun review andere gebruikers optimaal helpt bij het nemen van een betere aankoopbeslissing.
- Negatief : Deze tas is waardeloos en ik haat hem.
- Negatief met nuttige feedback. De ritsen zijn erg stijf en het materiaal voelt goedkoop aan. Ik heb deze tas geretourneerd.
- Genereer automatisch een beoordeling op basis van de taal die in de recensie wordt gebruikt.
- Bepaal of de beoordeling negatief of positief is.

Uiteindelijk moet de gebruiker het laatste woord hebben over de beoordeling van een product.
De volgende codelab biedt client-side oplossingen, zowel op het apparaat als in de browser. Er is geen AI-ontwikkelingskennis, servers of API-sleutels vereist.
Vereisten
Hoewel server-side AI met oplossingen (zoals de Gemini API of OpenAI API ) robuuste oplossingen biedt voor veel toepassingen, richten we ons in deze handleiding op client-side web-AI. Client-side AI-inferentie vindt plaats in de browser om de ervaring voor webgebruikers te verbeteren door server-roundtrips te elimineren.
In deze codelab gebruiken we diverse technieken om je te laten zien wat je allemaal in huis hebt voor client-side AI.
We gebruiken de volgende bibliotheken en modellen:
- TensforFlow.js voor toxiciteitsanalyse. TensorFlow.js is een open-source machine learning-bibliotheek voor zowel inferentie als training op het web.
- transformers.js voor sentimentanalyse. Transformers.js is een web-AI-bibliotheek van Hugging Face.
- Gemma 2B voor sterbeoordelingen. Gemma is een reeks lichtgewicht, open modellen, gebaseerd op het onderzoek en de technologie die Google heeft gebruikt om de Gemini-modellen te creëren. Om Gemma in de browser te draaien, gebruiken we het met de experimentele LLM Inference API van MediaPipe.
UX en veiligheidsoverwegingen
Om een optimale gebruikerservaring en veiligheid te garanderen, zijn er een aantal overwegingen:
- Geef de gebruiker de mogelijkheid om de beoordeling te bewerken. Uiteindelijk moet de gebruiker het laatste woord hebben over de productbeoordeling.
- Maak het de gebruiker duidelijk dat de beoordelingen en recensies geautomatiseerd zijn.
- Sta gebruikers toe een review te plaatsen die als toxisch is geclassificeerd, maar voer een tweede controle uit op de server. Dit voorkomt een frustrerende ervaring waarbij een niet-toxische review ten onrechte als toxisch wordt geclassificeerd (een vals-positief). Dit geldt ook voor gevallen waarin een kwaadwillende gebruiker de client-side controle weet te omzeilen.
- Een client-side toxiciteitscontrole is nuttig, maar kan worden omzeild. Zorg ervoor dat u ook een controle op de server uitvoert.
Analyseer toxiciteit met TensorFlow.js
Met TensorFlow.js kunt u snel de toxiciteit van een gebruikersbeoordeling analyseren.
- Installeer en importeer de TensorFlow.js-bibliotheek en het toxiciteitsmodel.
- Stel een minimale voorspellingsbetrouwbaarheid in. De standaardwaarde is 0,85, en in ons voorbeeld hebben we deze ingesteld op 0,9.
- Laad het model asynchroon.
- Classificeer de review asynchroon. Onze code identificeert voorspellingen die een drempelwaarde van 0,9 voor elke categorie overschrijden.
Met dit model kan toxiciteit worden gecategoriseerd als identiteitsaanval, belediging, obsceniteit en meer.
Bijvoorbeeld:
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
);
Bepaal sentiment met Transformers.js
Installeer en importeer de Transformers.js-bibliotheek.
Stel de sentimentanalysetaak in met een speciale pijplijn . Wanneer een pijplijn voor het eerst wordt gebruikt, wordt het model gedownload en gecached. Vanaf dat moment zou de sentimentanalyse veel sneller moeten gaan.
Classificeer de review asynchroon. Gebruik een aangepaste drempelwaarde om het betrouwbaarheidsniveau in te stellen dat u geschikt acht voor uw applicatie.
Bijvoorbeeld:
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
}
Stel een sterrenbeoordeling voor met Gemma en MediaPipe
Met de LLM Inference API kunt u grote taalmodellen (LLM's) volledig in de browser uitvoeren.
Deze nieuwe mogelijkheid is bijzonder revolutionair gezien de geheugen- en rekenkrachtvereisten van LLM's, die meer dan honderd keer groter zijn dan die van client-side modellen. Optimalisaties in de webstack maken dit mogelijk, waaronder nieuwe bewerkingen, kwantificering, caching en gewichtsverdeling. Bron: "Large Language Models On-Device with MediaPipe and TensorFlow Lite" .
- Installeer en importeer de MediaPipe LLM inferentie-API.
- Download een model . Hier gebruiken we Gemma 2B , gedownload van Kaggle . Gemma 2B is het kleinste open-gewichtmodel van Google.
- Verwijs de code naar de juiste modelbestanden met
FilesetResolver
. Dit is belangrijk omdat generatieve AI-modellen een specifieke directorystructuur voor hun assets kunnen hebben. - Laad en configureer het model met de LLM-interface van MediaPipe. Bereid het model voor op gebruik: specificeer de modellocatie, de gewenste lengte van de reacties en het gewenste niveau van creativiteit met de temperatuur.
- Geef het model een opdracht ( zie een voorbeeld ).
- Wacht op het antwoord van het model.
- Parsen voor de beoordeling: extraheer de sterrenbeoordeling uit het antwoord van het model.
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);
Voorbeeldprompt
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`;
Afhaalmaaltijden
Er is geen AI/ML-expertise vereist . Het ontwerpen van een prompt vereist iteraties, maar de rest van de code is standaard webontwikkeling.
Client-side modellen zijn redelijk nauwkeurig . Als u de fragmenten uit dit document uitvoert, zult u zien dat zowel de toxiciteits- als de sentimentanalyse nauwkeurige resultaten opleveren. De Gemma-beoordelingen kwamen grotendeels overeen met de Gemini-modelbeoordelingen voor een paar geteste referentiereviews. Om die nauwkeurigheid te valideren, zijn meer tests nodig.
Dat gezegd hebbende, het ontwerpen van de prompt voor Gemma 2B vergt werk. Omdat Gemma 2B een kleine LLM is, is een gedetailleerde prompt nodig om bevredigende resultaten te produceren – aanzienlijk gedetailleerder dan wat vereist is met de Gemini API.
Inferentie kan razendsnel zijn . Als u de fragmenten uit dit document uitvoert, zult u merken dat inferentie snel kan zijn, mogelijk zelfs sneller dan server-roundtrips, op een aantal apparaten. De inferentiesnelheid kan echter sterk variëren. Grondige benchmarking op doelapparaten is nodig. We verwachten dat browserinferentie steeds sneller zal worden met WebGPU-, WebAssembly- en bibliotheekupdates. Transformers.js voegt bijvoorbeeld Web GPU-ondersteuning toe in v3 , wat de inferentie op het apparaat vele malen sneller kan maken .
Downloads kunnen erg groot zijn. Inferentie in de browser is snel, maar het laden van AI-modellen kan een uitdaging zijn. Om AI in de browser uit te voeren, heb je doorgaans zowel een bibliotheek als een model nodig, wat bijdraagt aan de downloadgrootte van je webapp.
Terwijl het toxiciteitsmodel van Tensorflow (een klassiek model voor natuurlijke taalverwerking) slechts een paar kilobytes groot is, bereiken generatieve AI-modellen zoals het standaard sentimentanalysemodel van Transformers.js 60 MB. Grote taalmodellen zoals Gemma kunnen wel 1,3 GB groot zijn. Dit overschrijdt de mediane webpaginagrootte van 2,2 MB ruimschoots, wat al veel groter is dan aanbevolen voor optimale prestaties. Client-side generatieve AI is in specifieke scenario's haalbaar.
Het gebied van generatieve AI op het web ontwikkelt zich razendsnel! Naar verwachting zullen er in de toekomst kleinere, web-geoptimaliseerde modellen ontstaan .
Volgende stappen
Chrome experimenteert met een andere manier om generatieve AI in de browser te gebruiken. Je kunt je aanmelden voor het Early Preview Program om het te testen.