平常咱们都会收到许多短信,由于微信等即时通讯东西的遍及,短信已经成为了一个验证码接收器,可是偶尔也有不少废物短信,所以对短信进行分类和屏蔽是一个很简略又很重要的需求。
现在在AppStroe上有许多完结短信分类的App,比方《熊猫吃短信》,有需求能够自行下载体会一下。处理这样的一个简略的需求的App,就能够让App的开发者赚不少钱,咱们能够学习一下这种需求用GPT-3怎么完结。
今天这个教程,咱们能够运用GPT-3模型来完结一个废物短信分类器,能够做为一个GPT3模型二次开发练习的简略的入门练手项目
由于运用本钱的原因(练习完结调用接口仍然需求付费,而且更贵),此方法不合适用于正式的出产环境,仅作为学习体会运用,等候今后会有本钱更低更适宜的方法。
*假如您没有开发根底也能够了解学习练习进程,再找到有根底的程序员代为练习 *
练习数据
期望练习什么,就要准备什么数据,假如想要做一个通用的短信辨认那就需求尽可能的广泛而多的短信样本,这个案例咱们只取一个人的短信来练习,需求的样本数量能够很少,练习出来的模型也会很适用于这个人。
咱们从某位同学手机上直接导出了一万条短信(好几年没删),然后随机取了500条短信作为样本进行标示,将短信分红四个简略的类型:告诉短信、废物短信、公益短信、正常短信,然后将文件保存为.csv格局的文件,放到项目文件夹
分类 | 短信内容 |
---|---|
告诉短信 | 【码上购】【网上营业厅】您的订单正在做修正证件操作,验证码:522348,非自己赞同请勿向他人供给验证码信息 |
告诉短信 | 敬重的客户:您好!您所反映的问题(工单号:TS00000000000000)已处理完毕,我司将跟进满足度调查,如您收到提示短信,请对咱们的服务给予10分的满足点评。感谢您的理解和支持!<湖南联通10010> |
废物短信 | 交费、充值更多人选联通手机营业厅,安全快捷,固定面值本机交费享受9.95折,快来体会吧!u.10010.cn/khddf2 |
公益短信 | 公益短信:4月15日是全民国家安全教育日。国家安全,人人有责!发现损害国家安全的状况,请拨打举报电话12339,一经查实将予奖赏。【湖南省国家安全厅】 |
正常短信 | 今天上午能够装置吗老板 |
留意事项
-
样本数量最少200条,建议500条以上,数据越多准确率越高
-
做分类练习,每个类型至少有100个样本,不然会影响准确率
-
确保练习的样本与实际运用的状况是十分相似的,不然影响准确率
-
假如样本里边包含灵敏信息,能够用*号或许某某来进行脱敏处理,不会影响练习作用
-
每条样本添加一个结束符,比方“###”或许“->”,假如没有添加,转化东西会问是否需求帮你添加
这儿需求留意,咱们将短信分为四种,并且用中文表明,是便利咱们教程测验,实际运用中,运用数字替代中文分类,咱们将分类换成:
正常短信=1, 告诉短信=2, 公益短信=3, 废物短信=4
由于模型接口是按token收费的,能够理解为按字数收费,用数字就能够节省一些本钱
别的,练习的模型有四种可选,davinci、curie、babbage、ada
其间ada价格最廉价,性能最好,像这种分类的简略需求,运用ada模型就能够了。
四种模型的价格如下:
模型 | 练习价格 | 练习完结调用价格 |
---|---|---|
Ada | $0.0004 / 1K tokens | $0.0016 / 1K tokens |
Babbage | $0.0006 / 1K tokens | $0.0024 / 1K tokens |
Curie | $0.0030 / 1K tokens | $0.0120 / 1K tokens |
Davinci | $0.0300 / 1K tokens | $0.1200 / 1K tokens |
每1千token,token大约相当于字数,一个中文字约为2个token,一条短信大约为140个token,假如咱们以ada模型作为练习模型,换算下来,辨认1千条短信大约本钱为1.568人民币。
价格不算廉价,可是人类历史上一切有需求但价格昂贵的东西,最终都会被市场打下来的。
练习进程
首要装置最新的openai库
pip install --upgrade openai
然后导入open的密钥,能够运用环境变量导入的方法
export OPENAI_API_KEY="<填你的openai密钥>" // linux体系
set OPENAI_API_KEY="<填你的openai密钥>" // windows体系
GPT-3练习需求将样本数据转化为他们要求的JSONL格局
{"prompt": "输入的提示", "completion": "输出的成果"}
...
{"prompt":"sms: 今天上午能够装置吗老板 ->", "completion":" 正常短信"}
……
咱们能够运用openai供给的转化东西,来换为符合要求的格局
openai tools fine_tunes.prepare_data -f <样本文件地址>
openai tools fine_tunes.prepare_data -f sms_classifier/sms_sample_500_converted.csv
首要将咱们csv文件的表头,改成 prompt 和 completion,代表输入和输出的内容,然后在信息前面加一个标志(sms: ),用于差异正常的内容
completion | prompt |
---|---|
告诉短信 | sms:【码上购】【网上营业厅】您的订单正在做修正证件操作,验证码:522348,非自己赞同请勿向他人供给验证码信息! |
处理好csv文件之后,执行命令进行转化
openai tools fine_tunes.prepare_data -f sms_classifier/sms_sample_500_converted.csv
其间提示咱们一些留意事项,一路点选Y就能够了
(venv) D:\dev2023\openai-tutorial>openai tools fine_tunes.prepare_data -f sms_classifier/sms_sample_500_converted.csv
Analyzing...
- Based on your file extension, your file is formatted as a CSV file
- Your file contains 441 prompt-completion pairs
- Based on your data it seems like you're trying to fine-tune a model for classification
- For classification, we recommend you try one of the faster and cheaper models, such as `ada`
- For classification, you can estimate the expected model performance by keeping a held out dataset, which is not used for training
- All prompts end with suffix ` ##`
- All prompts start with prefix `sms: `
- The completion should start with a whitespace character (` `). This tends to produce better results due to the tokenization we use. See https://beta.openai.com/docs/guides/fine-tuning/preparing-your-dataset for
more details
Based on the analysis we will perform the following actions:
- [Necessary] Your format `CSV` will be converted to `JSONL`
- [Recommended] Add a whitespace character to the beginning of the completion [Y/n]: y
- [Recommended] Would you like to split into training and validation set? [Y/n]: y
Your data will be written to a new JSONL file. Proceed [Y/n]: y
Wrote modified files to `sms_classifier/sms_sample_500_converted_prepared_train.jsonl` and `sms_classifier/sms_sample_500_converted_prepared_valid.jsonl`
Feel free to take a look!
Now use that file when fine-tuning:
> openai api fine_tunes.create -t "sms_classifier/sms_sample_500_converted_prepared_train.jsonl" -v "sms_classifier/sms_sample_500_converted_prepared_valid.jsonl" --compute_classification_metrics --classification_n_classes 4
After you’ve fine-tuned a model, remember that your prompt has to end with the indicator string ` ##` for the model to start generating completions, rather than continuing with the prompt.
Once your model starts training, it'll approximately take 12.92 minutes to train a `curie` model, and less for `ada` and `babbage`. Queue will approximately take half an hour per job ahead of you.
其间东西会帮咱们将样本分红练习集和测验集,以便练习完结之后测验练习的作用
同时也提示咱们:
-
练习完结后,正常的调用也需求保持与样本相同的请求格局
-
假如选择curie模型,大约需求12.92分钟,假如选择ada或许babbage模型则更短一些
开始练习
这儿咱们指定模型为ada:-m ada
指定练习的名称为:–suffix sms_classifier
(venv) D:\dev2023\openai-tutorial>openai api fine_tunes.create -m ada --suffix "sms_classifier" -t "sms_classifier/sms_sample_500_converted_prepared_train.jsonl" -v "sms_classifier/sms_sample_500_converted_prepared_valid.jsonl" --compute_classification_metrics --classification_n_classes 4
Upload progress: 100%|██████████████████████████████████████████| 97.6k/97.6k [00:00<00:00, 95.8Mit/s]
Uploaded file from sms_classifier/sms_sample_500_converted_prepared_train.jsonl: file-HQgXiRZBxwn7In0sUax1WVdj
Upload progress: 100%|██████████████████████████████████████████| 24.3k/24.3k [00:00<?, ?it/s]
Uploaded file from sms_classifier/sms_sample_500_converted_prepared_valid.jsonl: file-gtmsXSjMpmdFowRQ8Hn0FxbX
Created fine-tune: ft-tEt9Oo95zgJ42KJvP4nS8nee
Streaming events until fine-tuning is complete...
(Ctrl-C will interrupt the stream, but not cancel the fine-tune)
[2023-02-14 11:56:00] Created fine-tune: ft-tEt9Oo95zgJ42KJvP4nS8nee
这儿提示已经创建了一个练习使命,回来了一个使命ID:ft-zYQQqF1bBvOgiFllSR8R9jvZ
后边咱们能够经过这个使命ID来查询详细的状况
按Ctrl+C能够中止输出使命练习状况,但不会中止使命
假如发生中止,能够运用命令持续检查记录
openai api fine_tunes.follow -i <使命ID>
等候一会后能够看到已经完结了练习
(venv) D:\dev2023\openai-tutorial>openai api fine_tunes.follow -i ft-wHXGw263e8ujLaDHNQGqYB6K
[2023-02-14 13:36:56] Created fine-tune: ft-wHXGw263e8ujLaDHNQGqYB6K
[2023-02-14 13:44:57] Fine-tune costs $0.10
[2023-02-14 13:44:58] Fine-tune enqueued. Queue number: 1
[2023-02-14 13:44:58] Fine-tune is in the queue. Queue number: 0
[2023-02-14 13:45:01] Fine-tune started
[2023-02-14 13:46:10] Completed epoch 1/4
[2023-02-14 13:47:07] Completed epoch 2/4
[2023-02-14 13:48:03] Completed epoch 3/4
[2023-02-14 13:48:59] Completed epoch 4/4
[2023-02-14 13:49:24] Uploaded model: ada:ft-personal:sms-classifier-2023-02-14-05-49-24
[2023-02-14 13:49:25] Uploaded result file: file-SaX4z4avlLH8KXDFM3UyNFoU
[2023-02-14 13:49:25] Fine-tune succeeded
Job complete! Status: succeeded
Try out your fine-tuned model:
openai api completions.create -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24 -p <YOUR_PROMPT>
能够看到使命是消耗了$0.10,模型名称为:ada:ft-personal:sms-classifier-2023-02-14-05-05-31
咱们能够输入一条短信来测验一下成果,留意格局必须与样本的格局相同
其间 -M参数表明约束回来的token长度,由于咱们只需求回来咱们标签分类,所以回来长度1就能够了
(venv) D:\dev2023\openai-tutorial>openai api completions.create -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24 -p "sms: 你在哪里###" -M 1
sms: 你在哪里### 1
(venv) D:\dev2023\openai-tutorial>openai api completions.create -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24 -p "sms: 【京东】邀您参与调研,有机会得800京豆,点 3.cn/1EgRyx-J 回复TD8退订###" -M 1
sms: 【京东】邀您参与调研,有机会得800京豆,点 3.cn/1EgRyx-J 回复TD8退订### 4
能够看到模型已经能正常辨认一些全新的短信并正确分类。
怎么运用到出产环境中:
import openai
def model_predict(sms):
response = openai.Completion.create(
# 指定要运用的模型:这儿运用的是咱们练习好的模型
model="ada:ft-personal:sms-classifier-2023-02-14-05-49-24",
prompt="""sms: {sms}###""".format(sms=sms),
temperature=0.6,
max_tokens=1,
)
return response
if __name__ == '__main__':
sms = "【腾讯云】敬重的用户,您好,我是腾讯云技术顾问。您(账号ID: 123*****"
category = {"1": "短信", "2": "告诉短信", "3": "公益告短信", "4": " 废物短信"}
response = model_predict(sms)
print("判别成果:", category[response.choices[0].text])
输出
(venv) D:\dev2023\openai-tutorial>python sms_classifier/test.py
判别成果:告诉短信
迭代练习
可是现在准确率仍然不高,原因有二:
-
样本总量不够多
-
各分类的样本数量不均匀,有的太少(不到10条)
为了进步准确率,咱们后续还能够持续收拾样本,对当时模型进一步进行练习,不需求从头开始重新练习。
同时,持续收拾新样本时,能够先用模型进行辨认标示再人工校正,能够进步收拾速度。
在创建迭代练习使命时,添加参数:
-m curie: ft-< org >-< date >
也就是上次练习完结的名称:ada:ft-personal:sms-classifier-2023-02-14-05-49-24
与上次创建使命的参数相同,在后边添加参数:
openai api fine_tunes.create -m ada --suffix "sms_classifier" -t "sms_classifier/sms_sample_500_converted_prepared_train.jsonl" -v "sms_classifier/sms_sample_500_converted_prepared_valid.jsonl" --compute_classification_metrics --classification_n_classes 4 -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24
别的咱们还能够对每次的练习成果进行分析,这儿需求帮忙官方供给的其他东西,因篇幅有限这儿就不展开聊这个部分。
更多练习类型与商业运用
GPT-3经过练习能够运用在许多种场景,能够完结ChatGPT达不到的作用,能够完结更精准更强大的商业运用
咱们大致规划以下能够练习的类型:
内容分类器
能够完结对一段内容的分类,以下类型都能够用今天这篇教程的方法练习
- 短信分类、废物邮件分类
- 微博博文情绪判别(消沉/积极、正面/负面)
- 美食点评、点评内容的分类
- 网站留言是否为广告
- 微信群内信息是否为广告/是否为需求要点重视的信息
结构化信息提取
能够完结对一段内容进行结构化提取,取出咱们想要的要点字段
- 简历要点信息提取和挑选
- IPO招股书、上市公司年报等核心内容提取
- 从一段求职文本提取重要信息
- 快递地址结构化提取
上下文会话
经过练习对话样本,能够练习一个对话机器人,完结专用的谈天客服机器人。
-
公司咨询客服机器人
-
在线出售谈天辅佐
-
语音呼叫应答逻辑处理
-
心理/法令/医疗等专业会话咨询
信息嵌入查询
能够经过加载外部数据库,完结更强大的信息查询功用,在专业范畴进行运用
- 律师文本撰写:比方输入案由生成法令条文依据
- 患者病历确诊,输入病历和确诊成果练习,从而辅佐医生判别病情
- 银行信贷审阅,输入借款客户各项信息,输出判别
留意:一切练习样本都能够脱敏处理,电话、姓名等隐私信息请悉数用***号替代。
练习完之后的模型和数据是私有的,只能在你的账号之下运用。
假如您有以上内容的或许能够完结相似功用的样本,愿意与咱们合作,能够联络咱们代为练习,能够在您的账号之下练习,这项服务现在不收费用。
本次共享一切的代码和数据聚会放在大众号后,请重视大众号并回复:短信分类器 获取。
ChatGPT正在敏捷走红,全球都在推广和重视这个项目,许多人也正在尝试从中变现获利。但是,他们所采用的方法往往都过于简略和低门槛,如“写作文”、“写求职信”等。为了完结更高水平的商业价值,咱们期望尝试更杂乱,更深度定制的方法。例如,咱们能够经过收集数据库并进行二次练习,比方练习一个合适公司实际状况的客户服务的机器人。 因而,咱们将在今后逐步共享咱们的研讨过程和操作方法,以协助那些期望深入了解GPT模型练习的朋友。这样,他们就能够以更低的技术门槛完结更高档的商业价值。
我的大众号:@大鹏学开发
加我拉你进沟通群:aaronpeng2046
此内容由猪猪代管运营,业务邮箱:1018097585@qq.com