【NLP实战】如何基于Tensorflow搭建一个聊天机器人

在C#中像Python一样编写TensorFlow机器学习代码 机器学习是一个激动人心的领域,一直有新的技术突破。研究人员不断推动机器智能的提升,教机器如何看,听,读,写和听——这些曾经是我们人类专属领域的技能。 机器学习的首选语言是Python,最受欢迎的库是Google的TensorFlow。几乎所有的代码示例都是用Python编写的,并且依赖于TensorFlow和NumPy库。对C#和.NET开发人员来说,我们面临着一个严峻的选择 - 要么学习Pyth... 阅读详情

实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式。因此,NLP专栏计划推出一个实战专栏,让有兴趣的同学在看文章之余也可以自动动手试一试。

本篇介绍如何基于tensorflow快速搭建一个基于seq2seq框架的聊天机器人。

作者&编辑 | 小Dream哥

1 语料准备 

用于聊天机器人训练的语料应该是一系列的问答对,即大量的如下的形式问答对:

Q:“今天天气怎么?”

A:“天气预报说今天会下大暴雨的”

此外,为了减少数据处理时的padding量,对训练语料进行了分桶的处理,如下图所示:

640?wx_fmt=png

所谓分桶,就是按照Q和A的长度进行重新的组织,例如上例Q的长度为7,A的长度为13,则这条语料会分在“bucket_5_15.db”文件中。

2 模型搭建

这里介绍的是基于seq2seq框架的聊天机器人,关于seq2seq框架的相关的理论内容,可以看一下笔者这一篇文章:

【NLP-ChatBot】能闲聊的端到端生成型聊天机器人背后都有哪些技术?

下面我们看看如何基于tensorflow,搭建一个seq2seq+attention的聊天机器人。

(1) 构建seq2seq编解码器的特征抽取器

这里采用LSTM作为encoder和decoder的特征抽取器:

# LSTM cells

(2) 处理输入数据

采用tensorflow的placeholder模块,先定义输入数据的shape。这里定义了encoder_inputs,decoder_inputs,decoder_weights,targets三个列表。

# inputs

#encoder_inputs表示解码器的输入,这个列表对象中的每一个元素表示一个占位符,其名字分别为encoder0, encoder1,…,encoder39

#encoder{i}的几何意义是编码器在时刻i的输入。

for i in range(buckets[-1][0]):

# 输出比输入大 1,这是为了保证下面的targets可以向左shift 1位

for i in range(buckets[-1][1] + 1):

 #target_weights 是一个与 decoder_outputs 大小一样的 0-1 矩阵。该矩阵将目标序列长度以外的其他位置填充为标量值 0。

(3) 搭建引入attention机制的seq2seq模型

encoder先将cell进行deepcopy,因为seq2seq模型是两个相同的特征抽取模型,但是模型参数不共享,所以encoder和decoder要使用两个不同的LSTMCell。

然后,直接调用系统函数embedding_attention_seq2seq()搭建引入attention机制的seq2seq模型。这里介绍下该函数的各个输入。

encoder_inputs:编码器的输入;

decoder_inputs:解码器的输入;

num_encoder_symbols:source的vocab_size大小,用于embedding矩阵定义;

num_decoder_symbols:target的vocab_size大小,用于embedding矩阵定义;

embedding_size:embedding向量的维度;

num_heads:Attention头的个数,就是使用多少种attention的加权方式,用更多的参数来求出几种attention向量;

output_projection: 输出的映射层,因为decoder输出的维度是output_size,所以想要得到num_decoder_symbols对应的词还需要增加一个映射层;

feed_previous:是否将上一时刻输出作为下一时刻输入,一般测试的时候置为True,此时decoder_inputs除了第一个元素之外其他元素都不会使用;

initial_state_attention:默认为False, 初始的attention是零;若为True,将从initial state和attention states开始。

