Використання Chain of Thought (CoT) промптингу може підвищити точність великих мовних моделей (LLM) на задачах, що вимагають дедуктивного мислення, на 15-30% в залежності від складності.
Контекст і проблема
LLM, такі як GPT-4, Claude 3 Opus та Gemini 1.5 Pro, часто показують обмежену здатність до вирішення задач, що вимагають багатоетапного міркування, наприклад, математичні задачі, логічні головоломки або складний аналіз даних. Без спеціальних технік промптингу, LLM схильні до галюцинацій та неточних відповідей, особливо коли потрібне обґрунтування. Аналіз результатів на датасеті GSM8K (математичні задачі) показав, що стандартні LLM без CoT досягають точності близько 30%, тоді як моделі з CoT можуть досягати 70-80%.
Практична реалізація
Chain of Thought промптинг полягає у тому, щоб навчити LLM мислити вголос, надаючи приклади розв’язання задач з детальним описом кожного кроку. Це змушує модель імітувати процес мислення, що призводить до більш обґрунтованих та точних відповідей. Метод CoT може бути реалізований двома способами: Few-shot CoT (надання кількох прикладів у промпті) та Zero-shot CoT (просте додавання фрази “Let’s think step by step” до промпту).
# Few-shot CoT приклад (Python)
prompt = """
Задача: Роджер має 5 тенісних м'ячів. Він купує ще 2 банки тенісних м'ячів, кожна з яких містить 3 м'ячі. Скільки тенісних м'ячів має Роджер тепер?
Розв'язання: Роджер починає з 5 м'ячів. Він купує 2 банки * 3 м'ячі/банку = 6 м'ячів. Отже, Роджер має 5 + 6 = 11 м'ячів.
Відповідь: 11
Задача: У кафе було 23 яблука. Вони використали 20 яблук для приготування пирогів. Потім вони купили ще 6 яблук. Скільки яблук у них зараз?
Розв'язання: Кафе починає з 23 яблук. Вони використовують 20 яблук, що залишає 23 - 20 = 3 яблука. Потім вони купують 6 яблук, що дає їм 3 + 6 = 9 яблук.
Відповідь: 9
Задача: {task}
Розв'язання:
"""
task = "У пекарні було 36 тістечок. Вони продали 12 тістечок вранці та 15 тістечок вдень. Скільки тістечок залишилося?"
final_prompt = prompt.format(task=task)
# Використання LLM API (приклад з OpenAI)
import openai
openai.api_key = "YOUR_OPENAI_API_KEY"
response = openai.Completion.create(
engine="text-davinci-003", # Або інша модель
prompt=final_prompt,
max_tokens=100,
n=1,
stop=None,
temperature=0.0, # Важливо: низька температура для більш детермінованих результатів
)
print(response.choices[0].text.strip())
# Zero-shot CoT приклад
prompt_zero_shot = f"{task}\nLet's think step by step."
response_zero_shot = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt_zero_shot,
max_tokens=100,
n=1,
stop=None,
temperature=0.0,
)
print(response_zero_shot.choices[0].text.strip())
Приклад показує, як спочатку надаються два приклади задач з повним розв’язанням, а потім ставиться запитання, яке потрібно розв’язати. LLM намагається імітувати структуру та стиль наданих прикладів. Zero-shot CoT потребує менше прикладів, але може бути менш ефективним для складних задач.
Типові помилки
- Надмірне ускладнення прикладів: Занадто складні приклади можуть заплутати модель, що призводить до неточних відповідей. Приклади повинні бути чіткими та зрозумілими, з акцентом на основні кроки.
- Недостатньо деталей у розв’язаннях: Якщо розв’язання не містять достатньо інформації про логіку міркувань, модель може не зрозуміти, як правильно вирішувати задачу.
- Використання невідповідних моделей: Деякі моделі, особливо старіші версії, можуть не підтримувати CoT промптинг ефективно. Рекомендується використовувати сучасні LLM, такі як GPT-4, Claude 3 Opus або Gemini 1.5 Pro.
Результат
Впровадження CoT промптингу на датасеті GSM8K підвищило точність GPT-3.5 від 30% до 65%, а GPT-4 досяг 85%. Використання Zero-shot CoT з GPT-4 скоротило час, необхідний для розв’язання складних задач, на 20% у порівнянні з прямим запитом.