从训练AI到部署搭建网站(一)训练自己的聊天机器人

最近GPT非常火热,于是突发奇想能不能用自己和朋友聊天的数据训练一个对话机器人,不过因为自己第一次做这方面的内容,所以过程可能不是最优的方案

第一步:获取数据集

这里选用的QQ聊天 ,QQ聊天数据有加密。之前看见一篇博客说可以直接在电脑导出txt数据,但鉴于自己的聊天记录在手机上且手机未root,所以这里选择用MUMU模拟器。全过程可以直接参考:安卓QQ聊天记录导出、备份完全攻略 - roadwide - 博客园 (cnblogs.com)。这里写一下我用这个教程导出的过程,供参考。

登入QQ,把聊天记录先全部备份到电脑。再备份到MUMU模拟器的QQ上面。左下角三条横杠打开,选择聊天记录备份与恢复

记得先获取模拟器root权限,网易MuMu怎么开启root权限-百度经验 (baidu.com)

然后在MUMU模拟器上确认聊天记录已全部转移后,点开系统应用--》文件管理器-->/data/data/com.tencent.mobileqq/databases  里面的你的QQ号.db,然后根据大佬的python脚本处理.db文件。

第二步:处理QQ文本

我们获取的文件格式包括QQ号,日期, 时间等等,需要将它拆成一段段的对话以供训练,就自己写了个python代码处理原始文本文件:

#import pandas as pd
from datetime import datetime
path1="xb/data.txt"#处理前原文件地址
path2="xb/dstdata.txt"#处理后中间文件地址
path3="xb/dstdata1.txt"#最终地址
# Open file    
fileHandler2=  open  (path2,  "w",encoding='utf-8')
fileHandler2.write("")
fileHandler2.close()
fileHandler  =  open  (path1,  "r",encoding='utf-8')
dstfile = open(path2,'a',encoding='utf-8')
# Get list of all lines in file
listOfLines  =  fileHandler.readlines()
# Close file
fileHandler.close()
lastline=""
name = ""
last_name=""
olddate=""
for i,line in enumerate(listOfLines):
        if(listOfLines[i][:5]=='2018-'or listOfLines[i][:5]=='2019-'or listOfLines[i][:5]=='2020-' or listOfLines[i][:5]=='2021-'or listOfLines[i][:5]=='2022-'or listOfLines[i][:5]=='2023-'):
            #date = line.split(' ')[-3]
            #time = line.split(' ')[-2]
            #print(line.split(' ')[-3])
            date=datetime.strptime(line.split(' ')[-3]+' '+line.split(' ')[-2],'%Y-%m-%d %H:%M:%S')
            name=line.split(' ')[-1]
            if listOfLines[i+1]=='':
                 olddate=date
                 print("jump")
                 #last_name=name
                 continue
            if olddate=="":
                olddate=date
            delta=date-olddate
            #print(delta.total_seconds()/3600)
            if  delta.total_seconds()/3600>=1.5:#聊天间隔超过1.5小时的视为不同对话
                 olddate=date
                 text=listOfLines[i+1].replace('\n','')
                 dstfile.write('\n\n'+text)
                 last_name=name
                 continue
            
            if(name==last_name):
                flag=1
            else:
                flag=0
            last_name=name
            
            
            #print(name)
            #continue
            if(flag==1):
                text=listOfLines[i+1].replace('\n','')
                dstfile.write(' '+text)
                #multiLine+=(' '+line)
            else:
                text=listOfLines[i+1].replace('\n','')
                dstfile.write('\n'+text)


#import pandas as pd
from datetime import datetime
import re
# Open file    
fileHandler3=  open  (path2,  "w",encoding='utf-8')
fileHandler3.write("")
fileHandler3.close()
fileHandler  =  open  (path2,  "r",encoding='utf-8')#原地址
dstfile = open(path3,'a',encoding='utf-8')#目的地址
# Get list of all lines in file
listOfLines  =  fileHandler.readlines()
# Close file
fileHandler.close()
lastline=""
name = ""
last_name=""
olddate=""
for i,line in enumerate(listOfLines):
    if line.lstrip()=='':
        dstfile.write("\n\n")
        continue
    line2=line.lstrip()
    text = re.sub(r"([\u4e00-\u9fa5a-zA-Z0-9])(\s+)([\u4e00-\u9fa5a-zA-Z0-9])",r'\1,\3',line2)
    
    #text=line2.replace(' ',',')
    dstfile.write(text)




第三步:训练机器人

这里我们已经有自己的训练数据了,可以直接参考yangjianxin1/GPT2-chitchat: GPT2 for Chinese chitchat/用于中文闲聊的GPT2模型(实现了DialoGPT的MMI思想) (github.com)

我们生成的txt放在里面替换data/train.txt,其他跟着训练流程走就行

注意,我的数据处理没有降噪,可以加上去掉红包,表情,图片,QQ语音等内容提高对话质量,对话聊天数据太少的也可以加上一些其他语料训练。

此外,可能是我的数据质量,训练时间等等不够,机器人主要只记住聊天常说的几句话,虽然勉强能对话但是有肉眼可见的傻

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值