תאריך פרסום: 16 במאי 2024
ביקורות חיוביות ושליליות יכולות להשפיע על החלטת הרכישה של הקונה.
לפי מחקר חיצוני, 82% מהקונים באינטרנט מחפשים באופן פעיל ביקורות שליליות לפני שהם מבצעים רכישה. הביקורות השליליות האלה מועילות ללקוחות ולעסקים, כי זמינות הביקורות השליליות יכולה לעזור להפחית את שיעורי ההחזרות ולעזור ליוצרים לשפר את המוצרים שלהם.
הנה כמה דרכים לשפר את איכות הביקורות:
- כדאי לבדוק כל ביקורת כדי לוודא שהיא לא מכילה תוכן רעיל לפני ששולחים אותה. אנחנו יכולים לעודד משתמשים להסיר שפה פוגענית וגם הערות לא מועילות אחרות, כדי שהביקורת שלהם תעזור למשתמשים אחרים לקבל החלטה מושכלת יותר לגבי רכישה.
- שלילי: התיק הזה נורא ואני שונא אותו.
- שלילי עם משוב שימושי הרוכסנים נוקשים מאוד והחומר נראה זול. החזרת התיק הזה.
- יצירת דירוג באופן אוטומטי על סמך השפה שבה נעשה שימוש בביקורת.
- קובעים אם הביקורת היא שלילית או חיובית.
בסופו של דבר, המילה האחרונה לגבי דירוג המוצר צריכה להיות של המשתמש.
ב-codelab הבא מוצגים פתרונות בצד הלקוח, במכשיר ובדפדפן. לא נדרשים ידע בפיתוח 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 בדפדפן, אנחנו משתמשים בה עם LLM Inference API הניסיוני של MediaPipe.
שיקולים לגבי חוויית המשתמש ובטיחות
יש כמה שיקולים שצריך לקחת בחשבון כדי להבטיח חוויית משתמש ובטיחות אופטימליות:
- המשתמש יכול לערוך את הדירוג. בסופו של דבר, המשתמש הוא זה שקובע את הדירוג של המוצר.
- חשוב להבהיר למשתמש שהדירוג והביקורות הם אוטומטיים.
- לאפשר למשתמשים לפרסם ביקורת שסווגה כרעילה, אבל להריץ בדיקה שנייה בשרת. כך נמנעת חוויה מתסכלת שבה ביקורת לא פוגענית מסווגת בטעות כפוגענית (תוצאה חיובית כוזבת). הבדיקה הזו חלה גם על מקרים שבהם משתמש זדוני מצליח לעקוף את הבדיקה מצד הלקוח.
- בדיקה של תוכן רעיל בצד הלקוח היא שימושית, אבל אפשר לעקוף אותה. חשוב לוודא שאתם מריצים בדיקה גם בצד השרת.
ניתוח רעילות באמצעות TensorFlow.js
קל להתחיל לנתח את הרעילות של ביקורת של משתמש באמצעות TensorFlow.js.
- מתקינים את ספריית TensorFlow.js ואת מודל הרעילות וimport אותם.
- מגדירים רמת ודאות מינימלית של תחזית. ערך ברירת המחדל הוא 0.85, ובדוגמה שלנו הגדרנו אותו ל-0.9.
- טוענים את המודל באופן אסינכרוני.
- סיווג הביקורת באופן אסינכרוני. הקוד שלנו מזהה תחזיות שחורגות מסף של 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
מתקינים ומביאים את הספרייה Transformers.js.
מגדירים את המשימה של ניתוח הסנטימנטים באמצעות צינור עיבוד נתונים ייעודי. כשמשתמשים בצינור עיבוד נתונים בפעם הראשונה, המודל מוריד ומאוחסן במטמון. לאחר מכן, ניתוח הסנטימנטים אמור להיות מהיר יותר.
סיווג הביקורת באופן אסינכרוני. אפשר להשתמש בסף מותאם אישית כדי להגדיר את רמת האמון שנחשבת שימושית לאפליקציה.
לדוגמה:
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 and TensorFlow Lite.
- מתקינים ומטמיעים את ממשק ה-API של MediaPipe LLM להסקה.
- מורידים מודל. כאן אנחנו משתמשים ב-Gemma 2B, שהורדנו מ-Kaggle. Gemma 2B הוא הדגם הקטן ביותר של Google ללא הגבלת משקל.
- מכוונים את הקוד לקובצי המודל הנכונים באמצעות
FilesetResolver
. חשוב לעשות זאת כי למודלים של בינה מלאכותית גנרטיבית יכולה להיות מבנה ספריות ספציפי לנכסים שלהם. - טוענים את המודל ומגדירים אותו באמצעות ממשק ה-LLM של MediaPipe. מכינים את המודל לשימוש: מציינים את מיקום המודל, את אורך התשובות המועדף ואת רמת היצירתיות המועדפת באמצעות הטמפרטורה.
- נותנים למודל הנחיה (לדוגמה).
- ממתינים לתשובה מהמודל.
- ניתוח של הדירוג: חילוץ של דירוג הכוכבים מהתגובה של המודל.
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 נוספה תמיכה ב-Web GPU בגרסה 3, שיכולה להאיץ את ההסקה במכשיר פי כמה וכמה.
הקבצים להורדה יכולים להיות גדולים מאוד. ההסקה בדפדפן מהירה, אבל טעינת מודלים של AI עשויה להיות מאתגרת. כדי להשתמש ב-AI בדפדפן, בדרך כלל צריך גם ספרייה וגם מודל, שמגדילים את גודל ההורדה של אפליקציית האינטרנט.
מודל הרעילות של Tensorflow (מודל קלאסי של עיבוד שפה טבעית) הוא רק כמה קילובייט, אבל מודלים של בינה מלאכותית גנרטיבית כמו מודל ברירת המחדל של ניתוח הסנטימנטים ב-Transformers.js מגיעים ל-60MB. מודלים גדולים של שפה כמו Gemma יכולים להגיע לגודל של 1.3GB. הגודל הזה חורג מהערך החציוני של 2.2MB בגודל דף אינטרנט, שהוא כבר גדול בהרבה מהגודל המומלץ לקבלת הביצועים הטובים ביותר. AI גנרטיבי בצד הלקוח יכול לשמש בתרחישים ספציפיים.
תחום ה-AI הגנרטיבי באינטרנט מתפתח במהירות! בעתיד צפויים להופיע מודלים קטנים יותר שמותאמים לאינטרנט.
השלבים הבאים
אנחנו ב-Chrome עורכים ניסויים בדרך אחרת להפעלת AI גנרטיבי בדפדפן. אתם יכולים להירשם לתוכנית התצוגה המקדימה כדי לבדוק אותה.