Zachęcaj do tworzenia przydatnych opinii o produktach za pomocą internetowej AI na urządzeniu

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

Pozytywne i negatywne opinie mogą być czynnikiem podejmowania decyzji o zakupie.

Według badań zewnętrznych 82% kupujących online szuka negatywnych opinii przed dokonaniem zakupu. Takie negatywne opinie są przydatne zarówno dla klientów, jak i firm, ponieważ ich dostępność może pomóc obniżyć współczynnik zwrotów i pomóc producentom w ulepszaniu produktów.

Oto kilka sposobów na poprawę jakości opinii:

  • Zanim prześlesz opinię, sprawdź ją pod kątem toksyczności. Możemy zachęcać użytkowników do usuwania obraźliwych słów i innych nieprzydatnych uwag, aby ich recenzja pomagała innym użytkownikom podjąć lepsze decyzje o zakupie.
    • Negatywne: ta torba jest do bani, a ja jej nie cierpię.
    • Negatywny przekaz: zamki są bardzo sztywne, a materiał wydaje się niski. Zwróciłam tę torbę.
  • Automatycznie wygeneruj ocenę na podstawie języka użytego w opinii.
  • Określ, czy opinia jest negatywna czy pozytywna.
Zrzut ekranu przedstawiający przykładową opinię z opinią i oceną w postaci gwiazdek.
W tym przykładzie komentarz weryfikatora jest pozytywny i otrzymuje 5 gwiazdek.

To użytkownik powinien mieć ostatnie słowo na temat oceny produktu.

Poniższe ćwiczenia z programowania oferują rozwiązania na urządzeniu, w przeglądarce. Nie potrzebujesz wiedzy z zakresu AI, serwerów ani kluczy interfejsu API.

Wymagania wstępne

Chociaż sztuczna inteligencja po stronie serwera wraz z rozwiązaniami (takimi jak Gemini API czy OpenAI API) oferują niezawodne rozwiązania do wielu aplikacji, w tym przewodniku skupimy się na internetowej AI na urządzeniu. Internetowa AI na urządzeniu działa, gdy modele AI działają w przeglądarce, co zwiększa wygodę użytkowników internetu bez konieczności przesyłania danych w obie strony.

W ramach tego ćwiczenia w programowaniu korzystamy z różnych technik, aby pokazać Ci, co masz w ofercie internetowej AI na urządzeniu.

Korzystamy z tych bibliotek i modeli:

  • TensforFlow.js do analizy toksyczności. TensorFlow.js to biblioteka open source w dziedzinie systemów uczących się służąca do wnioskowania i trenowania w internecie.
  • transformers.js – do analizy nastawienia. Transformers.js to internetowa biblioteka AI opracowana przez Hugging Face.
  • Gemma 2B. Gemma to rodzina lekkich, otwartych modeli opracowanych na podstawie badań i technologii wykorzystywanych przez Google do tworzenia modeli Gemini. Aby uruchomić Gemma w przeglądarce, używamy jej z eksperymentalnym interfejsem LLM Inference API MediaPipe.

Kwestie wygody użytkownika i bezpieczeństwa

Aby zapewnić użytkownikom optymalne wrażenia i bezpieczeństwo, weź pod uwagę kilka kwestii:

  • Pozwól użytkownikowi na edytowanie oceny. Ostatecznie to użytkownik powinien mieć ostatnie słowo na temat oceny produktu.
  • Poinformuj użytkownika, że ocenianie i opinie są automatyczne.
  • Zezwalaj użytkownikom na publikowanie opinii sklasyfikowanych jako toksyczne, ale przeprowadzanie drugiej kontroli na serwerze. Dzięki temu unikniesz frustracji, gdy nietoksyczna opinia zostanie błędnie sklasyfikowana jako toksyczna (fałszywie pozytywnego). Dotyczy to też sytuacji, w których złośliwy użytkownik udało się ominąć kontrolę po stronie klienta.
  • Sprawdzanie toksyczności po stronie klienta jest pomocne, ale można go pominąć. Sprawdź także po stronie serwera.

Analizowanie toksyczności za pomocą TensorFlow.js

Możesz szybko zacząć analizować toksyczność opinii użytkowników za pomocą TensorFlow.js.

  1. Zainstaluj i import bibliotekę TensorFlow.js oraz model toksyczności.
  2. Ustaw minimalny poziom ufności prognozy. Wartość domyślna to 0,85, a w naszym przykładzie ustawiliśmy 0,9.
  3. Wczytaj model asynchronicznie.
  4. Asynchronicznie sklasyfikuj opinię. Nasz kod wykrywa prognozy przekraczające próg 0,9 dla każdej kategorii.

