پرامپت نویسی برای استخراج اطلاعات یکی از پرکاربردترین سناریوهای واقعی کار با مدل‌های زبانی است. از پردازش فاکتورهای فروش و استخراج نام مشتری، تاریخ و مبلغ، تا تبدیل اسناد حقوقی به داده ساختاریافته و از تحلیل نظرسنجی‌های مشتری گرفته تا استخراج ویژگی‌های محصول از توضیحات خام، همه و همه در این دسته قرار می‌گیرند. طراحی درست پرامپت در این حوزه، تفاوت بین یک سیستم قابل اتکا و یک خروجی غیرقابل پیش‌بینی است.

چیزی که در تجربه‌های پروژه‌ای بارها دیده‌ایم این است: تیم‌ها ابتدا با یک پرامپت ساده کار را شروع می‌کنند، بعد از چند روز با داده‌های ناسازگار مواجه می‌شوند، و در نهایت مجبور می‌شوند کل معماری را از ابتدا بازطراحی کنند. مسیر بهینه، شروع با درک دقیق انواع استخراج و سپس طراحی صریح قالب خروجی است.

خلاصه آنچه پیش رو دارید

در این نوشتار ابتدا تعریف دقیق استخراج اطلاعات با مدل‌های زبانی و انواع وظایف آن ارائه می‌شود. سپس دلیل اهمیت پرامپت نویسی، طراحی قالب خروجی، ساختار JSON Schema، استفاده از مثال‌ها، مدیریت ابهام و اعتبارسنجی خروجی بررسی می‌شود. در ادامه، اشتباهات رایج، شاخص‌های سنجش کیفیت و نگاه معمارانه به استخراج اطلاعات ارائه خواهد شد.

استخراج اطلاعات با مدل‌های زبانی چیست؟

استخراج اطلاعات (Information Extraction) به فرآیند شناسایی و بازیابی داده‌های مشخص از یک متن غیرساختاریافته گفته می‌شود. در گذشته، این کار با قواعد دستی، الگوهای Regular Expression و مدل‌های تخصصی پردازش زبان انجام می‌شد. اما با ظهور مدل‌های زبانی بزرگ، امکان انجام این کار با دقت بالاتر و نیاز کمتر به تعریف صریح قواعد فراهم شده است.

مدل زبانی در این سناریو نقش یک مترجم بین متن آزاد و داده ساختاریافته را ایفا می‌کند. به‌جای نوشتن ده‌ها قاعده برای شناسایی انواع تاریخ در متن، می‌توان به مدل گفت چه می‌خواهیم و کافی است که خروجی را به‌صورت استاندارد دریافت کنیم. برای مطالعه پایه‌های این حوزه، نوشتار راهنمای پایه پرامپت نویسی را ببینید.

در ادبیات علمی، این حوزه با عنوان Information Extraction شناخته می‌شود و در ویکی‌پدیا نیز به‌عنوان یکی از شاخه‌های مهم Information Extraction معرفی شده است.

انواع وظایف استخراج اطلاعات

در عمل، استخراج اطلاعات را می‌توان به چند دسته اصلی تقسیم کرد که هر یک طراحی پرامپت متفاوتی نیاز دارد:

نوع وظیفهتوضیحمثال
استخراج فیلدهای مشخصبازیابی مقادیر تعریف‌شدهنام، تاریخ، مبلغ فاکتور
استخراج موجودیت نام‌دارشناسایی اسامی، مکان‌ها، سازمان‌هاNER در متن خبری
استخراج رابطهیافتن پیوند بین موجودیت‌هامدیرعامل شرکت X
استخراج رویدادشناسایی رخداد و اجزایشمعامله، سفر، جلسه
استخراج ساختاری از اسنادتبدیل سند به داده ساختاریافتهقرارداد به JSON
استخراج جدولیتبدیل متن به جدولصورت‌حساب به CSV

هر یک از این وظایف، پیچیدگی خاص خودش را دارد. استخراج فیلدهای مشخص، ساده‌ترین است چون خروجی کاملاً قابل تعریف است. در مقابل، استخراج روابط و رویدادها، به دلیل نیاز به استدلال معنایی، دشوارتر است. نوشتار پرامپت نویسی برای طبقه‌بندی تفاوت‌های مهمی را در این زمینه روشن می‌کند.

چرا پرامپت نویسی در استخراج حیاتی است؟

پرامپت در استخراج اطلاعات، دو نقش کلیدی دارد:

