مدلهای توکنبندی متن
مدلهای توکنبندی متن اساساً برای محاسبه نمایش برداری متن استفاده میشوند. در اینجا، عبارت "بردار" به یک بردار ریاضی، همچنین به نام بردار ویژگی، اشاره دارد. به عنوان یک توسعهدهنده، تنها چیزی که باید بدانید این است که یک مدل توکنبندی متن میتواند بردار ویژگی یک پارهای متن را محاسبه کند و سپس با استفاده از محاسبات مشابهت بردار، میتواند محتوای متنی را با ویژگیهای مشابه شناسایی کند.
نکته: برای دانستن مقدماتی درباره مدلهای توکنبندی متن، لطفا به آموزش مقدماتی درباره مدلهای توکنبندی متن مراجعه کنید.
تفاوت بین جستجوی برداری و جستجوی مبتنی بر کلمه
- جستجوی برداری بر اساس مشابهت معنایی بردارهای کلمات است. این میتواند نتایجی که معنایی با درخواست مرتبط هستند را پیدا کند، حتی اگر کلمات درخواست و کلمات نتایج دقیقاً منطابقت نداشته باشند. جستجوی برداری کلمات را به یک فضای برداری بسیار بعدی نقشه برده و مشابهت بین بردارها را محاسبه میکند. این بدان معنی است که حتی اگر خود کلمات منطابقت نکنند، تا جایی که معنایی مشابه داشته باشند، میتوان نتایج مرتبط را پیدا کرد.
- از طرف دیگر، جستجوی مبتنی بر کلمات، یک فرایند سادهی تطبیق رشته است. این تنها نتایجی که شامل کلمات درخواستی با دقت منطقی هستند، برمیگرداند. اگر یک سند از کلمات مختلف استفاده کند، حتی اگر معنایاً مشابه باشند، همخوانی نخواهند داشت.
کلاس Embeddings یک نوع کلاس است که به طور خاص برای تعامل با مدلهای توکنبندی متن طراحی شده است. تأمین کنندگان بسیاری از مدلهای توکنبندی وجود دارند (مانند OpenAI، Cohere، Hugging Face و غیره)، و طراحی این کلاس برای ارائه یک رابط استاندارد برای تمام تأمین کنندگان است.
کلاس Embeddings نمایش برداری متن را ایجاد میکند. با جستجوی بردار، جستجوهای معنایی میتوانند انجام شوند، به عنوان مثال، جستجو برای قطعات متنی مشابه در فضای بردار.
کلاس Embeddings اصلی در LangChain دو متد را فراهم میکند: یکی برای توکنبندی سندها و دیگری برای توکنبندی پرسمانها. اولیه ورودیهای چند متن است، در حالی که دومی ورودی یک متن تکی است. دلیل اینکه آنها به عنوان دو متد مختلف تلقی میشوند این است که برخی از تأمین کنندگان توکنبندی مختلفی برای اسناد قابل جستجو و پرسمانها (خود پرسمانهای جستجو) دارند.
شروع سریع
در زیر یک مثال از استفاده از مدل توکنبندی OpenAI آورده شده است:
پیکربندی
ابتدا، باید بسته Python OpenAI را نصب کنیم. از آنجایی که LangChain پیادهسازیهای مختلفی از مدلهای توکنبندی متن دارد، توسعهدهندگان باید بستههای موردنیاز مدلهای مختلف را بر اساس انتخابهای خود نصب کنند:
pip install langchain-openai
از طریق متغیرهای محیطی کلید OpenAI را پیکربندی میکنیم:
export OPENAI_API_KEY="..."
اگر نمیخواهید متغیرهای محیطی را تنظیم کنید، میتوانید پارامتر نامگذاری شده openai_api_key را مستقیماً هنگام مقدماتیسازی کلاس LLM OpenAI برای گذراندن کلید استفاده کنید:
from langchain_openai import OpenAIEmbeddings
embeddings_model = OpenAIEmbeddings(openai_api_key="...")
در غیر این صورت، میتوانید بدون هیچ پارامتری مقدماتیسازی کنید:
from langchain_openai import OpenAIEmbeddings
embeddings_model = OpenAIEmbeddings()
embed_documents
ویژگیهای برداری یک دسته از متن را محاسبه میکند:
embeddings = embeddings_model.embed_documents(
[
"سلام!",
"اوه، سلام!",
"اسمت چیه؟",
"دوستانم به من جهان میگویند",
"سلام دنیا!"
]
)
len(embeddings), len(embeddings[0])
(5, 1536)
embed_query
این تابع ویژگی بردار پرسمان یک متن را محاسبه میکند. به طور معمول، این شامل تبدیل سوالات قابل جستجو به یک بردار ویژگی و سپس استفاده از این بردار برای جستجوی متنهای مشابه در پایگاه داده بردار میشود.
embedded_query = embeddings_model.embed_query("اسمی که در گفت و گو اشاره شده چی بود؟")
embedded_query[:5]
[0.0053587136790156364,
-0.0004999046213924885,
0.038883671164512634,
-0.003001077566295862,
-0.00900818221271038]