资源简介

基于Python,使用TensorFlow实现的Sequence to Sequence的聊天机器人模型

资源截图

代码片段和文件信息

#!/usr/bin/env python3

__author__ = ‘qhduan@memect.co‘

import os
import sys
import json
import math
import shutil
import pickle
import sqlite3
from collections import OrderedDict Counter

import numpy as np
from tqdm import tqdm

def with_path(p):
    current_dir = os.path.dirname(os.path.abspath(__file__))
    return os.path.join(current_dir p)

DICTIONARY_PATH = ‘db/dictionary.json‘
EOS = ‘
UNK = ‘
PAD = ‘
GO = ‘

# 我一般是逗号放到句子后面的……
# 不过这样比较方便屏蔽某一行,如果是JS就不用这样了,因为JS的JSON语法比较松,允许多余逗号
buckets = [
    (5 15)
     (10 20)
     (15 25)
     (20 30)
]

def time(s):
    ret = ‘‘
    if s >= 60 * 60:
        h = math.floor(s / (60 * 60))
        ret += ‘{}h‘.format(h)
        s -= h * 60 * 60
    if s >= 60:
        m = math.floor(s / 60)
        ret += ‘{}m‘.format(m)
        s -= m * 60
    if s >= 1:
        s = math.floor(s)
        ret += ‘{}s‘.format(s)
    return ret

def load_dictionary():
    with open(with_path(DICTIONARY_PATH) ‘r‘) as fp:
        dictionary = [EOS UNK PAD GO] + json.load(fp)
        index_word = OrderedDict()
        word_index = OrderedDict()
        for index word in enumerate(dictionary):
            index_word[index] = word
            word_index[word] = index
        dim = len(dictionary)
    return dim dictionary index_word word_index

“““
def save_model(sess name=‘model.ckpt‘):
    import tensorflow as tf
    if not os.path.exists(‘model‘):
        os.makedirs(‘model‘)
    saver = tf.train.Saver()
    saver.save(sess with_path(‘model/‘ + name))

def load_model(sess name=‘model.ckpt‘):
    import tensorflow as tf
    saver = tf.train.Saver()
    saver.restore(sess with_path(‘model/‘ + name))
“““

dim dictionary index_word word_index = load_dictionary()

print(‘dim: ‘ dim)

EOS_ID = word_index[EOS]
UNK_ID = word_index[UNK]
PAD_ID = word_index[PAD]
GO_ID = word_index[GO]

class BucketData(object):

    def __init__(self buckets_dir encoder_size decoder_size):
        self.encoder_size = encoder_size
        self.decoder_size = decoder_size
        self.name = ‘bucket_%d_%d.db‘ % (encoder_size decoder_size)
        self.path = os.path.join(buckets_dir self.name)
        self.conn = sqlite3.connect(self.path)
        self.cur = self.conn.cursor()
        sql = ‘‘‘SELECT MAX(ROWID) FROM conversation;‘‘‘
        self.size = self.cur.execute(sql).fetchall()[0][0]

    def all_answers(self ask):
        “““找出所有数据库中符合ask的answer
        “““
        sql = ‘‘‘
        SELECT answer FROM conversation
        WHERE ask = ‘{}‘;
        ‘‘‘.format(ask.replace(“‘“ “‘‘“))
        ret = []
        for s in self.cur.execute(sql):
            ret.append(s[0])
        return list(set(ret))

    def random(self):
        while True:
            # 选择一个[1 MAX(ROWID)]中的整数,读取这一行
            rowid = np.random.randint(1 self.size + 1)
            sql = ‘‘‘
            SELECT ask answer FROM conversation
            WHERE ROWID = {};
            ‘‘‘.format(rowid)
            ret = self.cur.e

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\
     文件         123  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\.gitignore
     文件        4964  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\README.md
     文件         339  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\config.json
     文件        8892  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\data_utils.py
     目录           0  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\db\
     文件       10054  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\db\chinese.txt
     文件       75314  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\db\dictionary.json
     文件       11266  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\db\gb2312_level1.txt
     文件        9025  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\db\gb2312_level2.txt
     文件        5093  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\db\generate_dict.ipynb
     文件        2610  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\decode_conv.py
     文件        9331  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\s2s.py
     文件       10421  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\s2s_model.py
     文件         417  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\train_model.sh
     文件         419  2016-11-30 01:19  Seq2Seq_Chatbot_QA-master\train_model2.sh

评论

共有 条评论