עידוד ביקורות מועילות על מוצרים באמצעות AI לאינטרנט במכשיר

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

ביקורות חיוביות ושליליות יכולות להשפיע על החלטת הקונה בנוגע לרכישה.

לפי מחקרים חיצוניים, 82% מהקונים באינטרנט מחפשים בצורה פעילה ביקורות שליליות לפני שהם מבצעים רכישה. הביקורות השליליות האלה מועילות ללקוחות ולעסקים, כי הזמינות של ביקורות שליליות יכולה לעזור בהפחתת שיעורי ההחזרה ובשיפור המוצרים.

הנה כמה דרכים שבהן ניתן לשפר את איכות הביקורת:

  • יש לבדוק את מידת הרעילות של כל ביקורת לפני שליחתה. אנחנו יכולים לעודד משתמשים להסיר שפה פוגענית והערות לא מועילות אחרות, כדי שהביקורת שלהם תעזור למשתמשים אחרים לקבל החלטה טובה יותר בנוגע לרכישה.
    • שלילי: התיק הזה גרוע, ואני שונא אותו.
    • שלילי עם משוב שימושי: הרוכסנים עמידים מאוד והחומר לא נראה זול. החזרתי את התיק הזה.
  • אפשר ליצור דירוג באופן אוטומטי על סמך השפה שבה נעשה שימוש בביקורת.
  • קבע אם הביקורת שלילית או חיובית.
צילום מסך של ביקורת לדוגמה עם סנטימנט ודירוג כוכבים.
בדוגמה הזו, התגובה של כותב הביקורת מקבלת סנטימנט חיובי ודירוג של חמישה כוכבים.

בסופו של דבר, המשתמש צריך לומר את המילה האחרונה על דירוג המוצר.

ב-Codelab הבא מוצעים פתרונות במכשיר עצמו, בדפדפן. לא צריך ידע בפיתוח AI, שרתים או מפתחות API.

דרישות מוקדמות

אומנם יכולות AI בצד השרת עם פתרונות (כמו Gemini API או OpenAI API) הן פתרונות יעילים לאפליקציות רבות, אבל במדריך הזה נתמקד בבינה מלאכותית (AI) לאינטרנט במכשיר. טכנולוגיית AI מבוססת-אינטרנט במכשיר היא שיטה שבה מודלים של AI פועלים בדפדפן כדי לשפר את החוויה של משתמשי האינטרנט, בלי לבצע פעולות הלוך ושוב בשרת.

בשיעור ה-Lab הזה נשתמש בשילוב של כמה שיטות כדי להראות לכם מה יש בארגז הכלים ל-AI באינטרנט במכשיר.

אנחנו משתמשים בספריות ובמודלים הבאים:

  • TensforFlow.js לניתוח הרעילות. TensorFlow.js היא ספריית קוד פתוח ללמידת מכונה שמיועדת להסקת מסקנות ולאימון באינטרנט.
  • transformers.js לניתוח סנטימנטים. Transformers.js היא ספריית AI לאינטרנט מבית Hugging Face.
  • Gemma 2B לדירוגי כוכבים. ג'מה היא משפחה של מודלים קלים ופתוחים שנוצרו על בסיס המחקר והטכנולוגיה שבהם Google השתמשה כדי ליצור את המודלים של Gemini. כדי להריץ את Gemma בדפדפן, אנחנו משתמשים בה עם ה-LLM Inference API הניסיוני של MediaPipe.

שיקולי חוויית משתמש ובטיחות

יש כמה שיקולים שצריך להביא בחשבון כדי להבטיח חוויית משתמש ובטיחות אופטימליים:

  • המשתמש יכול לערוך את הדירוג. בסופו של דבר, המשתמש צריך לומר את המילה האחרונה בדירוג המוצר.
  • מבהירים למשתמש שהדירוג והביקורות הם אוטומטיים.
  • המשתמשים יכולים לפרסם ביקורת שסווגה רעילה, אבל להריץ בדיקה נוספת בשרת. כך נמנעת חוויה מתסכלת שבה ביקורת לא רעילה מסווגת בטעות כרעילה (חיוב שקרי). זה כולל גם מקרים שבהם משתמש זדוני מצליח לעקוף את הבדיקה בצד הלקוח.
  • בדיקת רעילות בצד הלקוח מועילה, אבל אפשר לעקוף אותה. הקפידו להריץ גם בדיקה בצד השרת.

ניתוח מידת הרעילות באמצעות TensorFlow.js

בעזרת TensorFlow.js, קל להתחיל לנתח את מידת הרעילות של ביקורת משתמשים.

  1. מתקינים וimport את הספרייה של TensorFlow.js ואת מודל הרעילות.
  2. הגדרת רמת סמך מינימלית לחיזוי. ברירת המחדל היא 0.85, ובדוגמה שלנו הגדרנו אותה ל-0.9.
  3. עליך לטעון את המודל באופן אסינכרוני.
  4. סווגו את הביקורת באופן אסינכרוני. הקוד שלנו מזהה חיזויים שחורגים מסף של 0.9 לכל קטגוריה.

המודל הזה יכול לסווג רעילות בהקשר של מתקפת זהות, עלבון, גסויות ועוד.

למשל:

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
);

