访客须知:
python3 manage.py runserver
。如果您不熟悉以这种方式运行 Flask,请参阅 Flask-Script 的文档。如有不便,敬请谅解!截至2017年5月9日,项目主要包如下:
python3 manage.py runserver
从用户/开发人员的角度来看,该项目提供了一个更清晰的界面,用于修补序列到序列模型。理想的结果是聊天机器人 API 具有 Keras 的可读性,但具有更接近 TensorFlow 的灵活性。
在“客户端”端,使用模型参数并运行它们就像制作配置 (yaml) 文件、打开 python 解释器并发出一些命令一样简单。例如,以下代码片段是使用您的配置开始对康奈尔数据集进行训练(当然是在下载之后)所需的全部内容:
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
这只是与项目交互的一种方式。例如,用户还可以通过命令行参数传入参数,这些参数也将与他们指定的任何配置文件合并(如果发生冲突,则优先考虑命令行参数)。您还可以传递之前保存的聊天机器人的位置以继续训练它或开始对话。有关更多详细信息,请参阅main.py
Ubuntu对话语料库:预处理方法可以在notebooks文件夹中的ubuntu_reformat.ipynb中看到。该数据集的预期用途是多轮对话的响应排名,但我采用了相当简单的方法,提取话语对并将其解释为单句到单响应,这与编码器和解码器的输入相对应,分别在模型中。
康奈尔电影对话:我从康奈尔语料库的这个预处理版本开始,并进行了一些细微的修改以减少噪音。
Reddit 评论:大约。 17 亿条 Reddit 评论。目前正在对这个庞大的数据集进行预处理并将其缩减为适合训练对话模型的格式。完成后将发布处理后的数据集下载链接!
DynamicBot:使用 model_components.py 中的自定义类提供的更加面向对象的方法。结果是更快的在线批量串联嵌入和更自然的聊天方法。它利用了 TensorFlow 1.0 版本中的(非常棒的)新的 python API,特别是dynamic_rnn。它还遵循良好的变量范围实践和我在文档和源代码中观察到的常见张量流约定,这具有很好的副作用,例如 TensorBoard 中清晰的图形可视化。
SimpleBot:基于下面更复杂的“ChatBot”模型的简化分桶模型。尽管它在自定义存储桶分区方面不太灵活,并且在完整词汇表上使用稀疏 softmax 而不是采样,但它的实现要透明得多。与 ChatBot 不同,它很少使用 tf.contrib,并且或多或少是从“从头开始”实现的,即主要依赖于基本张量流方法。如果您是 TensorFlow 新手,那么通读其实现以了解张量流编程中的常见约定可能会很有用,因为这是我阅读 ChatBot 中所有方法的源代码并编写自己的更紧凑的结果解释。
ChatBot:本 TensorFlow 教程中描述的模型的扩展版本。架构特征:分桶输入,解码器使用注意机制(参见我的笔记第 69 页,输入嵌入了 tf.contrib 库中提供的简单函数。还采用了采样的 softmax 损失函数以允许更大的词汇量(第 69 页)注释 67):由于存储桶模型的性质,与其他模型相比,创建模型需要更长的时间,主要瓶颈似乎是最大存储桶的大小以及如何基于存储桶创建梯度操作。桶尺寸。
该网页目录展示了一种在 Flask 应用程序中部署 TensorFlow 模型的简单且节省空间的方法。模型被“冻结”——聊天不需要的所有组件(例如优化器)都被删除,所有剩余的变量都被转换为常量。当用户单击模型名称时,就会创建该模型的 REST API。当用户在表单中输入句子时,会发出 (AJAX) POST 请求,其中响应是聊天机器人的响应句子。有关 REST API 的更多详细信息,请参阅views.py。
Flask应用程序遵循最佳实践,例如使用蓝图来实例化应用程序、根据应用程序环境(例如开发或生产)使用不同的数据库等等。
在这里,我将更详细地介绍如何构建模型以及如何将它们可视化。本部分正在进行中,尚未完成。
它不是使用feed_dict
参数将数据批量输入到模型中,而是在图结构本身中更快地编码输入信息和预处理技术。这意味着我们在训练时不会向模型提供任何内容。相反,该模型使用一系列队列来访问 google 的 protobuf 格式的文件中的数据,将文件解码为张量序列,动态批处理和填充序列,然后将这些批次提供给嵌入解码器。全部在图结构内。此外,该数据处理是由多个线程并行协调的。我们可以使用张量板(以及变量范围的最佳实践)来在高层可视化这种类型的管道。
(更多描述即将推出!)
对这些模型进行了大量研究,我在深度学习笔记的最后一部分中记录了我对最“重要”论文的笔记。这些笔记还包括我如何尝试将论文中的材料翻译成 TensorFlow 代码。随着更多论文中的想法融入到这个项目中,我将对其进行更新。
文件:
在线资源: