ChatGPT使用指南——文本推理

Table of Contents

ChatGPT使用指南——文本推理

  本章与其他章节的不同,不涉及太多的代码,更多是论文的解读和方法的介绍,里面的方法都是通用的,但这里主要使用ChatGPT来作为演示。

1. 什么是推理(Reasoning)?

  在做出选择或处理问题时,推理是通过使用基于新的或现有信息的逻辑来理性地评价事物的能力。推理使你在决定最佳方案或最能满足你的目标的方案之前,能够平衡两个或多个方案的优点和缺点。它还能帮助你解决困难、处理不确定性、核实索赔,并仔细评估情况,以确保你做出的决定符合你的最佳利益[1]。比如:最近你打算买一台电脑? 决定之前,首先你会考虑你的预算,查看你预算范围的产品;其次如果你追求颜值,接下来你会考虑电脑的外观,如果你追求性价比,你会更关注电脑的硬件,比如CPU、GPU、内存等;此外还有你的需求(学习or工作),时间紧迫性等等,综合考虑多个因素,最终得出一个最合适的方案。这是人类的一项宝贵的技能,在人类的生活中拥有广泛的应用。

在这里插入图片描述

本图来源于What are the 4 primary types of reasoning? from Fibonicci.

  常见的推理类型主要包含3种,即亚里士多德在公元前的《前分析篇》中列举了推理的三种类型,为演绎、归纳以及溯回。后来,皮尔斯在此基础上提出了“溯因推理”:

  1. 演绎推理(Deductive Reasoning)[2]

  一般来说,演绎推理是指使用一组给定的事实或数据,通过逻辑推理来推导出其他事实。演绎推理,也称为三段论,通常的理解包括两个前提,一个大的和一个小的,然后一个逻辑结论,可以用来证明这些新的事实是真实的。

  例如,经典的例子:

大前提:人类都是凡人
小前提:苏格拉底是人
结论:苏格拉底是凡人

  在 “苏格拉底是人”(小前提)的具体情况下,对 “所有的人都是凡人”(大前提)的一般规则应用演绎法,可以得出结论:“苏格拉底是凡人”。

  1. 归纳推理(Inductive Reasoning)[2]

  归纳推理是寻找一种模式或趋势,然后对其进行概括。当你对信息进行归纳和推断时,你并不确定这一趋势是否会继续下去,但你假设它会继续下去。因此,你并不确定基于归纳推理的结论会是100%的真实。

一个著名的假说是: “天鹅都是白的”

  这个结论是在没有观察到任何黑天鹅的情况下从大量的观察中得出的,因此在逻辑上假设黑天鹅不存在。所以,归纳推理是一种有风险的逻辑推理形式,因为从天鹅的例子来看,如果发现了一只黑天鹅,那么结论就很容易不正确了。

  在实际能力测试中,另一个常见的归纳推理的例子是数字序列。试着确定模式,归纳和推断,找到该序列的下一个数字。

“6, 9, 12, 15, ?”

  这个趋势的逻辑答案似乎是18,但你不可能100%确定,也许这个数字代表的是天或小时或一些你意想不到的怪事,这可能导致推断出的结果不同。

  1. 溯因推理(Abductive reasoning)[2]

  溯因推理与归纳推理有些类似。它最早是由“猜测”一词引入的,因为这里得出的结论是基于概率的。在归纳推理中,人们假定最合理的结论也是正确的。

  例如:

大前提:罐子里装满了黄色的弹珠
小前提:鲍勃手里有一颗黄色的弹珠
结论:鲍勃手中的黄色弹珠是从罐子里拿出来的。

  通过溯因推理,鲍勃从罐子里拿走黄色弹珠的可能性是合理的,然而这纯粹是基于推测。黄色弹珠可能是任何人送给鲍勃的,也可能是鲍勃在商店里买的黄色弹珠。因此,从“装满黄色大理石的罐子”的观察中推断出鲍勃拿走了黄色大理石,可能会导致一个错误的结论。

在这里插入图片描述

  本图来源于:What part of the brain is used in reasoning? from How The Brain Learns

  从上述推理来看,人脑的大脑皮层对许多认知和感觉功能都至关重要,人类推理的过程和大脑皮层的活动密切相关。

  近年来,大型语言模型(Large Language Model,LLM)发展迅速,100B甚至更大参数规模的语言模型出现,它们已经在情感分析和机器翻译等任务上取得了十分优异的表现。特别的,去年12月ChatGPT横空出世,凭借其强大的能力和普遍的适用性直接破圈,引起了各行各业的人群关注。ChatGPT是生成式预训练 Transformer(GPT)语言系列模型中的一个成员。OpenAI在GPT-3改进版“GPT-3.5”上进行微调得到的。ChatGPT拥有非常强大的能力,甚至有研究者发现ChatGPT能够以9岁儿童的能力通过思维理论测试。那么,ChatGPT有多强大呢?它在推理这类任务上有着怎样的表现呢?有没有方法能进一步激发或是增强其处理复杂任务的能力?ChatGPT这种生成模型是否具有大脑的功效呢?不同功能区是如何划分呢?

  下面我将简单地使用ChatGPT回答一个问题(第2节),然后简单测试一下ChatGPT面对三个常见的推理任务的表现(第3节),利用ChatGPT的推理能力更好地完成现有任务(第4节),ChatGPT、GPT4的推理能力的小结(第5节)。

2. 导入ChatGPT

