当前位置:   article > 正文

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

聊天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代码处理原始文本文件:

  1. #import pandas as pd
  2. from datetime import datetime
  3. path1="xb/data.txt"#处理前原文件地址
  4. path2="xb/dstdata.txt"#处理后中间文件地址
  5. path3="xb/dstdata1.txt"#最终地址
  6. # Open file
  7. fileHandler2= open (path2, "w",encoding='utf-8')
  8. fileHandler2.write("")
  9. fileHandler2.close()
  10. fileHandler = open (path1, "r",encoding='utf-8')
  11. dstfile = open(path2,'a',encoding='utf-8')
  12. # Get list of all lines in file
  13. listOfLines = fileHandler.readlines()
  14. # Close file
  15. fileHandler.close()
  16. lastline=""
  17. name = ""
  18. last_name=""
  19. olddate=""
  20. for i,line in enumerate(listOfLines):
  21. 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-'):
  22. #date = line.split(' ')[-3]
  23. #time = line.split(' ')[-2]
  24. #print(line.split(' ')[-3])
  25. date=datetime.strptime(line.split(' ')[-3]+' '+line.split(' ')[-2],'%Y-%m-%d %H:%M:%S')
  26. name=line.split(' ')[-1]
  27. if listOfLines[i+1]=='':
  28. olddate=date
  29. print("jump")
  30. #last_name=name
  31. continue
  32. if olddate=="":
  33. olddate=date
  34. delta=date-olddate
  35. #print(delta.total_seconds()/3600)
  36. if delta.total_seconds()/3600>=1.5:#聊天间隔超过1.5小时的视为不同对话
  37. olddate=date
  38. text=listOfLines[i+1].replace('\n','')
  39. dstfile.write('\n\n'+text)
  40. last_name=name
  41. continue
  42. if(name==last_name):
  43. flag=1
  44. else:
  45. flag=0
  46. last_name=name
  47. #print(name)
  48. #continue
  49. if(flag==1):
  50. text=listOfLines[i+1].replace('\n','')
  51. dstfile.write(' '+text)
  52. #multiLine+=(' '+line)
  53. else:
  54. text=listOfLines[i+1].replace('\n','')
  55. dstfile.write('\n'+text)
  56. #import pandas as pd
  57. from datetime import datetime
  58. import re
  59. # Open file
  60. fileHandler3= open (path2, "w",encoding='utf-8')
  61. fileHandler3.write("")
  62. fileHandler3.close()
  63. fileHandler = open (path2, "r",encoding='utf-8')#原地址
  64. dstfile = open(path3,'a',encoding='utf-8')#目的地址
  65. # Get list of all lines in file
  66. listOfLines = fileHandler.readlines()
  67. # Close file
  68. fileHandler.close()
  69. lastline=""
  70. name = ""
  71. last_name=""
  72. olddate=""
  73. for i,line in enumerate(listOfLines):
  74. if line.lstrip()=='':
  75. dstfile.write("\n\n")
  76. continue
  77. line2=line.lstrip()
  78. text = re.sub(r"([\u4e00-\u9fa5a-zA-Z0-9])(\s+)([\u4e00-\u9fa5a-zA-Z0-9])",r'\1,\3',line2)
  79. #text=line2.replace(' ',',')
  80. dstfile.write(text)

第三步:训练机器人

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/346370
推荐阅读
相关标签
  

闽ICP备14008679号