กระตุ้นให้ผู้ใช้เขียนรีวิวผลิตภัณฑ์ที่เป็นประโยชน์ด้วย AI บนเว็บฝั่งไคลเอ็นต์

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

เผยแพร่: 16 พฤษภาคม 2024

รีวิวเชิงบวกและเชิงลบช่วยให้ผู้ซื้อตัดสินใจซื้อได้

จากการวิจัยภายนอกพบว่าผู้เลือกซื้อออนไลน์ 82% มองหารีวิวเชิงลบอย่างจริงจังก่อนทำการซื้อ รีวิวเชิงลบเหล่านี้มีประโยชน์ต่อลูกค้าและธุรกิจ เนื่องจากรีวิวเชิงลบที่มีอยู่จะช่วยลดอัตราการคืนสินค้าและช่วยให้ผู้ผลิตปรับปรุงผลิตภัณฑ์ได้

ต่อไปนี้เป็นวิธีปรับปรุงคุณภาพของรีวิว

  • ตรวจสอบรีวิวแต่ละรายการเพื่อหาเนื้อหาที่เป็นพิษก่อนที่จะส่ง เราอาจกระตุ้นให้ผู้ใช้นำภาษาที่ไม่เหมาะสมออก รวมถึงคำพูดอื่นๆ ที่ไม่เป็นประโยชน์ เพื่อให้รีวิวของผู้ใช้ช่วยผู้ใช้คนอื่นๆ ตัดสินใจซื้อได้ดียิ่งขึ้น
    • เชิงลบ: กระเป๋านี้แย่มาก ฉันเกลียดกระเป๋านี้
    • ความคิดเห็นในแง่ลบแต่มีประโยชน์ ซิปแข็งมากและวัสดุดูไม่แพง ฉันส่งคืนกระเป๋านี้แล้ว
  • สร้างการจัดประเภทโดยอัตโนมัติตามภาษาที่ใช้ในรีวิว
  • ระบุว่ารีวิวเป็นเชิงลบหรือเชิงบวก
ภาพหน้าจอตัวอย่างรีวิวที่มีความรู้สึกและให้คะแนนด้วยดาว
ในตัวอย่างนี้ ผู้รีวิวได้ให้ความรู้สึกในเชิงบวกและได้คะแนน 5 ดาว

ท้ายที่สุดแล้ว ผู้ใช้ควรมีสิทธิ์ตัดสินใจขั้นสุดท้ายเกี่ยวกับคะแนนผลิตภัณฑ์

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

ข้อควรพิจารณาด้าน UX และความปลอดภัย

ข้อควรพิจารณาบางประการเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานและความปลอดภัยที่ดีที่สุดมีดังนี้

  • อนุญาตให้ผู้ใช้แก้ไขการให้คะแนน ท้ายที่สุดแล้ว ผู้ใช้ควรมีสิทธิ์ตัดสินใจขั้นสุดท้ายเกี่ยวกับคะแนนผลิตภัณฑ์
  • แจ้งให้ผู้ใช้ทราบว่าการให้คะแนนและรีวิวเป็นแบบอัตโนมัติ
  • อนุญาตให้ผู้ใช้โพสต์รีวิวที่จัดประเภทเป็นเนื้อหาที่เป็นพิษ แต่ให้เรียกใช้การตรวจสอบครั้งที่ 2 ในเซิร์ฟเวอร์ วิธีนี้จะช่วยป้องกันไม่ให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดีเมื่อรีวิวที่ไม่เป็นพิษถูกจัดประเภทอย่างไม่ถูกต้องว่าเป็นพิษ (ผลบวกลวง) รวมถึงกรณีที่ผู้ใช้ที่ประสงค์ร้ายหลบเลี่ยงการตรวจสอบจากฝั่งไคลเอ็นต์ได้ด้วย
  • การตรวจสอบเนื้อหาที่เป็นพิษฝั่งไคลเอ็นต์มีประโยชน์ แต่ก็อาจถูกเลี่ยงได้ อย่าลืมตรวจสอบฝั่งเซิร์ฟเวอร์ด้วย