קביעת סנטימנט באמצעות Transformers.js

  1. מתקינים ומייבאים את ספריית Transformers.js.

  2. הגדרת משימה של ניתוח סנטימנטים באמצעות צינור עיבוד נתונים ייעודי. כשמשתמשים בצינור עיבוד נתונים בפעם הראשונה, המערכת מורידה את המודל ושומרת אותו במטמון. לאחר מכן, ניתוח הסנטימנטים אמור להיות הרבה יותר מהיר.

  3. סווגו את הביקורת באופן אסינכרוני. השתמשו בסף מותאם אישית כדי להגדיר את רמת הסמך שבה אתם יכולים להשתמש באפליקציה.

למשל:

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
}

הצעת דירוג כוכבים באמצעות Gemma ו-MediaPipe

בעזרת LLM Inference API אפשר להריץ מודלים גדולים של שפה (LLM) לגמרי בדפדפן.

היכולת החדשה הזו היא טרנספורמטיבית במיוחד בהתחשב בדרישות הזיכרון והמחשוב של מודלים מסוג LLM, שגדולים פי מאה מהמודלים המסורתיים במכשיר. תוכלו לבצע אופטימיזציה בכל מחסנית המכשיר, כולל פעולות חדשות, כיתה, שמירה במטמון ושיתוף משקל. מקור: "מודלים גדולים של שפה (LLM) במכשיר עם MediaPipe ו-TensorFlow Lite".

  1. התקנה וייבוא של ממשק ה-API להסקת LLM של MediaPipe.
  2. הורדת מודל. כאן אנחנו משתמשים ב-Gemma 2B, שהורד מ-Kaggle. Gemma 2B הוא המודל הקטן ביותר מבין המודלים של Google עם משקל פתוח.
  3. מכוונים את הקוד לקובצי המודל הנכונים באמצעות FilesetResolver. זה חשוב כי מודלים של בינה מלאכותית גנרטיבית עשויים להיות בעלי מבנה ספרייה ספציפי לנכסים שלהם.
  4. טוענים את המודל ומגדירים אותו באמצעות ממשק ה-LLM של MediaPipe. מכינים את המודל לשימוש: מציינים את מיקום המודל, משך התשובות המועדף ורמת היצירתיות המועדפת ביחס לטמפרטורה.
  5. נותנים למודל הנחיה (ראו דוגמה).
  6. ממתינים לתשובה של המודל.
  7. ניתוח של הדירוג: מחלצים את דירוג הכוכבים מהתשובה של המודל.
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);

הנחיה לדוגמה

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`;

חטיפות דסקית

לא נדרשת מומחיות ב-AI/ML. כשמתכננים פרומפט, צריך לבצע איטרציות, אבל שאר הקוד הוא סטנדרטי בפיתוח של אתרי אינטרנט.

המודלים שבמכשירים מדויקים למדי. אם תריצו את קטעי הקוד מהמסמך הזה, תראו שגם ניתוח הרעילות וגם ניתוח הסנטימנטים מספקים תוצאות מדויקות. בדרך כלל, הדירוגים של Gemma תאמו לדירוגי המודלים של Gemini בכמה מביקורות העזר שנבדקו. על מנת לאמת את הדיוק, יש צורך בבדיקות נוספות.

עם זאת, תכנון ההנחיה עבור Gemma 2B דורש עבודה רבה. מכיוון ש-Gemma 2B הוא LLM קטן, הוא זקוק להנחיה מפורטת כדי להגיע לתוצאות הרצויות – ובפרט יותר מפורט ממה שנדרש ל-Gemini API.

ההשערה יכולה להיות במהירות הבזק. אם תריצו את קטעי הקוד מהמסמך הזה, תוכלו לראות שההסקה יכולה להיות מהירה יותר, ואולי אפילו מהירה יותר, בהשוואה להעברות חוזרות מהשרת, במספר מכשירים. עם זאת, מהירות ההסקה יכולה להשתנות באופן משמעותי. יש צורך בהשוואת ביצועים יסודית במכשירי יעד. אנחנו צופים שההשערות במכשיר ימשיכו להיות מהירים יותר עם העדכונים של Web GPU, WebAssembly וספרייה. לדוגמה, באתר Transformers.js יש תמיכה ב-Web GPU בגרסה 3, שיכולה להאיץ את מהירות הסקת הנתונים במכשיר פי רבות.

הגדלים של ההורדות יכולים להיות מאוד גדולים. דפדפן מסיקה במהירות, אבל טעינת מודלים של AI יכולה להיות מאתגרת. כדי לבצע AI בדפדפן, בדרך כלל צריך גם ספרייה וגם מודל, שיתווספו לגודל ההורדה של אפליקציית האינטרנט.

מודל הרעילות של Tensorflow (מודל קלאסי לעיבוד שפה טבעית) הוא רק כמה קילובייט (KB), אבל מודלים של בינה מלאכותית גנרטיבית, כמו מודל ברירת המחדל לניתוח סנטימנטים של Transformers.js, מגיעים ל-60MB. דגמי שפה גדולים (LLM) כמו Gemma יכולים להיות בגודל של 1.3GB, זה חורג מהחציון של גודל דף האינטרנט של 2.2MB, שהוא כבר גדול בהרבה מהמומלץ להשגת הביצועים הטובים ביותר. בתרחישים מסוימים, אפשר ליישם AI גנרטיבי במכשיר.

התחום של בינה מלאכותית גנרטיבית באינטרנט מתפתח במהירות! מודלים קטנים יותר ומשופרים לאינטרנט צפויים לצמוח בעתיד.

השלבים הבאים

ב-Chrome נבדקת דרך אחרת להפעלה של בינה מלאכותית גנרטיבית בדפדפן. כדי לבדוק אותה, תוכלו להירשם לתוכנית טרום-השקה (Preview) מוקדמת.