۱. تعریف دقیق آنچه می‌خواهیم

مدل زبانی، ماشین حدس زدن است. اگر به آن نگویید دقیقاً چه فیلدهایی را می‌خواهید، به سراغ آنچه از دید خودش مرتبط است می‌رود. در استخراج اطلاعات، این حدس می‌تواند فاجعه‌بار باشد. برای مطالعه دقیق‌تر درباره این موضوع، نوشتار افزایش وضوح و مشخص بودن در پرامپت را ببینید.

۲. تحمیل ساختار خروجی

خروجی استخراج باید قابل پردازش توسط کد باشد. اگر مدل به‌جای JSON، متن آزاد بدهد، فرآیند اتوماسیون بی‌معنا می‌شود. طراحی پرامپت باید خروجی را به قالب دقیق و قابل پیش‌بینی محدود کند. نوشتار درخواست خروجی در قالب مشخص به این موضوع اختصاص دارد.

استخراج اطلاعات، یک فعالیت مهندسی است، نه یک فعالیت ادبی. در این حوزه، پیش‌بینی‌پذیری خروجی، مهم‌تر از زیبایی متن است.

طراحی قالب خروجی و JSON Schema

معمولاً استخراج اطلاعات با خروجی JSON انجام می‌شود. دلایل این انتخاب:

  • ساختار درختی صریح
  • قابلیت اعتبارسنجی با ابزارهای استاندارد
  • پشتیبانی تقریباً همه زبان‌های برنامه‌نویسی
  • امکان تعریف دقیق فیلدها و انواع داده

رویکرد پیشنهادی:

{
  "invoice_number": "string",
  "issue_date": "YYYY-MM-DD",
  "customer_name": "string",
  "total_amount": "number",
  "currency": "string",
  "line_items": [
    {
      "description": "string",
      "quantity": "number",
      "unit_price": "number"
    }
  ]
}

با تعریف چنین ساختاری در پرامپت، مدل می‌داند چه چیزی را باید استخراج کند و در چه قالبی ارائه دهد. برای مطالعه دقیق‌تر در این زمینه، نوشتار درخواست خروجی JSON از مدل را ببینید.

نکات مهم در تعریف Schema

سه نکته‌ی کلیدی که در تجربه‌های واقعی مؤثر بوده‌اند:

  1. مشخص کردن نوع داده: هر فیلد باید نوع صریح داشته باشد. تاریخ به‌صورت رشته، مبلغ به‌صورت عدد، و فهرست به‌صورت آرایه.
  2. تعریف مقادیر مجاز: اگر فیلدی محدود به چند مقدار مشخص است، این محدودیت را در Schema ذکر کنید. مثلاً "status": "enum[paid, pending, cancelled]".
  3. مدیریت فیلدهای اختیاری: مشخص کنید کدام فیلدها اجباری و کدام اختیاری هستند. این کار جلوی خطاهای بی‌مورد را می‌گیرد.

استفاده از مثال در پرامپت استخراج

یکی از مؤثرترین تکنیک‌ها در استخراج اطلاعات، استفاده از مثال است. اگر یک یا دو نمونه از ورودی و خروجی مطلوب را در پرامپت قرار دهید، دقت استخراج به‌طور محسوس بالا می‌رود. برای درک چرایی این موضوع، نوشتار تأثیر مثال در پرامپت نویسی را ببینید.

ساختار پیشنهادی:

ورودی نمونه:
"فاکتور شماره 1234 تاریخ 1403/05/15 به نام آقای احمدی به مبلغ ۲۵۰۰۰۰ تومان"

خروجی نمونه:
{
  "invoice_number": "1234",
  "issue_date": "1403-05-15",
  "customer_name": "احمدی",
  "total_amount": 250000,
  "currency": "IRR"
}

نکته‌ی مهم این است که مثال‌ها باید از دامنه‌ی واقعی داده‌های شما باشند. مثال‌های ساختگی یا کلیشه‌ای، کیفیت استخراج را کاهش می‌دهند. برای مطالعه دقیق‌تر درباره انواع راهبردهای few-shot، نوشتار تفاوت پرامپت صفر-نمونه و چند-نمونه را ببینید.

مدیریت ابهام و داده‌های ناقص

در داده‌های واقعی، ابهام و ناقص بودن قاعده است، نه استثنا. در متن فاکتور، ممکن است تاریخ نباشد. در توضیحات محصول، ممکن است اندازه ذکر نشده باشد. پرامپت استخراج باید این موارد را مدیریت کند.

