ক্লায়েন্ট-সাইড ওয়েব AI এর সাথে দরকারী পণ্য পর্যালোচনাগুলিকে উত্সাহিত করুন৷

কেনজি বাহেউক্স
Kenji Baheux
আলেকজান্দ্রা ক্লেপার
Alexandra Klepper

প্রকাশিত: ১৬ মে, ২০২৪

ইতিবাচক ও নেতিবাচক পর্যালোচনা একজন ক্রেতার ক্রয় সিদ্ধান্তকে প্রভাবিত করতে পারে।

বাহ্যিক গবেষণা অনুসারে, ৮২% অনলাইন ক্রেতা কোনো কিছু কেনার আগে সক্রিয়ভাবে নেতিবাচক রিভিউ খোঁজেন। এই নেতিবাচক রিভিউগুলো ক্রেতা এবং ব্যবসা উভয়ের জন্যই উপকারী, কারণ এগুলোর উপস্থিতি পণ্য ফেরতের হার কমাতে এবং নির্মাতাদের তাদের পণ্যের মানোন্নয়নে সহায়তা করতে পারে।

পর্যালোচনার মান উন্নত করার কয়েকটি উপায় নিচে দেওয়া হলো:

  • জমা দেওয়ার আগে প্রতিটি রিভিউতে কোনো আপত্তিকর উপাদান আছে কিনা তা যাচাই করে নিন। আমরা ব্যবহারকারীদের আপত্তিকর ভাষা এবং অন্যান্য অপ্রয়োজনীয় মন্তব্য মুছে ফেলার জন্য উৎসাহিত করতে পারি, যাতে তাদের রিভিউ অন্য ব্যবহারকারীদের আরও ভালো ক্রয়ের সিদ্ধান্ত নিতে সাহায্য করে।
    • নেতিবাচক : এই ব্যাগটা জঘন্য, এবং আমি এটা ঘৃণা করি।
    • নেতিবাচক কিন্তু দরকারি মতামত: জিপারগুলো খুব শক্ত এবং কাপড়টা সস্তা মানের মনে হয়। আমি ব্যাগটি ফেরত দিয়ে দিয়েছি।
  • রিভিউতে ব্যবহৃত ভাষার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে একটি রেটিং তৈরি করুন।
  • পর্যালোচনাটি নেতিবাচক না ইতিবাচক তা নির্ধারণ করুন।
অনুভূতি এবং তারকা রেটিং সহ একটি নমুনা পর্যালোচনার স্ক্রিনশট।
এই উদাহরণে, পর্যালোচকের মন্তব্যটিকে ইতিবাচক অনুভূতি এবং পাঁচ তারকা রেটিং দেওয়া হয়েছে।

পরিশেষে, পণ্যের মূল্যায়নের বিষয়ে ব্যবহারকারীর সিদ্ধান্তই চূড়ান্ত হওয়া উচিত।

নিম্নলিখিত কোডল্যাবটি ডিভাইসে এবং ব্রাউজারে ক্লায়েন্ট-সাইড সমাধান প্রদান করে। এর জন্য কোনো এআই ডেভেলপমেন্ট জ্ঞান, সার্ভার বা এপিআই কী-এর প্রয়োজন নেই।

পূর্বশর্ত

যদিও জেমিনি এপিআই বা ওপেনএআই এপিআই -এর মতো সমাধানসহ সার্ভার-সাইড এআই অনেক অ্যাপ্লিকেশনের জন্য শক্তিশালী সমাধান প্রদান করে, এই নির্দেশিকায় আমরা ক্লায়েন্ট-সাইড ওয়েব এআই-এর উপর মনোযোগ দিচ্ছি। ক্লায়েন্ট-সাইড এআই ইনফারেন্স ব্রাউজারে সংঘটিত হয়, যা সার্ভারে বারবার যাওয়া-আসা বাদ দিয়ে ওয়েব ব্যবহারকারীদের অভিজ্ঞতা উন্নত করে।

