Dies ist eher ein experimentelles/Forschungsprojekt. Es implementiert eine Aufforderungspipeline in Kombination mit einem Wrapper zur automatischen Dekomponierung von Schritten und durch die Suche durch den "Schrittraum" (z. B. durch Strahlsuche, MCTs usw.), die durch Selbstbewertung geleitet werden.
Einige der Data-Extraction/Antwort-Extraction-Codes ( utils.py
und answer_extraction.py
) sind angepasst: https://github.com/agi-edgerners/plan-and-solve-prompting
Datensatzreferenzen:
@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
.Die Codebasis ist hauptsächlich für die Arbeit mit VLLM-kompatiblen Modellen eingerichtet.
model.py
benötigen (siehe Konstruktor der Generatorklasse). Ich verwende lokal heruntergeladene Checkpoints -Pfade, sodass es nicht im Kontrollkästchen funktioniert, es sei denn, Sie laden die Checkpoints in einem ähnlichen Pfad herunter oder ändern den Pfad.Wenn Sie ein neues Modell hinzufügen möchten (vllM kompatibel), machen Sie Folgendes:
argparser.py
für die model
hinzu.prompt.py
hinzu (siehe Beispiele am Ende der Codedatei) (optional; es gibt eine Standardaufforderung, aber wahrscheinlich nicht optimal).model.py
(siehe Beispiele für Beispiele).Dies ist eine allgemeine Vorlage für die Codeausführung:
python main.py --search_style=MultiSearch --model=LLAMA30_instruct --gpu_ids="0,1" --prompt_style=cot --dataset=gsm8k --reward_types=confidence+correctness
Dies würde Lama 30b-Anweisungen mit der Eingabeaufforderung (COT) mit Null-Shot-Kette ( cot
) unter Verwendung von MultiSearch
(zu erläutern) als Suchstrategie auf GSM8K
unter Verwendung einer Belohnungsfunktion ( confidence+correctness
-zu erläutern) für die Suchanleitung ausführen . Die Modellgewichte werden an CUDA: 0 und CUDA: 1 (gegebenenfalls gpu_ids="0,1"
) verteilt.
Einige andere herausragende Argumente:
checkpoint
- Stellen Sie es wahr, wenn Sie einige früher gespeicherte Kontrollpunkte laden (Kontrollpunkte werden automatisch gespeichert).SC
- Stellen Sie es wahr, um Selbstkonsistenz zu ermöglichen [1]. Nur relevant, wenn search_style=none
. Die verfügbaren Optionen für jedes Argument und die Standardeinstellungen finden Sie in argparser.py
.
Sie finden Ausführungsprotokolle in logs/
In diesem Projekt setzen wir verschiedene Suchstrategien auf der Ebene der Argumentationsschritte an (jeder Argumentationsschritt gilt als "einzelner Wechsel im Spiel"). Dies wirft auch die Frage auf, wie die Generation in eine Reihe von Schritten zerlegt werden kann. Eine Möglichkeit, dies zu tun, besteht darin, eine beliebige Eingabeaufforderungsvorlage mit einer klaren Struktur (die zum Parsen von Schritten verwendet werden kann) zu erstellen und dann einige Schussbeispiele mit der Vorlage zu verwenden, um das Modell zu fördern, um der Struktur zu folgen. Hier interessiere ich mich jedoch für das Zero-Shot-Regime. Ich versuche, Null-Shot-Eingabeaufforderungsanweisungen auf bestimmte Weise zu verwenden, um verschiedene Formen der automatischen Dekomposition von Schritten anzuerkennen. Im Folgenden diskutiere ich alle in diesem Projekt verwendeten schnellen Stile und deren entsprechende Zersetzungsmethodik.
Kette der Gedanke ( cot
)-Dadurch werden die Standard-Eingabeaufforderung mit Null-Shot-Cot-Eingabeaufforderung verwendet Let's think step by step.
[2]. Für die Stufenabteilung wird n
(neue Zeile) verwendet. Es gibt einige zusätzliche Setups, um leere neue Zeilen und dergleichen ordnungsgemäß zu ignorieren. Letztendlich ist dies nicht unbedingt ein idealer Weg, um Argumentationsschritte zu zersetzen, nicht alle neuen Linien in den COT-Ergebnissen wären vollständige Argumentationsschritte, aber es handelt sich um einen Ausgangspunkt der Grundlinie, der auf eine Weise von Null erfolgen kann.
Kette der Gedanke Schritt ( cot_step
)-Dies ist eine einfache Erweiterung von Null-Shot-Cot: Let's think step by step. Step 1:
. Dadurch wird das Sprachmodell automatisch vorhanden, um seine Argumentationskette in nummerierten Schritten zu organisieren (Schritt 1: XYZ STEP2: ABC ...). Diese Struktur kann dann leicht zum Zerlegen von Schritten verwendet werden.
PS+ ( ps
) - Dies ist der in [3] eingeführte Null -Shot -Plan und die Lösung der Eingabeaufforderung (PS+ -Version). Neue Linienabzug wird ähnlich wie cot
verwendet.
Tabelle Kette der Gedanken ( cot_tab
)-Dies ist die in [4]- n|step|subquestion|process|result|n
. Es ist eine einfache Möglichkeit, ein strukturiertes Tabellenformat -Argumentationsschritt zu erstellen. Wir verwenden Newline erneut für die Zerlegung, aber im Gegensatz zu der Zerlegung von Newline ist hier aussagekräftiger - da jede zerlegte Newline einem Schritt in der Tabelle entspricht.
Struktur ( struct
) - Diese Eingabeaufforderung verwendet Elemente vieler der oben genannten Eingabeaufforderungen. Es enthält detaillierte Anweisungen, um die Lösung/die Antwort in Schritte und Untersuchungen zu zerlegen (mit Subproblem -Identifizierung, relevanten Fakten und Lösung). Dies erzeugt hoch strukturierte Ergebnisse und kann gemäß der Struktur ähnlich wie cot
zersetzt werden. Details der Eingabeaufforderung finden Sie in prompt.py
und der Dezositionscode finden Sie in node_transition.py
.
Struct minimal ( struct_min
) - ähnlich wie struktur mit einem weniger unterteilig. Details in prompt.py
. Ich habe diese Variante nicht ausgeführt - es könnte Fehler geben.
Sie können prompt.py
ändern, um ein paar Schussaufforderungen hinzuzufügen.
Alle Suchcodes finden Sie in Search/
.
none
- Diese Methode wendet neben der autoregressiven gierigen Standard -Dekodierung keine bestimmte Suchstrategie an. Dies kann mit SC=True
für die Selbstkonsistenz mit mehreren Stichproben kombiniert werden.MultiSearch
- Diese Strategie verwendet Multi -Sampling. Dann werden die Belohnungen für jede Stichprobe (akkumulative Belohnung für jeden zerfielten Schritt) nach der Tatsache erzeugt. Belohnungen werden für die Abstimmung von Antworten auf verschiedene Weise verwendet, um später beschrieben zu werden.MultiGreedy
- Diese Strategie verwendet gierige Suche, jedoch auf der Ebene der Schritte (im Gegensatz zu none
). Bei jeder Iteration generiert das Modell angesichts der Geschichtskette der Argumentationsschritte einige K -Kandidaten für K -Kandidaten von K. Jeder der K -Kandidaten wird dann bewertet (eine Belohnung zugewiesen). Dann wird der Kandidat der maximalen Punktzahl ausgewählt. Diese Strategie wird parallel für mehrere Stichproben von anfänglichen Argumentationsschritten verwendet, was zu mehreren Suchergebnissen führt, die für die Selbstkonsistenz verwendet werden können. Diese Suchstrategie kann DFS aus Tree of Tree [5] als ähnlich angesehen werden, aber ohne Rückverfolgung.BeamSearch
- Dies ist die Strahlsuchversion der obigen. Die Implementierung ist inspiriert von [6]. Darüber hinaus kann diese Methode als ähnlich der BFS -Methode (mit verkürzten Grenzen) angesehen werden, die im Denkbaum verwendet werden [5].DivBeamSearch
- Dies ist die gleiche wie die Strahlsuche, fördert jedoch mehr Vielfalt in der Generation, indem sie Geschwister einschränken. In jeder Iteration sind maximal m (m << Strahlgröße (ich verwenden m = 2)) Geschwister zulässig. Wenn in der Strahlgröße Platz enthält, nachdem alle Kandidaten nach dieser Einschränkung der Restkandidaten ausgewählt wurden, werden sie basierend auf ihren Belohnungen hinzugefügt. Die Idee ist im Geist ähnlich [7], aber wir ändern die Gleichung der Wertung nicht strikt mit einer Strafe - sondern verwenden eher eine harte Einschränkung wie beschrieben.MCTS
- Dies ist die Monte -Carlo -Baumsuche. Die Implementierung folgt der Struktur hier grob. Es erfordert etwas Inspiration von [8].SPMCTS
- Diese Implementierung (halbparallele Monte -Carlo -Baumsuche) entsteht MCTS etwas mehr. Es wählt mehrere Blätter gleichzeitig aus und führt mehrere Pfade gleichzeitig aus. Daher dauert es weniger sequentielle Iterationen. Das Endergebnis ist eine ähnliche Anzahl von Proben wie MCTs. Die Implementierungen sind jedoch nicht rechnerisch äquivalent und sind nicht beabsichtigt.Beachten Sie, dass einige der Methoden von früheren Arbeiten inspiriert sind, aber sie werden nicht versucht, diese Papiere vollkommen treu zu sein.
Ähnlich wie bei [6,8] wird die Belohnung für jeden Schritt basierend auf der Selbstbewertung und dem Vertrauen der Erzeugung des Schritts (basierend auf logprobs) berechnet. Die Selbstbewertungstechnik verwendet LLMs, um ihre eigenen Generationen zu bewerten, indem sie Multi-Choice-Fragen (MCQ) über die Hilfsbereitschaft/Korrektheit des Schritts stellen (die Selbstbewertungsfragen finden Sie in rewards.py
).
Verschiedene Arten von Belohnungstypen und Combos sind als Argumente in argparse.py
verfügbar.
confidence
- verwendet nur Vertrauen (basierend auf logprobs) als Belohnung.correctness
- Verwendet nur Antwortwahrscheinlichkeiten aus einem Schritt Richtigkeitsbezogene MCQ als Belohnung.helpfulness
- verwendet nur Antwortwahrscheinlichkeitboth
- verwendet sowohl correctness
als auch helpfulness
.confidence+correctness
- verwendet sowohl confidence
als auch correctness
.confidence+helpfulness
- verwendet sowohl confidence
als auch helpfulness
.confidence+both
- verwendet das gesamte confidence
, correctness
und helpfulness
. NB: Sofortige struct
und struct-min
folgen unterschiedlichen Regeln. Sie haben feinkörnige Untersetzungsstrukturen und verwenden Belohnungen, die für diese geeignet sind. Die Unterproblemidentifikation untersucht nur eine Belohnung im Zusammenhang mit der Hilfsbereitschaft (da sie technisch gesehen kein Argumentationsschritt ist, um korrekt/falsch zu sein) und der Lösungsschritt nur die korrektheitbezogene Frage verwendet (weil vermutlich die Hilfsbereitschaft der Subproblem mit der Hilfsbereitschaft von korreliert die Lösung).
Die MCQs, die für verschiedene Eingabeaufforderungen und verschiedene Belohnungstypen zur Selbstbewertung verwendet werden, finden Sie in reward.py
.
Verschiedene Arten von Antwortmechanismen werden implementiert und automatisch gleichzeitig in main.py
(nicht mit argparse.py
-Optionen bezogen). Sie sind:
Voted Answer
in Protokollen) - Nur einfache Mehrheitsabstimmung [1].Reward Voted Answer
in Protokollen) - ähnlich der Mehrheit der Mehrheit, aber der Wert jeder Stimme ist die Belohnung (die Belohnung ( Top K Reward Voted Answer
in Protokollen gewählt) - Wählen Sie Top K (Wir verwenden K = 5). Dies ermöglicht die Filterung potenziell "schlechte" Antworten mit niedriger Belohnung, die möglicherweise zu Stimmen führen können.Max Reward Answer
in Protokollen) - Wählen Sie die Antwort mit der maximalen Belohnung.node_transition.py
zu parallelisieren.none
(was derzeit am schnellsten ist) erheblich beschleunigen. Dies erfordert jedoch möglicherweise die Änderung von VLLM und Umarmungsface -Transformatoren.[1] Selbstkonsistenz verbessert die Kette des Denkens in Sprachmodellen
@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] Großsprachenmodelle sind Null-Shot-Gründeer
@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}
}
[Drei
@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-Wickel: Tabularkette von Null-Shot-Denkkette
@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] Baumbaum: Absichtliche Problemlösung mit großen Sprachmodellen
@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] Zersetzung verbessert das Denken durch Selbstbewertungskodierung
@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] Ein einfacher, schnell vielfältiger Dekodierungsalgorithmus für die neuronale Generation
@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] Die Argumentation mit Sprachmodell plant mit dem Weltmodell
@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}
}