مقیاس خلاصه سازی سمت مشتری در پنجره های زمینه کوچک

منتشر شده: ۱۲ مارس ۲۰۲۵، آخرین به‌روزرسانی: ۲۸ مه ۲۰۲۵

توضیح دهنده وب افزونه‌ها وضعیت کروم قصد
ام دی ان کروم ۱۳۸ کروم ۱۳۸ مشاهده قصد ارسال

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

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

خلاصه خلاصه‌ها چیست؟

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

برای مثال، اگر یک سند به سه بخش تقسیم شده باشد، هر بخش خلاصه می‌شود. آن سه خلاصه کنار هم قرار می‌گیرند و برای نتیجه نهایی دوباره خلاصه می‌شوند.

محتوای خود را با دقت تقسیم‌بندی کنید

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

روش‌های زیادی برای انجام این کار وجود دارد. در مثال زیر، ما از Recursive Text Splitter از LangChain.js استفاده کرده‌ایم که عملکرد و کیفیت خروجی را متعادل می‌کند. این روش باید برای اکثر حجم‌های کاری کار کند.

هنگام ایجاد یک نمونه جدید، دو پارامتر کلیدی وجود دارد:

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

متن را با splitText() تقسیم کنید تا آرایه‌ای از رشته‌ها را با هر بخش برگرداند.

پنجره‌ی زمینه‌ی اکثر LLMها به جای تعدادی کاراکتر، به صورت تعدادی توکن بیان می‌شود. به طور متوسط، یک توکن شامل ۴ کاراکتر است. در مثال ما، chunkSize ۳۰۰۰ کاراکتر است و این تقریباً ۷۵۰ توکن می‌شود.

تعیین در دسترس بودن توکن

برای تعیین اینکه چند توکن برای استفاده از یک ورودی در دسترس است، از متد measureInputUsage() و ویژگی inputQuota استفاده کنید. در این حالت، پیاده‌سازی نامحدود است، زیرا نمی‌توانید بدانید که خلاصه‌ساز چند بار برای پردازش تمام متن اجرا خواهد شد.

برای هر بخش خلاصه ایجاد کنید

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

با استفاده از تابع create() یک نمونه از خلاصه‌ساز ایجاد کنید. برای حفظ هرچه بیشتر متن، پارامتر format را روی plain-text ، type را روی tldr و length را روی long تنظیم کرده‌ایم.

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

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

خلاصه بازگشتی خلاصه‌ها

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

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

ما همچنان تقسیم‌بندی‌های اولیه تولید شده توسط RecursiveCharacterTextSplitter را جمع‌آوری می‌کنیم. سپس، در تابع recursiveSummarizer() ، فرآیند خلاصه‌سازی را بر اساس طول کاراکتر تقسیم‌بندی‌های الحاقی حلقه می‌کنیم. اگر طول کاراکتر خلاصه‌ها از 3000 بیشتر شود، آنها را در fullSummaries ادغام می‌کنیم. اگر به حد نصاب نرسد، خلاصه به صورت partialSummaries ذخیره می‌شود.

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

ما این راهکار را با RFC مربوط به Internet Relay Chat (IRC) آزمایش کردیم که شامل ۱۱۰,۰۳۰ کاراکتر و ۱۷۵۶۰ کلمه است. رابط برنامه‌نویسی Summarizer خلاصه زیر را ارائه داد:

چت رله اینترنتی (IRC) راهی برای برقراری ارتباط آنلاین و بلادرنگ با استفاده از پیام‌های متنی است. می‌توانید در کانال‌ها چت کنید یا پیام‌های خصوصی ارسال کنید و می‌توانید از دستوراتی برای کنترل چت و تعامل با سرور استفاده کنید. این مانند یک اتاق چت در اینترنت است که می‌توانید در آن پیام‌های دیگران را تایپ کرده و فوراً ببینید.

خیلی مؤثره! و فقط 309 کاراکتر داره.

محدودیت‌ها

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

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

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

بازخورد خود را به اشتراک بگذارید

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