Ten model może kategoryzować toksyczność w przypadku ataków związanych z tożsamością, obelg, nieprzyzwoitych treści i nie tylko.

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 nastrojów za pomocą Transformers.js

  1. Zainstaluj i zaimportuj bibliotekę Transformers.js.

  2. Skonfiguruj zadanie analizy nastawienia za pomocą dedykowanego potoku. Przy pierwszym użyciu potoku model jest pobierany i zapisywany w pamięci podręcznej. Od tego momentu analiza nastawienia powinna być znacznie szybsza.

  3. Asynchronicznie sklasyfikuj opinię. Użyj niestandardowego progu, aby wyznaczyć poziom pewności, który uznasz za odpowiedni dla danej 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
}

Sugeruj ocenę w gwiazdkach przy użyciu Gemma i MediaPipe

Dzięki interfejsowi LLM Inference API możesz w całości uruchamiać duże modele językowe (LLM) w przeglądarce.

Ta nowa funkcja jest szczególnie przełomowa, ponieważ wziąć pod uwagę zapotrzebowanie na pamięć i moc obliczeniową LLM, które jest ponad 100 razy większe niż tradycyjne modele działające na urządzeniach. Umożliwiają to optymalizacje na stosie na urządzeniu, m.in. nowe operacje, kwantyzację, buforowanie i dzielenie wagi. Źródło: „Large Language Models On-Device with MediaPipe i TensorFlow Lite”.

  1. Zainstaluj i zaimportuj MediaPipe LLM inference API.
  2. Pobierz model. Używamy tu gry Gemma 2B pobranej z Kaggle. Gemma 2B to najmniejszy z otwartych modeli Google.
  3. Skieruj kod na odpowiednie pliki modelu, używając symbolu FilesetResolver. Jest to ważne, ponieważ modele generatywnej AI mogą mieć określoną strukturę katalogów dla swoich zasobów.
  4. Wczytaj i skonfiguruj model z interfejsem LLM MediaPipe. Przygotuj model do użycia: określ lokalizację modelu, preferowaną długość odpowiedzi i preferowany poziom kreatywności na podstawie temperatury.
  5. Zadaj pytanie modelowi (zobacz przykład).
  6. Poczekaj na odpowiedź modelu.
  7. Przeprowadź analizę oceny: wyodrębnij ocenę w postaci gwiazdek 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`;

Odebranie krążka

Nie musisz znać się na sztucznej inteligencji ani systemach uczących się. Zaprojektowanie promptu wymaga iteracji, ale reszta kodu to standardowy kod programowania.

Modele na urządzeniu są dość dokładne. Jeśli użyjesz fragmentów kodu z tego dokumentu, zobaczysz, że zarówno analiza toksyczności, jak i analiza nastawienia dają dokładne wyniki. Oceny Gemma w większości przypadków były zgodne z ocenami modelu Gemini w kilku przetestowanych opiniach referencyjnych. Aby potwierdzić tę dokładność, wymagane są dodatkowe testy.

Opracowanie promptu dla Gemma 2B wymaga jednak pracy. Ponieważ Gemma 2B to mały model LLM, potrzebuje szczegółowego promptu, aby uzyskać satysfakcjonujące wyniki – zwłaszcza bardziej szczegółowe niż te wymagane przez interfejs Gemini API.

Wnioskowanie może być błyskawiczne. Jeśli korzystasz z fragmentów kodu z tego dokumentu, zauważ, że na wielu urządzeniach wnioskowanie może przebiegać szybciej i szybciej niż w przypadku przesyłania danych w obie strony serwera. ale szybkość wnioskowania może być bardzo różna. Potrzebna jest dokładna analiza porównawcza na urządzeniach docelowych. Spodziewamy się, że wnioskowanie na urządzeniu będzie działać szybciej dzięki aktualizacjom biblioteki Web GPU, WebAssembly i bibliotecznym. Na przykład Transformers.js dodaje obsługę GPU w sieci w wersji 3, co może przyspieszyć wnioskowanie na urządzeniu wiele razy.

Rozmiar pobierania może być bardzo duży. Wnioskowanie w przeglądarce jest szybkie, ale wczytanie modeli AI może stanowić wyzwanie. Do korzystania z AI w przeglądarce potrzebny jest zazwyczaj zarówno biblioteka, jak i model, które zwiększają rozmiar pobieranej aplikacji.

Choć model toksyczności Tensorflow (klasyczny model przetwarzania języka naturalnego) ma zaledwie kilka kilobajtów, modele generatywnej AI, takie jak domyślny model analizy nastawienia w Transformers.js, osiągają 60 MB. Modele językowe, takie jak Gemma, mogą nawet mieć 1,3 GB. Ten limit przekracza medianę rozmiaru strony internetowej 2, 2 MB, czyli znacznie większy niż zalecany w celu uzyskania najlepszej wydajności. Generatywna AI na urządzeniu sprawdza się w określonych sytuacjach.

Technologia generatywnej AI w internecie gwałtownie się zmienia. W przyszłości prawdopodobnie 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ć, zarejestruj się w programie wczesnej wersji przedpremierowej.