Data publikacji: 16 maja 2024 r.
Opinie pozytywne i negatywne mogą pomóc kupującemu podjąć decyzję o zakupie.
Według zewnętrznych badań 82% klientów kupujących online aktywnie szuka negatywnych opinii przed dokonaniem zakupu. Te negatywne opinie są przydatne dla klientów i firm, ponieważ ich dostępność może pomóc w zmniejszeniu zwrotów i pomóc producentom w ulepszaniu produktów.
Oto kilka sposobów na poprawę jakości opinii:
- Sprawdź każdą opinię pod kątem toksyczności przed jej przesłaniem. Możemy zachęcić użytkowników do usunięcia obraźliwych słów i innych nieprzydatnych komentarzy, aby ich opinie pomagały innym użytkownikom w podejmowaniu lepszych decyzji zakupowych.
- Negatywna: ta torba jest do niczego i nie podoba mi się.
- Negatywna opinia z przydatnymi informacjami Zamki błyskawiczne są bardzo sztywne, a materiał wydaje się tani. Zwróciłem tę torbę.
- automatycznie generować ocenę na podstawie języka użytego w opinii;
- Określ, czy opinia jest negatywna czy pozytywna.
Ocena produktu powinna być ostateczna.
W tym ćwiczeniu znajdziesz rozwiązania po stronie klienta, na urządzeniu i w przeglądarce. Nie wymaga znajomości AI, serwerów ani kluczy interfejsu API.
Wymagania wstępne
Rozwiązania AI po stronie serwera (takie jak Gemini API czy OpenAI API) oferują niezawodne rozwiązania dla wielu aplikacji, ale w tym przewodniku skupiamy się na AI w internecie po stronie klienta. Przetwarzanie przez AI po stronie klienta odbywa się w przeglądarce, co zwiększa wygodę użytkowników, ponieważ eliminuje konieczność przesyłania zapytań do serwera.
W tym samouczku używamy różnych technik, aby pokazać Ci, jakie narzędzia masz do dyspozycji w przypadku AI po stronie klienta.
Używamy tych bibliotek i modeli:
- TensforFlow.js do analizy toksyczności. TensorFlow.js to biblioteka open source do uczenia maszynowego, która służy zarówno do wnioskowania, jak i trenowania w internecie.
- transformers.js do analizy nastroju. Transformers.js to internetowa biblioteka AI od Hugging Face.
- Gemma 2B – ocena gwiazdkami. Gemma to rodzina lekkich, otwartych modeli opartych na badaniach i technologiach, których Google używał do tworzenia modeli Gemini. Aby uruchomić Gemma w przeglądarce, używamy go z eksperymentalnego interfejsu API MediaPipe do wnioskowania o LLM.
Wygoda użytkownika i bezpieczeństwo
Oto kilka kwestii, o których warto pamiętać, aby zapewnić użytkownikom optymalne wrażenia i bezpieczeństwo:
- Zezwalanie użytkownikowi na edytowanie oceny. Ostateczne zdanie należy do użytkownika, który ocenia produkt.
- wyraźnie informować użytkownika, że ocena i opinie są zautomatyzowane;
- Zezwalanie użytkownikom na publikowanie opinii sklasyfikowanej jako toksyczna, ale przeprowadzenie dodatkowej weryfikacji na serwerze. Dzięki temu nie będziesz mieć przykrych doświadczeń, gdy nieszkodliwa opinia zostanie błędnie zaklasyfikowana jako toksyczna (fałszywie pozytywna). Dotyczy to również sytuacji, gdy złośliwy użytkownik zdoła obejść weryfikację po stronie klienta.
- Sprawdzanie toksyczności po stronie klienta jest przydatne, ale można je obejść. Pamiętaj, aby przeprowadzić również sprawdzenie po stronie serwera.
Analiza toksyczności za pomocą TensorFlow.js
Dzięki TensorFlow.js możesz szybko rozpocząć analizowanie toksyczności opinii użytkownika.
- Zainstaluj i import bibliotekę TensorFlow.js oraz model toksyczności.
- Ustaw minimalny poziom ufności prognozy. Wartość domyślna to 0,85, a w naszym przykładzie ustawiliśmy ją na 0,9.
- Niesynchronicznie wczytaj model.
- Klasyfikuj opinię asynchronicznie. Nasz kod wykrywa prognozy, które przekraczają próg 0,9 w przypadku dowolnej kategorii.
Model może kategoryzować toksyczność w kategoriach takich jak atak na tożsamość, obelgi, wulgaryzmy itp.
Na przykład:
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
);
Określanie nastroju za pomocą Transformers.js
Zainstaluj i zaimportuj bibliotekę Transformers.js.
Skonfiguruj zadanie analizy nastroju za pomocą dedykowanego potoku. Gdy strumień danych jest używany po raz pierwszy, model jest pobierany i przechowywany w pamięci podręcznej. Od tego momentu analiza nastawienia powinna przebiegać znacznie szybciej.
Klasyfikuj opinię asynchronicznie. Użyj niestandardowego progu, aby ustawić poziom ufności, który jest odpowiedni dla Twojej aplikacji.
Na przykład:
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
}
Sugerowanie oceny gwiazdkowej za pomocą Gemma i MediaPipe
Dzięki interfejsowi LLM Inference API możesz uruchamiać duże modele językowe (LLM) całkowicie w przeglądarce.
Ta nowa funkcja przynosi szczególnie duże zmiany, biorąc pod uwagę wymagania dotyczące pamięci i mocy obliczeniowej LLM, które są ponad 100 razy większe niż w przypadku modeli po stronie klienta. Umożliwiają to optymalizacje w całym pakiecie internetowym, w tym nowe operacje, kwantyzacja, buforowanie i dzielenie się wagą. Źródło: „Large Language Models On-Device with MediaPipe and TensorFlow Lite” (Duże modele językowe na urządzeniu z MediaPipe i TensorFlow Lite).
- Zainstaluj i zaimportuj interfejs API wnioskowania MediaPipe LLM.
- Pobierz model. Tutaj używamy zbioru danych Gemma 2B, pobranego z Kaggle. Gemma 2B to najmniejszy z modeli Google o otwartej wadze.
- Wskaż kod na odpowiednie pliki modeli za pomocą
FilesetResolver
. Jest to ważne, ponieważ modele generatywnej AI mogą mieć określoną strukturę katalogów swoich zasobów. - Załaduj i konfiguruj model za pomocą interfejsu LLM MediaPipe. Przygotuj model do użycia: określ jego lokalizację, preferowaną długość odpowiedzi oraz preferowany poziom kreatywności za pomocą wartości temperatury.
- Przekaż modelowi prompt (przykład).
- Poczekaj na odpowiedź modela.
- Analiza oceny: wyodrębnij ocenę gwiazdkową z odpowiedzi modelu.
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);
Przykładowy prompt
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`;
Wnioski
Nie jest wymagana wiedza na temat AI/ML. Projektowanie promptu wymaga iteracji, ale reszta kodu to standardowe programowanie internetowe.
Modele po stronie klienta są dość dokładne. Jeśli uruchomisz fragmenty kodu z tego dokumentu, zauważysz, że zarówno analiza toksyczności, jak i analiza nastroju dają dokładne wyniki. Oceny modelu Gemma w większości przypadków pokrywały się z orazami Gemini w przypadku kilku testowanych recenzji referencyjnych. Aby potwierdzić tę dokładność, wymagane są dodatkowe testy.
Projektowanie promptu dla Gemma 2B wymaga jednak pracy. Gemma 2B to mały model językowy, który wymaga szczegółowego promptu, aby uzyskać zadowalające wyniki. Musi być on bardziej szczegółowy niż w przypadku interfejsu Gemini API.
Wnioskowanie może być błyskawiczne. Jeśli uruchomisz fragmenty kodu z tego dokumentu, zauważysz, że na niektórych urządzeniach wnioskowanie może być szybkie, potencjalnie szybsze niż na serwerze. Prędkość wnioskowania może się jednak znacznie różnić. Konieczne jest dokładne testowanie porównawcze na urządzeniach docelowych. Spodziewamy się, że wnioskowanie w przeglądarce będzie się coraz bardziej przyspieszać dzięki WebGPU, WebAssembly i aktualizacjom bibliotek. Na przykład Transformers.js dodaje obsługę WebGPU w wersji 3, która może znacznie przyspieszyć wnioskowanie na urządzeniu.
Rozmiary plików do pobrania mogą być bardzo duże. W przeglądarce wnioskowanie jest szybkie, ale wczytywanie modeli AI może stanowić wyzwanie. Aby korzystać z AI w przeglądarce, zwykle potrzebujesz biblioteki i modelu, które zwiększają rozmiar pobierania aplikacji internetowej.
Podczas gdy model toksyczności Tensorflow (klasyczny model przetwarzania języka naturalnego) zajmuje tylko kilka kilobajtów, modele generatywnej AI, takie jak domyślny model analizy nastawienia w Transformers.js, zajmują 60 MB. Duże modele językowe, takie jak Gemma, mogą zajmować nawet 1,3 GB. Jest to więcej niż średni 2,2 MB, czyli znacznie więcej niż zalecany rozmiar strony internetowej, który jest już znacznie większy niż zalecany dla najlepszej wydajności. Generatywne AI po stronie klienta sprawdza się w określonych sytuacjach.
Generatywne AI w internecie rozwija się bardzo szybko. W przyszłości powinny pojawić się mniejsze modele zoptymalizowane pod kątem stron internetowych.
Dalsze kroki
Chrome eksperymentuje z innym sposobem uruchamiania generatywnej AI w przeglądarce. Aby go przetestować, możesz zarejestrować się w programie wczesnej wersji zapoznawczej.