ফ্রেজ-টু-ফিল্টার ম্যাপিং: পণ্য ফিল্টারের জন্য সেম্যান্টিক সার্চ

এই নিবন্ধটি ব্যাখ্যা করে কীভাবে আমরা ফ্রেজ-টু-ফিল্টার ম্যাপিং তৈরি এবং সম্প্রসারিত করি যা আমাদের ফিল্টার এক্সট্রাকশন সিস্টেম চালায়। এই ম্যাপিংগুলি সার্চ কোয়েরি থেকে প্রাকৃতিক ভাষার ফ্রেজগুলিকে কাঠামোবদ্ধ পণ্য ফিল্টারের সাথে সংযুক্ত করে।

সমস্যা: প্রাকৃতিক ভাষা থেকে ফিল্টার বের করা

যখন ব্যবহারকারীরা "16gb ram সহ mini pc" এর জন্য সার্চ করে, আমাদের বের করতে হয়:

  • ফর্ম ফ্যাক্টর: মিনি পিসি

  • মেইন মেমোরি: 16

কিন্তু ব্যবহারকারীরা একই অভিপ্রায় বিভিন্নভাবে প্রকাশ করে:

  • "16gb ram mini pc"

  • "mini computer 16 gb memory"

  • "small pc 16gb"

  • "compact desktop with 16 gigs"

আমাদের এমন একটি সিস্টেম দরকার যা এই সমস্ত ফ্রেজ ভ্যারিয়েশনকে সঠিক ফিল্টার মানের সাথে ম্যাপ করে।

দুই-ধাপ প্রক্রিয়া

আমরা ফ্রেজ ম্যাপিং দুই ধাপে তৈরি করি:

  1. ধাপ ৩ক: পারমুটেশন এবং ফিচার-স্পেসিফিক নিয়ম ব্যবহার করে পণ্যের বৈশিষ্ট্য থেকে বেস ফ্রেজ তৈরি করুন
  2. ধাপ ৪: এমবেডিং ব্যবহার করে সেম্যান্টিক সাদৃশ্য দিয়ে সম্প্রসারণ করুন

এই হাইব্রিড পদ্ধতিটি নিয়ম-ভিত্তিক নির্ভুলতা এবং সেম্যান্টিক নমনীয়তাকে একত্রিত করে।

ধাপ ৩ক: বেস ফ্রেজ জেনারেশন

ফিচার মেটাডেটা

প্রতিটি পণ্য বৈশিষ্ট্যের ফিচার সিকোয়েন্সে মেটাডেটা রয়েছে:

  • হেডিং: বিভাগের নাম (যেমন, প্রসেসরের বৈশিষ্ট্যের জন্য "Processing")

  • ইউনিট: পরিমাপের একক (যেমন, মেমোরির জন্য "GB", ফ্রিকোয়েন্সির জন্য "GHz")

এই মেটাডেটা ফ্রেজ জেনারেশনকে নির্দেশনা দেয়।

পারমুটেশন-ভিত্তিক জেনারেশন

প্রতিটি ফিচার মানের জন্য, আমরা নিম্নলিখিতগুলির সমস্ত পারমুটেশন তৈরি করি:

  • হেডিং: "processor"

  • ফিচার কী: "series"

  • মান: "i5"

  • ইউনিট: (সিরিজের জন্য নেই)

এটি তৈরি করে:

  • "processor series i5"

  • "series processor i5"

  • "i5 processor series"

  • "i5 series processor"

  • "processor i5"

  • "series i5"

  • "i5"

সমস্ত পারমুটেশন নিশ্চিত করে যে শব্দের ক্রম নির্বিশেষে আমরা কোয়েরিগুলির সাথে মিল পাই।

মান + ইউনিট কম্বিনেশন

ইউনিট সহ বৈশিষ্ট্যগুলির জন্য (মেমোরি, স্টোরেজ, ফ্রিকোয়েন্সি), আমরা স্পেসযুক্ত এবং স্পেসবিহীন উভয় ভ্যারিয়েন্ট তৈরি করি:

  • "16 gb" (স্পেসযুক্ত)

  • "16gb" (স্পেস ছাড়া)

এগুলি অন্যান্য উপাদানের সাথে একত্রিত হয়:

  • "16gb ram"

  • "ram 16gb"

  • "processor 16gb"

পোর্ট সাফিক্স নিয়ম

কানেক্টিভিটি বৈশিষ্ট্যগুলির জন্য (USB, HDMI, DisplayPort), আমরা পোর্ট সাফিক্স যোগ করি:

  • "usb port"

  • "usb ports"

  • "2 usb ports"

  • "hdmi port"

