tensorflow seq2seq 聊天机器人

本文介绍了如何利用双向LSTM和注意力机制构建一个基于小黄鸡问答语料库的Seq2Seq聊天机器人。内容包括数据集准备、数据预处理、生成词汇表、模型搭建、训练函数以及测试过程。在测试阶段遇到的问题是无法连续输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面使用了双向LSTM和注意力机制

一.数据集准备

    我用的是 小黄鸡问答语料库,分为分词前,分词后,我用的是分词后

二.数据预处理

   1.生成词汇表(这里选取的前2500个常用词)

import collections
import codecs
from operator import itemgetter
counter=collections.Counter()
with codecs.open('C://RNN//Chat//小黄鸡.conv',encoding='utf-8') as f:
    for line in f:
        for word in line.strip().split():
            for w in word:
                if w!='M' and w!='E':
                    counter[w]+=1

sorted_word_to_cnt=sorted(counter.items(),key=itemgetter(1),reverse=True)

sorted_words=[x[0] for x in sorted_word_to_cnt]
sorted_words=["<unk>","<sos>","<eos>"]+sorted_words

sorted_words=sorted_words[:2500]

with codecs.open('C://RNN//Chat//vocab.txt','w',encoding='utf-8') as f:
    for word in sorted_words:
        f.write(word+"\n")

   2.把语料库里的问题与回答分开

这里可以看出,从零开始计数的话,偶数的M 后面跟的是问题,奇数M后面跟的是回答,所以按照如下分开

import codecs
import numpy as np
que=[]
ans=[]
index=0
with codecs.open('C://RNN//Chat//train.txt','r','utf-8') as f:
    for line in f.readlines():
        if line[0]=='M':
            if index % 2 == 0:
                que.append(line[2:])
                index += 1
            elif index %2==1:
                index+=1
                ans.append(line[2:])
np.save('C://RNN//Chat//question.npy',que)
np.save('C://RNN//Chat//answer.npy',ans)

3.把问题与答案转化为数字(回答 同下)

ques=np.load("C://RNN//Chat//question.npy")
convert_qs=[]
for line in ques:
    for word in line:
        convert_qs.append(get_id(word))
    convert_qs.append('\n')
np.savetxt('convert_qs.txt',convert_qs,fmt ='%s')

4.接下来还是数据的处理(这里处理后每一个batch的每一个例子是

((src_input,src_len),(trg_input,trg_label,trg_len))
解码器需要两种格式的目标句子:
#   1.解码器的输入(trg_input),形式如同"<sos> X Y Z"
#   2.解码器的目标输出(trg_label),形式如同"X Y Z <eos>"
# 上面从文件中读到的目标句子是"X Y Z <eos>"的形式,我们需要从中生成"<sos> X Y Z"
# 形式并加入到Dataset中。
import tensorflow as tf

question_path='C://RNN//Chat//convert_qs.txt'
answer_path='C://RNN//Chat//convert_as.txt'

MAX_LEN=30
SOS_ID=1
HIDDEN_SIZE=1024
NUM_LAYERS=2
VOCAB_SIZE=2500
SHARE_EMB_AND_SOFTMAX=True
KEEP_PROB=0.8
MAX_GRAD_NORM=5
LR=1
CHECKPOINT_PATH='C://RNN//Chat//save'
BATCH_SIZE=64
NUM_EPOCH=20
def MakeDataset(file_path):
    dataset=tf.data.Te
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值