ফ্রেজ-থেকে-ফিল্টার ম্যাপিং: প্রোডাক্ট ফিল্টারের জন্য সেমান্টিক সার্চ
এই নিবন্ধটি ব্যাখ্যা করে যে আমরা কীভাবে ফ্রেজ-থেকে-ফিল্টার ম্যাপিং তৈরি এবং সম্প্রসারণ করি যা আমাদের ফিল্টার নিষ্কাশন সিস্টেমকে শক্তি দেয়। এই ম্যাপিংগুলি সার্চ কোয়েরি থেকে প্রাকৃতিক ভাষার ফ্রেজগুলিকে কাঠামোবদ্ধ প্রোডাক্ট ফিল্টারের সাথে সংযুক্ত করে।
সমস্যা: প্রাকৃতিক ভাষা থেকে ফিল্টার নিষ্কাশন
যখন ব্যবহারকারীরা "mini pc with 16gb ram" অনুসন্ধান করেন, আমাদের নিষ্কাশন করতে হবে:
-
ফর্ম ফ্যাক্টর: মিনি পিসি
-
প্রধান মেমোরি: 16
কিন্তু ব্যবহারকারীরা একই অভিপ্রায় অনেকভাবে প্রকাশ করেন:
-
"16gb ram mini pc"
-
"mini computer 16 gb memory"
-
"small pc 16gb"
-
"compact desktop with 16 gigs"
আমাদের এমন একটি সিস্টেম দরকার যা এই সমস্ত ফ্রেজ ভিন্নতাগুলিকে সঠিক ফিল্টার মানগুলির সাথে ম্যাপ করে।
দুই-ধাপ প্রক্রিয়া
আমরা দুই ধাপে ফ্রেজ ম্যাপিং তৈরি করি:
- ধাপ 3a: পারমিউটেশন এবং ফিচার-নির্দিষ্ট নিয়ম ব্যবহার করে প্রোডাক্ট ফিচার থেকে বেস ফ্রেজ তৈরি করুন
- ধাপ 4: এমবেডিং ব্যবহার করে সেমান্টিক সাদৃশ্য দিয়ে সম্প্রসারণ করুন
এই হাইব্রিড পদ্ধতি রুল-ভিত্তিক নির্ভুলতা এবং সেমান্টিক নমনীয়তাকে একত্রিত করে।
ধাপ 3a: বেস ফ্রেজ জেনারেশন
ফিচার মেটাডেটা
প্রতিটি প্রোডাক্ট ফিচারের ফিচার সিকোয়েন্সে মেটাডেটা থাকে:
-
হেডিং: ক্যাটাগরির নাম (যেমন, প্রসেসর ফিচারের জন্য "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-সিরিজ প্রসেসর (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, ইত্যাদি রয়েছে)। ধাপ 4 অস্পষ্টতা দূর করতে মান-পরিসীমা নিয়ম প্রয়োগ করে:
-
≤ 64 GB: প্রধান মেমোরি (RAM)
-
≥ 128 GB: SSD স্টোরেজ
-
65-127 GB পরিসীমা: বাদ দেওয়া হয় (অস্পষ্ট)
স্পষ্ট কোয়ালিফায়ার ("ram"/"memory" বা "ssd"/"storage") আছে এমন ফ্রেজগুলি এই নিয়মকে ওভাররাইড করে এবং যেকোনো মানের সাথে মেলতে পারে।
অতিরিক্তভাবে, অস্পষ্ট সাধারণ শর্তাবলী যা অনেকগুলি সম্পর্কহীন ফিল্টারের সাথে মেলে তা পোস্ট-প্রসেসিংয়ের মাধ্যমে কোলিশন রেজোলিউশনের সময় বাদ দেওয়া হয়: "connectivity", "audio", "display", "processor" এবং "physical" এর মতো শর্তাবলী একাধিক ফ্যাসেট জুড়ে খুব বেশি অস্পষ্টতা তৈরি করে।
ধাপ 4: সেমান্টিক সম্প্রসারণ
এন-গ্রাম নিষ্কাশন
আমরা প্রকৃত সার্চ কোয়েরি থেকে ঘন ঘন ব্যবহৃত ফ্রেজগুলি নিষ্কাশন করি, একক শব্দ (1-গ্রাম যেমন "mini") থেকে দীর্ঘ সিকোয়েন্স (6-গ্রাম যেমন "mini pc with 16gb ram ssd") পর্যন্ত। শুধুমাত্র অন্তত 3 বার প্রদর্শিত ফ্রেজগুলি রাখা হয়। এই ফিল্টারিং পদ্ধতি আওয়াজ কমায় এবং প্রকৃত ব্যবহারকারীর ভাষার প্যাটার্ন সংরক্ষণ করে।
ফিল্টার সার্চ টেক্সট জেনারেশন
প্রতিটি ফিল্টার মানের জন্য, আমরা সার্চ টেক্সট তৈরি করি:
প্রধান মেমোরি: 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.0 পায় এবং সম্প্রসারণকে গাইড করে।
ইনক্রিমেন্টাল এমবেডিং
আমরা ফ্রেজ এবং ফিল্টার সার্চ টেক্সট উভয়ের জন্য এমবেডিং ক্যাশ করি। যখন নতুন কোয়েরি আসে:
- বিদ্যমান এমবেডিং লোড করুন
- শুধুমাত্র নতুন ফ্রেজ এমবেড করুন
- ক্যাশে যোগ করুন
এটি অপরিবর্তিত ডেটা পুনরায় এমবেড করা এড়ায়। বিস্তারিত জানতে দেখুন এমবেডিং স্ট্র্যাটেজি।
কোলিশন রেজোলিউশন
সাদৃশ্য ম্যাচিং সম্পূর্ণ হওয়ার পরে, আমরা মেমোরি এবং স্টোরেজ ফিল্টারগুলির মধ্যে কোলিশন সমাধান করি:
সংখ্যা-ভিত্তিক ডিসঅ্যাম্বিগুয়েশন:
-
সংখ্যা ধারণকারী অস্পষ্ট ফ্রেজগুলির জন্য: যদি ফ্রেজের মান ≤ 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},
# ... (implementation details omitted)
ফিল্টার নিষ্কাশনের সাথে ইন্টিগ্রেশন
এই ম্যাপিংগুলি ফিল্টার নিষ্কাশন অ্যালগরিদমকে শক্তি দেয়:
- কোয়েরি আসে: "mini pc with 16gb ram"
- ফ্রেজ নিষ্কাশন করুন: ["mini pc", "16gb ram", "mini", "pc", "16gb", "ram"]
- ম্যাপিং ব্যবহার করে ফ্রেজগুলিকে ফিল্টারের সাথে মেলান
- ফিল্টার ফেরত দিন:
{"Form Factor": ["Mini PC"], "Main Memory": ["16"]}
বিস্তারিত জানতে দেখুন ফিল্টার নিষ্কাশন অ্যালগরিদম।
স্টোরেজ এবং বিতরণ
ফ্রেজ ম্যাপিং JSON ফাইল হিসাবে সংরক্ষণ করা হয় এবং সিস্টেম জুড়ে ব্যবহৃত হয়:
-
বেস ম্যাপিং ফাইল: ধাপ 3a-তে তৈরি, রুল-ভিত্তিক ফ্রেজ ধারণ করে
-
সম্প্রসারিত ম্যাপিং ফাইল: ধাপ 4-এ তৈরি, সেমান্টিক সম্প্রসারণ ফলাফল ধারণ করে
সম্প্রসারিত ম্যাপিংগুলি ব্যবহার করে:
-
কোয়েরি পেজ জেনারেশন: কোয়েরি টেক্সট থেকে ফিল্টার নিষ্কাশন
-
সার্চ সার্ভিস: রিয়েল-টাইম ফিল্টার নিষ্কাশন API
-
প্রোডাক্ট ম্যাচিং: নিষ্কাশিত ফিল্টার দ্বারা প্রোডাক্ট ফিল্টার করা
পারফরম্যান্স বৈশিষ্ট্য
বেস জেনারেশন (ধাপ 3a):
-
প্রসেসিং সময় ফিল্টার মানের সংখ্যার সাথে স্কেল করে
-
প্রচুর সংখ্যক বেস ফ্রেজ ভেরিয়েন্ট তৈরি করে
-
জেনারেশনের সময় মেমোরি ব্যবহার মাঝারি থাকে
সেমান্টিক সম্প্রসারণ (ধাপ 4):
-
প্রসেসিং সময় কোয়েরি ভলিউম এবং এমবেডিং আকারের সাথে স্কেল করে
-
আউটপুটে বেস জেনারেশনের চেয়ে উল্লেখযোগ্যভাবে বেশি ফ্রেজ থাকে
-
এমবেডিং স্টোরেজের কারণে মেমোরির প্রয়োজনীয়তা বৃদ্ধি পায়
সম্প্রসারণ সাদৃশ্য গণনার কারণে CPU-বাউন্ড। NumPy এর সাথে BLAS ত্বরণ ব্যবহার করলে ম্যাট্রিক্স অপারেশনগুলি উল্লেখযোগ্যভাবে দ্রুত হয়।
SEO পাইপলাইনের সাথে ইন্টিগ্রেশন
ফ্রেজ ম্যাপিং জেনারেশন SEO পাইপলাইনের ধাপ 3a এবং 4:
- ধাপ 0: সোর্স ডেটা এমবেড করুন - প্রোডাক্ট, পার্টস, আর্টিকেল
- ধাপ 1: কোয়েরি ফেচ করুন - GSC, Google Ads, live, Algolia
- ধাপ 2: কোয়েরি একত্রিত করুন - সব সোর্স মার্জ করুন
- ধাপ 3a: বেস ফ্রেজ ম্যাপিং তৈরি করুন ← আপনি এখানে
- ধাপ 3b: কোয়েরি এমবেড করুন - ভেক্টরে রূপান্তর করুন
- ধাপ 4: ফ্রেজ ম্যাপিং সম্প্রসারণ করুন ← আপনি এখানে
- ধাপ 5: কোয়েরি ক্লাস্টার করুন - পেজে গ্রুপ করুন
- ধাপ 6: প্রোডাক্ট ম্যাচ করুন - কোয়েরি-প্রোডাক্ট ম্যাচিং
- ধাপ 7: কোয়েরি পেজ তৈরি করুন - HTML জেনারেট করুন
- ধাপ 8: সম্পর্কিত অনুসন্ধান তৈরি করুন - সম্পর্কিত কোয়েরি খুঁজুন
- ধাপ 11: Valkey-তে মাইগ্রেট করুন - সার্চ সার্ভিসে লোড করুন
সম্পূর্ণ ফ্লো দেখতে SEO পাইপলাইন ওভারভিউ দেখুন।
কেন দুটি ধাপ?
বেস জেনারেশন (ধাপ 3a) প্রদান করে:
-
নির্ভুলতা: রুল-ভিত্তিক ফ্রেজগুলি আমরা যা আশা করি তার সাথে হুবহু মেলে
-
কভারেজ: পারমিউটেশন নিশ্চিত করে সব শব্দ ক্রম কভার করা হয়
-
নিয়ন্ত্রণ: ফিচার-নির্দিষ্ট নিয়ম ডোমেইন জ্ঞান পরিচালনা করে
সেমান্টিক সম্প্রসারণ (ধাপ 4) প্রদান করে:
-
নমনীয়তা: আমরা আগে থেকে চিন্তা করিনি এমন ফ্রেজ আবিষ্কার করে
-
প্রকৃত ব্যবহারকারীর ভাষা: প্রকৃত সার্চ কোয়েরি থেকে শেখে
-
সমার্থক শব্দ: সমতুল্য ফ্রেজ খুঁজে পায় ("16gb" এর জন্য "16 gigs")
একসাথে, তারা নির্ভুলতা এবং রিকলের মধ্যে ভারসাম্য রাখে।
রেফারেন্স
প্রযুক্তিগত ধারণা
-
পারমিউটেশন - উইকিপিডিয়া
-
কোসাইন সাদৃশ্য - উইকিপিডিয়া
-
এন-গ্রাম - উইকিপিডিয়া
-
NumPy - অফিসিয়াল ডকুমেন্টেশন
-
BLAS - উইকিপিডিয়া
মডেল ডকুমেন্টেশন
-
all-mpnet-base-v2 - হাগিং ফেস
-
সেন্টেন্স ট্রান্সফরমার - অফিসিয়াল ডকুমেন্টেশন
সম্পর্কিত নিবন্ধ
-
এমবেডিং স্ট্র্যাটেজি - আমরা কীভাবে এমবেডিং তৈরি করি
-
ফিল্টার নিষ্কাশন অ্যালগরিদম - ফিল্টার নিষ্কাশনের জন্য ম্যাপিং ব্যবহার
-
SEO পাইপলাইন ওভারভিউ - সম্পূর্ণ পাইপলাইন আর্কিটেকচার
-
কোয়েরি ক্লাস্টারিং - অনুরূপ কোয়েরি গ্রুপিং
-
প্রোডাক্ট ম্যাচিং - সেমান্টিক ম্যাচিং
সারসংক্ষেপ
আমরা দুই ধাপে ফ্রেজ-থেকে-ফিল্টার ম্যাপিং তৈরি করি:
ধাপ 3a (বেস জেনারেশন):
-
হেডিং, কী, ভ্যালু, ইউনিটের সকল পারমিউটেশন তৈরি করুন
-
ফিচার-নির্দিষ্ট নিয়ম প্রয়োগ করুন (প্রসেসর সিরিজ, মেমোরি, স্টোরেজ, ফর্ম ফ্যাক্টর)
-
কানেক্টিভিটি ফিচারগুলির জন্য পোর্ট সাফিক্স যোগ করুন
-
নির্দিষ্ট ফিচারগুলির জন্য স্ট্যান্ডঅ্যালোন মান হোয়াইটলিস্ট করুন
-
নিয়ম থেকে বেস ফ্রেজ সেট আউটপুট করুন
ধাপ 4 (সেমান্টিক সম্প্রসারণ):
-
প্রকৃত সার্চ কোয়েরি থেকে এন-গ্রাম ফ্রেজ নিষ্কাশন করুন
-
ফ্রেজ এবং ফিল্টার সার্চ টেক্সট এমবেড করুন
-
থ্রেশহোল্ডের উপরে সাদৃশ্য স্কোর সহ ফ্রেজ ম্যাচ করুন
-
সম্প্রসারণ গাইড করতে ম্যানুয়াল সিড ফ্রেজ ইনজেক্ট করুন
-
মেমোরি/স্টোরেজ কোলিশন সমাধান করুন
-
সম্প্রসারিত এবং ডিসঅ্যাম্বিগুয়েটেড ফ্রেজ সেট আউটপুট করুন
ফলাফল হল একটি ব্যাপক ম্যাপিং যা প্রত্যাশিত ফ্রেজ (নিয়মের মাধ্যমে) এবং অপ্রত্যাশিত ভিন্নতা (সেমান্টিক সাদৃশ্যের মাধ্যমে) উভয়ই পরিচালনা করে। এই ম্যাপিংগুলি কোয়েরি পেজ, সার্চ এবং প্রোডাক্ট ম্যাচিং জুড়ে ফিল্টার নিষ্কাশনকে শক্তি দেয়।