এটি "mini pc with 2 hdmi ports" এর মতো কোয়েরিগুলির সাথে মেলে।

ফিচার-স্পেসিফিক নিয়ম

প্রতিটি ফিচার প্রকারের কাস্টম ফ্রেজ জেনারেশন রয়েছে:

প্রসেসর সিরিজ (i3, i5, N-series):

  • কোর প্রসেসর পদবীগুলি ভ্যারিয়েন্ট তৈরি করে: নির্মাতার নাম, কোর ব্র্যান্ড, সম্মিলিত ফর্ম

  • N-series প্রসেসর (N100, ইত্যাদি) অনুরূপ প্যাটার্ন কম্বিনেশন তৈরি করে

  • প্রতিটি "processor" সহ একাধিক পারমুটেশন তৈরি করে

মেইন মেমোরি:

  • সংখ্যাসূচক মানগুলি স্পেসযুক্ত এবং স্পেসবিহীন GB ভ্যারিয়েন্ট উভয়ই তৈরি করে("16gb","16 gb")

  • স্বয়ংক্রিয়ভাবে "ram" এবং "memory" কোয়ালিফায়ার যুক্ত করা হয়("16gb memory","16 gb ram")

SSD স্টোরেজ:

  • সংখ্যাসূচক মানগুলি GB ভ্যারিয়েন্ট তৈরি করে("512gb", "512 gb")

  • মান ≥ 1024 এর জন্য স্বয়ংক্রিয়ভাবে TB ভ্যারিয়েন্ট তৈরি করে (যেমন, 1024GB → 1TB)

  • স্বয়ংক্রিয়ভাবে "ssd" এবং "storage" কোয়ালিফায়ার যুক্ত করা হয়("512gb ssd", "512 gb storage")

ফর্ম ফ্যাক্টর:

  • মিনি পিসি → নন-স্পেসড ফর্ম সহ একাধিক ভ্যারিয়েন্ট

  • অল-ইন-ওয়ান → "all in one", "aio", সংক্ষিপ্ত ফর্ম

  • থিন ক্লায়েন্ট → স্পেসিং সহ/ছাড়া ভ্যারিয়েন্ট

  • ইন্ডাস্ট্রিয়াল পিসি → সংক্ষিপ্ত এবং পূর্ণ ফর্ম

জেনারেশন:

  • সংখ্যাসূচক জেনারেশন মান হয়ে যায়: "12th gen", "12th generation", "gen 12"

কোর:

  • 2 → "dual core"

  • 4 → "quad core"

  • 6 → "hexa core"

  • 8 → "octa core"

  • সবাই "[n] core processor" ভ্যারিয়েন্ট তৈরি করে

ইথারনেট:

  • "1000" → ["gigabit ethernet", "gbe", "1gbps"]

  • "2500" → ["2.5gbe", "2.5 gigabit", "2.5gbps"]

অপারেটিং সিস্টেম:

  • "Windows 11" → ["windows", "windows 11", "win 11"]

  • "Ubuntu" → ["linux", "ubuntu"]

  • "FreeDOS" → ["freedos", "no os", "without os"]

স্ট্যান্ডঅ্যালোন মানের জন্য হোয়াইটলিস্ট

মিথ্যা মিল রোধ করতে শুধুমাত্র নির্দিষ্ট বৈশিষ্ট্যগুলি স্ট্যান্ডঅ্যালোন মান ম্যাচিংয়ের অনুমতি দেয়:

  • সিরিজ: "i3", "i5", "N100" (কিন্তু একক অক্ষর নয়)

  • প্রসেসর মডেল: "N100", "1335U"

  • অপারেটিং সিস্টেম: "Windows", "Linux", "Ubuntu"

  • জেনারেশন: "12th", "13th", "14th"

  • প্রসেসর ব্র্যান্ড: "Intel", "ARM"

উদাহরণস্বরূপ, "2" কে "2 cores" এর সাথে মেলানো উচিত নয় যখন কোয়েরি "2 hdmi ports"। দৈর্ঘ্য পরীক্ষা একক অক্ষর বা খুব সংক্ষিপ্ত অস্পষ্ট মানগুলিকে স্ট্যান্ডঅ্যালোন ম্যাচ হতে বাধা দেয়। ইথারনেট বা পোর্টের মতো স্পষ্ট ইউনিট উপাদান সহ বৈশিষ্ট্যগুলি শুধুমাত্র তাদের ইউনিটের সাথে কোয়ালিফাইড হলে স্ট্যান্ডঅ্যালোন কম্বিনেশন তৈরি করে।

সংঘর্ষ প্রতিরোধ

