Khám phá các đề xuất về bài đánh giá sản phẩm bằng AI phía máy khách

Maud Nalpas
Maud Nalpas

Ngày xuất bản: Ngày 21 tháng 10 năm 2024

Cửa hàng trực tuyến có thể thấy Tăng 270% số lượt chuyển đổi bằng cách đăng bài đánh giá sản phẩm. Bài đánh giá tiêu cực cũng rất quan trọng khi tạo dựng uy tín. Tăng 82% người mua sắm trực tuyến tìm kiếm sản phẩm trước khi mua.

Việc khuyến khích khách hàng để lại bài đánh giá sản phẩm hữu ích, đặc biệt là khi bài đánh giá đó mang tính tiêu cực, có thể sẽ gặp khó khăn. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng AI tạo sinh để giúp người dùng viết bài đánh giá đầy đủ thông tin, hỗ trợ quyết định mua hàng của người khác.

Bản minh hoạ và mã

Hãy thử nghiệm với bản minh hoạ bài đánh giá sản phẩm và điều tra mã trên GitHub.

Cách chúng tôi xây dựng công cụ này

AI phía máy khách

Đối với bản minh hoạ này, chúng tôi đã triển khai tính năng phía máy khách vì những lý do sau:

  • Độ trễ. Chúng tôi muốn đưa ra đề xuất một cách nhanh chóng ngay khi người dùng ngừng nhập. Chúng tôi có thể cung cấp tính năng này bằng cách tránh các lượt truy cập qua lại máy chủ.
  • Chi phí. Mặc dù đây chỉ là bản minh hoạ, nhưng nếu bạn cân nhắc khởi chạy một trong quá trình sản xuất, thật tuyệt vời nếu bạn thử nghiệm với chi phí phía máy chủ bằng 0 cho đến khi bạn có thể xác thực xem tính năng này có phù hợp với người dùng của mình hay không.

AI tạo sinh MediaPipe

Chúng tôi đã chọn sử dụng mô hình Gemma 2B thông qua API suy luận LLM MediaPipe (gói MediaPipe GenAI) vì những lý do sau:

  • Độ chính xác của mô hình: Gemma 2B mang đến sự cân bằng tuyệt vời giữa kích thước và độ chính xác. Thời gian được nhắc đúng cách, nó đã mang lại kết quả mà chúng tôi thấy hài lòng với bản minh hoạ này.
  • Hỗ trợ trên nhiều trình duyệt: MediaPipe được hỗ trợ trong tất cả trình duyệt hỗ trợ WebGPU.

Trải nghiệm người dùng

Áp dụng các phương pháp hay nhất về hiệu suất

Mặc dù Gemma 2B là một mô hình ngôn ngữ lớn (LLM), nhưng đây vẫn là một tệp tải xuống có dung lượng lớn. Áp dụng các phương pháp hay nhất về hiệu suất, bao gồm cả việc sử dụng worker web.

Đặt tính năng này ở chế độ không bắt buộc

Chúng tôi muốn các đề xuất đánh giá dựa trên AI giúp nâng cao quy trình đăng bài đánh giá sản phẩm của người dùng. Trong quá trình triển khai, người dùng có thể đăng bài đánh giá ngay cả khi mô hình chưa tải và do đó chưa đưa ra các mẹo cải thiện.

Hình 1. Người dùng vẫn có thể đăng bài đánh giá của họ, ngay cả khi AI chưa sẵn sàng.

Trạng thái giao diện người dùng và ảnh động

Quá trình suy luận thường mất nhiều thời gian hơn so với cảm nhận ngay lập tức, vì vậy chúng tôi sẽ báo hiệu cho người dùng rằng mô hình đang chạy suy luận, hay "tư duy". Chúng tôi sử dụng ảnh động để giúp người dùng dễ dàng chờ đợi, đồng thời đảm bảo rằng ứng dụng đang hoạt động như dự kiến. Khám phá các trạng thái giao diện người dùng mà chúng tôi đã triển khai trong bản minh hoạ, do Adam Argyle thiết kế.

Hình 2. Ảnh động minh hoạ mô hình đang tải, rồi "suy nghĩ", và cuối cùng là xong.

Lưu ý khác