এই কোডল্যাবে, ক্লায়েন্ট-সাইড এআই-এর জন্য আপনার টুলবক্সে কী কী রয়েছে তা দেখানোর জন্য আমরা বিভিন্ন কৌশলের মিশ্রণ ব্যবহার করেছি।

আমরা নিম্নলিখিত লাইব্রেরি এবং মডেলগুলো ব্যবহার করি:

  • বিষাক্ততা বিশ্লেষণের জন্য TensorFlow.js । TensorFlow.js হলো একটি ওপেন সোর্স মেশিন লার্নিং লাইব্রেরি যা ওয়েবে ইনফারেন্স এবং ট্রেনিং উভয়ের জন্যই ব্যবহৃত হয়।
  • অনুভূতি বিশ্লেষণের জন্য transformers.js । Transformers.js হলো Hugging Face-এর একটি ওয়েব এআই লাইব্রেরি।
  • স্টার রেটিং-এর জন্য জেমা ২বি । জেমা হলো লাইটওয়েট ও ওপেন মডেলের একটি পরিবার, যা গুগলের জেমিনি মডেল তৈরির গবেষণা ও প্রযুক্তি ব্যবহার করে নির্মিত। ব্রাউজারে জেমা চালানোর জন্য, আমরা মিডিয়াপাইপের পরীক্ষামূলক এলএলএম ইনফারেন্স এপিআই (LLM Inference API ) এর সাথে এটি ব্যবহার করি।

ইউএক্স এবং নিরাপত্তা সংক্রান্ত বিবেচনা

সর্বোত্তম ব্যবহারকারীর অভিজ্ঞতা ও নিরাপত্তা নিশ্চিত করার জন্য কয়েকটি বিষয় বিবেচনা করা প্রয়োজন:

  • ব্যবহারকারীকে রেটিং সম্পাদনা করার সুযোগ দিন। চূড়ান্তভাবে, পণ্যের রেটিংয়ের বিষয়ে ব্যবহারকারীর সিদ্ধান্তই চূড়ান্ত হওয়া উচিত।
  • ব্যবহারকারীকে এটা স্পষ্ট করে দিন যে রেটিং এবং রিভিউগুলো স্বয়ংক্রিয়ভাবে সম্পন্ন হয়।
  • ব্যবহারকারীদের বিষাক্ত হিসেবে চিহ্নিত রিভিউ পোস্ট করার অনুমতি দিন, কিন্তু সার্ভারে একটি দ্বিতীয় যাচাই চালান। এটি এমন একটি হতাশাজনক অভিজ্ঞতা প্রতিরোধ করে যেখানে একটি অ-বিষাক্ত রিভিউ ভুলবশত বিষাক্ত হিসেবে চিহ্নিত হয় (একটি ফলস পজিটিভ)। এটি এমন পরিস্থিতিও সামাল দেয় যেখানে কোনো বিদ্বেষী ব্যবহারকারী ক্লায়েন্ট-সাইড যাচাই প্রক্রিয়াটি এড়িয়ে যেতে সক্ষম হয়।
  • ক্লায়েন্ট-সাইড টক্সিসিটি চেক সহায়ক, কিন্তু এটি এড়িয়ে যাওয়া সম্ভব। সার্ভার-সাইডেও চেক চালানো নিশ্চিত করুন।

TensorFlow.js দিয়ে বিষাক্ততা বিশ্লেষণ করুন

TensorFlow.js ব্যবহার করে ব্যবহারকারীর পর্যালোচনার বিষাক্ততা বিশ্লেষণ করা দ্রুত শুরু করা যায়।

  1. TensorFlow.js লাইব্রেরি এবং টক্সিসিটি মডেল ইনস্টলইম্পোর্ট করুন
  2. পূর্বাভাসের জন্য সর্বনিম্ন কনফিডেন্স সেট করুন। ডিফল্ট মান হলো ০.৮৫, এবং আমাদের উদাহরণে আমরা এটিকে ০.৯ সেট করেছি।
  3. মডেলটি অ্যাসিঙ্ক্রোনাসভাবে লোড করুন।
  4. পর্যালোচনাটি অ্যাসিঙ্ক্রোনাসভাবে শ্রেণীবদ্ধ করুন। আমাদের কোড যেকোনো বিভাগের জন্য ০.৯-এর থ্রেশহোল্ড অতিক্রমকারী পূর্বাভাসগুলো শনাক্ত করে।

