দ্রুত উত্তর: ডকুমেন্ট অবজেক্ট মডেল (DOM) ট্রিতে ইনলাইন SVG, CSS স্টাইল, ট্র্যাকিং স্ক্রিপ্ট এবং নেভিগেশনাল বয়েলারপ্লেটের কারণে ৯২% পর্যন্ত অতিরিক্ত টোকেন নষ্ট হয়। lxml, Cheerio, resoup বা Tree-sitter এর মতো হাই-স্পিড html parser ব্যবহার করে অপ্রয়োজনীয় নোড অপসারণ করলে ৮৫–৯২% token reduction html সাশ্রয় সম্ভব, যা ইনফারেন্স খরচ কমায় এবং RAG নির্ভুলতা বাড়ায়।
1. ভূমিকা: Document Object Model (DOM) কী এবং কাঁচা HTML কেন LLM-এর জন্য ক্ষতিকর
স্বায়ত্তশাসিত ওয়েব ব্রাউজিং এজেন্ট, RAG (Retrieval-Augmented Generation) পাইপলাইন এবং কৃত্রিম বুদ্ধিমত্তানির্ভর স্ক্র্যাপারের ক্ষেত্রে কাঁচা ওয়েব মার্কআপ একটি বড় বাধা। যখন কোনো AI এজেন্ট Playwright বা HTTP ক্লায়েন্টের মাধ্যমে পেজ লোড করে, ব্রাউজার ইঞ্জিন সেই ডেটাকে মেমরিতে একটি হায়ারারকিক্যাল ট্রি গ্রাফ তৈরি করে, যা document object ট্রি নামে পরিচিত।
Document Object Model (DOM) কী?
মডেলের জন্য ওয়েব ডেটা অপ্টিমাইজ করতে মূল কাঠামোটি বোঝা অপরিহার্য: what is document object model dom?
Document Object Model (DOM) হলো ব্রাউজার ইঞ্জিন (Blink, Gecko, WebKit) দ্বারা গঠিত একটি প্ল্যাটফর্ম-নিরপেক্ষ প্রোগ্রামিং ইন্টারফেস। যখন নেটওয়ার্ক থেকে কাঁচা HTML আসে, তখন পার্সার লেক্সিক্যাল টোকেনাইজেশন সম্পন্ন করে, নোড হায়ারারকি (Document $\rightarrow$ Element $\rightarrow$ Text) তৈরি করে এবং CSSOM-এর সাথে ভিজ্যুয়াল লেআউট গণনা করে। সাধারণ ব্রাউজারে এই document object কাঠামো জাভাস্ক্রিপ্টের মাধ্যমে গতিশীল পরিবর্তন এবং ভিজ্যুয়াল প্রদর্শনের জন্য তৈরি।
ব্রাউজার টোকেনাইজেশন এবং Document Object Model (DOM) ট্রি নির্মাণ:
┌─────────────────────────────────────────────────────────────────────────────┐
│ কাঁচা নেটওয়ার্ক বাইট স্ট্রিম │
│ <!DOCTYPE html><html lang="bn"><head>... │
└──────────────────────────────────────┬──────────────────────────────────────┘
│ টোকেনাইজার (HTML5 পার্সার অ্যালগরিদম)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ টোকেন স্ট্রিম (Tokens) │
│ [StartTag: html] [StartTag: head] [StartTag: script] [EndTag: head] │
└──────────────────────────────────────┬──────────────────────────────────────┘
│ ট্রি বিল্ডার (Tree Builder)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Document Object Model (DOM) ট্রি কাঠামো │
│ Document │
│ │ │
│ <html> │
│ ┌─────────────────┴─────────────────┐ │
│ <head> <body> │
│ ┌───────┴───────┐ ┌───────┴───────┐ │
│ <title> <script> <header> <main> │
│ │ │ │ │ │
│ "শিরোনাম" [ট্র্যাকিং JS] <nav> <article> │
│ │ │ │
│ <ul>... <p> "আসল টেক্সট" │
└─────────────────────────────────────────────────────────────────────────────┘
কাঁচা DOM ব্যবহারের মূল সমস্যাসমূহ:
- কনটেক্সট উইন্ডো স্ফীতি: একটি সাধারণ ওয়েব পেজে ৪৫,০০০ থেকে ১২০,০০০ কাঁচা HTML টোকেন থাকে, যার ৮৫% থেকে ৯২% অপচয়: SVG কোঅর্ডিনেট, CSS ক্লাস, ট্র্যাকিং স্ক্রিপ্ট এবং কুকি ব্যানার।
- মনোযোগের বিচ্যুতি ও RAG অবনতি: ৪০,০০০ অর্থহীন টোকেনের নিচে মূল লেখা চাপা পড়লে 'Lost in the Middle' সমস্যা দেখা দেয়, ফলে RAG রিকল ৩৪% থেকে ৪৮% পর্যন্ত কমে যায়।
- ব্যয়বহুল ইনফারেন্স: প্রতিদিন ১ লক্ষ কাঁচা পেজ প্রসেস করলে মাসে ১৮,০০০ ডলার পর্যন্ত ব্যয় হতে পারে, যা DOM প্রুনিংয়ের মাধ্যমে ২,২০০ ডলারে নামিয়ে আনা যায়।
2. ৫-ধাপের DOM প্রুনিং পাইপলাইন
- ধাপ ১: নিষিদ্ধ ট্যাগ সম্পূর্ণ ডিলিট:
,,,,,,অপসারণ। - ধাপ ২: কঠোর অ্যাট্রিবিউট স্যানিটাইজেশন: শুধুমাত্র প্রয়োজনীয় অ্যাট্রিবিউট (
href,alt, টেবিলেরcolspan/rowspan) রেখে বাকি সব CSS ক্লাস মুছে ফেলা। - ধাপ ৩: লেআউট ও বয়েলারপ্লেট ছাঁটাই:
,,এবং বিজ্ঞাপনের কন্টেইনার ডিলিট করা। - ধাপ ৪: লিংক ডেনসিটি ফিল্টারিং: যেসব ব্লকে লিংকের ঘনত্ব ০.৬৫-এর বেশি সেগুলোকে মেনু হিসেবে শনাক্ত করে বাদ দেওয়া।
- ধাপ ৫: সিমান্টিক মার্কডাউন রূপান্তর: পরিচ্ছন্ন ট্রিকে পরিষ্কার মার্কডাউন টেবিল ও লিস্টে কনভার্ট করা।
3. পার্সার বেঞ্চমার্ক তুলনা
| মেট্রিক | Cheerio (Node.js) | lxml (Python / C) | resoup / Rust (lol-html) | Tree-sitter (HTML) |
|---|---|---|---|---|
| থ্রুপুট (MB/s) | 84.2 MB/s | 178.5 MB/s | 412.0 MB/s | 126.4 MB/s |
| গড় p50 ল্যাটেন্সি | 3.80 ms | 1.79 ms | 0.78 ms | 2.53 ms |
| মেমরি (১,০০০ ওয়ার্কার) | 2,840 MB | 890 MB | 185 MB | 420 MB |
| টোকেন সাশ্রয় হার | 89.4% | 90.8% | 88.9% | 91.7% |
4. সিদ্ধান্ত ও সুপারিশ
- প্রক্সি স্তরে ক্লিন করুন: মডেল সার্ভারে পাঠানোর আগেই প্রক্সিতে SVG ও স্ক্রিপ্ট ডিলিট করুন।
- সঠিক পার্সার ব্যবহার: পাইথনে
lxmlএবং নোডজেএসেCheerioব্যবহার নিশ্চিত করুন। - টেবিল স্ট্রাকচার ধরে রাখুন: টেবিলকে সাধারণ টেক্সটে পরিণত না করে মার্কডাউন ফরম্যাটে রাখুন।