Это скорее экспериментальный/исследовательский проект. Он реализует подсказку, в сочетании с оберткой для автоматических шагов, и ищет через «Пошаговое пространство» (например, поиск луча, MCT и т. Д.), руководствуясь самооценкой.
Некоторые из кодов передачи данных/экстракции ответов ( utils.py
и answer_extraction.py
) адаптированы из: https://github.com/agi-edgerunners/plan-and-solve-prompting
Ссылки на наборы данных:
@misc{cobbe2021training,
title={Training Verifiers to Solve Math Word Problems},
author={Karl Cobbe and Vineet Kosaraju and Mohammad Bavarian and Mark Chen and Heewoo Jun and Lukasz Kaiser and Matthias Plappert and Jerry Tworek and Jacob Hilton and Reiichiro Nakano and Christopher Hesse and John Schulman},
year={2021},
eprint={2110.14168},
archivePrefix={arXiv},
primaryClass={cs.LG}}
@inproceedings{patel-etal-2021-nlp,
title = "Are {NLP} Models really able to Solve Simple Math Word Problems?",
author = "Patel, Arkil and
Bhattamishra, Satwik and
Goyal, Navin",
booktitle = "Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies",
month = jun,
year = "2021",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2021.naacl-main.168",
doi = "10.18653/v1/2021.naacl-main.168",
pages = "2080--2094",
abstract = "The problem of designing NLP solvers for math word problems (MWP) has seen sustained research activity and steady gains in the test accuracy. Since existing solvers achieve high performance on the benchmark datasets for elementary level MWPs containing one-unknown arithmetic word problems, such problems are often considered {``}solved{''} with the bulk of research attention moving to more complex MWPs. In this paper, we restrict our attention to English MWPs taught in grades four and lower. We provide strong evidence that the existing MWP solvers rely on shallow heuristics to achieve high performance on the benchmark datasets. To this end, we show that MWP solvers that do not have access to the question asked in the MWP can still solve a large fraction of MWPs. Similarly, models that treat MWPs as bag-of-words can also achieve surprisingly high accuracy. Further, we introduce a challenge dataset, SVAMP, created by applying carefully chosen variations over examples sampled from existing datasets. The best accuracy achieved by state-of-the-art models is substantially lower on SVAMP, thus showing that much remains to be done even for the simplest of the MWPs.",
}
@inproceedings{ling-etal-2017-program,
title = "Program Induction by Rationale Generation: Learning to Solve and Explain Algebraic Word Problems",
author = "Ling, Wang and
Yogatama, Dani and
Dyer, Chris and
Blunsom, Phil",
booktitle = "Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)",
month = jul,
year = "2017",
address = "Vancouver, Canada",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/P17-1015",
doi = "10.18653/v1/P17-1015",
pages = "158--167",
abstract = "Solving algebraic word problems requires executing a series of arithmetic operations{---}a program{---}to obtain a final answer. However, since programs can be arbitrarily complicated, inducing them directly from question-answer pairs is a formidable challenge. To make this task more feasible, we solve these problems by generating answer rationales, sequences of natural language and human-readable mathematical expressions that derive the final answer through a series of small steps. Although rationales do not explicitly specify programs, they provide a scaffolding for their structure via intermediate milestones. To evaluate our approach, we have created a new 100,000-sample dataset of questions, answers and rationales. Experimental results show that indirect supervision of program learning via answer rationales is a promising strategy for inducing arithmetic programs.",}
@inproceedings{talmor-etal-2019-commonsenseqa,
title = "{C}ommonsense{QA}: A Question Answering Challenge Targeting Commonsense Knowledge",
author = "Talmor, Alon and
Herzig, Jonathan and
Lourie, Nicholas and
Berant, Jonathan",
booktitle = "Proceedings of the 2019 Conference of the North {A}merican Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers)",
month = jun,
year = "2019",
address = "Minneapolis, Minnesota",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/N19-1421",
doi = "10.18653/v1/N19-1421",
pages = "4149--4158",
abstract = "When answering a question, people often draw upon their rich world knowledge in addition to the particular context. Recent work has focused primarily on answering questions given some relevant document or context, and required very little general background. To investigate question answering with prior knowledge, we present CommonsenseQA: a challenging new dataset for commonsense question answering. To capture common sense beyond associations, we extract from ConceptNet (Speer et al., 2017) multiple target concepts that have the same semantic relation to a single source concept. Crowd-workers are asked to author multiple-choice questions that mention the source concept and discriminate in turn between each of the target concepts. This encourages workers to create questions with complex semantics that often require prior knowledge. We create 12,247 questions through this procedure and demonstrate the difficulty of our task with a large number of strong baselines. Our best baseline is based on BERT-large (Devlin et al., 2018) and obtains 56{%} accuracy, well below human performance, which is 89{%}.",
}
@article{geva-etal-2021-aristotle,
title = "Did Aristotle Use a Laptop? A Question Answering Benchmark with Implicit Reasoning Strategies",
author = "Geva, Mor and
Khashabi, Daniel and
Segal, Elad and
Khot, Tushar and
Roth, Dan and
Berant, Jonathan",
journal = "Transactions of the Association for Computational Linguistics",
volume = "9",
year = "2021",
address = "Cambridge, MA",
publisher = "MIT Press",
url = "https://aclanthology.org/2021.tacl-1.21",
doi = "10.1162/tacl_a_00370",
pages = "346--361",
abstract = "A key limitation in current datasets for multi-hop reasoning is that the required steps for answering the question are mentioned in it explicitly. In this work, we introduce StrategyQA, a question answering (QA) benchmark where the required reasoning steps are implicit in the question, and should be inferred using a strategy. A fundamental challenge in this setup is how to elicit such creative questions from crowdsourcing workers, while covering a broad range of potential strategies. We propose a data collection procedure that combines term-based priming to inspire annotators, careful control over the annotator population, and adversarial filtering for eliminating reasoning shortcuts. Moreover, we annotate each question with (1) a decomposition into reasoning steps for answering it, and (2) Wikipedia paragraphs that contain the answers to each step. Overall, StrategyQA includes 2,780 examples, each consisting of a strategy question, its decomposition, and evidence paragraphs. Analysis shows that questions in StrategyQA are short, topic-diverse, and cover a wide range of strategies. Empirically, we show that humans perform well (87{%}) on this task, while our best baseline reaches an accuracy of ∼ 66{%}.",
}
requirements.txt
(основными библиотеками Big 3 являются трансформаторы Huggingface, VLLM и Pytorch - остальные в основном являются зависимости.)База кода в основном настроена на работу с VLLM-совместимыми моделями.
model.py
(см. Конструктор класса генератора). Я использую локально загруженные пути контрольных точек, чтобы они не работали из коробки, если вы не загружаете контрольно -пропускные пункты в аналогичном пути или не измените путь.Если вы хотите добавить новую модель (VLLM совместимо) сделайте следующее:
argparser.py
для опции model
.prompt.py
(см. Примеры в конце файла кода) (необязательно; есть приглашение по умолчанию, но, вероятно, не будет оптимальным).model.py
(см. Конструктор класса генератора в этом файле для примеров).Это общий шаблон для выполнения кода:
python main.py --search_style=MultiSearch --model=LLAMA30_instruct --gpu_ids="0,1" --prompt_style=cot --dataset=gsm8k --reward_types=confidence+correctness
Это запустит Llama 30b инструктировать с помощью цепочки с нулевым выстрелом ( cot
), используя MultiSearch
(для объяснения ниже) в качестве стратегии поиска на GSM8K
с использованием функции вознаграждения ( confidence+correctness
-будет объяснена ниже) для руководства поиска Полем Веса модели будут распределены по CUDA: 0 и CUDA: 1 (данный gpu_ids="0,1"
).
Некоторые другие заметные аргументы:
checkpoint
- Установите это True, если вы загружаете некоторые ранее сохраненные контрольные точки (контрольные точки автоматически сохраняются)SC
- Установите это верно, чтобы обеспечить самосогласованность [1]. Только актуально, если search_style=none
. Доступные параметры для каждого аргумента и дефолтов можно найти в argparser.py
.
Вы найдете журналы выполнения в logs/
В этом проекте мы используем различные стратегии поиска на уровне шагов рассуждения (каждый шаг рассуждения считается «единственным шагом в игре»). Это также поднимает вопрос о том, как разложить поколение на серию шагов. Один из способов сделать это - создать любой произвольный шаблон быстрого приглашения с четкой структурой (который можно использовать для шагов анализа), а затем использовать несколько примеров выстрела с шаблоном, чтобы запустить модель, чтобы следовать структуре. Здесь, однако, я заинтересован в режиме с нулевым выстрелом. Я стараюсь использовать инструкции по запросу с нулевым выстрелом определенными способами, чтобы подстрекать различные формы автоматической декорации шагов. Ниже я обсуждаю все стили быстрого использования в этом проекте и их соответствующую методологию разложения.
Цепочка, хотя ( cot
)-это использует стандартную подсказку с нулевым выстрелом, Let's think step by step.
[2]. Для шага разложения n
(новая линия) используется. Есть некоторые дополнительные настройки для правильного игнорирования пустых новых линий и тому подобного. В конечном счете, это не обязательно идеальный способ разложить шаги рассуждений, не все новые линии в результатах кроватки будут полными шагами рассуждения, но это базовая отправная точка, которая может быть сделана с нулевым выстрелом.
Шаг в цепочке ( cot_step
)-это простое расширение с нулевым выстрелом: Let's think step by step. Step 1:
. Это автоматически использует языковую модель, чтобы организовать свою цепочку рассуждений пронумерованными шагами (Шаг 1: XYZ Step2: ABC ...). Эта структура может быть легко использована для разложения этапов.
PS+ ( ps
) - это план с нулевым выстрелом и решающий приглашение (версия PS+), введенная в [3]. Новая линейная разложение используется аналогично cot
.
Tabular Chain-Ofthts ( cot_tab
)-это подсказка таблицы с нулевым выстрелом, представленная в [4]- n|step|subquestion|process|result|n
. Это простой способ создать структурированные шаги рассуждения табличного формата. Мы снова используем Newline для разложения, но в отличие от декомпозиции Newline здесь более значимы, потому что каждый разлагаемый новый линий будет соответствовать шагу в таблице.
Struct ( struct
) - Эта подсказка использует элементы многих из вышеперечисленных подсказок. Он предоставляет подробные инструкции, чтобы разложить решение/ответ на шаги и рамки (с идентификацией подзадачи, соответствующими фактами и решением). Это дает высоко структурированные результаты и может быть разложено в соответствии со структурой, аналогичной cot
. Детали подсказки могут быть найдены в prompt.py
, а код разложения можно найти в node_transition.py
.
Struct minimal ( struct_min
) - он похож на struct с одним меньшим количеством подколов. Подробности в prompt.py
. Я не запускал этот вариант - могут быть ошибки.
Вы можете изменить prompt.py
, чтобы добавить несколько подсказок с выстрелом.
Все коды поиска можно найти в Search/
.
none
- этот метод не применяет какую -либо конкретную стратегию поиска, помимо стандартного авторегрессивного жадного декодирования. Это может быть объединено с SC=True
для самосогласованности с множественной выборкой.MultiSearch
- эта стратегия использует многопользовательскую. Затем вознаграждение для каждого образца (накопление вознаграждения для каждого разлагаемого шага) генерируются после факта. Награды используются для голосования ответов различными способами, которые будут описаны позже.MultiGreedy
- эта стратегия использует жадный поиск, но на уровне шагов (в отличие от none
). На каждой итерации, учитывая историю цепочки шагов рассуждений, модель генерирует некоторых кандидатов в следующий шаг. Каждый из K кандидатов затем оценивается (присваивается вознаграждение). Тогда выбран кандидат на максимальную оценку. Эта стратегия используется параллельно для нескольких образцов начальных шагов рассуждений, что приводит к нескольким результатам поиска, которые можно использовать для самосогласованности. Эта стратегия поиска может рассматриваться как похожая на DFS от Tree of Gonder [5], но без какого -либо возврата.BeamSearch
- Это версия поиска луча вышеупомянутого. Реализация вдохновлена [6]. Более того, этот метод можно рассматривать как аналогичный методу BFS (с усеченными границами), используемым в Tree of Gonder [5].DivBeamSearch
- это то же самое, что и поиск луча, но поощряет больше разнообразия в поколении, ограничивая братьев и сестер. В каждой итерации допускается максимум m (m << размер луча (я использую m = 2)). Если в размере луча есть место после выбора всех кандидатов после этого ограничения остаточных кандидатов, добавлены на основе их вознаграждений. Идея похожа по духу [7], но мы не строго изменяем уравнение оценки штрафом - но используем больше жесткого ограничения, как описано.MCTS
- это поиск дерева Монте -Карло. Реализация следует за структурой здесь примерно. Это требует некоторого вдохновения от [8].SPMCTS
- Эта реализация (полупараллельный поиск дерева Монте -Карло) параллелизирует MCT немного больше. Он выбирает несколько листьев одновременно и раскатывает несколько путей одновременно. Таким образом, это требует меньше последовательных итераций. Конечным результатом является одинаковое количество образцов, как и MCT. Однако реализации не являются вычислительными эквивалентами и не предназначены.Обратите внимание, что некоторые из методов вдохновлены предыдущей работой, они не пытаются быть совершенно верными реализациями этих работ.
Аналогично [6,8] вознаграждение за каждый шаг рассчитывается на основе самооценки и уверенности генерации шага (на основе logprobs). Метод самооценки использует LLMS для оценки своих собственных поколений, задавая вопросы с несколькими выборами (MCQ) о полезности/правильности шага (вопросы самооценки можно найти в rewards.py
).
Различные типы типов вознаграждений и комбо доступны в качестве аргументов в argparse.py
.
confidence
- только использует доверие (на основе logprobs) в качестве вознаграждения.correctness
- использует только вероятности ответа из MCQ, связанного с правильностью шага в качестве вознаграждения.helpfulness
- использует только вероятности ответа из MCQ, связанного с полезной полезностью, в качестве вознагражденияboth
- использует как correctness
, так и helpfulness
.confidence+correctness
- использует как confidence
, так и correctness
.confidence+helpfulness
- использует как confidence
, так и helpfulness
.confidence+both
- использует всю confidence
, correctness
и helpfulness
. NB: struct
быстрого стиля и struct-min
следуют различным правилам. У них есть мелкозернистая структура подсчетов и используют вознаграждения, подходящие для них. В подразделе идентификации подзарет используется только вознаграждение, связанное с полезностью (поскольку это технически не является шагом рассуждения, чтобы быть правильным/неправильным), а шаг решения использует только связанный с правильной задачей вопрос (потому что, по-видимому, полезность подпрозрачной. решение).
MCQ, используемые для разных подсказок и различных типов вознаграждений для самооценки, можно найти в reward.py
.
Несколько типов механизмов голосования ответов реализованы и автоматически отслеживаются одновременно в main.py
(не связаны с какими -либо опциями argparse.py
). Они есть:
Voted Answer
в журналах) - простое голосование большинства [1].Reward Voted Answer
в журналах) - аналогично голосованию большинства, но стоимость каждого голоса - это вознаграждение ( Top K Reward Voted Answer
в журналах) - выберите Top K (мы используем K = 5) самые высокие вознагражденные ответы, а затем примените вознаграждение. Это позволяет фильтровать потенциально «плохие» ответы с низким уровнем вознаграждения, которые потенциально могут добавлять голоса.Max Reward Answer
в журналах) - выберите ответ с максимальной наградой.node_transition.py
немного больше (особенно в вычислении вознаграждения), но не получил большую пользу в эмпирических временных затратах.none
(что в настоящее время является самым быстрым). Но это может потребовать изменения трансформаторов VLLM и HuggingFace.[1] Самоуравление улучшает цепочку мышления в языковых моделях
@inproceedings{
wang2023selfconsistency,
title={Self-Consistency Improves Chain of Thought Reasoning in Language Models},
author={Xuezhi Wang and Jason Wei and Dale Schuurmans and Quoc V Le and Ed H. Chi and Sharan Narang and Aakanksha Chowdhery and Denny Zhou},
booktitle={The Eleventh International Conference on Learning Representations },
year={2023},
url={https://openreview.net/forum?id=1PL1NIMMrw}
}
[2] Большие языковые модели-это не выстрелы.
@inproceedings{NEURIPS2022_8bb0d291,
author = {Kojima, Takeshi and Gu, Shixiang (Shane) and Reid, Machel and Matsuo, Yutaka and Iwasawa, Yusuke},
booktitle = {Advances in Neural Information Processing Systems},
editor = {S. Koyejo and S. Mohamed and A. Agarwal and D. Belgrave and K. Cho and A. Oh},
pages = {22199--22213},
publisher = {Curran Associates, Inc.},
title = {Large Language Models are Zero-Shot Reasoners},
url = {https://proceedings.neurips.cc/paper_files/paper/2022/file/8bb0d291acd4acf06ef112099c16f326-Paper-Conference.pdf},
volume = {35},
year = {2022}
}
[3] Подсказка о плане и сфере: улучшение цепочки с нулевым выстрелом в цепочке мышления с помощью крупных языковых моделей
@inproceedings{wang-etal-2023-plan,
title = "Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models",
author = "Wang, Lei and
Xu, Wanyu and
Lan, Yihuai and
Hu, Zhiqiang and
Lan, Yunshi and
Lee, Roy Ka-Wei and
Lim, Ee-Peng",
booktitle = "Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)",
month = jul,
year = "2023",
address = "Toronto, Canada",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.acl-long.147",
pages = "2609--2634",
abstract = "Large language models (LLMs) have recently been shown to deliver impressive performance in various NLP tasks. To tackle multi-step reasoning tasks, Few-shot chain-of-thought (CoT) prompting includes a few manually crafted step-by-step reasoning demonstrations which enable LLMs to explicitly generate reasoning steps and improve their reasoning task accuracy. To eliminate the manual efforts, Zero-shot-CoT concatenates the target problem statement with {``}textit{Let{'}s think step by step}{''} as an input prompt to LLMs. Despite the success of Zero-shot-CoT, it still suffers from three pitfalls: calculation errors, missing-step errors, and semantic misunderstanding errors. To address the missing-step errors, we propose Plan-and-Solve (PS) Prompting. It consists of two components: first, devising a plan to divide the entire task into smaller subtasks, and then carrying out the subtasks according to the plan. To address the calculation errors and improve the quality of generated reasoning steps, we extend PS prompting with more detailed instructions and derive PS+ prompting. We evaluate our proposed prompting strategy on ten datasets across three reasoning problems. The experimental results over GPT-3 show that our proposed zero-shot prompting consistently outperforms Zero-shot-CoT across all datasets by a large margin, is comparable to or exceeds Zero-shot-Program-of-Thought Prompting, and has comparable performance with 8-shot CoT prompting on the math reasoning problem. The code can be found at https://github.com/AGI-Edgerunners/Plan-and-Solve-Prompting.",
}
[4] Tab-Cot: с нулевым выстрелом табличная цепь мышления
@inproceedings{ziqi-lu-2023-tab,
title = "Tab-{C}o{T}: Zero-shot Tabular Chain of Thought",
author = "Ziqi, Jin and
Lu, Wei",
booktitle = "Findings of the Association for Computational Linguistics: ACL 2023",
month = jul,
year = "2023",
address = "Toronto, Canada",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.findings-acl.651",
pages = "10259--10277",
abstract = "The chain-of-though (CoT) prompting methods were successful in various natural language processing (NLP) tasks thanks to their ability to unveil the underlying complex reasoning processes.Such reasoning processes typically exhibit highly structured steps.Recent efforts also started investigating methods to encourage more structured reasoning procedures to be captured (cite least to most).In this work, we propose Tab-CoT, a novel tabular-format CoT prompting method, which allows the complex reasoning process to be explicitly modeled in a highly structured manner.Despite its simplicity, we show that our approach is capable of performing reasoning across multiple dimensions (i.e., both rows and columns).We demonstrate our approach{'}s strong zero-shot and few-shot capabilities through extensive experiments on a range of reasoning tasks.",
}
[5] Дерево мыслей: преднамеренное решение проблем с большими языковыми моделями
@misc{yao2023tree,
title={Tree of Thoughts: Deliberate Problem Solving with Large Language Models},
author={Shunyu Yao and Dian Yu and Jeffrey Zhao and Izhak Shafran and Thomas L. Griffiths and Yuan Cao and Karthik Narasimhan},
year={2023},
eprint={2305.10601},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
[6] разложение усиливает рассуждения посредством самооценки управления декодированием
@misc{xie2023decomposition,
title={Decomposition Enhances Reasoning via Self-Evaluation Guided Decoding},
author={Yuxi Xie and Kenji Kawaguchi and Yiran Zhao and Xu Zhao and Min-Yen Kan and Junxian He and Qizhe Xie},
year={2023},
eprint={2305.00633},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
[7] Простой, быстро разнообразный алгоритм декодирования для нейронного поколения
@misc{li2016simple,
title={A Simple, Fast Diverse Decoding Algorithm for Neural Generation},
author={Jiwei Li and Will Monroe and Dan Jurafsky},
year={2016},
eprint={1611.08562},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
[8] Рассуждение с языковой моделью планирует с мировой моделью
@misc{hao2023reasoning,
title={Reasoning with Language Model is Planning with World Model},
author={Shibo Hao and Yi Gu and Haodi Ma and Joshua Jiahua Hong and Zhen Wang and Daisy Zhe Wang and Zhiting Hu},
year={2023},
eprint={2305.14992},
archivePrefix={arXiv},
primaryClass={cs.CL}
}