什么是 AGI
AGI 定义
AGI 是 Artificial General Intelligence 的缩写,中文翻译为 人工通用智能。它是一种能够像人类一样,具有智能的机器。它能够像人类一样,通过感知、认知、推理、决策、行动等过程,完成各种任务。懂 AI、懂编程、懂业务 的超级个体,会是 AGI 时代最重要的人。
AI 起源
每个时代都有对 AI 的定义,没有绝对的答案。
AGI 定义 AGI 是 Artificial General Intelligence 的缩写,中文翻译为 人工通用智能。它是一种能够像人类一样,具有智能的机器。它能够像人类一样,通过感知、认知、推理、决策、行动等过程,完成各种任务。懂 AI、懂编程、懂业务 的超级个体,会是 AGI 时代最重要的人。
每个时代都有对 AI 的定义,没有绝对的答案。
ChatGPT 能干什么 I’ve been reluctant to try ChatGPT. Today I got over that reluctance. Now I understand why I was reluctant.
The value of 90% of my skills just dropped to $0. The leverage for the remaining 10% went up 1000x. I need to recalibrate.
以下是一些举例。
# 加载环境变量
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
openai.api_key = os.getenv('OPENAI_API_KEY')
prompt = """
帮我寄到北京市朝阳区亮马桥外交办公大楼,写张三就行,电话18011211132
提取上述信息中的收件人(name),地址(address)和电话号码(phone),并以JSON格式输出,key用英文,value用原文中的语言,直接输出结果。
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=240,
temperature=0
)
print(response.choices[0].text)
{"name":"张三","address":"北京市朝阳区亮马桥外交办公大楼","phone":"18011211132"}
首先,我们从三个角度来看待一个业务问题:
绝大多数业务问题,都可以归入如下至少一类。
分类 |
描述 |
|---|---|
| 分类问题 | 笼统的说,输出是标签。输出的标签是个有限集。输出的标签是预先定义好的有限集。 例如:分析一段评论是正向还是负向,是典型的分类问题。输出是两个标签之一:“正向”或“负向”。 更复杂的分类,比如,输入一篇新闻,输出是“政治”、“经济”、“体育”、“娱乐”、“科技”之一(或多个标签)。 |
| 聚类问题 | 没法提前规定有多少种标签,只能把同一类事物聚合在一起,到底能聚出多少类,是数据本身决定的。 例如:自动收集客户经常问到的问题。(我们无法预知客户有多少问题,只能把同一个意思的问题聚合在一起) |
| 回归问题 | 输出是一个数值,更重要的是,评价输出好坏的标准是误差大小,而不是二元的对错。 举例:跟据专车司机每天工作的时段、时长、跑的公里数,预估他一天的净利润。 |
| 决策问题 | 输出是连续的一系列动作,每一步动作都有代价或收益,每一步的动作本身没有对错,而是要最大化最终的收益。 举例:打游戏、下棋、无人驾驶、对话、量化投资。 |
| 概率密度估计 | 在机器学习的问题中,想直接去做概率密度估计是非常难的。考虑到深度学习的训练过程中,需要做反向传播,那么某些概率分布,比如后验概率就需要变得非常简单,这样才能高效、容易得计算导数。 |
复杂问题的两个视角
划重点:
know-how 将上述基本问题串起来。理解问题本质,对拆解任务有很大帮助!
# 加载环境变量
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
openai.api_key = os.getenv('OPENAI_API_KEY')
prompt = """
根据给定的新闻标题,判断该新闻属于“政治”、“经济”、“科技”、“娱乐”中的那一类?直接给出答案,不用分析,不用评论。
ChatGPT 写电影剧本了,未来好莱坞大片或将用上这项技术。
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=240,
temperature=0
)
print(response.choices[0].text)
科技
# 加载环境变量
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
openai.api_key = os.getenv('OPENAI_API_KEY')
prompt = """
判断以下句子中是否是同一个意思的聚合在一起?
月薪多少
一个月赚多少钱
吃饭贵吗
月薪不够花怎么办
每个月赚的都没花的多咋整
月入水平
输出'[]'标识的数组,每类一组,直接给答案,不用分析,不用评论。
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=1200,
temperature=0
)
print(response.choices[0].text)
[月薪多少, 一个月赚多少钱, 月入水平] [吃饭贵吗] [月薪不够花怎么办, 每个月赚的都没花的多咋整]
# 加载环境变量
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
openai.api_key = os.getenv('OPENAI_API_KEY')
prompt = """
小明是配送员,过去5天的送单数,配送公里数和净收入如下:
第一天:送单数5,配送公里数10,净收入400
第二天:送单数6,配送公里数12,净收入480
第三天:送单数10,配送公里数30,净收入700
第四天:送单数2,配送公里数1,净收入190
第五天:送单数8,配送公里数3,净收入770
第六天:小明送单数9,配送公里数11,净收入应该是多少
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=4000,
temperature=0
)
print(response.choices[0].text)
根据过去5天的数据,我们可以计算出小明每单的平均净收入和每公里的平均净收入, 然后使用这些平均值来估计第六天的净收入。 平均每单净收入 = (400 + 480 + 700 + 190 + 770) / 5 = 508 平均每公里净收入 = (400 + 480 + 700 + 190 + 770) / (10 + 12 + 30 + 1 + 3) = 27.93 第六天的送单数为9,配送公里数为11,因此可以估计第六天的净收入: 第六天的净收入 = 平均每单净收入 * 送单数 + 平均每公里净收入 * 配送公里数 = 508 * 9 + 27.93 * 11 = 4572 + 306.23 ≈ 4878.23 因此,根据过去5天的数据,我们估计第六天小明的净收入应该约为4878.23元。 请注意,这只是一个估计值,实际情况可能会有所不同。
# 加载环境变量
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
openai.api_key = os.getenv('OPENAI_API_KEY')
prompt = """
Assume are playing a Tic-Tac-game.
The play who have three stones in a vertical/horizon/diagonal line wins.
The rows of the board are indexed 1,2,3.
The columns are indexed by A,B,C. Currently, the stones are placed at:
1,A = 'O'
1,B = 'O'
1,C = 'X'
2,B = 'X'
Please draw the current board using '|'','-'','_','O','X' only
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=4000,
temperature=0
)
print(response.choices[0].text)
A | B | C |
1 | O | O | X |
|---|---|---|
2 | | X | |
|---|---|---|
3 | | | |
# 加载环境变量
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEY
openai.api_key = os.getenv('OPENAI_API_KEY')
prompt = """
We are in a fresh Ubuntu system, which only has basic commands and no software installed.
We need to run a mysql server in a docker.
Generate step-by-step commands for this task.
Create a new table in the database, with three columns: id, name, age.
Out commands only. No comments, no acknowledgements.
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=4000,
temperature=0
)
print(response.choices[0].text)
# 1. Install Docker:
sudo apt update
sudo apt install docker.io
# 2. Start the Docker service:
sudo systemctl start docker
# 3. Pull the MySQL Docker image:
sudo docker pull mysql
# 4. Run a MySQL Docker container, specifying a root password and mapping the container's port 3306 to the host's port 3306:
sudo docker run --name mysql-server -e MYSQL_ROOT_PASSWORD=<root_password> -p 3306:3306 -d mysql
# 5. Access the MySQL container:
sudo docker exec -it mysql-server bash
# 6. Connect to the MySQL server:
mysql -u root -p
# 7. Create a new database and table:
CREATE DATABASE <database_name>;
USE <database_name>;
CREATE TABLE <table_name> (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
# 8. Exit from the MySQL server:
exit;
# 9. Exit from the MySQL container:
exit
Now you have successfully set up a MySQL server in a Docker container and created a new table with three columns (id, name, age) in the database.
简单点来讲,它只是根据上文,猜下一个词(的概率)…
OpenAI 的接口名就叫「completion」,也证明了其只会「生成」的本质。
下面用程序演示「生成下一个字」。你可以自己修改 prompt 试试。还可以使用相同的 prompt 运行多次。
import openai
import os
import time
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv('OPENAI_API_KEY')
prompt = '今天我很'
# prompt = '今天我想'
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=100,
temperature=0,
stream=True
)
print(prompt, "/>")
# print(response.choices[0].text)
for chunk in response:
print(chunk.choices[0].text, end='')
time.sleep(0.2)
今天我很 /> 开心 I'm very happy today. --- 今天我想 /> 说的是 今天我想说的是,要珍惜当下,把握机会,勇敢追求自己的梦想,不要被外界的压力所压制,要勇敢地去拥抱自己的未来!
划重点:用不严密但通俗的语言描述 ChatGPT 的工作原理:
大模型」阅读了人类曾说过的所有的话。这就是「学习」参数」,也叫「权重」生成」你用 ChatGPT 做过的事,是不是都能用这个原理解释?
安装python库
pip install --upgrade openai
import openai
import os
# 加载 .env 文件
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
# 从环境变量中获得你的 OpenAI Key
openai.api_key = os.getenv('OPENAI_API_KEY')
# 模型列表
models = openai.Model.list()
for model in models.data:
print(model.id)
davinci gpt-4 gpt-3.5-turbo-16k-0613 text-davinci-001 text-search-curie-query-001 gpt-3.5-turbo babbage text-babbage-001 gpt-4-0613 gpt-3.5-turbo-16k curie-instruct-beta davinci-similarity code-davinci-edit-001 text-similarity-curie-001 ada-code-search-text gpt-3.5-turbo-0613 text-search-ada-query-001 babbage-search-query ada-similarity text-curie-001 text-search-ada-doc-001 text-search-babbage-query-001 code-search-ada-code-001 curie-search-document davinci-002 text-search-davinci-query-001 text-search-curie-doc-001 babbage-search-document babbage-002 babbage-code-search-text text-embedding-ada-002 davinci-instruct-beta davinci-search-query text-similarity-babbage-001 text-davinci-002 code-search-babbage-text-001 text-davinci-003 text-search-davinci-doc-001 code-search-ada-text-001 gpt-4-0314 ada-search-query text-similarity-ada-001 ada-code-search-code whisper-1 text-davinci-edit-001 davinci-search-document curie-search-query babbage-similarity ada ada-search-document text-ada-001 text-similarity-davinci-001 curie-similarity babbage-code-search-code code-search-babbage-code-001 text-search-babbage-doc-001 gpt-3.5-turbo-0301 curie davinci:ft-personal:100qa-2023-03-06-07-35-38 ft:gpt-3.5-turbo-0613:agi-class::7rFIG3Mf
# 消息格式
messages = [
{
"role": "system",
"content": "你是AI助手.你是考研班的的助教。这门课每周二、四上课。"
},
{
"role": "user",
"content": "你是干什么的?什么时间上课"
},
]
# 调用ChatGPT-3.5
chat_completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo", messages=messages)
# 输出回复
print(chat_completion.choices[0].message.content)
我是一个AI助手,专门为学生和教师提供帮助和支持。我是考研的助教,这门课每周二和周四上课。 如果你有关于这门课的问题,我会很乐意帮助你。
科学方面:
对齐方面:
数据标注请了大量的博士 ,语言学家去做这个事。强化学习里面有很多tric,对于资深的从业人员也有挑战。
投入的精力,经验,下的功夫都有差距。这是主观因素。
客观因素:
中文的复杂性要比英文高许多, 单字的歧义要比英文大很多,比如,哪家饭店好? 有误导性质。 中文难训,另外 OpenAI 没有公开训练方法。
从底层开始训,需要时间,投入,耐心。
第一步,先从图片里把文字框出来,text-detection
第二步:text-orientation 识别文字的朝向,正,反,角度。
第三步:识别
看数据量和显卡数量。
以 GPT2 举例, 数据集文本在硬盘上40多个G,展开到内存里500G,12层的 transformer,768 * 768 训练这个模型 8 卡 A100 需要两周。可以以此作为参考。
如未另行说明,那么本页面中的内容已根据 知识共享署名 4.0 许可 获得了许可,并且代码示例已根据 Apache 2.0 许可 获得了许可。内容随着时间推移,可能会过期,会定时更新或移除一些旧的内容。
最后更新时间 (CST):2023-08-25