理解和实施 Medprompt

深入研究提示框架背后的细节Medprompt 策略各个组成部分的说明(图片取自 Medprompt 论文 [1] (https://arxiv.org/abs/2311.16452) 中的图 6)在我的第一篇博客文章中,我探讨了提示及其在大型语言模型 (LLM) 中的重要性。提示对于从 LLM 获得高质量的输出至关重要,因为它可以指导模型的响应并确保它们与手头的任务相关。在此基础上,尝试使用 LLM 解决用例时经常会出现两个关键问题:仅使用提示可以将性能提升到多远,以及何时您会咬紧牙关并决定微调模型可能更有效?在做出利用提示的设计决策时,需要考虑几个因素。像小样本提示和思路链 (CoT) [2] 提示有助于提升 LLM 在大多数任务中的性能。检索增强生成 (RAG) 管道可以进一步增强 LLM 性能,无需微调即可适应新领域,并可控制生成的输出,同时减少幻觉。总的来说,我们有一套工具可以推动 LLM 性能的提升,而无需明确诉诸微调。微调本身就具有一系列挑战和复杂性,包括标记数据要求以及与 LLM 训练及其部署相关的成本。Fin

来源:走向数据科学

我们现在通过打乱每个测试问题的答案选项顺序来执行选择打乱集成,从而创建同一问题的多个变体。然后,使用这些变体以及相应的少样本样本提示 LLM,以生成推理步骤和每个变体的答案。最后,我们对所有变体的预测进行多数投票,并选择最终预测。

选择打乱集成

实现 Medprompt

与此实现相关的代码可在此 github repo 链接中找到。

与此实现相关的代码可在此 github repo 链接中找到。

github repo 链接

我们使用 MedQA [6] 数据集来实现和评估 Medprompt。我们首先定义用于解析 jsonl 文件的辅助函数。

def write_jsonl_file(file_path, dict_list): """ 将字典列表写入 JSON 行文件。参数: - file_path (str):将写入数据的文件的路径。 - dict_list (list):要写入文件的字典列表。 """ with open(file_path, 'w') as file: for dictionary in dict_list: json_line = json.dumps(dictionary) file.write(json_line + '\n')def read_jsonl_file(file_path): """ 解析 JSONL(JSON 行)文件并返回字典列表。参数: file_path (str):要读取的 JSONL 文件的路径。返回: dict 列表:一个列表,其中每个元素都是一个字典,表示文件中的 JSON 对象。 """ jsonl_lines = [] with open(file_path, 'r', encoding="utf-8") as file: for line in file: json_object = json.loads(line) jsonl_lines.append(json_object) return jsonl_lines

实现自生成 CoT

GPT-4o

我们还定义了辅助函数,用于解析 LLM 响应中的推理和最终答案选项。

实现 KNN 模型

text-embedding-ada-002

实现动态少样本和选择改组集成逻辑

35 11