سه راهبرد مؤثر:

۱. تعریف مقدار پیش‌فرض

برای هر فیلد، یک مقدار پیش‌فرض مثل null یا "unknown" تعریف کنید. اگر مدل داده‌ای برای آن فیلد پیدا نکرد، همان مقدار را قرار دهد.

۲. مشخص کردن سطح اطمینان

برای فیلدهای حساس، از مدل بخواهید سطح اطمینان خود را بیان کند. مثلاً یک فیلد اضافی مثل "confidence": 0.85. این کار به لایه‌های بالاتر اجازه می‌دهد تصمیم بهتری بگیرند.

۳. تفکیک داده استخراج‌شده از داده استنتاج‌شده

مهم است که مدل داده‌ای که مستقیماً در متن دیده را از داده‌ای که استنتاج کرده، تفکیک کند. این تمایز، جلوی خطاهای ظریف را می‌گیرد. برای مطالعه دقیق‌تر در این زمینه، نوشتار پرامپت نویسی برای استدلال را ببینید.

اعتبارسنجی و کنترل کیفیت خروجی

پس از دریافت خروجی از مدل، نیاز به اعتبارسنجی دارید. فرآیند اعتبارسنجی معمولاً در سه سطح انجام می‌شود:

سطحنوع اعتبارسنجیمثال
ساختاریانطباق با Schemaوجود همه فیلدهای اجباری
دامنه‌ایمقدار در محدوده مجازتاریخ معتبر، مبلغ مثبت
منطقیسازگاری بین فیلدهاتاریخ پرداخت بعد از تاریخ فاکتور

این سه سطح، در کنار هم یک سیستم اعتبارسنجی جامع می‌سازند. اگر خروجی از اعتبارسنجی رد شود، سه گزینه وجود دارد: ارسال مجدد پرامپت با نمونه‌های بیشتر، تنظیم دستی خروجی، یا ارسال به یک صف بررسی انسانی.

در سیستم‌های حساس، توصیه می‌شود همیشه یک لایه‌ی بررسی انسانی برای مواردی که سطح اطمینان پایین است پیش‌بینی شود. برای مطالعه دقیق‌تر در مورد ارزیابی کیفیت، نوشتار ارزیابی کیفیت پرامپت را ببینید.

اشتباهات رایج در پرامپت نویسی برای استخراج

  • نداشتن قالب مشخص برای خروجی
  • پذیرش خروجی متنی به‌جای JSON یا XML
  • نبود اعتبارسنجی پس از دریافت خروجی
  • نادیده گرفتن داده‌های ناقص و مقدار پیش‌فرض
  • استفاده از مثال‌های نامرتبط با دامنه
  • طولانی کردن پرامپت با توضیحات غیرضروری
  • تعریف نکردن رفتار در مواجهه با ابهام
  • نادیده گرفتن تفاوت‌های زبانی و فرمت‌های تاریخی
  • عدم تفکیک داده استخراج‌شده از داده استنتاج‌شده
  • نبود نسخه‌بندی و تکامل برای پرامپت استخراج

سنجش کیفیت استخراج

برای سنجش کیفیت یک سیستم استخراج، چند شاخص کلیدی:

شاخصتوضیح
Precisionنسبت داده‌های صحیح استخراج‌شده به کل داده‌های استخراج‌شده
Recallنسبت داده‌های صحیح استخراج‌شده به کل داده‌های موجود
Schema Complianceدرصد خروجی‌های منطبق با Schema
Field-level Accuracyدقت به‌ازای هر فیلد
Cost per Documentهزینه استخراج هر سند

پایش این شاخص‌ها به‌صورت مستمر، اجازه می‌دهد قبل از این که خطا در سیستم‌های بالادست ظاهر شود، انحراف را تشخیص دهید. برای مطالعه دقیق‌تر در مورد شاخص‌های ارزیابی، نوشتار معیارهای ارزیابی پرامپت را ببینید.

پرسش‌های پرتکرار درباره استخراج اطلاعات با پرامپت

استخراج اطلاعات با مدل زبانی چیست؟

استخراج اطلاعات یعنی شناسایی و بازیابی داده‌های مشخص از یک متن آزاد و تبدیل آن‌ها به داده ساختاریافته. مدل زبانی نقش مترجم بین متن آزاد و داده را ایفا می‌کند.

چطور خروجی JSON پایدار از مدل بگیریم؟