# import the OpenAI Python library for calling the OpenAI API
import openai
# openai.api_key = "填入专属的API key"

  Chatgpt一个对话的API调用包含两个必要的输入:

  • model: 使用的模型名称(例如:gpt-3.5-turbo, gpt-4, gpt-4-0314)。本文写作之初,OpenAI并未公布gpt-4, gpt-4-0314,为测试方便,结果均为gpt-3.5-turbo(也就是我们最常用的ChatGPT的版本)的输出。
  • message: 一个消息对象的列表,每个对象有两个必要的字段:
    • role: 信使的角色,包括:system、user,or assistant)
    • content: 信息的内容,例如: 给我写一首美丽的诗

  其中,消息也可以包含一个可选的名称字段,它给信使一个名字。例如:example-user、Alice、BlackbeardBot。名称中不得包含空格。

  通常情况下,对话会以一个告诉助手如何行事的系统消息开始,然后是用户和助手的消息交替出现, 但可以不遵循这种格式。

# Example OpenAI Python library request
MODEL = "gpt-3.5-turbo"

response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {
   "role": "system", "content": "You are a helpful assistant."},
        {
   "role": "user", "content": "Knock knock."},
        {
   "role": "assistant", "content": "Who's there?"},
        {
   "role": "user", "content": "Orange."},
    ],
    temperature=0,
)

response
<OpenAIObject chat.completion id=chatcmpl-749WgDEJrldSgYkoyTLsPak41vt19 at 0x28d93ce3ea0> JSON: {
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Orange who?",
        "role": "assistant"
      }
    }
  ],
  "created": 1681224286,
  "id": "chatcmpl-749WgDEJrldSgYkoyTLsPak41vt19",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 3,
    "prompt_tokens": 39,
    "total_tokens": 42
  }
}

  测试一下是否成功了,如果返回了下面的类似的结果,恭喜你成功了。

<OpenAIObject chat.completion id=chatcmpl-72sVLx6higzowFC3TjE5zLBU8k7TY at 0x2120f316400> JSON: {
   
  "choices": [
    {
   
      "finish_reason": "stop",
      "index": 0,
      "message": {
   
        "content": "Orange who?",
        "role": "assistant"
      }
    }
  ],
  "created": 1680920527,
  "id": "chatcmpl-72sVLx6higzowFC3TjE5zLBU8k7TY",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
   
    "completion_tokens": 3,
    "prompt_tokens": 39,
    "total_tokens": 42
  }
}

响应对象包括下面几个字段:

  • id: 请求的ID
  • object: 返回的对象的类型(如chat.completion)
  • created: 请求的时间戳
  • model: 用于生成回复的模型的全名
  • usage: 用于生成回复的token数量,包括提示、完成和总数。
  • choices: 完成对象的列表(只有一个,除非你设置n大于1)
    • message: 由模型生成的消息对象,包括角色和内容
    • finish_reason: :模型停止生成文本的原因(要么是停止,要么是长度,如果达到max_tokens的限制)
    • index: 选择列表中的完成度的索引

若只需要答复,可以使用如下代码:

response['choices'][0]['message']['content']

问ChatGPT一个关于DataWhaled的问题,看看回答怎么样~

# example without a system message
response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {
   "role": "user", "content": "你知道DataWhale吗?"},
    ],
    temperature=0,
)

print(response['choices'][0]['message']['content'])
作为AI语言模型,我知道DataWhale是一个开源的数据科学社区,致力于推广数据科学和人工智能知识,为数据科学爱好者提供学习和交流的平台。DataWhale的成员来自于各大高校和知名企业,包括华为、腾讯、百度等。他们通过组织线上线下的学习活动、分享课程和资源等方式,帮助更多人学习和掌握数据科学和人工智能技术。

  可以看到,ChatGPT真的很厉害的,把DataWhale的属性、目标、成员组成、工作都做到了非常好的回答👍!

  好了,预备工作结束了,下面讲解正式开始。

3. 测试ChatGPT的推理能力

  这一章节,针对常见的推理任务,对ChatGPT进行测试,看看ChatGPT的表现是什么样子的。

3.1 演绎推理(Deductive Reasoning)

response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {
   "role": "user", "content": "大前提:人类都是凡人 \n \
                                     小前提:苏格拉底是人 \n \
                                     结论:"},
    ],
    temperature=0,
)

print(response['choices'][0]['message']['content'])
苏格拉底是凡人。

3.2 归纳推理(Inductive Reasoning)

response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {
   "role": "user", "content": "西瓜是甜的,香瓜是甜的,所以叫“瓜”的蔬果都应该 \n \
                                     结论:"},
    ],
    temperature=0,
)

print(response['choices'][0]['message']['content'])
都是甜的。
response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {
   "role": "user", "content": "6, 9, 12, 15, ? \n \
                                     结论:"},
    ],
    temperature=0,
)

print(response['choices'][0]['message']['content'])
18

3.3 溯因推理(Abductive reasoning)

response = openai.ChatCompletion.create(
    model=MODEL,
    messages=[
        {
   "role": "user", "content": "大前提:罐子里装满了黄色的弹珠  \n \
                                    小前提:鲍勃手里有一颗黄色的弹珠  \n \
                                    问题:鲍勃手里的弹珠来自哪里?"},
    ],
    temperature=0,
)

print(response['choices'][0]['message']['content'])
无法确定,因为罐子里装满了黄色的弹珠,鲍勃手里的黄色弹珠可能来自罐子里,也可能来自其他地方。
response = openai.ChatCompletion.create
  • 29
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值