مفهوم اصلی
Keyword Search یکی از قدیمیترین و پرکاربردترین روشهای جستجو در سیستمهای بازیابی اطلاعات (Information Retrieval) است.
این روش:
- دههها در موتورهای جستجو و دیتابیسها استفاده شده است.
- به دلیل سادگی و عملکرد مناسب، هنوز یکی از اجزای مهم Retriever در سیستمهای RAG مدرن است.
ایده اصلی:
اسنادی که تعداد بیشتری کلمه مشترک با Prompt دارند، احتمالاً مرتبطتر هستند.
نحوه عملکرد Keyword Search
در Keyword Search:
- Prompt کاربر
- و هر Document موجود در Knowledge Base
به شکل Bag of Words در نظر گرفته میشوند.
Bag of Words چیست؟
در این روش:
- ترتیب کلمات اهمیتی ندارد.
- فقط بررسی میشود:
- چه کلماتی در متن وجود دارند؟
- هر کلمه چند بار تکرار شده است؟
مثال:
متن:
making pizza without a pizza oven
تعداد کلمات:
| کلمه | تعداد |
|---|---|
| making | 1 |
| pizza | 2 |
| without | 1 |
| a | 1 |
| oven | 1 |
Sparse Vector (بردار تنک)
برای نمایش متن، تعداد تکرار هر کلمه در یک Vector ذخیره میشود.
این Vector:
- برای هر کلمه موجود در Vocabulary یک موقعیت دارد.
- مقدار هر موقعیت تعداد تکرار آن کلمه در متن است.
مثلاً اگر Vocabulary شامل دهها هزار کلمه باشد:
[0,0,0,2,0,1,0,0,1,...]
باشد.
چون بیشتر مقادیر صفر هستند، به آن:
Sparse Vector
گفته میشود.
ساخت Index برای Knowledge Base
برای آمادهسازی Knowledge Base:
برای هر Document یک Sparse Vector ساخته میشود.
سپس همه این Vectorها در یک جدول قرار میگیرند.
این جدول:
Term Document Matrix
نام دارد.
Term Document Matrix
ساختار:
- هر ستون = یک Document
- هر ردیف = یک Word
مثال:
| Word | Doc1 | Doc2 | Doc3 |
|---|---|---|---|
| pizza | 2 | 0 | 1 |
| oven | 1 | 1 | 0 |
| making | 1 | 0 | 0 |
Inverted Index
Term Document Matrix گاهی:
Inverted Index
نامیده میشود.
دلیل:
در حالت معمول:
- از Document شروع میکنیم.
- میپرسیم چه کلماتی دارد.
اما در Inverted Index:
- از Word شروع میکنیم.
- پیدا میکنیم کدام Documentها آن کلمه را دارند.
مثال:
جستجو برای:
pizza
نتیجه:
Doc1
Doc3
Doc8
فرآیند Search در Retriever
مرحله ۱: آمادهسازی Index
قبل از انجام جستجو:
- برای تمام اسناد Sparse Vector ساخته میشود.
- Inverted Index ایجاد میشود.
این مرحله فقط یک بار انجام میشود.
مرحله ۲: دریافت Prompt
وقتی کاربر سؤال ارسال میکند:
Retriever برای Prompt نیز یک Sparse Vector میسازد.
مرحله ۳: امتیازدهی اسناد
سادهترین روش:
اگر Document یک Keyword موجود در Prompt را داشته باشد، امتیاز میگیرد.
مثال:
Prompt:
making pizza without oven
Keywordها:
- making
- pizza
- without
- oven
هر Document بر اساس تعداد Keywordهای مشترک امتیاز میگیرد.
مشکل روش امتیازدهی ساده
در روش ابتدایی:
- فقط وجود کلمه بررسی میشود.
- تعداد دفعات تکرار کلمه مهم نیست.
اما تکرار بیشتر یک Keyword ممکن است نشاندهنده ارتباط بیشتر باشد.
بهبود اول: شمارش تعداد تکرار کلمه
در روش بهتر:
هر بار که Keyword در Document دیده شود، امتیاز افزایش پیدا میکند.
مثلاً:
Document A:
pizza pizza pizza
امتیاز بیشتری نسبت به:
Document B:
pizza
میگیرد.
مشکل Documentهای طولانی
Documentهای طولانی ممکن است فقط به دلیل حجم زیاد متن، Keywordهای بیشتری داشته باشند.
مثلاً:
یک مقاله ۱۰۰ صفحهای ممکن است کلمه Pizza را زیاد تکرار کند، اما الزاماً مرتبطتر نباشد.
بهبود دوم: Normalization
برای حل این مشکل:
امتیاز Document بر تعداد کلمات آن تقسیم میشود.
نتیجه:
- Documentهای کوتاه و بلند منصفانهتر مقایسه میشوند.
- اسنادی که Keyword بخش بیشتری از متن آنها را تشکیل میدهد، امتیاز بیشتری میگیرند.
مشکل وزن یکسان کلمات
در روش قبلی همه Keywordها ارزش یکسان دارند.
اما همه کلمات اهمیت یکسان ندارند.
مثال:
کلمات عمومی:
- the
- a
- without
اطلاعات زیادی درباره موضوع نمیدهند.
اما کلمات خاص:
- pizza
- oven
احتمالاً نشاندهنده ارتباط بیشتری هستند.
برای حل این مشکل از:
IDF (Inverse Document Frequency)
استفاده میشود.
IDF چیست؟
IDF میزان خاص بودن یک کلمه در کل Knowledge Base را اندازه میگیرد.
ایده:
هرچه یک کلمه در اسناد کمتری دیده شود، ارزش آن بیشتر است.
محاسبه Document Frequency
برای هر کلمه:
بررسی میشود در چند Document وجود دارد.
مثال:
فرض کنید:
- Knowledge Base شامل 100 Document است.
- کلمه pizza در 5 Document وجود دارد.
Document Frequency:
5 / 100 = 0.05
برای کلمه عمومی مثل:
the
که در تمام 100 Document وجود دارد:
100 / 100 = 1
محاسبه IDF
چون هدف، افزایش اهمیت کلمات نادر است، مقدار را معکوس میکنیم.
برای:
pizza:
1 / 0.05 = 20
برای:
the:
1 / 1 = 1
پس:
- pizza وزن بیشتری دارد.
- the وزن کمتری دارد.
استفاده از Log در IDF
معکوس ساده ممکن است به کلمات بسیار نادر وزن بیش از حد بدهد.
به همین دلیل معمولاً از:
log(IDF)
استفاده میشود.
نتیجه:
- کلمات نادر هنوز ارزش بیشتری دارند.
- اما اختلاف وزن بیش از حد بزرگ نمیشود.
TF-IDF چیست؟
برای استفاده از IDF، مقادیر موجود در Index تغییر داده میشوند.
مقدار هر کلمه با وزن IDF آن ضرب میشود.
نتیجه:
TF-IDF Matrix
TF
میزان تکرار کلمه در یک Document.
IDF
میزان خاص بودن کلمه در کل Knowledge Base.
ترکیب:
TF × IDF
باعث ایجاد امتیاز نهایی میشود.
رتبهبندی با TF-IDF
برای رتبهبندی:
- Keywordهای Prompt بررسی میشوند.
- مقدار TF-IDF آنها در هر Document خوانده میشود.
- امتیازها جمع میشوند.
- Documentهای با امتیاز بالاتر انتخاب میشوند.
مثال اهمیت کلمات
در Prompt مربوط به پیتزا:
Documentهایی که شامل کلمات خاصتر هستند:
- pizza
- oven
امتیاز بیشتری میگیرند.
اما Documentهایی که فقط کلمات عمومی دارند:
- a
- without
امتیاز کمتری دریافت میکنند.
جایگاه TF-IDF در سیستمهای RAG
TF-IDF یک روش پایه و استاندارد برای ارزیابی Keyword Retrieval است.
مزایا:
- ساده
- سریع
- قابل فهم
- مؤثر برای تطابق کلمات
اما سیستمهای مدرن معمولاً از نسخه بهبود یافته آن یعنی:
BM25
استفاده میکنند.
جمعبندی
- Keyword Search اسناد را بر اساس اشتراک کلمات با Prompt پیدا میکند.
- در این روش متنها به صورت Bag of Words نمایش داده میشوند.
- هر Document به یک Sparse Vector تبدیل میشود.
- Term Document Matrix یا Inverted Index برای جستجوی سریع ساخته میشود.
- TF-IDF باعث میشود کلمات خاص وزن بیشتری نسبت به کلمات عمومی داشته باشند.
- TF تعداد تکرار کلمه در Document و IDF میزان اهمیت کلمه در کل مجموعه اسناد را نشان میدهد.
- TF-IDF یکی از روشهای پایه Keyword Search است.
- سیستمهای مدرن معمولاً از روش پیشرفتهتر BM25 استفاده میکنند.