วิเคราะห์ความเป็นพิษด้วย 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 ซึ่งมีขนาดใหญ่กว่าโมเดลฝั่งไคลเอ็นต์กว่า 100 เท่า การเพิ่มประสิทธิภาพในเว็บสแต็กทําให้การดำเนินการนี้เป็นไปได้ ซึ่งรวมถึงการดำเนินการแบบใหม่ การแปลงค่าเป็นจำนวนเต็ม การแคช และการแชร์น้ำหนัก แหล่งที่มา: "โมเดลภาษาขนาดใหญ่ในอุปกรณ์ด้วย MediaPipe และ TensorFlow Lite"

  1. ติดตั้งและนำเข้า MediaPipe LLM Inference API
  2. ดาวน์โหลดโมเดล ในที่นี้ เราจะใช้ Gemma 2B ที่ดาวน์โหลดจาก Kaggle Gemma 2B เป็นโมเดลแบบเปิดที่เล็กที่สุดของ Google
  3. ชี้โค้ดไปยังไฟล์โมเดลที่ถูกต้องด้วย FilesetResolver ซึ่งสำคัญเนื่องจากโมเดล Generative AI อาจมีโครงสร้างไดเรกทอรีที่เฉพาะเจาะจงสำหรับชิ้นงาน
  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 สำหรับรีวิวอ้างอิง 2-3 รายการที่ทดสอบ ต้องมีการทดสอบเพิ่มเติมเพื่อตรวจสอบความถูกต้อง

อย่างไรก็ตาม การออกแบบพรอมต์สำหรับ Gemma 2B นั้นต้องอาศัยความพยายาม เนื่องจาก Gemma 2B เป็น LLM ขนาดเล็ก จึงต้องใช้พรอมต์แบบละเอียดเพื่อให้ได้ผลลัพธ์ที่น่าพอใจ ซึ่งจะละเอียดกว่าที่ต้องใช้กับ Gemini API

การอนุมานจะรวดเร็วทันใจ หากคุณเรียกใช้ข้อมูลโค้ดจากเอกสารนี้ คุณควรสังเกตว่าการอนุมานจะรวดเร็วมาก ซึ่งอาจเร็วกว่าการติดต่อกับเซิร์ฟเวอร์ในอุปกรณ์จํานวนหนึ่ง กล่าวคือ ความเร็วในการอนุมาน อาจแตกต่างกันไป จำเป็นต้องมีการเปรียบเทียบอย่างละเอียดสำหรับอุปกรณ์เป้าหมาย เราคาดว่าการอนุมานของเบราว์เซอร์จะเร็วขึ้นเรื่อยๆ ด้วยการอัปเดต WebGPU, WebAssembly และไลบรารี เช่น Transformers.js เพิ่มการรองรับ GPU บนเว็บใน v3 ซึ่งสามารถเร่งความเร็วในการอนุมานในอุปกรณ์หลายเท่า

ขนาดไฟล์ที่ดาวน์โหลดอาจใหญ่มาก การอนุมานในเบราว์เซอร์นั้นรวดเร็ว แต่การโหลดโมเดล AI อาจเป็นเรื่องท้าทาย หากต้องการใช้ AI ในเบราว์เซอร์ โดยทั่วไปคุณจะต้องมีทั้งไลบรารีและโมเดล ซึ่งจะเพิ่มขนาดการดาวน์โหลดของเว็บแอป

แม้ว่าโมเดลความเป็นพิษของ Tensorflow (โมเดลการประมวลผลภาษาธรรมชาติแบบคลาสสิก) จะมีน้ำหนักเพียงไม่กี่กิโลไบต์ แต่โมเดล Generative AI เช่น โมเดลการวิเคราะห์ความรู้สึกเริ่มต้นของ Transformers.js มีขนาดถึง 60 MB โมเดลภาษาขนาดใหญ่อย่าง Gemma สามารถ มีขนาดใหญ่ได้ถึง 1.3 GB ซึ่งมากกว่าค่ามัธยฐาน ขนาดหน้าเว็บ 2.2 MB ซึ่งก็ใหญ่กว่าที่แนะนำไว้เพื่อประสิทธิภาพที่ดีที่สุดอยู่แล้ว Generative AI ฝั่งไคลเอ็นต์ใช้ได้ในบางกรณี

วงการ Generative AI บนเว็บกำลังพัฒนาไปอย่างรวดเร็ว คาดว่าในอนาคตจะมีโมเดลที่เล็กลงและปรับให้เหมาะกับเว็บปรากฏขึ้น

ขั้นตอนถัดไป

Chrome กำลังทดสอบวิธีอื่นในการเรียกใช้ Generative AI ในเบราว์เซอร์ คุณสามารถลงชื่อสมัครเข้าร่วมโปรแกรมทดลองใช้ก่อนเปิดตัวเพื่อทดสอบ