মেমোরি এবং স্টোরেজ মান ওভারল্যাপ করে (উভয়েরই 64, 128, 256, ইত্যাদি রয়েছে)। ধাপ ৪ অস্পষ্টতা দূর করতে মান-পরিসর নিয়ম প্রয়োগ করে:

  • ≤ 64 GB: মেইন মেমোরি (RAM)

  • ≥ 128 GB: SSD স্টোরেজ

  • 65-127 GB পরিসর: বাদ দেওয়া (অস্পষ্ট)

স্পষ্ট কোয়ালিফায়ার সহ ফ্রেজ ("ram"/"memory" বা "ssd"/"storage") এই নিয়মকে ওভাররাইড করে এবং যেকোনো মানের সাথে মিলতে পারে।

অতিরিক্তভাবে, অস্পষ্ট সাধারণ শব্দ যা অনেকগুলো সম্পর্কহীন ফিল্টারের সাথে মেলে তা পোস্ট-প্রসেসিংয়ের মাধ্যমে সংঘর্ষ সমাধানের সময় বাদ দেওয়া হয়: "connectivity", "audio", "display", "processor", এবং "physical" এর মতো শব্দগুলি একাধিক দিক জুড়ে খুব বেশি অস্পষ্টতা তৈরি করে।

ধাপ ৪: সেম্যান্টিক সম্প্রসারণ

N-gram এক্সট্রাকশন

আমরা প্রকৃত সার্চ কোয়েরি থেকে ঘন ঘন ব্যবহৃত ফ্রেজগুলি বের করি, যা একক শব্দ (1-grams যেমন "mini") থেকে দীর্ঘতর সিকোয়েন্স (6-grams পর্যন্ত যেমন "mini pc with 16gb ram ssd") পর্যন্ত বিস্তৃত। শুধুমাত্র অন্তত ৩ বার প্রদর্শিত ফ্রেজগুলি ধরে রাখা হয়। এই ফিল্টারিং পদ্ধতিটি শব্দদূষণ কমায় যখন প্রকৃত ব্যবহারকারীর ভাষার প্যাটার্ন সংরক্ষণ করে।

ফিল্টার সার্চ টেক্সট জেনারেশন

প্রতিটি ফিল্টার মানের জন্য, আমরা সার্চ টেক্সট তৈরি করি:

মেইন মেমোরি: 16:

  • "16gb ram memory"

  • "16 main memory"

  • "main memory 16"

SSD স্টোরেজ: 512:

  • "512gb storage ssd"

  • "512 ssd storage"

  • "ssd storage 512"

এই সার্চ টেক্সটগুলি এমবেডিং স্পেসে ফিল্টারকে উপস্থাপন করে।

এমবেডিং এবং ম্যাচিং

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

ম্যানুয়াল সিড ফ্রেজ

আমরা সম্প্রসারণের আগে উচ্চ আত্মবিশ্বাসের ম্যানুয়াল সিড ইনজেক্ট করি:

"Series:i5": [
    "i5",
    "core i5",
    "intel i5",
    "intel core i5",
    "i5 processor",
    "cpu i5",
]

এই সিডগুলি প্রতিটি ফিল্টারের জন্য আমরা জানি যে সঠিক এমন মূল ফ্রেজগুলিকে উপস্থাপন করে। সর্বাধিক সাদৃশ্য স্কোর সহ এগুলি অন্তর্ভুক্ত করে, তারা সম্প্রসারণ অ্যালগরিদমকে একই অর্থ সহ সম্পর্কিত ফ্রেজ খুঁজে পেতে নির্দেশনা দেয়।এই সিডগুলির সর্বদা সাদৃশ্য ১.০ থাকে এবং সম্প্রসারণকে নির্দেশনা দেয়।

ইনক্রিমেন্টাল এমবেডিং

আমরা ফ্রেজ এবং ফিল্টার সার্চ টেক্সট উভয়ের জন্য এমবেডিং ক্যাশ করি। যখন নতুন কোয়েরি আসে:

  1. বিদ্যমান এমবেডিং লোড করুন
  2. শুধুমাত্র নতুন ফ্রেজ এম্বেড করুন
  3. ক্যাশে যুক্ত করুন

এটি অপরিবর্তিত ডেটা পুনরায় এমবেড করা এড়ায়। বিস্তারিত জানার জন্য এমবেডিং কৌশল দেখুন।

সংঘর্ষ সমাধান

সাদৃশ্য ম্যাচিং সম্পন্ন হওয়ার পর, আমরা মেমোরি এবং স্টোরেজ ফিল্টারের মধ্যে সংঘর্ষ সমাধান করি:

