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 ulepszeniu 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ęcać użytkowników do usuwania obraźliwego języka i innych nieprzydatnych uwag, tak aby jak najlepiej podjęli oni decyzję o zakupie.
- Negatywna torba: Ta torba jest do bani.
- Negatywna opinia z przydatnymi informacjami Zamki błyskawiczne są bardzo sztywne, a materiał wydaje się tani. Zwróciłem tę torbę.
- Automatycznie wygeneruj ocenę na podstawie języka użytego w opinii.
- Określ, czy opinia jest negatywna czy pozytywna.
Ostatecznie to użytkownik powinien przekazać ocenę produktu.
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
Chociaż rozwiązania AI po stronie serwera (takie jak Gemini API czy OpenAI API) oferują niezawodne rozwiązania do wielu zastosowań, w tym przewodniku skupiamy się na internetowej sztucznej inteligencji po stronie klienta. Wnioskowanie z AI po stronie klienta odbywa się w przeglądarce, aby poprawić wygodę użytkowników internetu przez usunięcie przesyłania danych z serwera w obie strony.
W tym CodeLab 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 systemów uczących się typu open source do wnioskowania i trenowania w internecie.
- transformers.js do analizy nastroju. Transformers.js to internetowa biblioteka AI od Hugging Face.
- Gemma 2B – ocena gwiazdkowa. Gemma to rodzina lekkich, otwartych modeli powstałych na podstawie badań i technologii, których firma Google użyła do stworzenia modeli Gemini. Aby uruchomić Gemma w przeglądarce, używamy 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. Ostatecznie to użytkownik powinno decydować o ocenie produktu.
- wyraźnie informować użytkownika, że ocena i opinie są automatyczne;
- Zezwalaj użytkownikom na publikowanie opinii sklasyfikowanych jako toksyczne, ale przeprowadzaj drugą kontrolę na serwerze. Dzięki temu nie będziesz mieć przykrych doświadczeń, gdy nietoksyczna opinia zostanie błędnie sklasyfikowana 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 sprawdzić także po stronie serwera.
Analizowanie toksyczności za pomocą TensorFlow.js
Dzięki TensorFlow.js możesz szybko rozpocząć analizowanie toksyczności opinii użytkowników.
- Zainstaluj i import bibliotekę TensorFlow.js i 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 identyfikuje dla każdej kategorii prognozy powyżej progu 0,9.
Ten model może klasyfikować toksyczność według tożsamości, obrażania, nieprzyzwoitych 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 nastawienia 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 nastroju powinna przebiegać znacznie szybciej.
Klasyfikuj opinię asynchronicznie. Użyj własnego progu, aby określić poziom pewności, który możesz uznać za odpowiedni dla swojej 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. Jest to możliwe dzięki optymalizacji stosu internetowego, w tym nowych operacji, kwantyzacji, buforowania i udostępniania wagi. Ź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żyliśmy Gemma 2B pobranej z Kaggle. Gemma 2B to najmniejszy model otwarty przez Google.
- Korzystając z
FilesetResolver
, skieruj kod na odpowiednie pliki modelu. To ważne, ponieważ modele generatywnej AI mogą mieć określoną strukturę katalogów dla 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 i preferowany poziom kreatywności w zakresie temperatury.
- Przekaż modelowi prompt (przykład).
- Poczekaj na odpowiedź modela.
- Przeprowadź analizę oceny: wyodrębnij ocenę w gwiazdkach 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 Gemma w większości odpowiadały ocenom modelu Gemini w kilku przetestowanych opiniach referencyjnych. Aby potwierdzić tę dokładność, wymagane są dodatkowe testy.
Projektowanie promptu dla Gemma 2B wymaga jednak pracy. Gemma 2B to mały LLM, dlatego do uzyskania satysfakcjonujących wyników potrzebuje szczegółowego promptu, zwłaszcza bardziej szczegółowego 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, szybsze niż na serwerze. Szybkość wnioskowania może być bardzo różna. 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 być trudne. 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. Przekracza to medianę 2,2 MB rozmiaru strony internetowej, który już jest znacznie większy od zalecanego, aby zapewnić najlepszą wydajność. Generatywne AI po stronie klienta sprawdza się w określonych sytuacjach.
Generatywne AI w internecie rozwija się bardzo szybko. W przyszłości pojawią się mniejsze modele zoptymalizowane pod kątem internetu.
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.