Ini lebih merupakan proyek eksperimental/penelitian. Ini mengimplementasikan pipa yang diminta dikombinasikan dengan pembungkus untuk langkah-langkah penguraian otomatis dan mencari melalui "ruang langkah" (mis. Dengan pencarian balok, MCTS, dll.) Dipandu oleh evaluasi diri.
Beberapa kode Ekstraksi/Jawaban-Jawaban ( utils.py
dan answer_extraction.py
) diadaptasi dari: https://github.com/agi-edgerunners/plan-and-solve-pomptting
Dataset Referensi:
@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
(Perpustakaan Big 3 utama adalah Huggingface Transformers, VLLM, dan Pytorch - sisanya sebagian besar dependensi.)Basis kode terutama diatur untuk bekerja dengan model yang kompatibel dengan VLLM.
model.py
(lihat Konstruktor Kelas Generator). Saya menggunakan jalur pos pemeriksaan yang diunduh secara lokal sehingga tidak akan berhasil di luar kotak kecuali Anda mengunduh pos pemeriksaan di jalur yang sama atau mengubah jalur.Jika Anda ingin menambahkan model baru (kompatibel VLLM), lakukan hal berikut:
argparser.py
untuk opsi model
.prompt.py
(lihat contoh di akhir file kode) (opsional; ada prompt default tetapi mungkin tidak akan optimal).model.py
(lihat konstruktor kelas generator dalam file tersebut untuk contoh).Ini templat umum untuk eksekusi kode:
python main.py --search_style=MultiSearch --model=LLAMA30_instruct --gpu_ids="0,1" --prompt_style=cot --dataset=gsm8k --reward_types=confidence+correctness
Ini akan menjalankan instruksi llama 30b dengan nol-shot rantai-pemikiran ( cot
) prompt menggunakan MultiSearch
(untuk dijelaskan di bawah) sebagai strategi pencarian pada GSM8K
menggunakan fungsi hadiah ( confidence+correctness
-untuk dijelaskan di bawah) untuk panduan pencarian . Bobot model akan didistribusikan ke CUDA: 0 dan CUDA: 1 (diberikan gpu_ids="0,1"
).
Beberapa argumen menonjol lainnya:
checkpoint
- Atur Benar Jika Anda memuat beberapa pos pemeriksaan yang disimpan sebelumnya (pos pemeriksaan secara otomatis disimpan)SC
- Tetapkan itu benar untuk memungkinkan konsistensi diri [1]. Hanya relevan jika search_style=none
. Opsi yang tersedia untuk setiap argumen dan default dapat ditemukan di argparser.py
.
Anda akan menemukan log eksekusi di logs/
Dalam proyek ini, kami menggunakan berbagai strategi pencarian di tingkat langkah penalaran (setiap langkah penalaran dianggap sebagai "satu langkah dalam permainan"). Ini juga menimbulkan pertanyaan tentang bagaimana menguraikan generasi menjadi serangkaian langkah. Salah satu cara untuk melakukannya adalah dengan membuat templat prompt sewenang -wenang dengan struktur yang jelas (yang dapat digunakan untuk langkah penguraian) dan kemudian menggunakan beberapa contoh bidikan dengan templat untuk membuat model untuk mengikuti struktur. Namun, di sini, saya tertarik dengan rezim zero-shot. Saya mencoba menggunakan instruksi prompt nol-shot dengan cara tertentu untuk menghasut berbagai bentuk dekomposisi langkah-langkah otomatis. Di bawah ini, saya membahas semua gaya cepat yang digunakan dalam proyek ini dan metodologi dekomposisi yang sesuai.
Chain-of-Thoughts ( cot
)-Ini menggunakan cot cot nol-shot standar Let's think step by step.
[2]. Untuk langkah dekomposisi n
(baris baru) digunakan. Ada beberapa pengaturan tambahan untuk mengabaikan jalur baru yang kosong dan semacamnya. Pada akhirnya, ini belum tentu merupakan cara yang ideal untuk menguraikan langkah-langkah penalaran, tidak semua baris baru dalam hasil COT akan menjadi langkah penalaran lengkap tetapi ini adalah titik awal awal yang dapat dilakukan dengan cara nol-shot.
Langkah Rantai-Pikiran ( cot_step
)-Ini adalah ekstensi sederhana dari cot nol-shot: Let's think step by step. Step 1:
. Ini secara otomatis memberikan model bahasa untuk mengatur rantai penalaran dalam langkah -langkah bernomor (Langkah1: XYZ Step2: ABC ...). Struktur ini kemudian dapat dengan mudah digunakan untuk mengurai langkah.
PS+ ( ps
) - Ini adalah rencana zero -shot dan menyelesaikan prompt (versi PS+) yang diperkenalkan dalam [3]. Dekomposisi garis baru digunakan mirip dengan cot
.
Tabular Chain-of-Thoughts ( cot_tab
)-Ini adalah cot tabular nol-shot yang diperkenalkan dalam [4]- n|step|subquestion|process|result|n
. Ini adalah cara sederhana untuk menghasilkan langkah -langkah penalaran format tabular terstruktur. Kami menggunakan Newline untuk dekomposisi lagi tetapi tidak seperti sebelum dekomposisi garis baru lebih bermakna di sini - karena setiap garis baru yang terurai akan sesuai dengan langkah dalam tabel.
Struct ( struct
) - Prompt ini menggunakan elemen dari banyak prompt di atas. Ini memberikan instruksi terperinci untuk menguraikan solusi/jawaban menjadi langkah -langkah dan substep (dengan identifikasi subproblem, fakta yang relevan, dan solusi). Ini menghasilkan hasil yang sangat terstruktur dan dapat didekomposisi sesuai dengan struktur yang mirip dengan cot
. Rincian prompt dapat ditemukan di prompt.py
dan kode dekomposisi dapat ditemukan di node_transition.py
.
Struct minimal ( struct_min
) - Ini mirip dengan struct dengan satu lebih sedikit substep. Detail dalam prompt.py
. Saya belum menjalankan varian ini - mungkin ada bug.
Anda dapat memodifikasi prompt.py
untuk menambahkan beberapa prompt bidikan.
Semua kode pencarian dapat ditemukan di Search/
.
none
- Metode ini tidak menerapkan strategi pencarian tertentu selain decoding autoregressive serakah standar. Ini dapat dikombinasikan dengan SC=True
untuk konsistensi diri dengan beberapa pengambilan sampel.MultiSearch
- Strategi ini menggunakan multi -sampling. Kemudian imbalan untuk setiap sampel (hadiah akumulatif untuk setiap langkah yang terurai) dihasilkan setelah fakta. Hadiah digunakan untuk memilih jawaban dengan berbagai cara untuk dijelaskan nanti.MultiGreedy
- Strategi ini menggunakan pencarian serakah tetapi pada tingkat langkah (tidak seperti none
). Di setiap iterasi, mengingat rantai sejarah langkah -langkah penalaran, model ini menghasilkan beberapa kandidat langkah penalaran berikutnya. Masing -masing kandidat K kemudian dicetak (diberi hadiah). Maka kandidat skor maksimum dipilih. Strategi ini digunakan secara paralel untuk beberapa sampel langkah-langkah penalaran awal yang mengarah ke beberapa hasil pencarian yang dapat digunakan untuk konsistensi diri. Strategi pencarian ini dapat dianggap mirip dengan DFS dari Tree of Thought [5] tetapi tanpa backtracking.BeamSearch
- Ini adalah versi pencarian balok di atas. Implementasinya terinspirasi oleh [6]. Selain itu, metode ini dapat dianggap mirip dengan metode BFS (dengan perbatasan terpotong) yang digunakan dalam Tree of Thought [5].DivBeamSearch
- Ini sama dengan pencarian balok tetapi mendorong lebih banyak keragaman dalam generasi dengan membatasi saudara kandung. Dalam setiap iterasi maksimum m (m << ukuran balok (saya menggunakan m = 2)) saudara kandung diizinkan. Jika ada ruang dalam ukuran balok setelah memilih semua kandidat setelah ini membatasi kandidat residu ditambahkan berdasarkan imbalannya. Idenya serupa dalam semangat dengan [7] tetapi kami tidak secara ketat memodifikasi persamaan penilaian dengan penalti - tetapi menggunakan lebih banyak kendala keras seperti yang dijelaskan.MCTS
- Ini adalah pencarian pohon Monte Carlo. Implementasi mengikuti struktur di sini secara kasar. Dibutuhkan inspirasi dari [8].SPMCTS
- Implementasi ini (Pencarian Pohon Monte Carlo semi -paralel) memparalelkan MCT sedikit lebih banyak. Ini memilih beberapa daun sekaligus dan meluncurkan beberapa jalur sekaligus. Dengan demikian, dibutuhkan iterasi berurutan lebih sedikit. Hasil akhirnya adalah jumlah sampel yang sama dengan MCT. Implementasi tidak setara secara komputasi namun dan tidak dimaksudkan.Catatan Sementara beberapa metode terinspirasi oleh pekerjaan sebelumnya, mereka tidak berusaha untuk menjadi implementasi yang setia dari makalah -makalah tersebut.
Mirip dengan [6,8] hadiah untuk setiap langkah dihitung berdasarkan evaluasi diri dan kepercayaan generasi langkah (berdasarkan logProbs). Teknik evaluasi diri menggunakan LLMS untuk mengevaluasi generasi sendiri dengan mengajukan pertanyaan multi-pilihan (MCQ) tentang bantuan/kebenaran langkah (pertanyaan evaluasi diri dapat ditemukan dalam rewards.py
).
Berbagai jenis jenis hadiah dan kombo tersedia sebagai argumen di argparse.py
.
confidence
- Hanya menggunakan kepercayaan diri (berdasarkan logProbs) sebagai hadiah.correctness
- hanya menggunakan probabilitas jawaban dari langkah yang terkait dengan kebenaran MCQ sebagai hadiah.helpfulness
- Hanya menggunakan probabilitas jawaban dari langkah MCQ terkait bantuan sebagai hadiah sebagai hadiahboth
- menggunakan correctness
dan helpfulness
.confidence+correctness
- menggunakan confidence
dan correctness
.confidence+helpfulness
- Menggunakan confidence
dan helpfulness
.confidence+both
- menggunakan semua confidence
, correctness
, dan helpfulness
. NB: Prompt Styles struct
dan struct-min
mengikuti aturan yang berbeda. Mereka memiliki struktur substep berbutir halus dan menggunakan imbalan yang sesuai untuk itu. Identifikasi Subproblem Substep hanya menggunakan hadiah terkait bantuan (karena secara teknis bukan langkah penalaran untuk benar/salah) dan langkah solusi hanya menggunakan pertanyaan terkait kebenaran (karena mungkin, bantuan subproblem akan berkorelasi dengan bantuan dari soal solusinya).
Marka yang digunakan untuk petunjuk yang berbeda dan jenis hadiah yang berbeda untuk evaluasi diri dapat ditemukan di reward.py
.
Beberapa jenis mekanisme pemungutan suara jawaban diimplementasikan dan secara otomatis dilacak secara bersamaan di main.py
(tidak terkait dengan opsi argparse.py
apa pun). Mereka adalah:
Voted Answer
dalam log) - Hanya pemungutan suara mayoritas sederhana [1].Reward Voted Answer
dalam Log) - Mirip dengan pemungutan suara mayoritas, tetapi nilai setiap suara adalah hadiah ( Top K Reward Voted Answer
dalam Log) - Pilih Top K (Kami menggunakan K = 5) Jawaban Hadiah Tertinggi kemudian menerapkan pemungutan suara Hadiah di antara mereka. Ini memungkinkan penyaringan yang berpotensi "buruk" jawaban hadiah rendah yang berpotensi menambah suara.Max Reward Answer
dalam Log) - Pilih jawaban dengan hadiah maksimum.node_transition.py
sedikit lebih (terutama perhitungan hadiah) tetapi tidak mendapatkan banyak manfaat dalam biaya waktu empiris.none
(yang saat ini tercepat). Tetapi ini mungkin memerlukan modifikasi VLLM dan transformator huggingface.[1] Konsistensi diri meningkatkan penalaran rantai pemikiran dalam model bahasa
@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] Model Bahasa Besar adalah Nol-Shot Reasoners
@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] PROMEDS PENGETAHUAN: MENINGKATKAN PENGUNGKAPAN Rantai Nol-Shot oleh Model Bahasa Besar
@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: Rantai pemikiran Tabular Zero-Shot
@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] Pohon Pikiran: Pemecahan masalah yang disengaja dengan model bahasa besar
@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] Dekomposisi meningkatkan penalaran melalui decoding yang dipandu evaluasi diri
@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] Algoritma decoding yang sederhana dan beragam untuk generasi saraf
@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] Penalaran dengan model bahasa adalah perencanaan dengan model dunia
@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}
}