সংখ্যা-ভিত্তিক অস্পষ্টতা দূরীকরণ:

  • সংখ্যা ধারণকারী অস্পষ্ট ফ্রেজের জন্য: যদি ফ্রেজের মান ≤ 64 হয়, শুধুমাত্র মেমোরির জন্য রাখুন; যদি > 64 হয়, শুধুমাত্র স্টোরেজের জন্য রাখুন

  • এটি "16gb" কে SSD স্টোরেজ ফিল্টার এবং "512gb" কে মেমোরি ফিল্টারের সাথে মিলতে বাধা দেয়

স্পষ্ট কোয়ালিফায়ার নিয়ম ওভাররাইড করে:

  • "ram", "memory", "cpu", "processor" কীওয়ার্ড সহ ফ্রেজ → শুধুমাত্র মেমোরি

  • "ssd", "storage", "disk", "nvme", "drive" কীওয়ার্ড সহ ফ্রেজ → শুধুমাত্র স্টোরেজ

  • উদাহরণ: "processor 8gb" সংখ্যাসূচক হওয়া সত্ত্বেও মেমোরিতে ম্যাপ করে

অস্পষ্ট শব্দ:

  • "connectivity", "audio", "display" এর মতো ফ্রেজগুলি বাদ দিন যা একাধিক সম্পর্কহীন ফিল্টারের সাথে মেলে

আউটপুট ফরম্যাট

চূড়ান্ত ম্যাপিংগুলি সাদৃশ্য অনুসারে সাজানো হয় (সর্বোচ্চ প্রথম), তারপর দৈর্ঘ্য অনুসারে (সংক্ষিপ্ততম প্রথম):

{
  "Main Memory:16": [
    {"phrase": "16gb ram", "similarity": 1.0},
# ... (বাস্তবায়নের বিবরণ বাদ দেওয়া)

ফিল্টার এক্সট্রাকশনের সাথে ইন্টিগ্রেশন

এই ম্যাপিংগুলি ফিল্টার এক্সট্রাকশন অ্যালগরিদম চালায়:

  1. কোয়েরি আসে: "mini pc with 16gb ram"
  2. ফ্রেজ বের করুন: ["mini pc", "16gb ram", "mini", "pc", "16gb", "ram"]
  3. ম্যাপিং ব্যবহার করে ফ্রেজগুলিকে ফিল্টারের সাথে মেলান
  4. ফিল্টার ফেরত দিন: {"Form Factor": ["Mini PC"], "Main Memory": ["16"]}

বিস্তারিত জানার জন্য ফিল্টার এক্সট্রাকশন অ্যালগরিদম দেখুন।

স্টোরেজ এবং বিতরণ

ফ্রেজ ম্যাপিংগুলি JSON ফাইল হিসাবে সংরক্ষণ করা হয় এবং সিস্টেম জুড়ে ব্যবহৃত হয়:

  • বেস ম্যাপিং ফাইল: ধাপ ৩ক-এ তৈরি, নিয়ম-ভিত্তিক ফ্রেজ ধারণ করে

  • সম্প্রসারিত ম্যাপিং ফাইল: ধাপ ৪-এ তৈরি, সেম্যান্টিক সম্প্রসারণের ফলাফল ধারণ করে

সম্প্রসারিত ম্যাপিংগুলি নিম্নলিখিত দ্বারা ব্যবহৃত হয়:

  • কোয়েরি পৃষ্ঠা জেনারেশন: কোয়েরি টেক্সট থেকে ফিল্টার বের করুন

  • সার্চ সার্ভিস: রিয়েল-টাইম ফিল্টার এক্সট্রাকশন API

  • পণ্য ম্যাচিং: বের করা ফিল্টার দ্বারা পণ্য ফিল্টার করুন

কর্মক্ষমতা বৈশিষ্ট্য

বেস জেনারেশন (ধাপ ৩ক):

  • প্রক্রিয়াকরণের সময় ফিল্টার মানের সংখ্যার সাথে স্কেল করে

  • বিপুল সংখ্যক বেস ফ্রেজ ভ্যারিয়েন্ট তৈরি করে

  • জেনারেশন চলাকালীন মেমোরি ব্যবহার মাঝারি থাকে

সেম্যান্টিক সম্প্রসারণ (ধাপ ৪):

  • প্রক্রিয়াকরণের সময় কোয়েরি ভলিউম এবং এমবেডিং আকারের সাথে স্কেল করে

  • আউটপুটে বেস জেনারেশনের চেয়ে উল্লেখযোগ্যভাবে বেশি ফ্রেজ থাকে

  • এমবেড