查看原文
其他

定制属于自己的“贾维斯”——Python调用Chat

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:罗天尧,新疆大学商学院‍

本文编辑:周一鸣

技术总编:方一卓

Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
语言流畅,功能强悍,从私人定制到无限可能,这些都来自openAI的Chat生成预训练变换模型。
定制化的Chat有什么用?可以根据研究需求进一步修改参数;直接将生成的数据进行保存,避免复制粘贴的困扰;开启隐藏功能……
跟随本文创建自己的“贾维斯”。Just A Rather Very Intelligent System!
1.  准备工作

本文使用Python3.7及Pycharm编译器完成。

在使用前,我们需要在terminal中pip install openai。
安装完成后,可以使用以下代码测试:
import openaiopenai.api_key='U KEY' #此处填写你自己的key(openAI官网右上角登录——view APIkey--creatnewkey(及时复制,关闭后显示不全))model_list=openai.Model.list() #查看可用modelprint(model_list)
测试有误的用户,可以尝试领悟下图:

2.  语言交互
这是一段基础的调用代码:
import openaiopenai.api_key='U KEY'
def chat(question:str): #定义传入参数,方便下次调用 resp=openai.ChatCompletion.create( #创建聊天对象 model="gpt-3.5-turbo", #gpt-3.5-turbo-0301:OpenAI 在 2023.3.1 发布的新模型,带来了一些改进。不过可能没有老模型稳定。 messages=[ #{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": question}, # {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."}, # {"role": "user", "content": "Where was it played?"} ] )
print(resp['choices'][0]['message']['content']) #返回时请使用该格式,以便提取文本
chat("tell me something about Python&Stata") #调用函数

根据官方文档,聊天时采用的是{"role": "user", "content": " "}格式,这是为了更好地训练语言模型;由于目前chat的上下文管理还是有一定的限制,因此类似{"role": "system", "content": "You are a helpful assistant."}的标注,更像是一个定制化模板,使Chat能“回忆起”历史内容。

下为返回的数据:

除了上面的参数外,我们还可以设置一些进阶参数:
temperature:调整模型的softmax输出层中预测词的概率。参数越大,生成的文本越随机(“创造性”更强),一般0.5-0.9之间都可以尝试。
top_p:类似 temperature。对应机器学习中 nucleus sampling,参数越大,文本越不可控,当然生成的文本也会更加灵活多样。
frequency_penalty和presence_penalty:控制字符、主体的重复度,取值为±2。
max_tokens:允许的最大tocken数,如果你遇见过chat“走神”的情况,那么可以试试这个参数。一般而言,平均 2 个 token对应一个汉字字符。text-davinci-003 最多是 4000 个 tokens。
3.  AI画图
OpenAI通过Dall-E模型实现画图功能。相较于其他版本的AI调教,ChatGPT绘图Api提供的语义识别和图像识别确实较弱,甚至无法正确画出“小黑子露出了鸡脚”一图。

import requestsfrom PIL import Image
def picture(describe:str): response=openai.Image.create( #注意这里换方法了 prompt=describe, n=1, size="1024x1024" ) image_url = response['data'][0]['url'] #不同于文本,返回的是url r = requests.get(image_url) with open('test.png', 'wb') as f: #写入保存 f.write(r.content) img = Image.open('test.png') #可视化对象 img.show() #打开对象
picture('pretty cute dog')

一只“可爱”的狗。

4.  关于语言交互的补充
chat的API的特点是,将一些特殊的、更专业的功能单独罗列出来,但如果这些接口没有我们需要的功能时,我们仍可以向基础的ChatCompletion方法求助。

比如对文本的纠错。
def correct(sentence:str): prompt=f"改正错词输出正确句子:\n\n{sentence}" resp= openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content":prompt} ]) answer = resp.choices[0].message.content print(answer)

correct("I loves Stata&Python")

返回的修改后的文本:

当然,我们可以开发chat的多种能力,提供一些思路:①文本分析:关键词提取、情感分析、可读性等;②编程:Stata与Python的爬虫模板、纠错;③理论解读、计量模型选择(当前chat的数学分析能力还相对较差)。
一个词向量的案例:
def embedding(sentence:str): content = sentence response = openai.Embedding.create( #词向量方法 model="text-embedding-ada-002", #指定模型 input=content) answer = response.data[0].embedding print(answer)
embedding('做一个文本分析') #需要转换的文本

成品算法,极大减轻了研究者的编程压力;未来并发限制减弱的话,研究者甚至不需要为设备的算力限制担忧。

5. AI“微整形”
openAI还提供了fine tune接口,帮助我们训练自己的模型,进一步满足业务场景下的精确需求。官方推荐的用法:分类器、围绕关键词的训练(https://platform.openai.com/docs/guides/fine-tuning)。
训练文本的格式:“prompt”:“文本内容”, “completion”:“标记”。
操作在terminal中完成:
pip install --upgrade openai #安装export OPENAI_API_KEY="<OPENAI_API_KEY>" #导入自己的keyopenai tools fine_tunes.prepare_data -f <LOCAL_FILE> #指定文件位置(格式:CSV, TSV, XLSX, JSON or JSONL)openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL> #指定模型(ada, babbage, curie, or davinci)和训练集路径

训练完成后,在playground选择自己的model,并进行相关配置参数(https://platform.openai.com/playground)。而后,便可直接在python中调用了(调整model参数名称即可)。

import openaiopenai.Completion.create( model=FINE_TUNED_MODEL, prompt=YOUR_PROMPT)
本文提供实际操作的注意事项:
需要$,类似API收费规则,根据模型收费!但一般在10¥以内,还能接受;
训练样本集至少在100以上,但单个不超过2048 tockens;
训练时间15-20分钟。
END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐一探究竟之main函数学会format,数据格式任你拿捏【Python实战】游客最青睐的城市,你的家乡上榜了吗?

What’ new ? 速通Stata 18

【爬虫实战】Python爬取美食菜谱揭秘网络中心人物,你会是其中之一吗?考研之后,文科生需以“do”躬“do”!焕新升级!轻松获取港股、权证的历史交易数据爬虫俱乐部的精彩答疑---cntraveltime【爬虫俱乐部新命令速递】在Stata中与ChatGPT对话

用`fs`命令批量获取文件夹和不同文件夹下的excel文件

自然语言处理之实例应用

JSON帮手,FeHelper

最新、最热门的命令这里都有!

Python实现微信自动回复告诉python,我想“狂飙”了——线程池与异步协程为爬虫提速高级函数——map()和reduce()

Stata绘制条形图的进阶用法

快来看看武汉的房价是不是又双叒叕涨了!
     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存