# Datawhale AI 夏令营
夏令营手册:从零入门 AI 逻辑推理
代码运行平台:魔搭社区
赛题解决思路
大模型
**大语言模型(英文:Large Language Model,缩写LLM),**也称大型语言模型,是一种人工智能模型,旨在理解和生成人类语言。
通常,大语言模型 (LLM) 指包含数十亿(Billion或更多)参数的语言模型,这些模型在大量的文本数据上进行训练,例如国外的有GPT-3 、GPT-4、PaLM 、Galactica 和 LLaMA 等,国内的有ChatGLM、文心一言、通义千问、讯飞星火等。
提示工程 (Prompt Engineering)
这是实现大模型推理最常用的方法。提示工程(Prompt Engineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语言模型(Large Language Model, LLM)用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解大型语言模型的能力和局限性。
研究人员可利用提示工程来提升大语言模型处理复杂任务场景的能力,如问答和算术推理能力。开发人员可通过提示工程设计、研发强大的工程技术,实现和大语言模型或其他生态工具的高效接轨。
提示工程不仅仅是关于设计和研发提示词。它包含了与大语言模型交互和研发的各种技能和技术。提示工程在实现和大语言模型交互、对接,以及理解大语言模型能力方面都起着重要作用。用户可以通过提示工程来提高大语言模型的安全性,也可以赋能大语言模型,比如借助专业领域知识和外部工具来增强大语言模型能力。
输入问题
这里选取了train的第一个问题。可以看到有问题背景、提问、以及选项这样结构的数据字典。
{
'problem':
'有一群人和一些食物类型。下列是关于这些个体和食物的已知信息:\n\n1. 鸡肉是一种食物。\n2. 苹果是一种食物。\n3. 如果X吃了Y,且X活着,则Y是一种食物。\n4. Bill存活。\n5. Bill吃了花生。\n6. John吃所有食物。\n7. Sue吃所有Bill吃的食物。\n8. John喜欢所有食物。\n\n根据以上信息,回答以下选择题:',
'questions': [
{
'question': '选择题 1:\n谁喜欢吃花生?',
'options': ['Bill', 'Sue', 'John', 'None of the above']
}
], 'id': 'round1_test_data_000'
}
转化后的prompt
我们通过数据处理,将上面的问题字典转化为MD格式的prompt。这就是我们让大语言模型能理解并做分析的秘诀。
你是一个逻辑推理专家,擅长解决逻辑推理问题。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请逐步分析问题并在最后一行输出答案,最后一行的格式为"答案是:A"。题目如下:
###题目:
有一群人和一些食物类型。下列是关于这些个体和食物的已知信息:
鸡肉是一种食物。
苹果是一种食物。
如果X吃了Y,且X活着,则Y是一种食物。
Bill存活。
Bill吃了花生。
John吃所有食物。
Sue吃所有Bill吃的食物。
John喜欢所有食物。
根据以上信息,回答以下选择题:
###问题:
选择题 1:
谁喜欢吃花生?
A. Bill
B. Sue
C. John
D. None of the above
大模型回答
{
"status_code": 200,
"request_id": "18d43478-2aec-92be-8840-cd3bb08009cf",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "我们可以通过分析给出的信息来解答这个问题。\n\n首先,我们知道Bill吃了花生(根据第5条信息),并且Bill还活着(根据第4条信息)。根据第3条规则,“如果X吃了Y,且X活着,则Y是一种食物”,我们可以推断出花生是一种食物。\n\n接下来,我们知道John吃所有食物(根据第6条信息),并且John喜欢所有食物(根据第8条信息)。既然花生是一种食物,那么John应该也吃花生,并且喜欢花生。\n\nSue吃所有Bill吃的食物(根据第7条信息),既然Bill吃了花生,那么Sue也应该吃花生。\n\n所以,喜欢吃花生的人有Bill、Sue和John。\n\n答案是:C. John\n\n但是,题目要求选择一个选项,而实际上Bill、Sue和John都喜欢吃花生。然而,在给出的选项中,只有John被明确列出作为喜欢吃花生的人(选项C)。因此,虽然Bill和Sue也喜欢吃花生,但根据题目要求,正确答案应当是包含在选项中的那个,即John。\n\n答案是:C. John"
}
}
]
},
"usage": {
"input_tokens": 210,
"output_tokens": 223,
"total_tokens": 433
}
}
项目整体的实现
机器学习
特征工程
首先,需要将问题和选项转换为机器可以理解和操作的特征向量。这可能包括将文本问题和答案选项编码为数值向量,比如通过词袋模型(Bag-of-Words)、TF-IDF 或者词嵌入(Word Embeddings)如 Word2Vec 或 GloVe。
模型选择
选择适合分类任务的模型,如,SVM、随机森林、神经网络等。
训练模型
使用已知正确答案的题目作为训练数据,将问题和选项的特征向量输入模型,并标记正确的答案。模型会学习到从特征到正确答案之间的映射关系。
预测与评估
当模型训练完成后,可以使用测试集来评估模型的准确性和泛化能力。测试集应该包含模型未曾见过的问题和选项。
解决新问题
对于新的选择题,模型会接收问题和选项的特征向量作为输入,并输出每个选项的概率或分数,最高分的选项即为模型认为的正确答案。
深度学习
深度学习模型的一个关键优势在于它们能够自动学习特征表示,不需要人工进行特征工程,这对于逻辑推理问题尤为重要,因为这些问题可能涉及到复杂的语言模式和隐含的逻辑关系。此外,预训练模型(如BERT)的出现使得模型能够在大量未标记文本上进行预训练,然后再针对具体任务进行微调,这种迁移学习的能力极大地提高了模型的性能和泛化能力。
数据预处理
将文本数据转换为可以输入到神经网络的格式,常见的做法是使用词嵌入(如Word2Vec、GloVe或FastText)或字符级嵌入,将文本转化为数值向量。
模型架构选择
根据问题的复杂度和数据的特性选择合适的模型。常用的深度学习模型包括:
- 循环神经网络(RNNs): 特别是长短期记忆网络(LSTMs)和门控循环单元(GRUs),它们擅长处理序列数据,能够捕捉到文本中的上下文关系。
- 卷积神经网络(CNNs): 卷积层能够检测局部模式,对于短文本和固定长度的输入有效。
- 变换器(Transformers): 如BERT、RoBERTa等预训练模型,它们利用自注意力机制处理序列数据,能够高效地处理长文本和理解上下文。
- 记忆增强网络: 如记忆网络(Memory Networks)和端到端记忆网络(End-to-End Memory Networks),它们可以在内部存储和检索信息,有助于逻辑推理。
多选题处理
将选择题设计为多标签分类问题,其中每个选项都是一个潜在的标签。模型需要预测每个选项的得分或概率,最终选择得分最高的选项作为答案。
训练
利用标注过的数据集进行训练,目标是最小化损失函数,通常是交叉熵损失,以提高模型在预测正确答案时的准确性。
推理阶段
在测试或应用阶段,模型接收新的问题和选项,将其转换为相应的向量表示,然后通过模型进行预测,得到每个选项的得分或概率分布,最后选择得分最高的选项作为答案。
后处理和解释: 可能需要额外的步骤来解释模型的决策,例如通过注意力权重来了解模型在做决策时关注了哪些部分的文本。
集成学习
结合多个模型的预测结果,通过投票或加权平均的方式提高最终预测的准确率。
持续学习和调整
如果可用,可以使用增量学习或在线学习方法,使模型能够随着更多数据的到来而不断改进。
步骤来解释模型的决策,例如通过注意力权重来了解模型在做决策时关注了哪些部分的文本。
集成学习
结合多个模型的预测结果,通过投票或加权平均的方式提高最终预测的准确率。
持续学习和调整
如果可用,可以使用增量学习或在线学习方法,使模型能够随着更多数据的到来而不断改进。