با تعریف صریح Schema در پرامپت، ارائه یک یا دو مثال ورودی-خروجی، و اعتبارسنجی خودکار پس از دریافت. برای مطالعه دقیق‌تر، نوشتار درخواست خروجی JSON از مدل را ببینید.

اگر مدل داده اشتباه استخراج کند چه کنیم؟

اول اعتبارسنجی خودکار را جدی بگیرید. اگر خطا در فیلدهای کلیدی است، پرامپت را با مثال‌های بیشتر بازنگری کنید. اگر خطا در فیلدهای حساس است، یک لایه بررسی انسانی پیش‌بینی کنید.

آیا استخراج اطلاعات با مدل زبانی قابل اتکا است؟

در دامنه‌های محدود و با طراحی پرامپت دقیق، دقت بالایی قابل دستیابی است. اما برای کاربردهای حساس، ترکیب مدل با اعتبارسنجی و بررسی انسانی توصیه می‌شود. نوشتار راهنمای توهم در مدل‌های زبانی ابعاد این چالش را روشن می‌کند.

آیا استخراج اطلاعات فارسی با مدل‌های زبانی دشوارتر است؟

در سطح کلی، فارسی در مقایسه با انگلیسی چالش‌های بیشتری دارد: تاریخ‌های شمسی، فرمت‌های متفاوت اعداد، و نیم‌فاصله. طراحی پرامپت باید این تفاوت‌ها را در نظر بگیرد.

نگاهی دقیق‌تر به معماری استخراج

از منظر معماری، استخراج اطلاعات با مدل‌های زبانی، یک فرآیند چندلایه است که در آن مدل فقط یکی از اجزا است. لایه‌های دیگر شامل پیش‌پردازش متن، قطعه‌بندی، تزریق به مدل، اعتبارسنجی خروجی، و ذخیره‌سازی است. هر یک از این لایه‌ها می‌تواند منبع خطا باشد و مجموع خطاها در نهایت بر کیفیت کل سیستم اثر می‌گذارد.

در سیستم‌های بالغ، معمولاً از ترکیب استخراج با خلاصه‌سازی خودکار استفاده می‌شود. ابتدا متن طولانی با خلاصه‌سازی به نسخه فشرده تبدیل می‌شود و سپس استخراج از نسخه فشرده انجام می‌گیرد. این ترتیب، هم هزینه را کاهش می‌دهد و هم دقت را بالا می‌برد.

نکته‌ی مهم دیگر این است که پرامپت استخراج باید با معماری حافظه و زمینه هماهنگ باشد. اگر اسناد شما بسیار طولانی هستند و در چند نوبت پردازش می‌شوند، مدیریت حافظه بین نوبت‌ها حیاتی می‌شود. برای مطالعه دقیق‌تر در این زمینه، نوشتار پرامپت سیستمی و نقش آن را ببینید.

آخرین نکته‌ای که در طراحی سیستم‌های استخراج بارها تجربه کرده‌ایم: همیشه یک نسخه از داده خام را نگه دارید. اگر بعداً متوجه شدید که فیلد مهمی را در Schema از قلم انداخته‌اید، می‌توانید استخراج را دوباره اجرا کنید. اگر داده خام را از دست داده باشید، این امکان از بین می‌رود. این تصمیم ساده، در بلندمدت تفاوت بین سیستمی است که می‌تواند تکامل پیدا کند و سیستمی که در نسخه‌ی اول قفل می‌شود.

علاوه بر این، در معماری‌های پیشرفته، استخراج اطلاعات معمولاً با اعتبارسنجی چندلایه ترکیب می‌شود. لایه‌ی اول اعتبارسنجی ساختاری است که با Schema انجام می‌شود. لایه‌ی دوم، اعتبارسنجی معنایی است که با مدل‌های کوچک انجام می‌گیرد. لایه‌ی سوم، بررسی قواعد کسب‌وکار است. ترکیب این سه لایه، کیفیت نهایی را تضمین می‌کند.

تجربه شما

اگر در پروژه‌ای واقعی با استخراج اطلاعات از متن کار کرده‌اید، برای ما جالب است بدانید کدام چالش بیشترین زمان را گرفته است: طراحی Schema، مدیریت ابهام، یا اعتبارسنجی خروجی. اگر رویکرد متفاوتی برای طراحی پرامپت استخراج دارید، تجربه‌تان را در دیدگاه‌ها بنویسید تا خواننده بعدی از آن استفاده کند.