ما می توانیم دقت یک مدل زبان بزرگ را با ارائه زمینه از منابع داده سفارشی به طور چشمگیری افزایش دهیم. LangChain این ادغام را آسان می کند.
در قست قبلی این مجموعه، به پیچیدگیهای PalM API و ادغام یکپارچه آن با LangChain پرداختیم. مزیت بزرگ LangChain انعطاف پذیری برای تعویض مدل زبان بزرگ (LLM) تنها با تغییرات جزئی در کد ما. همانطور که دیدیم، در چارچوب LangChain، LLM به یک “پیوند” ساده در زنجیره تبدیل میشود که جایگزینی ساده را تسهیل میکند.
LangChain از تنوع موارد استفاده از جمله خلاصهسازی، پاسخ به سؤال، احساسات پشتیبانی میکند. تجزیه و تحلیل، و بیشتر. در حالی که آخرین آموزش اصول LangChain و Google PalM API را بررسی میکند، این مقاله به استخراج پاسخها از یک PDF از طریق ترکیب LangChain SDK و PaLM API میپردازد.
بیایید شروع کنیم.
PDF را دانلود کنید
یک دایرکتوری به نام داده بسازید و PDF سخنرانی جو بایدن در سال ۲۰۲۳ وضعیت اتحادیه از وب سایت پارلمان اتحادیه اروپا.
wget -O data/sotu.pdf https://www.europarl.europa.eu/RegData/etudes/ATAG/2023/739359/EPRS_ATA(2023)739359_EN.pdf
از دادههای این PDF برای ساختن برنامه پرسش و پاسخ خود استفاده خواهیم کرد.
وارد کردن ماژول های پایتون
با وارد کردن ماژول های پایتون فهرست شده در زیر شروع کنید.
from langchain.llms import GooglePalm from langchain.embeddings import GooglePalmEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import FAISS from langchain.document_loaders import PyPDFLoader from langchain.chains.question_answering import load_qa_chain
سند را با PyPDFLoader بارگیری کنید.
loader = PyPDFLoader ("./data/sotu.pdf") documents = loader.load() Convert the content into raw text. raw_text = '' for i, doc in enumerate(documents): text = doc.page_content if text: raw_text += text
تکه هایی از متن ایجاد کنید
سپس از متن خام تکه هایی از ۲۰۰ کاراکتر ایجاد می کنیم. این به افزایش سرعت جستجوها با بارگیری تکههای کوچکتر از دادههای مرتبط کمک میکند.
text_splitter = CharacterTextSplitter( separator = "\n", chunk_size = 200, chunk_overlap = ۴۰, length_function = len, ) texts = text_splitter.split_text(raw_text)
جاسازیها را ایجاد کنید
بیایید مدل جاسازی متن را روی Google Palm تنظیم کنیم.
embeddings = GooglePalmEmbeddings()
اکنون آماده ایم جاسازیها را برای تمام تکههای متنی که ایجاد کردهایم ایجاد کنیم.
docsearch = FAISS.from_texts(texts, embeddings)
FAISS (جستجوی شباهت هوش مصنوعی فیس بوک) یک کتابخانه محبوب از فیس بوک برای اجرای درون جستجوهای شباهت حافظه از آنجایی که سند ما کوچک است، می توانیم به این کتابخانه اعتماد کنیم. برای اسناد بزرگتر، استفاده از پایگاه داده برداری توصیه می شود.
یک زنجیره پرسش و پاسخ ایجاد کنید
اکنون یک زنجیره پرسش و پاسخ ایجاد می کنیم که به مدل PalM منتقل می شود.
chain = load_qa_chain(GooglePalm(), chain_type="stuff")
فرآیند زنجیره سند “موارد” ساده است. این شامل جمع آوری لیستی از اسناد، وارد کردن آنها در یک درخواست و سپس ارسال آن درخواست به یک LLM است. این فرآیند زمانی مفید است که با تعداد کمی از اسناد که خیلی گسترده نیستند سر و کار دارید.
زمان آن است که اولین سوال را مطرح کنید.
query = "Explain who created the document and what is the purpose?" docs = docsearch.similarity_search(query) print(chain.run(input_documents=docs, question=query).strip())
به نظر می رسد که پاسخ هدفمند است. من این مدل را با چند سوال دیگر تست کردم.
نمونه پرسش و پاسخ PalM 2 را کامل کنید
در زیر کد کاملی وجود دارد که میتوانید در محیط شخصی خود یا Google Colab اجرا کنید.
from langchain.llms import GooglePalm from langchain.embeddings import GooglePalmEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import FAISS from langchain.document_loaders import PyPDFLoader from langchain.chains.question_answering import load_qa_chain loader = PyPDFLoader ("./data/sotu.pdf") documents = loader.load() raw_text = '' for i, doc in enumerate(documents): text = doc.page_content if text: raw_text += text text_splitter = CharacterTextSplitter( separator = "\n", chunk_size = 200, chunk_overlap = ۴۰, length_function = len, ) texts = text_splitter.split_text(raw_text) embeddings = GooglePalmEmbeddings() docsearch = FAISS.from_texts(texts, embeddings) query = "Explain who created the document and what is the purpose?" docs = docsearch.similarity_search(query) print(chain.run(input_documents=docs, question=query).strip()) query = "What is cap for insulin prescription?" docs = docsearch.similarity_search(query) print(chain.run(input_documents=docs, question=query).strip()) query = "Who represented Ukrain?" docs = docsearch.similarity_search(query) print(chain.run(input_documents=docs, question=query).strip())
در حالی که این یک تمرین ساده و سریع بود، اما نشان میدهد که چگونه میتوانیم دقت مدل PalM 2 خود را با ارائه متن از منابع داده سفارشی (در این مورد از PDF) به طرز چشمگیری افزایش دهیم. در اینجا LangChain این ادغام را با گنجاندن جستجوی مشابه (که بخشهای مرتبط سند را بازیابی میکند) به عنوان زمینه برای درخواست ساده کرد. LangChain گنجاندن منابع داده سفارشی و جستجوی شباهت را به عنوان بخشی از خطوط لوله ای که می سازیم، آسان می کند.
در مقاله بعدی این مجموعه، یک برنامه خلاصه سازی از همان پی دی اف خواهیم ساخت. با ما همراه باشید.
پست های مرتبط
ساخت یک برنامه پرسش و پاسخ با LangChain و Google PalM 2
ساخت یک برنامه پرسش و پاسخ با LangChain و Google PalM 2
ساخت یک برنامه پرسش و پاسخ با LangChain و Google PalM 2