暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

前沿 | 当ChatGPT遇上HighgoDB

瀚高数据库 2023-02-18
1135

仿佛是一夜之间,ChatGPT横空出世,突然爆火,并且迅速火遍全球,在中外各大媒体平台掀起了一阵狂热之风。短短4天时间,ChatGPT用户量便达到百万级,注册用户之多一度导致服务器爆满。各行各业各路资本都争相入场、纷纷跟进,各路玩家对AI的投资布局狂潮盛况空前。在推出仅仅2个月后,ChatGPT的月活跃用户就突破了1个亿,用户增长速度在消费级应用里可以说是前无古人后无来者。

作为眼下当之无愧的流量收割机,ChatGPT不仅上知天文下知地理,博古通今学贯中西,还能客串编剧、作曲、码农…… 功能如此强大,以至于马斯克都认为,“我们离强大到危险的AI不远了”。

然而,即便是scary good的ChatGPT也仍然不是无所不能的,因为它只是一个泛用型聊天机器人——博,却不精。这就决定了它的专业知识是有限的,必定无法回答一定深度的专业问题。

那么问题来了,有没有可能使ChatGPT成为专用方向的聊天机器人呢?
今天我们就来看看如何借助 OpenAI 官方 API 来实现这个小目标。

准备工作

  • 申请API keys

册OpenAI账号后,需要用户手动申请API keys。通过下方入口前

👉https://platform.openai.com/account/api-keys
之后点击 [+Create new secret key] 即可生成。

注意:务必牢记生成的密钥后续如果忘记了就只能再重新申请一个了。

  • 搭建本地环境

官方推荐使用Python或者node.js作为API调用的后台工具。考虑到方便进行后续安装cli的工作,这里我们推荐使用Python。

https://www.python.org/downloads/
  • API测试

安装openai的python库:

pip install openai

然后在本地用python调用即可:

import os
import openai
openai.organization = "ORGANIZATION_CODE"
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Engine.list()

使用以上代码就可以获得所有开放给API用户的模型列表。

在英文文档中,prompt代表输入的问题,completion对应想获得答案,此处我们调用openai.Completion
,之后在engine
处输入上面获得模型名字之一,将问题填入prompt
即可,之后就可以跑下python脚本调用API啦!
completion = openai.Completion.create(
engine="ENGINE_NAME",
prompt="PROMPT",
max_tokens=300,
temperature=0)

官方文档也给出了通过curl或者openai cli直接在终端跑的方法,这里不再赘述,文档链接放在文末。
训练fine-tuning微调模型
OpenAI将这个功能介绍为自定义模型的方式。简单来说就是用户通过将自己的数据输入官方提供的预训练模型来构建自定义模型。训练数据的格式要求大致如下,每行包含一组问答JSON Object:
{"prompt""<prompt text>""completion""<ideal generated text>"}
{"prompt""<prompt text>""completion""<ideal generated text>"}
{"prompt""<prompt text>""completion""<ideal generated text>"}
...

转成相应格式后可以借助OpenAI CLI工具转化为上传所需要的具体格式:

openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

之后选择上一条命令生成的文件和模型即可训练:

openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>

如果中间网络连接断开则可以用下列命令跟进进度:

openai api fine_tunes.follow -i <YOUR_FINE_TUNE_JOB_ID>

在完成训练后会收到一个模型id,将id和问题作为参数输入cli即可得到答案查看效果:

openai api completions.create -m <FINE_TUNED_MODEL> -p <YOUR_PROMPT>

大致流程就是如此,生成的模型根据输入数据不同可以用作分类模型、限定条件下回复生成模型(包含问答模型)等。

大功告成!🎉🎉🎉

整个过程中最困难的部分其实是收集高质量的实验数据。比如问题和回答必须有明显的语言逻辑对应关系,回答也要尽可能的“说人话”。

在OpenAI官方给出cookbook中也明确提到过一些修正方法:

为了帮助模型回答问题,我们在[提示问题(prompt)]中提供额外的上下文信息。当所需的上下文很短时,我们可以直接将其包含在[提示问题]中。例如,我们可以使用来自维基百科的背景信息更新初始[提示问题],对模型强调使用所提供的文本。


虽然目前自定义模型并不是真正意义上的完全理解语言逻辑,但是这样的使用方式极大提高了回答的准确性。比如下图就是用HGDB信息提前输入后获得的对话结果:

可以看到这样的处理方式确实起到了很好的效果。

结语

  

Bingo!🎉🎉
当ChatGPT遇上HighgoDB,锦上添花!
当HighgoDB遇上ChatGPT,如虎添翼!
           
本次分享省略了一些调参和数据处理细节,如果大家有想要了解的或者想讨论的问题欢迎在评论区留言。

🧐本文参考的内容主要来自于:
  • OpenAI API官方文档
https://platform.openai.com/docs/guides/fine-tuning/example-notebooks
  • OpenAI Github案例
https://github.com/openai/openai-cookbook


供稿 | 十字巷东、完颜小苏打
审核 | Gavin LYU


文章转载自瀚高数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论