tensorflow聊天机器人python实现_代码详解|tensorflow实现 聊天AI--PigPig养成记(1)

Chapter1.代码详解

完整代码github链接,Untitled.ipynb文件内。

【里面的测试是还没训练完的时候测试的,今晚会更新训练完成后的测试结果】

修复了网上一些代码的bug,解决了由于tensorflow版本不同引起的一些问题。

数据集链接 ,下载数据集后,解压提取dgk_shooter_min.conv文件,最好进行转码操作。建议用记事本打开后将其另存为,选择编码为utf-8后进行保存。

代码详解

(1)数据预处理

#coding=utf-8

#(1)数据预处理

import os

import random

from io import open

conv_path = 'dgk_shooter_min.conv.txt'

#判断数据集是否存在?

if not os.path.exists(conv_path):

print('数据集不存在')

exit()

# 数据集格式

"""

E

M 畹/华/吾/侄/

M 你/接/到/这/封/信/的/时/候/

M 不/知/道/大/伯/还/在/不/在/人/世/了/

E

M 咱/们/梅/家/从/你/爷/爷/起/

M 就/一/直/小/心/翼/翼/地/唱/戏/

M 侍/奉/宫/廷/侍/奉/百/姓/

M 从/来/不/曾/遭/此/大/祸/

M 太/后/的/万/寿/节/谁/敢/不/穿/红/

M 就/你/胆/儿/大/

M 唉/这/我/舅/母/出/殡/

M 我/不/敢/穿/红/啊/

M 唉/呦/唉/呦/爷/

M 您/打/得/好/我/该/打/

M 就/因/为/没/穿/红/让/人/赏/咱/一/纸/枷/锁/

M 爷/您/别/给/我/戴/这/纸/枷/锁/呀/

E

M 您/多/打/我/几/下/不/就/得/了/吗/

M 走/

M 这/是/哪/一/出/啊/…/ / /这/是/

M 撕/破/一/点/就/弄/死/你/

M 唉/

M 记/着/唱/戏/的/再/红/

M 还/是/让/人/瞧/不/起/

M 大/伯/不/想/让/你/挨/了/打/

M 还/得/跟/人/家/说/打/得/好/

M 大/伯/不/想/让/你/再/戴/上/那/纸/枷/锁/

M 畹/华/开/开/门/哪/

E

...

"""

# 我首先使用文本编辑器sublime把dgk_shooter_min.conv文件编码转为UTF-8,一下子省了不少麻烦

convs = [] # 对话集合

with open(conv_path, encoding="utf8") as f:

one_conv = [] # 一次完整对话

for line in f:

line = line.strip('\n').replace('/', '')#将分隔符去掉

if line == '':

continue

if line[0] == 'E':

if one_conv:

convs.append(one_conv)

one_conv = []

elif line[0] == 'M':

one_conv.append(line.split(' ')[1])

#将对话转成utf-8格式,并将其保存在dgk_shooter_min.conv文件中

print(convs[:3]) # 个人感觉对白数据集有点不给力啊

#[ ['畹华吾侄', '你接到这封信的时候', '不知道大伯还在不在人世了'],

# ['咱们梅家从你爷爷起', '就一直小心翼翼地唱戏', '侍奉宫廷侍奉百姓', '从来不曾遭此大祸', '太后的万寿节谁敢不穿红', '就你胆儿大', '唉这我舅母出殡', '我不敢穿红啊', '唉呦唉呦爷', '您打得好我该打', '就因为没穿红让人赏咱一纸枷锁', '爷您别给我戴这纸枷锁呀'],

# ['您多打我几下不就得了吗', '走', '这是哪一出啊 ', '撕破一点就弄死你', '唉', '记着唱戏的再红', '还是让人瞧不起', '大伯不想让你挨了打', '还得跟人家说打得好', '大伯不想让你再戴上那纸枷锁', '畹华开开门哪'], ....]

# 把对话分成问与答

ask = [] # 问

response = [] # 答

for conv in convs:

if len(conv) == 1:

continue

if len(conv) % 2 != 0: # 奇数对话数, 转为偶数对话

conv = conv[:-1]

for i in range(len(conv)):

if i % 2 == 0:

ask.append(conv[i])#偶数对,填写问题

else:

response.append(conv[i])#回答

print(len(ask), len(response))

print(ask[:3])

print(response[:3])

#['畹华吾侄', '咱们梅家从你爷爷起', '侍奉宫廷侍奉百姓']

#['你接到这封信的时候', '就一直小心翼翼地唱戏', '从来不曾遭此大祸']

def convert_seq2seq_files(questions, answers, TESTSET_SIZE=8000):

# 创建文件

train_enc = open('train.enc', 'w',encoding='utf-8') # 问

train_dec 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值