نویسنده (ها): سید افان
در ابتدا منتشر شده در به سمت هوش مصنوعیبشر
پیش نیازهای
قبل از غواصی ، باید داشته باشید:
- AI اساسی/مولکول درک: مفاهیمی مانند مدل های زبان ، تعبیه و استنباط مدل.
- مهارت های مهندسی نرم افزار: آشنایی با پایتون ، محیط های مجازی و نصب بسته.
- کتابخانه های پایتون: راحتی واردات و استفاده از بسته ها و پرونده I/O.
اگر هر یک از این موارد جدید است ، قبل از ادامه کار ، یک آموزش سریع پایتون یا آغازگر هوش مصنوعی را بررسی کنید.
1. عامل LLM شما فقط به اندازه بازیابی آن خوب است
هر نماینده هوشمند Genai امروز ، از Chatbots گرفته تا دستیاران خودمختار ، به بازیابی اطلاعات مناسب در زمان مناسب بستگی دارد. بازیابی روند واکشی دانش یا زمینه مربوطه برای تقویت توانایی هوش مصنوعی در استدلال و پاسخ دقیق است.
مانند همه مشکلات علوم داده ، انتخاب بازیابی باید به مشکلی که حل می کنید وابسته باشد ، با این حال ، بیشتر پزشکان بدون توجه به اینکه حتی لازم باشد یا نه ، به معیار کسین پیش فرض می کنند.
در برنامه های دنیای واقعی ، بازیابی در همه جا است: ربات های پشتیبانی مشتری که سیاست های به روز شده ، دستیاران تحقیق حقوقی را تهیه می کنند ، اساسنامه ها ، معلمان هوش مصنوعی را که نمونه هایی از کتاب های درسی را می کشند ، و موتورهای جستجوی هوش مصنوعی که در پایگاه های دانش پیچیده هستند ، می گیرند. بازیابی کوچک و بزرگ را توانمند می کند LLMS با ارائه زمینه تازه و واقعی که ممکن است در طول آموزش مدل اسیر نشود ، به طور یکسان است.
تصور کنید که یک Chatbot پشتیبانی مشتری از یک مدل زبان جمع و جور استفاده می شود. بدون یک لایه بازیابی ، فقط می تواند به ثابت خود اعتماد کند داده های آموزش – و وقتی از آخرین به روزرسانی های خط مشی سؤال می شود ، به ناچار توهم یا سکوت می شود. بازیابی این شکاف را با واکشی زمینه تازه و واقعی (به عنوان مثال ، مقالات پشتیبانی ، ورودی های دانش پایه) در زمان پرس و جو پر می کند.
2. مشکل: در جایی که مبارزات بازیابی مبتنی بر تعبیه شده است
شباهت Cosine + چه چیزی وجود دارد؟
رویکرد بازیابی غالب امروزه از آن استفاده می کند تعبیه بردار. تعبیه ها بازنمایی بردار متراکم از متن هستند. مدل هایی مانند ترانسفورماتور جمله کلمات ، جملات یا اسناد را به بردارهای با ابعاد بالا ترسیم می کنند. برای یافتن متن مربوطه ، بردارها را با استفاده از معیارهایی مانند مقایسه می کنید شباهت، بازیابی اسنادی که تعبیه آنها نزدیک به تعبیه پرس و جو است.
چرا کار می کند
- معنای معنایی را فراتر از کلمات کلیدی دقیق ضبط می کند.
- از مسابقات فازی ، پارافراس ها و مترادفبشر
چالش
- GPU-ههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههههگی محاسبه تعبیه برای هزاران سند در پرواز می تواند روی CPU ها متوقف شود.
- حافظه گرسنه: ذخیره میلیون ها بردار ابعادی 768-1024 نیاز به گیگابایت رم یا بانکهای اطلاعاتی وکتور تخصصی (FAISS ، Pinecone) دارد.
- بیش از حد برای کارهای کلمات کلیدی: وقتی کاربر می پرسد “چه زمانی X رخ داده است؟” ، ممکن است مسابقات تاریخ دقیق با سر و صدای معنایی دفن شود.
در حوزه های ساختاری مانند دائر ycl المعارف ، کتابچه های فنی یا کاتالوگ محصول-که در آن کاربران به طور معمول سؤالات واقعی ، مستقیم می پرسند-روشهای سبک تر ، کلمات کلیدی مبتنی بر مجموعه های تعبیه شده سنگین ، سریعتر ، ساده تر و ارزان تر. اینجاست که BM25 می درخشد.
3. جایگزین BM25: روشی سریعتر و ساده تر
BM25 یک عملکرد رتبه بندی چند ساله در قلب موتورهای جستجو مانند است غیرقانونی وت آپاچی لوچن. این اسناد را بر اساس:
1 فرکانس مدت (TF): چند بار اصطلاحات پرس و جو در یک سند ظاهر می شوند.
2 فرکانس سند معکوس (IDF): این اصطلاحات در کل بدنه چقدر نادر است.
3 عادی سازی طول سند: مانع از تسلط اسناد طولانی در نمره می شود.
این ترکیب یک متریک مرتبط و قابل توضیح را به همراه دارد که کاملاً بر روی CPU اجرا می شود ، بدون نیاز به آموزش.
BM25 + بسته بندی های سبک وزن AI
با ترکیب بازیابی BM25 با یک کوچک LLM (به عنوان مثال ، Gemma-2B یا Tinyllama) ، می توانید یک سیستم بازیابی اطلاعات ایجاد کنید که:
- مقرون به صرفه: نه GPU برای بازیابی ، استنباط مدل کوچک.
- پاسخگو: زیر نمایشگاه های زیر 100ms در اسناد 100k-200k.
- شفاف: توضیح آسان “چرا” سندی که به شدت نمره داده شده است (کمک های TF/IDF).
مدیرعامل Perplexity اظهار داشت ، گفت که آنها از BM25 جدا از روش های دیگر استفاده می کنند ، و این نشان دهنده عمل صنعت در ترکیب الگوریتم های بازیابی سنتی با تکنیک های مدرن به جای تکیه فقط به مدل های جاسازی شده است.
“این فضای صرفاً وکتور نیست. مثل این نیست که یک بار محتوا به دست بیاید ، برخی از مدل های برت وجود دارد که همه آن را اجرا می کند و آن را در یک پایگاه داده بزرگ وکتور بزرگ غول پیکر قرار می دهد ، که شما از آن بازیابی می کنید ، مانند آن نیست. سند مربوط به یک پرس و جو خاص. “
منبع: https://www.reddit.com/r/localllama/comments/1ds30l9/perplexity_seems_to_favor_the_trentitional/
BM25 در مقابل تعبیه
4. گردش کار بازیابی (Rag و Beyond)
RAG چیست؟
نسل بازیابی-اوت (RAG) یک معماری هوش مصنوعی است که با تولید متن بازیابی اطلاعات را به دست می آورد. به جای اینکه فقط به وزن های آموزش دیده خود تکیه کند ، یک LLM با زمینه خارجی بازیابی شده به صورت پویا بر اساس یک پرس و جو کاربر ارائه می شود. این امر دقت واقعی را افزایش می دهد ، توهم را کاهش می دهد و مدل ها را قادر می سازد تا در مورد حقایق اخیر یا خارجی “بدانند”.
نسل بازیابی (RAG) یک خط لوله دو مرحله ای است:
1 بازیابی: معابر مربوط به k را از یک جسد خارجی پیدا کنید.
2 تولید: برای تولید پاسخ نهایی ، آن بخش ها را در یک فوری LLM تغذیه کنید.
چرا راگ کار می کند
- ویندوزهای زمینه LLM را روی حقایق مربوطه متمرکز می کند.
- با ایجاد مدل در داده های واقعی ، توهم را کاهش می دهد.
- پاسخ های به روز را بدون بازآفرینی LLM امکان پذیر می کند.
سایر موارد استفاده عامل
- نمایندگان برنامه ریز: قبل از تصمیم گیری در مورد اقدامات ، مشخصات ابزار ، اسناد API یا محیط زیست را بازیابی کنید.
- عوامل نظارت: گزارش های پرس و جو یا معیارهایی برای تشخیص ناهنجاری ها ، سپس هشدارها ایجاد می کنند.
- رباتهای خلاصه: آخرین مقاله یا ایمیل را واگذار کرده و نکات کلیدی را خلاصه کنید.
در تمام این سناریوها ، بازیابی آیا قهرمان ناخوشایند است که LLM را قادر می سازد با دانش آگاه عمل کند.
5. اجرای: بازیابی سبک وزن با BM25
قبل از برنامه نویسی ، کتابخانه ها را نصب کنید:
pip -q install whoosh rank_bm25 sentence-transformers \
transformers accelerate optimum --upgrade
5.1 بررسی اجمالی مجموعه داده ها
من استفاده کردم محتویات ساختاری ویکی پدیا توسط ویکی مدیا مجموعه داده در Kaggle: پرونده های JSONL حاوی عناوین ، چکیده ها و infoboxes برای هر مقاله. این قالب ساختار یافته باعث می شود بازیابی کلمات کلیدی بسیار مؤثر باشد.
کتاب کار من اینجاست: https://www.kaggle.com/code/sulphatet/bm-method-of-rag
5.2 در حافظه BM25 با Rank_BM25
`RANK_BM25` یک کتابخانه پایتون است که خود را به عنوان” موتور جستجوی دو خط “صورت می گیرد. این چندین نوع BM25 (Okapi BM25 ، BM25+، BM25L و موارد دیگر) را پیاده سازی می کند ، به علاوه گزینه هایی برای ساقه دار و حذف Word Word.
- بهترین برای: حداکثر اسناد 100K پوند در یک پردازنده واحد. ایده آل برای نمونه سازی سریع.
- تجارت: کل شاخص در RAM زندگی می کند ، بنابراین شرکت های بسیار بزرگ ممکن است از حافظه فراتر رود.
from rank_bm25 import BM25Okapi# 1. Tokenize your corpus
corpus = docs # list of "title. abstract" strings
tokenized = [doc.lower().split() for doc in corpus]
# 2. Initialize BM25
bm25 = BM25Okapi(tokenized)
#ReadTheDocs: https://github.com/dorianbrown/rank_bm25
# 3. Search function
def search_bm25(query, k=5):
tokens = query.lower().split()
scores = bm25.get_scores(tokens)
top_idx = sorted(range(len(scores)), key=lambda i: -scores[i])[:k]
return [(titles[i], abstracts[i]) for i in top_idx]
5.3 BM25F مداوم با Whoosh
Whoosh یک کتابخانه جستجوی خالص Python است که از زمینه BM25 (BM25F) پشتیبانی می کند. برای بهبود مسابقات عنوان می توانید زمینه عنوان را تقویت کنید.
بهترین برای: مجموعه داده های حداکثر اسناد 1 متر+ ، که در آن توری دیسک و وزنه برداری میدانی وجود دارد.
تجارت: شاخص آهسته تر می نویسد ، تأخیر کمی پرس و جو. (هنوز هم سریعتر از Cosine)
from whoosh.index import create_in, open_dir
from whoosh.fields import Schema, TEXT, ID
from whoosh.qparser import MultifieldParser
import os, shutil# 1. Define schema with field boosts\sschema = Schema(
title=TEXT(stored=True, field_boost=2.0),
abstract=TEXT(stored=True)
)
#ReadTheDocs: https://whoosh.readthedocs.io/
# 2. Create or clear the index directory
if os.path.exists("indexdir"): shutil.rmtree("indexdir")
os.mkdir("indexdir")
ix = create_in("indexdir", schema)
# 3. Index documents
writer = ix.writer()
for t, a in zip(titles, abstracts):
writer.add_document(title=t, abstract=a)
writer.commit()
# 4. Search function
def search_whoosh(query, k=5):
ix = open_dir("indexdir")
with ix.searcher() as searcher:
parser = MultifieldParser(["title", "abstract"], schema=ix.schema)
q = parser.parse(query)
res = searcher.search(q, limit=k)
return [(r["title"], r["abstract"]) for r in res]
6. پاسخ تولید: جفت شدن BM25 با LLM کوچک
با بازیابی در محل ، می توانید معابر Top-K را در LLM سبک وزن مانند تغذیه کنید جماع 2Bبا GPT-2 ، عوامل SMOL HUGGINGFACE و غیره:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch# Load model
tok = AutoTokenizer.from_pretrained("google/gemma-2b-it")
mod = AutoModelForCausalLM.from_pretrained("google/gemma-2b-it").eval()
# RAG answer function
def generate_answer(query):
contexts = search_bm25(query) #OR SEARCH WHOOSH
ctx_text = "\n".join(f"{t}: {a}" for t, a in contexts)
prompt = f"Answer using context:\n{ctx_text}\nQuestion: {query}\nAnswer:"
inp = tok(prompt, return_tensors="pt", truncation=True, max_length=4096)
out = mod.generate(**inp, max_new_tokens=150)
return tok.decode(out[0], skip_special_tokens=True)
این تنظیم کاملاً بر روی CPU اجرا می شود و برای 5 گذرگاه ، تأخیر انتهایی به انتهای فرعی را ارائه می دهد.
7. چه (و چرا) باید از BM25 استفاده کنید
از BM25 استفاده کنید:
- داده های شما ساختار یافته است (عناوین ، چکیده ها ، سؤالات متداول).
❗جایزه: الگوریتم BM25 می تواند به شما امکان دهد “وزن کلاس” خود را وارد کنید ، یعنی می توانید به عنوان مثال تصمیم بگیرید که عنوان متن 5 برابر بیشتر از خود محتوا است و بازیابی خود را بر این اساس تنظیم کنید.
- نمایش داده شدگان کلمات کلیدی محور یا فاکتوئید متمرکز هستند.
- شما محدود به CPU یا میزبان سبک وزن هستید.
- شما می خواهید نمرات ارتباط شفاف و قابل توضیح داشته باشید.
از تعبیه ها و cosine استفاده کنید:
🌐 شما به مسابقات معنایی عمیق یا کار با پاراگراف نیاز دارید.
🔄 شما به بازیابی چند زبانه نیاز دارید.
🚀 شما در مقیاس عظیم (یا بحرانی) (> 1M DOCS) با منابع GPU/خوشه فعالیت می کنید.
8. ساده تر اغلب بهتر است
در هوش مصنوعی مدرن ، بزرگتر همیشه بهتر نیست. با ترکیب یک الگوریتم آزمایش شده مانند BM25 با LLM های جمع و جور ، شما یک سیستم عامل و مقرون به صرفه و مقرون به صرفه دریافت می کنید که در کارهای دنیای واقعی برتری دارد-بدون پیچیدگی و هزینه جستجوی بردار در مقیاس کامل.
این رویکرد را در پروژه بعدی خود امتحان کنید و تماشا کنید که چگونه سادگی عملکرد را باز می کند.
❗کتابخانه های جایزه می توانید امتحان کنید: RAGMEUP یک چارچوب عمومی برای چرخاندن یک پارچه بر روی پایگاه داده خود به راحتی ارائه می دهد. اگر واقعاً کارآیی شگفت انگیز می خواهید ، BM25s نوعی از الگوریتم BM25 است که برای کارآیی طراحی شده است.
واژههای کلیدی: BM25 ، RAG ، LLM ، بازیابی سبک ، AI عامل ، Rank_BM25 ، Whoosh ، بازیابی ، نسل بازیابی.
من بعد از اینکه تصمیم گرفتید دست بکشید و دنبال کنید
منتشر شده از طریق به سمت هوش مصنوعی