Trong môi trường phát hành, bạn nên:

  • Cung cấp cơ chế phản hồi. Nếu các đề xuất không phù hợp hoặc không có ý nghĩa thì sao? Triển khai cơ chế phản hồi nhanh (chẳng hạn như thích và không thích) và dựa vào suy nghiệm để xác định nội dung người dùng tìm thấy hữu ích. Ví dụ: đánh giá xem có bao nhiêu người dùng đang tương tác với và liệu họ có tắt tính năng đó không.
  • Cho phép người dùng chọn không tham gia. Điều gì sẽ xảy ra nếu người dùng thích sử dụng từ của riêng họ mà không AI hỗ trợ hoặc bạn thấy tính năng khó chịu? Cho phép người dùng chọn không sử dụng và chọn sử dụng lại nếu muốn.
  • Giải thích lý do tồn tại của tính năng này. Một lời giải thích ngắn gọn có thể khuyến khích người dùng sử dụng công cụ phản hồi. Ví dụ: "Ý kiến phản hồi chất lượng hơn giúp những người mua sắm khác quyết định mua gì và giúp chúng tôi tạo ra những sản phẩm mà bạn muốn". Bạn có thể giải thích chi tiết về cách tính năng này hoạt động và lý do bạn nên miễn là bạn có thể tham khảo thêm thông tin.
  • Công bố về cách thức sử dụng AI khi thích hợp. Nhờ AI phía máy khách, nội dung của người dùng không được gửi đến máy chủ để xử lý, do đó có thể được giữ riêng tư. Tuy nhiên, nếu bạn xây dựng một phương án dự phòng phía máy chủ hoặc thu thập thông tin bằng AI, hãy cân nhắc thêm thông tin đó vào chính sách quyền riêng tư, điều khoản dịch vụ hoặc các nơi khác.

Triển khai

Việc triển khai của chúng tôi cho trình đề xuất bài đánh giá sản phẩm có thể hoạt động hiệu quả trên phạm vi lớn trường hợp sử dụng. Hãy cân nhắc những thông tin sau đây làm cơ sở cho tương lai của bạn các tính năng AI phía máy khách.

MediaPipe trong một worker web

Với tính năng Suy luận LLM MediaPipe, mã AI chỉ là một vài dòng: tạo trình phân giải tệp và đối tượng suy luận LLM bằng cách truyền URL mô hình vào đó, sau đó sử dụng thực thể suy luận LLM đó để tạo phản hồi.

Tuy nhiên, mã mẫu của chúng ta sẽ mở rộng hơn một chút. Đó là do tính năng này được triển khai trong một worker web, vì vậy, tính năng này sẽ truyền thông báo bằng tập lệnh chính thông qua mã thông báo tuỳ chỉnh. Tìm hiểu thêm về mẫu này.

// Trigger model preparation *before* the first message arrives
self.postMessage({ code: MESSAGE_CODE.PREPARING_MODEL, payload: null });
try {
  // Create a FilesetResolver instance for GenAI tasks
  const genai = await FilesetResolver.forGenAiTasks(MEDIAPIPE_WASM);
  // Create an LLM Inference instance from the specified model path
  llmInference = await LlmInference.createFromModelPath(genai, MODEL_URL);
  self.postMessage({ code: MESSAGE_CODE.MODEL_READY, payload: null });
} catch (error) {
  self.postMessage({ code: MESSAGE_CODE.MODEL_ERROR, payload: null });
}

// Trigger inference upon receiving a message from the main script
self.onmessage = function (message) {
  if (!llmInference) {
    // Just in case. This condition shouldn't normally be hit because
    // the inference UI button is disabled until the model is ready
    throw new Error("Can't run inference, the model is not ready yet");
  }
  (async function () {
    // Run inference = Generate an LLM response
    try {
    const response = await llmInference.generateResponse(
      // Create a prompt based on message.data, which is the actual review
      // draft the user has written. generatePrompt is a local utility function.
      generatePrompt(message.data)
    );
    } catch (error) {
      self.postMessage({ code: MESSAGE_CODE.INFERENCE_ERROR, payload: null });
    }
    // Parse and process the output using a local utility function
    const reviewHelperOutput = generateReviewHelperOutput(response);
    // Post a message to the main thread
    self.postMessage({
      code: MESSAGE_CODE.RESPONSE_READY,
      payload: reviewHelperOutput,
    });
  })();
};

export const MESSAGE_CODE ={
  PREPARING_MODEL: 'preparing-model',
  MODEL_READY: 'model-ready',
  GENERATING_RESPONSE: 'generating-response',
  RESPONSE_READY: 'response-ready',
  MODEL_ERROR: 'model-error',
  INFERENCE_ERROR: 'inference-error',
};

Đầu vào và đầu ra

Hình 3. Sơ đồ minh hoạ quá trình xử lý câu lệnh thông qua suy luận đến đầu ra LLM thô, sau đó được phân tích cú pháp thành đề xuất đọc để hiển thị.

Câu lệnh đầy đủ của chúng tôi được tạo bằng câu lệnh đặt câu lệnh dựa trên một vài ví dụ. Bài đánh giá có thông tin do người dùng nhập, hay nói cách khác là bài đánh giá nháp mà người dùng viết.

Để tạo lời nhắc dựa trên hoạt động đầu vào của người dùng, trong thời gian chạy, chúng ta gọi phần mềm tiện ích hàm generatePrompt.

Các mô hình và thư viện AI phía máy khách thường có ít tiện ích hơn AI phía máy chủ. Ví dụ: chế độ JSON thường không dùng được. Điều này có nghĩa là chúng ta cần cung cấp cấu trúc đầu ra mong muốn bên trong câu lệnh. Cách này kém rõ ràng, khó bảo trì và kém tin cậy hơn so với việc cung cấp giản đồ thông qua cấu hình mô hình. Ngoài ra, các mô hình phía máy khách có xu hướng nhỏ hơn, điều đó có nghĩa là chúng dễ gặp lỗi cấu trúc trong đầu ra.