এই মডেলটি পরিচয় আক্রমণ, অপমান, অশ্লীলতা এবং আরও অনেক কিছুর ভিত্তিতে বিষাক্ততাকে শ্রেণিবদ্ধ করতে পারে।

উদাহরণস্বরূপ:

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
}

জেমা এবং মিডিয়াপাইপের সাথে একটি স্টার রেটিং প্রস্তাব করুন

LLM ইনফারেন্স API-এর সাহায্যে আপনি বৃহৎ ল্যাঙ্গুয়েজ মডেল (LLM) সম্পূর্ণভাবে ব্রাউজারেই চালাতে পারেন।

এই নতুন সক্ষমতাটি বিশেষভাবে যুগান্তকারী, বিশেষ করে এলএলএম (LLM)-এর মেমরি এবং কম্পিউট চাহিদার কথা বিবেচনা করলে, যা ক্লায়েন্ট-সাইড মডেলের চেয়ে একশ গুণেরও বেশি। ওয়েব স্ট্যাক জুড়ে করা অপটিমাইজেশন এটিকে সম্ভব করেছে, যার মধ্যে রয়েছে নতুন অপস (ops), কোয়ান্টাইজেশন, ক্যাশিং এবং ওয়েট শেয়ারিং। উৎস: "Large Language Models On-Device with MediaPipe and TensorFlow Lite"

  1. MediaPipe LLM ইনফারেন্স API ইনস্টল এবং ইম্পোর্ট করুন
  2. একটি মডেল ডাউনলোড করুন । এখানে, আমরা ক্যাগল থেকে ডাউনলোড করা জেমা ২বি (Gemma 2B) ব্যবহার করছি। জেমা ২বি হলো গুগলের ওপেন-ওয়েট মডেলগুলোর মধ্যে সবচেয়ে ছোট।
  3. FilesetResolver ব্যবহার করে কোডটিকে সঠিক মডেল ফাইলগুলোর দিকে নির্দেশ করুন। এটি গুরুত্বপূর্ণ, কারণ জেনারেটিভ এআই মডেলগুলোর অ্যাসেটগুলোর জন্য একটি নির্দিষ্ট ডিরেক্টরি কাঠামো থাকতে পারে।
  4. MediaPipe-এর LLM ইন্টারফেস ব্যবহার করে মডেলটি লোড ও কনফিগার করুন। ব্যবহারের জন্য মডেলটি প্রস্তুত করুন: এর অবস্থান, প্রতিক্রিয়ার পছন্দসই দৈর্ঘ্য এবং তাপমাত্রার মাধ্যমে সৃজনশীলতার পছন্দসই স্তর নির্দিষ্ট করুন।
  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 দক্ষতার প্রয়োজন নেই । একটি প্রম্পট ডিজাইন করতে পুনরাবৃত্তির প্রয়োজন হয়, কিন্তু বাকি কোডটি সাধারণ ওয়েব ডেভেলপমেন্টের মতোই।

ক্লায়েন্ট-সাইড মডেলগুলো বেশ নির্ভুল । আপনি যদি এই ডকুমেন্টের কোড স্নিপেটগুলো চালান, তাহলে দেখবেন যে টক্সিসিটি এবং সেন্টিমেন্ট অ্যানালাইসিস উভয়ই সঠিক ফলাফল দিচ্ছে। কয়েকটি পরীক্ষিত রেফারেন্স রিভিউর ক্ষেত্রে, জেমা রেটিংগুলো বেশিরভাগ সময়ই জেমিনি মডেলের রেটিংয়ের সাথে মিলে গেছে। সেই নির্ভুলতা যাচাই করার জন্য আরও পরীক্ষা করা প্রয়োজন।

