当前位置: 首页 > 科技观察

使用GPT-3构建适合公司业务的聊天机器人

时间:2023-03-19 15:08:16 科技观察

背景聊天机器人或客服助理是希望通过在互联网上向用户传递文本或语音来实现商业价值的AI工具。聊天机器人的发展在过去几年里进展迅速,从最初的基于简单逻辑的机器人发展到现在基于自然语言理解(NLU)的人工智能。对于后者,构建此类聊天机器人最常用的框架或库有国外的RASA、Dialogflow、AmazonLex,国内也有百度、科大讯飞等巨头。这些框架可以集成自然语言处理(NLP)和NLU来处理输入文本、对意图进行分类并触发正确的操作以生成响应。随着大型语言模型(LLM)的出现,我们可以直接使用这些模型来构建功能齐全的聊天机器人。著名的LLM例子之一是来自OpenAI的GenerativePre-trainedTransformer3(GPT-3:chatgpt是基于gpt微调并加入人类反馈模型),它可以使用对话或会话数据微调模型,生成类似于自然对话的文本。此功能使其成为构建自定义聊天机器人的绝佳选择。今天我们就来说说如何通过微调GPT-3模型,搭建一个简单的满足自己的对话式聊天机器人。通常,我们希望在我们自己的业务对话示例数据集上微调模型,例如客户服务对话记录、聊天记录或电影中的字幕。微调过程调整模型的参数以更好地适应这些对话数据,使聊天机器人更好地理解和响应用户输入。为了微调GPT-3,我们可以使用HuggingFace的Transformers库,它提供了预训练模型和微调工具。该库提供了多个不同大小和更多功能的GPT-3模型。模型越大,它可以处理的数据越多,它的准确度也可能越高。不过,为了简单起见,我们这次使用的是OpenAI接口,只需编写少量代码即可实现微调。下一步是我们使用OpenAIGPT-3来实现微调。您可以从此处获取数据集。抱歉,我又用了国外的数据集。国内这样处理过的数据集真的很少。1.创建一个OpenAPIkey创建一个账户非常简单,你可以使用这个链接来完成。我们可以通过openaikey访问OpenAI上的模型。创建API密钥的步骤如下:登录您的账户进入页面右上角,然后点击账户名称,下拉列表,点击“查看API密钥”点击“创建新密钥”,记得马上复制生成记住秘钥,一定要妥善保管,否则以后查不到了。2.准备数据我们已经创建好了apikey,接下来我们就可以开始准备微调模型的数据了,这里可以查看数据集。第一步:安装OpenAI库pipinstallopenai安装完成后,我们可以加载数据:=os.getenv('OPENAI_KEY')data=pd.read_csv('data/data.csv')new_df=pd.DataFrame({'InterviewAI':data['Text'].iloc[::2].values,'Human':data['Text'].iloc[1::2].values})print(new_df.head(5))我们将问题加载到InterviewAI列中,并将相应的答案加载到Human列中。我们还需要创建一个环境变量.env文件来保存OPENAI_API_KEY接下来,我们将数据转换为GPT-3标准。根据文档,确保使用两个键将数据格式化为JSONL很重要:提示例如完成{"prompt":"","completion":""}{"prompt":"","completion":""}重构数据集以适应上述内容,基本上遍历数据框中的每一行并将文本分配给Human和InterviewAI文本分配完成。output=[]forindex,rowinnew_df.iterrows():print(row)completion=''line={'prompt':row['Human'],'completion':row['InterviewAI']}输出.append(line)print(output)withopen('data/data.jsonl','w')asoutfile:foriinoutput:json.dump(i,outfile)outfile.write('\n')使用prepare_data命令会在出现提示时提出一些问题,我们可以提供Y或N响应。os.system("openaitoolsfine_tunes.prepare_data-f'data/data.jsonl'")最后,一个名为data_prepared.jsonl的文件被转储到目录中。3、fun-tuning模型对于fun-tuning模型,我们只需要运行一行命令:os.system("openaiapifine_tunes.create-t??'data/data_prepared.jsonl'-mdavinci"),它基本上使用准备好的数据来自OpenAI来训练davinci模型,微调后的模型将存储在用户配置文件下,可以在模型下的右侧面板中找到。4.模型调试我们可以使用多种方法来验证我们的模型。它可以直接从Python脚本、从OpenAIPlayground进行测试,或者通过使用像Flask或FastAPI这样的盒子构建Web服务来进行测试。让我们首先构建一个简单的函数来与此实验的模型进行交互。defgenerate_response(input_text):response=openai.Completion.create(engine="davinci:ft-personal-2023-01-25-19-20-17",prompt="以下是与AI助手DSA的对话。""DSA是一个面试机器人,在数据结构和算法方面非常有帮助和知识。\n\n""人类:你好,你是谁?\n""DSA:我是DSA,面试数字助理。如何我今天帮你?\n""人:{}\nDSA:".format(input_text),temperature=0.9,max_tokens=150,top_p=1,frequency_penalty=0.0,presence_penalty=0.6,stop=["\n","Human:","DSA:"])returnresponse.choices[0].text.strip()output=generate_response(input_text)print(output)把它们放在一起。importosimportjsonimportopenaiimportpandasaspdfromdotenvimportload_dotenvload_dotenv()os.environ['OPENAI_API_KEY']=os.getenv('OPENAI_KEY')openai.api_key=os.getenv('OPENAI_KEY')data=pd.read_csv('data/data.csv')new_df=pd.DataFrame({'面试AI':data['Text'].iloc[::2].values,'Human':data['Text'].iloc[1::2].values})print(new_df.head(5))output=[]forindex,rowinnew_df.iterrows():print(row)completion=''line={'prompt':row['Human'],'completion':row['InterviewAI']}output.append(line)print(output)withopen('data/data.jsonl','w')asoutfile:foriinoutput:json.dump(i,outfile)outfile.write('\n')os.system("openaitoolsfine_tunes.prepare_data-f'data/data.jsonl'")os.system("openaiapifine_tunes.create-t??'data/data_prepared.jsonl'-mdavinci")defgenerate_response(input_text):response=openai.Completion.create(engine="davinci:ft-personal-2023-01-25-19-20-17",舞会pt="以下是与AI助手DSA的对话。""DSA是一个面试机器人,在数据结构和算法方面非常有帮助和知识。\n\n""人类:你好,你是谁?\n""DSA:我是面试数字助理DSA,今天有什么可以帮到你的吗?\n""Human:{}\nDSA:".format(input_text),temperature=0.9,max_tokens=150,top_p=1,frequency_penalty=0.0,presence_penalty=0.6,stop=["\n","Human:","DSA:"])returnresponse.choices[0].text.strip()示例响应:input_text="whatisbreadthfirstsearchalgorithm"output=generate_response(input_text)广度优先搜索(BFS)是一种在计算机网络图或树数据结构中从起点发现所有可达节点的算法结论GPT-3是一个强大的大规模语言生成model,最近火爆的chatgpt,就是基于GPT-3上fine-tuning的。我们也可以在GPT-3上进行微调,构建适合自己业务的聊天机器人fun-tuning过程调整模型的参数,以更好地适应业务对话数据,让机器人更好地理解和响应业务需求。微调后的模型可以集成到聊天机器人平台来处理用户交互,也可以生成客服回复习惯,让聊天机器人与用户进行交互。整个实现可以在这里找到,数据集可以从这里下载。