Trên thực tế, chúng tôi quan sát thấy Gemma 2B làm tốt hơn việc cung cấp đầu ra có cấu trúc dưới dạng văn bản khi so sánh với JSON hoặc JavaScript. Đối với bản minh hoạ này, chúng tôi đã chọn định dạng đầu ra dựa trên văn bản. Mô hình này tạo văn bản, sau đó chúng ta phân tích cú pháp đầu ra thành một đối tượng JavaScript để xử lý thêm trong ứng dụng web.

Cải thiện câu lệnh

Câu lệnh của tôi và câu trả lời trong giao diện Gemini Chat.
Hình 4. Chúng tôi đã yêu cầu Gemini Chat cải thiện câu lệnh của mình và câu trả lời sẽ được đưa ra cùng với nội dung giải thích những điểm cải tiến đã được thực hiện và cảnh báo về mức độ hiệu quả.

Chúng tôi đã sử dụng LLM để lặp lại câu lệnh của mình.

  • Nhắc nhanh. Để tạo ví dụ cho các câu lệnh ngắn gọn, chúng ta dựa vào Gemini Chat. Gemini Chat sử dụng các mô hình Gemini mạnh mẽ nhất. Điều này đảm bảo chúng tôi tạo ra các ví dụ chất lượng cao.
  • Đánh bóng lời nhắc. Khi cấu trúc của lời nhắc đã sẵn sàng, chúng tôi cũng sử dụng Gemini Chat để tinh chỉnh câu lệnh. Việc này giúp cải thiện chất lượng đầu ra.

Sử dụng ngữ cảnh để tăng chất lượng

Việc đưa loại sản phẩm vào câu lệnh của chúng tôi đã giúp mô hình đưa ra các đề xuất phù hợp và chất lượng cao hơn. Trong bản minh hoạ này, loại sản phẩm là tĩnh. Trong một ứng dụng thực tế, bạn có thể tự động đưa sản phẩm vào lời nhắc, dựa trên trang mà người dùng đang truy cập.

Review: "I love these."
Helpful: No  
Fix: Be more specific, explain why you like these **socks**.
Example: "I love the blend of wool in these socks. Warm and not too heavy."

Một trong những ví dụ ở phần ảnh chụp nhanh trong câu lệnh của chúng tôi: loại sản phẩm ("vớ") được bao gồm trong bản sửa lỗi được đề xuất và trong bài đánh giá mẫu.

Sự cố và cách khắc phục LLM

Gemma 2B thường yêu cầu kỹ thuật câu lệnh hơn là kỹ thuật mạnh mẽ, lớn hơn ở phía máy chủ.

Chúng tôi gặp phải một số vấn đề với Gemma 2B. Sau đây là cách chúng tôi cải thiện kết quả:

  • Quá tuyệt. Gemma 2B gặp khó khăn trong việc đánh dấu các bài đánh giá là "không hữu ích" dường như do dự khi đánh giá. Chúng tôi đã cố gắng sử dụng ngôn từ trung lập hơn cho hãng nhạc ("cụ thể" và "không cụ thể", thay vì "hữu ích" và "không hữu ích") và được thêm ví dụ, nhưng điều này không cải thiện kết quả. Điều giúp cải thiện kết quả là sự kiên trì và lặp lại trong câu lệnh. Cách tiếp cận chuỗi suy nghĩ cũng có thể mang lại những điểm cải thiện.
  • Hướng dẫn không rõ ràng. Đôi khi, mô hình này đã diễn giải quá mức câu lệnh. Thay vì đánh giá bài đánh giá, phương thức này tiếp tục đưa ra danh sách ví dụ. Để khắc phục vấn đề này, chúng tôi đã thêm một phần chuyển đổi rõ ràng vào lời nhắc:

    I'll give you example reviews and outputs, and then give you one review
    to analyze. Let's go:
    Examples:
    <... Examples>
    
    Review to analyze:
    <... User input>
    

    Việc sắp xếp rõ ràng lời nhắc sẽ giúp mô hình phân biệt giữa danh sách ví dụ (một vài cảnh quay) và dữ liệu đầu vào thực tế.

  • Mục tiêu không chính xác. Thỉnh thoảng, người mẫu đề xuất các thay đổi đối với sản phẩm thay vì nội dung đánh giá. Ví dụ: đối với một bài đánh giá nêu "Tôi ghét những điều này người mẫu có thể đề xuất "Hãy cân nhắc thay tất bằng thương hiệu hoặc phong cách", đây không phải là hiệu ứng mong muốn. Việc tách câu lệnh giúp làm rõ nhiệm vụ và cải thiện tiêu điểm của mô hình về bài đánh giá.