۳.۲.۱ زنجیرهٔ فکر (Chain of Thought)
مفهوم زنجیرهٔ فکر (Chain of Thought یا CoT) چند بار در این فصل و فصلهای قبل مطرح شده است [Wei et al., 2022c; Chowdhery et al., 2022]. روشهای CoT راه سادهای برای prompt کردن LLM به تولید reasoning گامبهگام در مسائل پیچیده فراهم میکنند و مدل را به شیوهای شبیهتر به حل مسئلهٔ انسانی هدایت میکنند. بهجای رسیدن مستقیم به نتیجه، CoT از LLM میخواهد مراحل reasoning را بسازد یا از demonstrationهایی که فرایند reasoning مفصل دارند یاد بگیرد.
برای توضیح CoT، مسئلهٔ محاسبهٔ جبری را در نظر میگیریم. فرض کنید پرسش چنین باشد: «میانگین اعداد ۲، ۴ و ۶ را محاسبه کن.» یک prompt مستقیم میتواند این باشد:
Q: لطفاً میانگین اعداد 2، 4 و 9 را محاسبه کن.
A: پاسخ 6 است.
برای LLM ممکن است ارائهٔ مستقیم پاسخ درست دشوار باشد. یک بهبود ساده افزودن demonstration مشابه است:
Q: میانگین اعداد 1، 3، 5 و 7 را محاسبه کن.
A: پاسخ 4 است.
Q: میانگین اعداد 2، 4 و 9 را محاسبه کن.
A: پاسخ 7 است.
مشکل آن است که حتی با یک زوج سؤال-جواب مشابه، reasoning لازم برای پاسخ درست هنوز دشوار است. در CoT، LLM فقط از correspondence میان question و answer یاد نمیگیرد؛ بلکه از گامهای دقیق حل که به answer منجر شدهاند نیز بهره میبرد. بنابراین prompt را با reasoning تکمیل میکنیم:
Q: mean square اعداد 1، 3، 5 و 7 را محاسبه کن.
A: مربع هر عدد را حساب کن: 1²=1، 3²=9، 5²=25، 7²=49.
مجموع مربعها 1+9+25+49=84 است. چهار عدد داریم.
84 را بر 4 تقسیم میکنیم: 84/4=21. پاسخ 21 است.
Q: میانگین اعداد 2، 4 و 9 را محاسبه کن.
A: 2+4+9=15. سه عدد داریم. 15/3=5. پاسخ 5 است.
در نسخهٔ اصلی، مراحل reasoning با رنگ سبز مشخص شدهاند. با ارائهٔ فرایند reasoning برای مسئلهای مشابه، LLM یاد میگیرد reasoning کند و مسیر حل مسئلهای بسازد که به جواب درست منتهی شود.
CoT چند مزیت دارد. نخست، مسئلهٔ پیچیده را به مراحل کوچکتر و ترتیبی decomposition میکند؛ رفتاری که تا حدی به حل مسئلهٔ انسانی شباهت دارد و برای وظایف چندمرحلهای مفید است. دوم، reasoning را شفافتر و تفسیرپذیرتر میکند، زیرا همهٔ مراحل قابل مشاهدهاند. سوم، وقتی کاربر بتواند منطق مسیر استدلال را دنبال کند، احتمال اعتماد او به پیشبینی مدل بیشتر میشود؛ موضوعی مهم در حوزههایی مانند پزشکی، آموزش و finance. چهارم، CoT نوعی in-context learning است و روی بسیاری از LLMهای آماده و خوبآموزشدیده قابل اجراست. همچنین راه کارآمدی برای سازگارکردن مدل با انواع مسئله فراهم میکند و با کاوش مسیرهای reasoning جایگزین میتواند راهحلهای خلاقانهتری ایجاد کند.
روش فوق که یک یا چند نمونهٔ reasoning در prompt میگذارد، معمولاً few-shot CoT نام دارد. در مقابل، zero-shot CoT به نمونه نیاز ندارد و با دستور مشخص، LLM را به reasoning گامبهگام هدایت میکند:
Q: میانگین اعداد 2، 4 و 9 را محاسبه کن.
A: بیایید گامبهگام فکر کنیم.
سه عدد داریم: 2، 4 و 9. مجموع آنها 15 است. تعداد اعداد سه است.
میانگین با تقسیم مجموع بر تعداد به دست میآید: 15/3=5. پس پاسخ 5 است.
دستور «بیایید گامبهگام فکر کنیم» مدل را به تولید reasoning مفصل سوق میدهد. Kojima et al. [2022] اشاره کردند چنین promptingی گاهی فقط مراحل reasoning را میسازد و conclusion روشنی نمیدهد. در این حالت میتوان دور دوم prompting را برای استخراج answer از مراحل reasoning به کار برد. آنها prompt دوم را با ترکیب input و output دور اول میسازند تا LLM reasoning را ادامه داده و answer صحیح را تولید کند. دستورهای دیگری مانند «بیایید منطقی فکر کنیم» و «لطفاً ابتدا مراحل فکرکردنت را نشان بده» نیز قابل استفادهاند.
CoT محدود به algebraic reasoning نیست و در mathematical reasoning، logical reasoning، commonsense reasoning، symbolic reasoning، code generation و مسائل دیگر به کار میرود.
شکل ۳.۱ — نمونههای CoT در چهار وظیفهٔ reasoning: CSQA، StrategyQA، زبانهای Dyck و Last Letter Concatenation. در CSQA، reasoning گزینهٔ نیازمند کابل و ویژگی فرد مستعد بیماری را بررسی میکند؛ در StrategyQA توضیح میدهد چرا hamster غذای شکارچیان است و چرا Microsoft Office بدون اینترنت نیز قابل استفاده است؛ در Dyck language از stack برای بستن درست پرانتزها استفاده میشود؛ و در Last Letter Concatenation آخرین حرف واژهها استخراج و به هم چسبانده میشود. در نسخهٔ اصلی، بخشهای CoT با رنگ سبز مشخص شدهاند.
CoT اکنون از فعالترین حوزههای prompt engineering است. این روش فقط عملکرد prompting را بهبود نداده، بلکه مسیر مجموعهای از روشها برای مطالعه و راستیآزمایی توان reasoning در LLMها را باز کرده است. میتوان reasoning را به مسئلهٔ search روی مسیرهای ممکن در نظر گرفت که هر مسیر چند state میانی یا reasoning step دارد. معمولاً میخواهیم search space هم خوب تعریف شده و هم بهاندازهٔ کافی بزرگ باشد تا احتمال یافتن نتیجهٔ بهینه افزایش یابد. به همین دلیل پژوهشهای جدید به ساخت بازنماییهای بهتر برای reasoning میپردازند؛ از جمله ساختارهای tree-based [Yao et al., 2024] و graph-based [Besta et al., 2024]. چنین بازنماییهای فشردهای به LLM اجازه میدهند دامنهٔ گستردهتری از decision-making pathها را کاوش کند؛ مشابه System 2 thinking.
خط پژوهشی دیگری از تعامل چنددورهای با LLM استفاده میکند: تجزیهٔ مسئلهٔ پیچیده به sub-problem، راستیآزمایی و refinement خروجی، model ensembling و موارد مشابه. این روشها به CoT محدود نیستند و اغلب بهعنوان رویکردهای عمومی برای بهبود LLM به کار میروند، در حالی که CoT میتواند ابزاری برای آزمون قابلیت reasoning باشد.
CoT محدودیتهای عملی نیز دارد. در few-shot CoT به demonstrationهای reasoning دقیق و چندمرحلهای نیاز است که تولید دستی یا خودکار آنها دشوار است. همچنین روش استانداردی برای شکستن مسئلهٔ پیچیده به مراحل ساده وجود ندارد و این کار به تجربهٔ کاربر وابسته است. خطای مراحل میانی نیز میتواند نتیجهٔ نهایی را خراب کند. مرورهای جدید [Chu et al., 2023; Yu et al., 2023; Zhang et al., 2023a] مزایا و معایب CoT را با جزئیات بیشتری بررسی کردهاند.
۳.۲.۲ تجزیهٔ مسئله (Problem Decomposition)
LLM میتواند از شکستن مسئلهٔ پیچیده به وظایف حل مسئلهٔ سادهتر سود ببرد. این رویکرد نمونهای از پارادایم گستردهتر problem decomposition است که در روانشناسی و علوم کامپیوتر سابقهٔ طولانی دارد. از دید روانشناسی، complex problem-solving فرایندی است که با فعالیتهای رفتاری و/یا شناختی چندمرحلهای و استفاده از دانش، موانع میان وضعیت فعلی و وضعیت هدف را پشت سر میگذارد [Frensch and Funke, 2014]. معمولاً مسیر استاندارد و روشن واحدی برای حل مسئلهٔ پیچیده وجود ندارد، اما decomposition میتواند sub-problemها را با تلاش کمتر قابل مدیریت کند.
مثلاً برای نوشتن یک blog دربارهٔ خطرهای AI، دستور سادهٔ «لطفاً دربارهٔ خطرهای AI یک blog بنویس» ممکن است ساختار و سبک دلخواهی نداشته باشد. روش بهتر ارائهٔ outline و اطلاعات هر بخش است:
تو نویسندهٔ blog هستی. با outline زیر دربارهٔ خطرهای AI یک blog بنویس.
• مقدمه — AI، اهمیت آن و ضرورت شناخت خطرها برای جوانان.
• نگرانیهای حریم خصوصی — چگونگی بهخطر افتادن privacy در تعاملات آنلاین.
• اطلاعات نادرست — نقش AI در انتشار misinformation و اثر آن بر تصمیم جوانان.
• آزار سایبری — استفادهٔ ابزارهای AI در cyberbullying و اثر آن بر سلامت روان.
• نکتههای استفادهٔ ایمن — راهنمای استفادهٔ مسئولانه و تقویت تفکر انتقادی.
• نتیجهگیری — مرور نکات و تشویق به برخورد فعال با ethics هوش مصنوعی.
در این prompt عنوان و نکات اصلی هر بخش داده میشود و LLM میتواند وظیفهٔ نوشتن را با پرکردن محتوای این بخشها decomposition کند. ساختار میتواند توسط انسان یا حتی خود LLM تولید شود؛ یعنی ابتدا outline ساخته و سپس برای کاملکردن متن دنبال شود.
در علوم کامپیوتر، decomposition راهبردی رایج در طراحی نرمافزار و سختافزار است. نمونهٔ شناختهشده divide-and-conquer است که مسئلهٔ محاسباتی را به مسائل سادهتر تبدیل میکند. فرض کنید میخواهیم تعیین کنیم یک document دربارهٔ خطرهای AI صحبت میکند یا نه:
یک متن در اختیار تو قرار میگیرد. مشخص کن آیا دربارهٔ خطرهای AI صحبت میکند یا نه.
{∗document∗}
اگر document بلند باشد هزینهٔ computation زیاد است. میتوان آن را به segmentهای کوتاه تقسیم و همان task را روی هر segment، حتی بهصورت parallel، اجرا کرد. سپس relevancy هر segment به موضوع خطرهای AI را میگیریم و با prompt دیگری نتیجهٔ نهایی را میسازیم:
وظیفهٔ تو تعیین این است که آیا متن دربارهٔ خطرهای AI است. متن به segmentها تقسیم شده و relevancy هر segment مشخص شده است. با توجه به این اطلاعات نتیجهٔ نهایی را بده.
Segment 1: {∗relevancy-to-the-topic1∗}
Segment 2: {∗relevancy-to-the-topic2∗}
Segment 3: {∗relevancy-to-the-topic3∗}
...
در reasoning پیچیده سه روش کلی وجود دارد: ۱) LLM مستقیماً conclusion را پیشبینی کند و reasoning پنهان و تفسیرناپذیر باشد؛ ۲) مدل در یک اجرای واحد، مانند CoT، مسیر reasoning چندمرحلهای را تولید کند؛ ۳) مسئلهٔ اصلی به چند sub-problem تقسیم شود و هر sub-problem در اجرای جداگانهٔ LLM یا توسط سامانهای دیگر حل شود. تمرکز این بخش روش سوم است.
چارچوب عمومی problem decomposition دو جزء دارد:
- Sub-problem Generation: تجزیهٔ مسئلهٔ ورودی به چند sub-problem.
- Sub-problem Solving: حل هر sub-problem و استخراج conclusionهای میانی و نهایی از طریق reasoning.
میتوان این دو را به شکلهای مختلف مدل کرد. در یک رویکرد دو مرحلهای، ابتدا همهٔ sub-problemها یکجا تولید میشوند و سپس بهترتیب یا در ترتیب دیگری حل میگردند. مثال blog همین است: گام نخست outline و گام دوم پرکردن بخشها؛ خروجی نهایی ترکیب نتایج sub-problemهاست. این روش ساده است اما compositional بودن مسئله را فرض میکند و برای نوشتن و code generation مناسبتر است.
در بسیاری از مسائل واقعی، مسیر reasoning ثابت نیست، برای مسئلههای مختلف تغییر میکند و هر گام به نتیجهٔ گامهای قبلی وابسته است. بنابراین تولید ثابت همهٔ sub-problemها از پیش مطلوب نیست. بهتر است sub-problemها بر اساس input بهصورت dynamic و حتی حین reasoning تولید شوند. در حالت ایدهآل سامانهٔ generation و solving بهطور joint طراحی میشوند، اما در عمل معمولاً مدلهای جداگانه استفاده میشوند. یک راه ساده این است که LLM با prompting یا tuning برای هر دو وظیفه سازگار شود.
روش least-to-most prompting [Zhou et al., 2023b] از همین ایده میآید و برای مسئلههای reasoning دشوار مناسب است که با تعمیم چند مثال ساده حل نمیشوند. راهبرد مؤثرتر، دنبالکردن توالی پیشروندهای از sub-problemهاست که به conclusion منتهی میشوند. تولید sub-problem با instruction و/یا demonstration انجام میشود. نمونهٔ 2-shot:
وظیفه: مسئله را به چند sub-problem تجزیه کن. چند مثال ارائه میشود.
DEMO 1 — در یک جامعه 5% نوزاد، 15% کودک، 40% بزرگسال و 40% سالمند هستند. کدام گروه بزرگترین سهم را دارد؟
برای پاسخ باید بدانیم: درصد نوزادان، کودکان، بزرگسالان و سالمندان چقدر است؟
DEMO 2 — Alice دو برابر Bob مهره دارد و Bob پنج برابر Charlie. اگر Charlie شش مهره دارد، مجموع مهرهها چقدر است؟
برای پاسخ باید بدانیم: Bob چند مهره دارد؟ Alice چند مهره دارد؟
USER — مطالعهای محیطزیستی از 2015 تا 2020 نشان داد میانگین دما 2.3 درجه افزایش یافته است. مدت مطالعه چقدر بود؟
برای پاسخ باید بدانیم: مطالعه چه زمانی آغاز شد؟ چه زمانی پایان یافت؟
LLM از نمونهها دو sub-problem برای سؤال جدید تولید میکند. سپس آنها بهترتیب حل میشوند و هر QA pair قبلی در context مرحلهٔ بعد قرار میگیرد:
متن: مطالعه از 2015 تا 2020 انجام شد ...
SUB-PROB1 — Q: مطالعه چه زمانی آغاز شد؟
A: در 2015 آغاز شد.
SUB-PROB2 — Q: مطالعه چه زمانی پایان یافت؟
A: در 2020 پایان یافت.
در پایان با قرار دادن جواب همهٔ sub-problemها، مسئلهٔ اصلی حل میشود:
FINAL — Q: مدت مطالعهٔ محیطزیستی چقدر بود؟
A: مدت مطالعه 5 سال بود.
Least-to-most رویکرد پایهای برای جداکردن generation و solving است. میتوان بدون تغییر framework تکنیکهای پیشرفتهای مانند CoT را به هر مرحله افزود تا reasoning بهتر شود. راه دیگر، بهبود decomposition و سازماندهی مسیر حل است.
مسئلهٔ ورودی را با p₀ و sub-problemها را با {p₁,...,pₙ} نشان میدهیم. در least-to-most:
{p₁,...,pₙ} = G(p₀) (3.2)
G(·) تابع تولید sub-problem است. سپس sub-problemها بهترتیب حل و جوابهای {a₁,...,aₙ} تولید میشوند. برای sub-problem شمارهٔ i، مسئلهٔ اصلی و همهٔ problem-answer pairهای قبلی در context قرار میگیرند:
a_i = S_i(p_i, {p₀, p_{<i}, a_{<i}}) (3.3)
که p_{<i}={p₁,...,p_{i−1}} و a_{<i}={a₁,...,a_{i−1}} است. جواب مسئلهٔ اصلی نیز:
a₀ = S₀(p₀, {p_{≤n}, a_{≤n}}) (3.4)
یک بهبود این است که بهجای تولید همهٔ sub-problemها در یک مرحله، آنها را حین problem-solving و بر اساس history تولید کنیم [Dua et al., 2022]:
p_i = G_i(p₀, {p_{<i}, a_{<i}}) (3.5)
در هر گام ابتدا sub-problem با استفاده از مسئلهٔ اصلی و history تولید میشود، سپس همان یا LLM دیگری answer را با همان context میسازد. این روش ظرفیت reasoning را افزایش میدهد، زیرا مسیر از پیش ثابت نیست و مدل میتواند در حین حل، strategy را انتخاب و سازگار کند.
بهبود دیگر ساخت sub-problem solverهای بهتر است. S_i(·) مجبور نیست فقط LLM باشد؛ میتواند IR system را فراخوانی کند تا دادهٔ بیشتری در دسترس قرار گیرد یا calculator باشد تا محاسبهٔ ریاضی دقیق انجام شود. اگر p_i خود پیچیده باشد، میتوان آن را دوباره به sub-problemهای کوچکتر شکست و S_i(·) را به صورت recursive program تعریف کرد. در نتیجه ساختار hierarchical برای problem-solving شکل میگیرد [Khot et al., 2023].
با تعمیم بیشتر میتوان این formulation را مسئلهٔ reinforcement learning دانست: فرایند حل به decision-making process تبدیل میشود و در هر state عملی انتخاب میگردد. actionها میتوانند همهٔ توابع تولید و حل sub-problem یعنی G_i(·) و S_i(·) را شامل شوند؛ بنابراین action sequence همان مسیر حل مسئله است. توصیف دقیق reinforcement learning خارج از محدودهٔ این فصل است، اما ساخت agent یا controller برای تصمیمگیری دربارهٔ زمان و شیوهٔ تولید/حل sub-problem انتخاب طبیعیای است.
در NLP، problem decomposition با پژوهشهای multi-hop question answering مرتبط است [Mavi et al., 2024]. این وظیفه برای پاسخ به سؤال پیچیده باید اطلاعات چند قطعهٔ متن را گردآوری و ترکیب کند. برای مثال، برای پاسخ به «پایتخت کشوری که Albert Einstein در آن متولد شد چیست؟» باید ابتدا «Einstein کجا متولد شد؟» و سپس «پایتخت Germany چیست؟» پاسخ داده شود. کارهای قدیمیتر نیز question generatorهای neural برای ساخت سؤالهای سادهتر بهصورت batch یا sequential بررسی کردهاند [Andreas et al., 2016; Talmor and Berant, 2018; Min et al., 2019].
بهطور گستردهتر، decomposition با مسئلهٔ compositionality در NLP ارتباط دارد [Drozdov et al., 2022; Press et al., 2023]. در semantic parsing، جملهٔ زبان طبیعی با شکستن به constituentها و ترکیب معنای آنها به meaning representation ساختاری نگاشت میشود. در پژوهشهای جدید LLM، compositional reasoning و benchmarkهایی مانند SCAN برای آزمون language understanding و reasoning اهمیت دارند. SCAN توان compositional generalization را میسنجد؛ مثلاً دستور “jump opposite left and walk thrice” به دنبالهٔ عمل “LTURN LTURN JUMP WALK WALK WALK” تبدیل میشود [Lake and Baroni, 2018].
کاربرد جالب دیگر decomposition در LLMها tool use است. گاهی لازم است ابزار خارجی برای دسترسی به دادهٔ دقیق و خارج از training یا fine-tuning، مانند weather، قیمت بازار یا news feed، با LLM یکپارچه شود. prediction مدل میتواند markerهایی برای تعیین محل و شیوهٔ فراخوانی API داشته باشد. در این حالت مسئله به sub-problemهایی تقسیم میشود که برخی را LLM و برخی را ابزار خارجی حل میکند. بخش ۳.۲.۵ این موضوع را دقیقتر بررسی میکند.