def seq2seq_f(encoder_inputs, decoder_inputs, do_decode):

   return tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(#自定义的cell,可以是GRU/LSTM, 设置multilayer等# embedding 维度

(4)构建损失计算层

因为采用的是sampled_loss,在解码器和loss层要加一个projection层来做适配。

# 如果vocabulary太大,我们还是按照vocabulary来sample的话,内存会爆

构建sampled_loss层,也是直接调用sampled_softmax_loss函数,关于sampled_loss相关的理论问题,我们再找个机会单独讨论吧。

def sampled_loss(labels, logits):

(5) 计算损失和logits

这里调用了系统函数model_with_buckets,这样对每个bucket都构造一个模型,然后训练时取相应长度的序列,不同长度的模型参数共享。

self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(

(6) 构建优化器和保存训练模型

params = tf.trainable_variables()

    # 用梯度下降法优化# 模型参数保存

(7) 开始训练

params = tf.trainable_variables()

    # 用梯度下降法优化# 模型参数保存

模型搭建好之后,就可以给模型为数据,开始训练了。

def step(

#1.将语料放到之前定义好的列表中,待模型读取  for i in range(encoder_size): #2.开始训练

3 如何进行训练和测试

(1) 进行训练

在s2s.py中,做如下的设置,并设置好学习率,batch_size等其他超参数,执行s2s.py进行训练。

tf.app.flags.DEFINE_boolean(

开始训练后,会打印出来当前的loss值,如下图所示:

640?wx_fmt=png

模型文件会生成在model文件夹中。

(2) 进行测试

在s2s.py中,做如下的设置:

tf.app.flags.DEFINE_boolean(

然后,可以输入问句,看机器人怎么回答了。因为我训练的不充分,所以机器人的回答会出现重复的。另一方面,这种生成式的机器人,可控性不强,目前基本处于研究阶段。

640?wx_fmt=png

4 如何获取代码与交流

至此,介绍了如何利用tensorflow平台自己搭建一个基于seq2seq框架的聊天机器,代码在我们有三AI的github可以下载:https://github.com/longpeng2008/yousan.ai/tree/master/natural_language_processing

找到seq2seqChatbot文件夹,执行python3 s2s.py就可以进行训练或者测试了。

代码来源于github,也可参考这个github:

https://github.com/qhduan/Seq2Seq_Chatbot_QA

总结

生成式的聊天机器人技术框架非常简洁,在构建过程是端到端(End-to-End)的,实现简单。因此,我见过很多简历上写的聊天机器人项目是基于此框架的,大多雷同,建议读者在简历上写这个项目时要慎重,非要写的话,务必要突出差异。

读者们可以留言,或者加入我们的NLP群进行讨论。感兴趣的同学可以微信搜索jen104,备注"加入有三AI NLP群"。

下期预告:基于BERT的文本分类模型

知识星球推荐

640?wx_fmt=png

扫描上面的二维码,就可以加入我们的星球,助你成长为一名合格的自然语言处理算法工程师。

知识星球主要有以下内容:

(1) 聊天机器人。考虑到聊天机器人是一个非常复杂的NLP应用场景,几乎涵盖了所有的NLP任务及应用。所以小Dream哥计划以聊天机器人作为切入点,通过介绍聊天机器人的原理和实践,逐步系统的更新到大部分NLP的知识,会包括语义匹配,文本分类,意图识别,语义匹配命名实体识别、对话管理以及分词等。

(2) 知识图谱。知识图谱对于NLP各项任务效果好坏的重要性,就好比基础知识对于一个学生成绩好坏的重要性。他是NLP最重要的基础设施,目前各大公司都在着力打造知识图谱,作为一个NLP工程师,必须要熟悉和了解他。

(3) NLP预训练模型。基于海量数据,进行超大规模网络的无监督预训练。具体的任务再通过少量的样本进行Fine-Tune。这样模式是目前NLP领域最火热的模式,很有可能引领NLP进入一个全新发展高度。你怎么不深入的了解?

转载文章请后台联系

侵权必究

640?wx_fmt=gif
640?wx_fmt=png
640?wx_fmt=png

往期精选

如何利用TensorFlow Serving搭建一个简单聊天机器人 Building A Conversational Interface with TensorFlow Serving 近年来,人工智能技术发展迅速,尤其是自然语言理解(NLU)、自然语言生成(NLG)和文本对话系统方面取得重大突破,这些技术已经成为最强大的助手,可谓是“AI的春天”。本文将主要介绍如何利用TensorFlow Serving搭建一个简单的基于文本对话的聊天机器人。人工智能聊天机器人的关键之处在于能够以自然语言进行交流,即需要具备多轮对话功能,处理复杂的用户输入信息,并合理地给出回应。因此,本文将会介绍基于Tensorflow Serving实现的简单聊天机器人,包括文本理解、文本生成、语音合成等关键技术。 阅读详情

相关推荐

结合Flask + TensorFlow 构建出实时的医疗聊天机器人

2017年,谷歌开发了一款基于TensorFlow的聊天机器人Chatbot。Chatbot是一个可以和用户沟通、进行简单信息查询的应用程序。它可以理解普通人类的语言,并提供有效的信息反馈。近几年来,随着AI技术的飞速发展,越来越多的公司在产品中嵌入了聊天机器人的功能。例如,苹果公司iMessage Messenger应用就内置了专用的聊天机器人,通过可靠、高质量的服务,可以给用户提供即时、准确的建议;亚马逊Alexa和微软Cortana都是这方面的佼佼者。

AI天才研究院 1655

对话机器人:使用 Python TensorFlow 训练 Chatbot 聊天机器人

为了能够在Facebook Messenger上与用户进行实时的沟通,开发者需要自行构建聊天机器人。然而,构建聊天机器人的过程却很复杂,需要掌握众多的技术、技能和知识。本文通过详细地阐述了如何用Python语言构建一个Facebook Messenger聊天机器人,并分享一些创建聊天机器人的过程中可能遇到的问题,希望可以帮助读者更好地理解和应用聊天机器人技术。

AI天才研究院 3345

【自动编码器】用 TensorFlow 和 PyTorch 搭建一个聊天机器人

作者:禅与计算机程序设计艺术 1.简介 背景介绍 在深度学习火爆的今天,聊天机器人的兴起,或许也促使很多人想搞一款聊天机器人。那么,如何构建一款聊天机器人呢?本文将从TensorFlow、PyTorch以及Seq2Seq模型等技术手段,一步步教大家如何搭建自己的聊天

AI天才研究院 2886

收藏 | Tensorflow实现的深度NLP模型集锦(附资源)

来源:深度学习与NLP本文约2000字,建议阅读5分钟。本文收集整理了一批基于Tensorflow实现的深度学习/机器学习的深度NLP模型。 收集整理了一批基于Tenso...

THU数据派 716

构建基于Transformer的中文对话聊天机器人实战教程

Transformer模型自2017年在论文《Attention Is All You Need》中被首次提出以来,已经成为自然语言处理(NLP)领域中的一个标志性模型。该模型的核心在于多头自注意力(multi-head self-attention)机制,它允许模型在处理序列数据时,能够更好地关注到输入序列的不同部分,并捕获序列中的长距离依赖关系。TensorFlow的发展背景和基本架构是了解该框架如何支持NLP任务的第一步。

weixin_35390379的博客 1126

基于TensorFlow的Seq2Seq聊天机器人实战课程

TensorFlow 是一个开源的机器学习库,由 Google 的大脑团队开发,广泛应用于数值计算的场景。它支持多种语言(主要是 Python),并允许开发者利用各种设备进行高性能计算。TensorFlow 的设计理念是灵活和高效,能够轻松构建和训练复杂的机器学习模型。聊天机器人的概念最早可以追溯到1966年,麻省理工学院的学生Joseph Weizenbaum开发了一个名为ELIZA的程序。ELIZA模拟了一位心理医生的角色,并且能够通过预设的模式来回应用户输入的话。

weixin_33562004的博客 1048

TensorFlow RNN循环神经网络代码nlp句子分类例子(非图像识别)

关键词:非图像识别,RNN,TensorFlow,代码,句子分类,NLP、 【注意】这是一个测试数据没有实际意义,所以需要实际数据的请看我的其他博客里有说明 有问题的留言问我就好。 最近在看RNN的句子分类,发现网上的代码各种讲解不清楚,于是花了点时间试了试改了改网上的代码,总算对TensorFlow下的RNN有一个了解。 机器学习三大关键点,数据格式,loss定义,网络结构。我们在...

weixin_39673686的博客 841

导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017

PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...

weixin_31304817的博客 1915

在C#下使用TensorFlow.NET训练自己的数据集

TensorFlow.NET是开源社区团队的贡献,其使命是打造一个完全属于.NET开发者自己的机器学习平台,特别对于C#开发人员来说,是一个“0”学习成本的机器学习平台,该平台集成了大量API和底层封装,力图使TensorFlow的Python代码风格和编程习惯可以无缝移植到.NET平台。

pepure的博客 1万+

从零到一:基于Esp32与LVGL的ST7789屏幕驱动全流程实战

本文详细介绍了基于Esp32与LVGL的ST7789屏幕驱动全流程实战,包括环境准备、驱动文件改造、硬件接口配置、LVGL集成与优化等关键步骤。通过VSCode+ESP-IDF开发环境,读者可以快速掌握SPI模式下的屏幕驱动开发,解决常见问题如颜色错乱、画面撕裂等,并实现LVGL的高效集成与性能优化。

weixin_33725722的博客 712

台达B3伺服电机485通讯的调试过程

最近上了一项目,没办法直接把B3伺服接到PLC上去,怎么办?偶说试下直接电脑通过100多米的485线控制好了,定型前的测试就这样展开了。 1、焊CN1口 如果不安装CN1,是开不了机的,要报很多错误,比如SERV EMG ALERT, 上限报警,下限报警什么的,怎么办?直接焊好CN1头子吧,烦了点,但是必要的。 主要接的是11,9,10,32,31,30几个脚,按照图上连接好就是了。 2、 接线路 按照上面的图,接上伺服电机线,编码器线,电源线,包括限位常闭开关、485连线等,就完..

shidong01的博客 1万+

终极指南:5分钟快速搭建你的第一个智能聊天机器人 [特殊字符]

ChatBotCourse是一个完整的聊天机器人开发教程项目,专为初学者设计,让你从零开始快速掌握聊天机器人开发技术。无论你是Python新手还是Java开发者,都能在这里找到适合的入门路径。 ## 🚀 快速开始:5分钟搭建聊天机器人 ### 环境准备与项目克隆 首先克隆项目到本地: ```bash git clone https://gitcode.com/gh_mirrors/ch/

gitblog_00617的博客 398

Windows沙盒神器Sandboxie Plus保姆级教程:从安装到实战测试可疑软件

本文详细介绍了Windows沙盒神器Sandboxie Plus的安装、配置与实战应用,帮助用户安全测试可疑软件。从系统要求、安装步骤到核心功能如多沙盒管理、文件共享和快照恢复,全面解析了这款轻量级沙盒工具的优势与使用技巧,特别适合需要隔离运行未知程序的用户。

weixin_29323049的博客 1157

【人工智能】NLP入门指南:自然语言处理基础全解析

在数字化时代,自然语言处理(NLP)已成为人机交互的桥梁。本文将引导读者从基础到应用,全面了解NLP技术。首先,我们将探索NLP的两大支柱:自然语言理解(NLU)和自然语言生成(NLG),理解它们如何分别让机器理解与生成人类语言。接着,文章将深入中文文本的分词技术,特别是jieba分词的使用。进一步,我们将学习文本的数值表示方法,包括one-hot编码、Word2Vec和Embedding模型,这些技术赋予机器学习模型处理语言的能力。

啊猪是的读来过倒的博客 8878

carsim与simulink联合仿真学习笔记(二)——使用C-class车模做driver model仿真(5 driver sensors)

Driver model 在carsim的Simulink库中自带外部驾驶员模型,打开后如图所示: 然后打开carsim中对应的数据集,如图所示: 具体仿真步骤不在赘述,注意到这里选择的是E-Class车模,那么如果我想选择C-Class车型进行仿真呢?点三角选择车型可以看到: 马赛克部分是我后来建的,如过没有使用过是没有马赛克部分的。那么既然这里没有C-class,又该怎么办呢? 创建C-...

xufuqiang2017的博客 4121

C#构建高精度预测模型:从数据预处理到模型部署的实战指南

【代码】C#构建高精度预测模型:从数据预处理到模型部署的实战指南。

墨夶的博客 1266

TensorFlow自然语言处理教程:从基础到高级的NLP实践指南

这个TensorFlow NLP教程是由GitHub用户ukairia777创建的开源项目。它使用TensorFlow 2.0+框架,涵盖了从文本预处理到最新的深度学习模型的各种NLP任务。文本预处理基础词袋模型和TF-IDF词向量和词嵌入RNN和CNN文本分类序列标注Seq2Seq模型Transformer架构BERT、GPT-2等预训练语言模型主题建模文本摘要记忆网络大语言模型微调这个教程的一大特色是结合了理论讲解和代码实践。

Nifc666的博客 890

超十万字解读Spring AI实战:开篇

大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。

liaokailin的专栏 1578

(一)基于TensorFlow的聊天机器人——导学

一、课程导学 深度学习领域中两个热门的技术: 1、图像处理 2、自然语言处理(NLP):聊天机器人、文本处理、垃圾邮件识别 本课程项目:聊天机器人 框架: TensorFlow:谷歌开源的深度学习框架>训练模型 Android(操作系统):作为聊天机器人的使用和开发载体 技术点: 1、NLP技术点: (1)RNN和LSTM的原理和应用范围: RNN:循环神经网络 LSTM:长短期记忆网络 (...

Winifred_1997的博客 2515

使用 MATLAB/Simulink 构建一个多时间尺度下的微电网经济运行优化策略模型

本文介绍了基于Simulink的多能互补微电网系统建模方法,重点关注多时间尺度下的经济运行优化策略。内容包括:系统背景与目标、微电网结构设计(光伏、风电、储能、柴油发电机等模块)、多时间尺度能量管理架构(日前优化、日内滚动优化、实时控制)的实现步骤,以及仿真运行与结果分析。教程详细说明了如何在Simulink中调用优化算法,设置仿真参数,并提供了进阶研究方向和资源推荐。该模型为研究微电网的经济运行和智能调度提供了完整的仿真平台解决方案。

amy_mhd的博客 174

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

介绍自然语言处理(NLP)中的文本处理—TensorFlow

智能机器不仅能看到世界,还能理解我们并与我们交谈。​这一点也不夸张,其中虚拟助手互动,比如Siri、亚马逊Alexa和谷歌助手。在许多软件应用程序和网站上,我们与成千上万的聊天机器人进行互动。自然语言处理是一个跨学科的领域。它是计算机科学、机器学习和计算语言学的一个分支,涉及赋予计算机理解文本和人类语言的能力。NLP中常见的任务下面是一些可以用NLP完成的常见任务。文本分类情绪分析文本生成机器翻译语音识别文本到语音的转换光学字符识别自然语言处理的应用实例。

weixin_44733966的博客 1526

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NLP 实践 TensorFlow 打造聊天机器人

第1章 课程导学 对课程章节、知识点、课程安排、适用人群、前提条件以及学习完成后达到的程度进行了介绍,让同学们对本课程有基本的认识。 1-1 课程导学 第2章 基础知识 介绍tensorflow的基础知识和原理,介绍tensorflow的基本训练方法和训练的注意点,介绍什么是Android系统及Android系统的四大基本组件,以及如何开发Android APP,开发工具用什么,环境如何搭建。 ...

qq_42904482的博客 3324

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Tensorflow实现的深度NLP模型集锦(附资源)

https://www.toutiao.com/a6685688607191073294/ 本文约2000字,建议阅读5分钟。 本文收集整理了一批基于Tensorflow实现的深度学习/机器学习的深度NLP模型。 收集整理了一批基于Tensorflow实现的深度学习/机器学习的深度NLP模型。 基于Tensorflow的自然语言处理模型,为自然语言处理问题收集机器学习...

喜欢打酱油的老鸟 1804

NLP-Models-Tensorflow在聊天机器人中的应用:54种架构的全面对比

NLP-Models-Tensorflow是一个专注于自然语言处理的开源项目,集合了54种基于Tensorflow的聊天机器人架构,涵盖从基础序列到序列模型到先进的Transformer和BERT等技术,为开发者提供了全面的聊天机器人构建方案。 ## 聊天机器人架构概览 🤖 NLP-Models-Tensorflow项目中的聊天机器人模块位于`chatbot/`目录下,包含54种不同架构的实

gitblog_00607的博客 659

Awesome-Chatbot实战教程:使用TensorFlow构建你的第一个聊天机器人

欢迎来到Awesome-Chatbot实战教程!本教程将带你使用TensorFlow构建一个功能强大的聊天机器人,无需深厚的AI背景,只需跟随简单步骤即可完成。Awesome-Chatbot项目汇集了全球顶尖的聊天机器人资源,包括项目、语料库、论文和教程,是入门聊天机器人开发的理想选择。 ## 为什么选择TensorFlow构建聊天机器人? 🤖 TensorFlow作为Google开源的深度

gitblog_00663的博客 904

Tensorflow实现的深度NLP模型集锦

本文转自: https://www.toutiao.com/a6685688607191073294/ 本文约2000字,建议阅读5分钟。 本文收集整理了一批基于Tensorflow实现的深度学习/机器学习的深度NLP模型。   &...

shawroad的博客 544
上一篇: 【直播】如何获得更加高效的深度卷积神经网络
下一篇: 【AutoML】优化方法可以进行自动搜索学习吗?
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值