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

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

תאריך פרסום: 16 במאי 2024

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

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

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

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

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

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

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

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

בסדנת הקוד הזו נשתמש בשילוב של שיטות כדי להראות לכם מה נמצא בכלי העבודה שלכם ל-AI בצד הלקוח.

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

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

שיקולים לגבי חוויית המשתמש ובטיחות

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

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

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

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

  1. מתקינים את ספריית TensorFlow.js ואת מודל הרעילות וimport אותם.
  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), שהן גדולות פי מאה מודלים בצד הלקוח. זה מתאפשר על ידי אופטימיזציה בסטאק האינטרנט, כולל פעולות חדשות, כימות, שמירה במטמון ושיתוף משקולות. מקור: Large Language Models On-Device with MediaPipe ו-TensorFlow Lite

  1. מתקינים ומטמיעים את ממשק ה-API של MediaPipe LLM להסקה.
  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.

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

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

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

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

השלבים הבאים

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