তবে, জেমা ২বি-এর জন্য প্রম্পট ডিজাইন করতে বেশ পরিশ্রম করতে হয়। যেহেতু জেমা ২বি একটি ছোট এলএলএম, তাই সন্তোষজনক ফলাফল পেতে এর জন্য একটি বিশদ প্রম্পট প্রয়োজন—যা জেমিনি এপিআই-এর জন্য প্রয়োজনীয় প্রম্পটের চেয়ে উল্লেখযোগ্যভাবে বেশি বিশদ।

ইনফারেন্স অত্যন্ত দ্রুত হতে পারে । আপনি যদি এই ডকুমেন্টের কোড স্নিপেটগুলো চালান, তাহলে দেখবেন যে বিভিন্ন ডিভাইসে ইনফারেন্স দ্রুত হতে পারে, এমনকি সার্ভার রাউন্ড ট্রিপের চেয়েও দ্রুত। তবে, ইনফারেন্সের গতি ব্যাপকভাবে পরিবর্তিত হতে পারে। নির্দিষ্ট ডিভাইসগুলোতে পুঙ্খানুপুঙ্খ বেঞ্চমার্কিং প্রয়োজন। আমরা আশা করি WebGPU, WebAssembly এবং লাইব্রেরি আপডেটের সাথে ব্রাউজার ইনফারেন্স আরও দ্রুততর হতে থাকবে। উদাহরণস্বরূপ, Transformers.js v3-তে Web GPU সাপোর্ট যোগ করেছে, যা ডিভাইসের ইনফারেন্সের গতি বহুগুণ বাড়িয়ে দিতে পারে।

ডাউনলোডের আকার অনেক বড় হতে পারে। ব্রাউজারে ইনফারেন্স দ্রুত হলেও, এআই মডেল লোড করা একটি চ্যালেঞ্জ হতে পারে। ব্রাউজারের মধ্যে এআই সম্পাদন করতে সাধারণত একটি লাইব্রেরি এবং একটি মডেল উভয়েরই প্রয়োজন হয়, যা আপনার ওয়েব অ্যাপের ডাউনলোডের আকার বাড়িয়ে দেয়।

যদিও টেনসরফ্লো টক্সিসিটি মডেল (একটি ক্লাসিক ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং মডেল) মাত্র কয়েক কিলোবাইটের, ট্রান্সফর্মার্স.জেএস (Transformers.js)-এর ডিফল্ট সেন্টিমেন্ট অ্যানালাইসিস মডেলের মতো জেনারেটিভ এআই মডেলগুলো ৬০ মেগাবাইট পর্যন্ত পৌঁছায়। জেমা (Gemma)-র মতো বড় ল্যাঙ্গুয়েজ মডেলগুলো ১.৩ গিগাবাইট পর্যন্ত বড় হতে পারে। এটি গড় ২.২ মেগাবাইটের ওয়েব পেজের আকারকে অনেকখানি ছাড়িয়ে যায়, যা সর্বোত্তম পারফরম্যান্সের জন্য প্রস্তাবিত আকারের চেয়ে ইতিমধ্যেই অনেক বড়। ক্লায়েন্ট-সাইড জেনারেটিভ এআই নির্দিষ্ট কিছু পরিস্থিতিতে ব্যবহারযোগ্য।

ওয়েবে জেনারেটিভ এআই-এর ক্ষেত্রটি দ্রুত বিকশিত হচ্ছে! ভবিষ্যতে আরও ছোট এবং ওয়েবের জন্য বিশেষভাবে তৈরি মডেলের আবির্ভাব ঘটবে বলে আশা করা হচ্ছে।

পরবর্তী পদক্ষেপ

ক্রোম ব্রাউজারে জেনারেটিভ এআই চালানোর আরেকটি উপায় নিয়ে পরীক্ষা-নিরীক্ষা করছে। এটি পরীক্ষা করার জন্য আপনি আর্লি প্রিভিউ প্রোগ্রামে সাইন আপ করতে পারেন।