pytorch实现聊天机器人学习笔记(1)

PyTorch入门学习-8.问答系统 2. 数据格式 3. 整体流程架构 1. 分类按照摘要面向的文档类型,可以将其分为单文档摘要和多文档摘要。根据需要产生摘要的文档长度,可以将摘要分为长文摘要、短文摘要。按照摘要的生成方法,可以将它分为抽取式摘要和生成式摘要。抽取式摘要是通过抽取拼接源文档中的关键句子来生成摘要的,生成式摘要则是系统根据文档表达的重要内容,自行组织语言,对源文档进行概括。后者是比较常见的划分方式,因为抽取式摘要和生成式摘要在生成过程中有较大的区别。本文后续对摘要生成方法的分类,也是根据这种方式进行划分。 2. 模型思路Se 阅读详情

数据预处理

本文以医疗智能问答为例子,简单介绍下seq2seq模型下,pytorch如何实现聊天机器人.由于fly平台提供的竞赛数据都很干净,基本上不需要什么预处理.一般情况下预处理操作也就是把杂乱的问答一一对应起来,形成一个数据集.数据集中每一个问答就是一条记录.

生成词典

数据集生成后就需要生成字典.对于中文句子有两种方式生成字典:

  1. 1.逐字生成字典,这样生成的字典大小会小一些.
  2. 2.分词后,根据分词结果生成字典.此处我一般使用jieba分词

读取数据集中每条记录,调用以下代码来生成字典

  • def source2id(self,textline):
  • textline = jieba.lcut(textline)
  • text_list = list()
  • count = len(self.sour2id)
  • for i in range(min(len(textline),128)):
  • if self.sour2id.get(textline[i]):
  • text_list.append(self.sour2id[textline[i]])
  • else:
  • self.sour2id[textline[i]] = count
  • self.id2sour[count] = textline[i]
  • text_list.append(self.sour2id[textline[i]])
  • count += 1
  • text_len = len(text_list)
  • return text_list, text_len

在网上很多文档中会有去掉低频词的操作,但是我个人觉得要视情况而定,不能盲目的去掉低频词.因为有时候关键词反而是低频词语.特别在医疗问答时,很多医疗数据反而是低频的.

为模型准备数据

   由于每一个句子长度不一样,所以需要统一把句子padding成max_length(最长句子的长度).这样方便GPU计算.但是同时padding也会带来一个问题.比如,一个句子长度为:4 ,max_length=10,这样实际上后面6个时刻的value都是padding,最终forward的输出应该是第4个时刻的输出,后面的计算都是无用功.所以会生成一个batch_size的列表来记录每个句子的实际长度.

   原始的输入通常是batch_size个list,表示batch_size个句子.每次输入的shape大小为(batch_size,max_length).但是seq2seq模型中每个模块用的都是GRU(或者LSTM),而GRU中计算t时刻的输出需要依赖t-1时刻生成的状态值.所以无法在同一个GRU模块中计算一个语句的所有时刻的输出.于是我们需要转换下输入的shape.把(batch_size,max_length)转换成(max_length,batch_size).

   上述的两个操作可以通过itertools.zip_longest函数很方便的实现.

  • def zeroPadding(l, fillvalue):
  • return list(itertools.zip_longest(*l, fillvalue=fillvalue))
  • def get_batches(targets, sources, batch_size, source_padding, target_padding):
  • source_list, source_lens = sources
  • target_list, target_lens = targets
  • for batch_i in range(0, len(source_list)//batch_size):
  • start_i = batch_i * batch_size
  • source_batch = source_list[start_i: start_i + batch_size]
  • source_len_batch = source_lens[start_i: start_i + batch_size]
  • target_batch = target_list[start_i: start_i + batch_size]
  • target_len_batch = target_lens[start_i: start_i + batch_size]
  • max_target_len = max(target_lens[start_i: start_i + batch_size])
  • pad_sources_batch = zeroPadding(source_batch, source_padding)
  • pad_targets_batch = zeroPadding(target_batch, target_padding)
  • mask= zeroPadding(target_batch, target_padding)
  • yield pad_targets_batch, pad_sources_batch, target_len_batch,max_target_len, source_len_batch,mask

模型的建立

1.Encoder

Encoder是个RNN,它会遍历输入的每一个Token(词),每个时刻的输入是上一个时刻的隐状态和输入,然后会有一个输出和新的隐状态。这个新的隐状态会作为下一个时刻的输入隐状态。每个时刻都有一个输出,对于seq2seq模型来说,我们通常只保留最后一个时刻的隐状态,认为它编码了整个句子的语义,但是后面我们会用到Attention机制,它还会用到Encoder每个时刻的输出。Encoder处理结束后会把最后一个时刻的隐状态作为Decoder的初始隐状态。
 

输入:

  • input_seq: 一个batch的输入句子,shape是(max_length, batch_size)
  • input_lengths: 一个长度为batch_size的list,表示句子的实际长度。
  • hidden: 初始化隐状态(通常是零),shape是(n_layers x num_directions, batch_size, hidden_size)

输出:

  • outputs: 最后一层GRU的输出向量(双向的向量加在了一起),shape(max_length, batch_size, hidden_size)
  • hidden: 最后一个时刻的隐状态,shape是(n_layers x num_directions, batch_size, hidden_size)
  • class EncoderRNN(nn.Module):
  • def __init__(self, hidden_size, embedding,n_layers=1, dropout=0.1):
  • super(EncoderRNN, self).__init__()
  • self.n_layers = n_layers
  • self.hidden_size = hidden_size
  • self.embedding = embedding
  • # 如果只有一层,那么不进行Dropout,否则使用传入的参数dropout进行GRU的Dropout。
  • self.gru = nn.GRU(hidden_size, hidden_size, n_layers,
  • dropout=(0 if n_layers == 1 else dropout), bidirectional=True)
  • def forward(self, input_seq, input_lengths, hidden=None):
  • # 输入是(max_length, batch),Embedding之后变成(max_length, batch, hidden_size)
  • embedded = self.embedding(input_seq)
  • # Pack padded batch of sequences for RNN module
  • # 因为RNN(GRU)需要知道实际的长度,所以PyTorch提供了一个函数pack_padded_sequence把输入向量和长度pack
  • # 到一个对象PackedSequence里,这样便于使用。
  • packed = torch.nn.utils.rnn.pack_padded_sequence(embedded, input_lengths,enforce_sorted=False)
  • # 通过GRU进行forward计算,需要传入输入和隐变量
  • # 如果传入的输入是一个Tensor (max_length, batch, hidden_size)
  • # 那么输出outputs是(max_length, batch, hidden_size*num_directions)。
  • # 第三维是hidden_size和num_directions的混合,它们实际排列顺序是num_directions在前面,因此我们可以
  • # 使用outputs.view(seq_len, batch, num_directions, hidden_size)得到4维的向量。
  • # 其中第三维是方向,第四位是隐状态。
  • # 而如果输入是PackedSequence对象,那么输出outputs也是一个PackedSequence对象,我们需要用
  • # 函数pad_packed_sequence把它变成一个shape为(max_length, batch, hidden*num_directions)的向量以及
  • # 一个list,表示输出的长度,当然这个list和输入的input_lengths完全一样,因此通常我们不需要它。
  • outputs, hidden = self.gru(packed, hidden)
  • # 参考前面的注释,我们得到outputs为(max_length, batch, hidden*num_directions)
  • outputs, _ = torch.nn.utils.rnn.pad_packed_sequence(outputs)
  • # 我们需要把输出的num_directions双向的向量加起来
  • # 因为outputs的第三维是先放前向的hidden_size个结果,然后再放后向的hidden_size个结果
  • # 所以outputs[:, :, :self.hidden_size]得到前向的结果
  • # outputs[:, :, self.hidden_size:]是后向的结果
  • # 注意,如果bidirectional是False,则outputs第三维的大小就是hidden_size,
  • # 这时outputs[:, : ,self.hidden_size:]是不存在的,因此也不会加上去。
  • # 对Python slicing不熟的读者可以看看下面的例子:
  • # >>> a=[1,2,3]
  • # >>> a[:3]
  • # [1, 2, 3]
  • # >>> a[3:]
  • # []
  • # >>> a[:3]+a[3:]
  • # [1, 2, 3]
  • # 这样就不用写下面的代码了:
  • # if bidirectional:
  • # outputs = outputs[:, :, :self.hidden_size] + outputs[:, : ,self.hidden_size:]
  • outputs = outputs[:, :, :self.hidden_size] + outputs[:, : ,self.hidden_size:]
  • # 返回最终的输出和最后时刻的隐状态。
  • return outputs, hidden

2.Decoder

Decoder也是一个RNN,它每个时刻输出一个词。每个时刻的输入是上一个时刻的隐状态和上一个时刻的输出。一开始的隐状态是Encoder最后时刻的隐状态,输入是特殊的。然后使用RNN计算新的隐状态和输出第一个词,接着用新的隐状态和第一个词计算第二个词,…,直到遇到,结束输出。普通的RNN Decoder的问题是它只依赖与Encoder最后一个时刻的隐状态,虽然理论上这个隐状态(context向量)可以编码输入句子的语义,但是实际会比较困难。因此当输入句子很长的时候,效果会很长。

输入:

input_step: shape是(1, batch_size)

last_hidden: 上一个时刻的隐状态, shape是(n_layers x num_directions, batch_size, hidden_size)

encoder_outputs: encoder的输出, shape是(max_length, batch_size, hidden_size)

输出:

output: 当前时刻输出每个词的概率,shape是(batch_size, voc.num_words)

hidden: 新的隐状态,shape是(n_layers x num_directions, batch_size, hidden_size)

class AttnDecoderRNN(nn.Module):

  • def __init__(self, attn_model, embedding, hidden_size, output_size, n_layers=1, dropout=0.1):
  • super(AttnDecoderRNN, self).__init__()
  • self.attn_model = attn_model
  • self.hidden_size = hidden_size
  • self.output_size = output_size
  • self.n_layers = n_layers
  • self.dropout = dropout
  • # 定义Decoder的layers
  • self.embedding = embedding
  • self.embedding_dropout = nn.Dropout(dropout)
  • self.gru = nn.GRU(hidden_size, hidden_size, n_layers, dropout=(0 if n_layers == 1 else dropout))
  • self.concat = nn.Linear(hidden_size * 2, hidden_size)
  • self.out = nn.Linear(hidden_size, output_size)
  • self.attn = Attn(attn_model, hidden_size)
  • def forward(self, input_step, last_hidden, encoder_outputs):
  • # 注意:decoder每一步只能处理一个时刻的数据,因为t时刻计算完了才能计算t+1时刻。
  • # input_step的shape是(1, 64),64是batch,1是当前输入的词ID(来自上一个时刻的输出)
  • # 通过embedding层变成(1, 64, 500),然后进行dropout,shape不变。
  • embedded = self.embedding(input_step)
  • embedded = self.embedding_dropout(embedded)
  • # 把embedded传入GRU进行forward计算
  • # 得到rnn_output的shape是(1, 64, 500)
  • # hidden是(2, 64, 500),因为是双向的GRU,所以第一维是2。
  • rnn_output, hidden = self.gru(embedded, last_hidden)
  • # 计算注意力权重, 根据前面的分析,attn_weights的shape是(64, 1, 10)
  • attn_weights = self.attn(rnn_output, encoder_outputs)
  • # encoder_outputs是(10, 64, 500)
  • # encoder_outputs.transpose(0, 1)后的shape是(64, 10, 500)
  • # attn_weights.bmm后是(64, 1, 500)
  • # bmm是批量的矩阵乘法,第一维是batch,我们可以把attn_weights看成64个(1,10)的矩阵
  • # 把encoder_outputs.transpose(0, 1)看成64个(10, 500)的矩阵
  • # 那么bmm就是64个(1, 10)矩阵 x (10, 500)矩阵,最终得到(64, 1, 500)
  • context = attn_weights.bmm(encoder_outputs.transpose(0, 1))
  • # 把context向量和GRU的输出拼接起来
  • # rnn_output从(1, 64, 500)变成(64, 500)
  • rnn_output = rnn_output.squeeze(0)
  • # context从(64, 1, 500)变成(64, 500)
  • context = context.squeeze(1)
  • # 拼接得到(64, 1000)
  • concat_input = torch.cat((rnn_output, context), 1)
  • # self.concat是一个矩阵(1000, 500),
  • # self.concat(concat_input)的输出是(64, 500)
  • # 然后用tanh把输出返回变成(-1,1),concat_output的shape是(64, 500)
  • concat_output = torch.tanh(self.concat(concat_input))
  • # out是(500, 词典大小=7826)
  • output = self.out(concat_output)
  • # 用softmax变成概率,表示当前时刻输出每个词的概率。
  • output = F.softmax(output, dim=1)
  • # 返回 output和新的隐状态
  • return output, hidden

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载请附上原文出处链接和本声明。 
本文链接地址:https://www.flyai.com/article/573

PyTorch文本:01.聊天机器人教程 在本教程中,我们探索一个好玩有趣的循环的序列到序列(sequence-to-sequence)的模型用例。我们将用Cornell Movie-Dialogs Corpus处的电影剧本来训练一个简单的聊天机器人。 在人工智能研究领域中,对话模型是一个非常热门的话题。聊天机器人可以在各种设置中找到,包括客户服务应用和在线帮助。这些机器人通常 由基于检索的模型提供支持,这些模型的输出是某些形式问题预先定义的响应。在像公司IT服务台这样高度受限制的领域中,这些模型可能足够了, 但是,对于更一般的用例它们还不够健. 阅读详情

相关推荐

pytorch实现 chatbot聊天机器人

涉及的论文 Neural Conversational Model https://arxiv.org/abs/1506.05869 Luong attention mechanism(s) https://arxiv.org/abs/1508.04025 Sutskever et al. https://arxiv.org/abs/1409.3215 GRU Cho et al. https:/...

DarrenXf的专栏 3395

如何从零开始用PyTorch实现Chatbot?(附完整代码)

作者 | 李理,环信人工智能研发中心vp,十多年自然语言处理和人工智能研发经验。主持研发过多款智能硬件的问答和对话系统,负责环信中文语义分析开放平台和环信智能机器人的设计...

AI科技大本营 1万+

PyTorch聊天机器人(一)

之前用yolo加sort做过目标追踪,后来导师建议可以试试看循环神经网络,当时就很纳闷一般它不是用来处理文本的吗?现在看起来我还是太年轻,从机制上来说,时序数据它好像都能处理。然后突发奇想想做一个聊天机器人来打发时间。然后再尝试把它引入到图像领域。 循环神经网络 相比于输入输出维度固定的卷积神经网络,循环神经网络中的循环单元可以随意控制输入输出的数量,具有很大的灵活性。循环神经网络通过不断对自身网络结构进行复制来构造不同的循环神经网络模型。其结构如下: 这样可以看起来和残差还有点类似,但是实际上它展开之后

weixin_43874764的博客 953

pytorch教程 聊天机器人(详细注释&attention&rnn输入输出shape等知识点...

最近可能要用到seq2seq模型去解决一些轨迹预测的问题,拿pytorch教程的聊天机器人练了练手。 原文中教程已经写的比较详尽了,在此对原文教程进行一些补充说明,可能更加方便向我这样的小白入门学习。 本文是对教程的补充说明,并没有照搬所有教程中的代码,中文教程写的很不错啦,链接在下面。 pytorch中文教程:http://www.pytorch123.com/FifthSection/Chatbot/ 我的git地址:https://github.com/jamjar102/pytorch.

weixin_41684423的博客 2216

使用 PyTorch 构建 NLP 聊天机器人

聊天机器人提供自动对话,可以帮助用户完成任务或寻求信息。随着深度学习的最新进展,聊天机器人正变得越来越具有对话性和实用性。这个全面的教程将利用 PyTorch 和 Python 从头开始构建聊天机器人,涵盖模型架构、数据准备、训练循环、评估和部署。

gongdiwudu的专栏 5068

一百行代码实现简易版 ChatGPT 聊天机器人

最近,OpenAI的一款聊天机器人模型ChatGPT爆火,本篇文章用一百行代码给大家制作一款简易的聊天机器人,话不多说,先上图再上代码。

努力是为了站在万人之中,成为别人的光 1万+

pytorch 实现gru_Pytorch实现聊天机器人学习笔记(1)

数据预处理本文以医疗智能问答为例子,简单介绍下seq2seq模型下,pytorch如何实现聊天机器人.由于fly平台提供的竞赛数据都很干净,基本上不需要什么预处理.一般情况下预处理操作也就是把杂乱的问答一一对应起来,形成一个数据集.数据集中每一个问答就是一条记录.生成词典数据集生成后就需要生成字典.对于中文句子有两种方式生成字典:1.逐字生成字典,这样生成的字典大小会小一些.2.分词后,根据分词结...

weixin_39724362的博客 374

Pytorch基于深度学习模型Seq2Seq的聊天机器人构建与应用部署实战

聊天机器人是非常常见而广泛的应用,很多企业都有很多机器人客服的需求,比如:移动、电信、联通、淘宝、京东等等,聊天机器人的本质就是文本数据处理,我的主要研究方向并不是文本处理相关的,但是断断续续学习、工作中接触到了一定的文本数据处理的任务,对文本数据处理也算得上是有一定的了解程度吧。 聊天机器人的应用可以简单理解为“输入一句话,机器返回一句响应的话”,返回的话跟你的话或者是问题相关度比较高,让你察觉不到是在跟一台机器聊天,这里模型需要能够比较确切地了解或者是解读清楚你输入的文本数据,然...

Together_CZ的博客 4508

##25 实现基于PyTorch的简易聊天机器人

在当前的人工智能领域,聊天机器人已经成为了研究的热点之一。它们能够在多种场景下提供帮助,从客服支持到个人助手,再到更为复杂的治疗和咨询角色。本文将指导你如何使用PyTorch构建一个基本的聊天机器人,涵盖从文本处理到模型部署的全过程。聊天机器人是通过自然语言处理(NLP)技术实现人机对话的系统,它们可以解析用户的输入并提供智能的响应。现代聊天机器人通常基于深度学习模型,能够理解、推断并生成人类语言。

weixin_51352614的博客 1212

PyTorch实战:聊天机器人

1.背景介绍 随着人工智能的发展,聊天机器人已经成为了我们日常生活中不可或缺的一部分。无论是在客户服务、在线购物还是日常生活中,聊天机器人都在为我们提供便利。然而,构建一个能够理解和回应人类语言的聊天机器人并不是一件容易的事情。本文将介绍如何使用PyTorch构建一个简单的聊天机器人。 PyTorch是一个开源的深度学习框架,由Faceb

AI天才研究院 498

Pytorch聊天机器人构建与优化指南

自然语言处理(NLP)是人工智能和语言学领域中的一个分支,它致力于使计算机能够理解、解释和生成人类语言的内容。NLP结合了计算机科学、人工智能和语言学的方法,来构建能够处理大量自然语言数据的算法和模型。NLP 的发展经历了几个重要阶段。在早期,基于规则的系统主要用于解析和理解文本,但这种方法对不同语言和领域的适应性较差。随着机器学习技术的发展,特别是深度学习的兴起,NLP 进入了一个新的时期,开始采用大量数据和复杂的神经网络模型进行语言的理解和处理。

weixin_34725745的博客 1137

基于pytorch和NLP的聊天机器人

聊天机器人的行业背景 为什么学? 1.热门行业(NLP主流方向) 2.技术流,主流Seq2Seq+Attention 3.前沿,行业内缺乏大量人才 4.薪资高,贴近生活 一、聊天机器人综合介绍 具代表性的有;腾讯QQ小冰,天猫精灵等不刻板不生硬 应用场景:自动回复,医疗,旅游,餐饮,财经,新闻等 起源发展:诞生于20世纪80年代,用来模拟人类对话或者聊天的程序。1966年诞生的Eliza和1972年诞生的Parry是早期非常著名的聊天机器人。 分类; &检索模式:预定义响应 的数据库和某种启发式推

橙之之 1681

chatbot::robot:基于PyTorch的任务型聊天机器人(支持私有部署和docker部署的Chatbot)

聊天机器人 :robot:基于PyTorch的任务型聊天机器人。 1简介 常见的聊天机器人有两种: 闲聊型open domain 任务型task oriented 此类型机器人的常见应用是智能客服,目的是为了解决用户的明确需求。 上图为针对任务的聊天机器人的一般流程,该项目目前实现了第一部分的NLU功能,包含Slot Filling和Intent Prediction 。 2个演示 :warning: DEMO中仅包含我编写的几十条训练样本(在back/data/train.json ),主要内容是关于我家 :cat_face:锅贴,这些只发挥了该项目的一部分功能。 3运行 新增加基于的,可以方便的生成数据集。 3.1直接运行 #

Pytorch聊天机器人

Pytorch聊天机器人 看pytorch的中文教程,里面有一个英语的聊天机器人教程的例子。其中运用了encode decode 加Global attention进行生成。 自己试着根据这个例子写了一个中文的,添加了Dataset, DataLoader处理读取数据更方便,也删减了一些处理数据的代码,更突出其中的网络结构。以此让自己更详细的理解一下其中的网络结构及注意力。同时把代码分为两部分,一部分训练,一部分聊天推理。 代码如下 训练代码 import torch import torch.nn as

weixin_42320758的博客 1453

pytorch_chatbot, 使用PyTorch实现出色的聊天.zip

pytorch_chatbot, 使用PyTorch实现出色的聊天 PyTorch卓越的视频聊天 目的建立一个神奇的手机概要This ChatBot ,我将继续更新这个,作为Jarvis的下一个版本,这是第一个而且也是唯一的开源的开源 ChatBot 。这个 repo 将维持一个基于 PyTo

使用 Vosk 实现语音识别

在近两年里,如果说想要在本地部署离线语音识别模型,那么和肯定是首选项。所以为什么要使用呢?

weixin_48967543的博客 9719

PyTorch 1.0 中文官方教程:聊天机器人教程

译者:毛毛虫 作者: Matthew Inkawhich 在本教程中,我们探索了一个好玩和有趣的循环序列到序列的模型用例。我们将用 Cornell Movie-Dialogs Corpus处的电影剧本来训练一个简单的聊天机器人。 在人工智能研究领域中对话模型模型是一个非常热门的话题。聊天机器人可以在各种设置中找到,包括客户服务应用和在线帮助。这些机器人通常由基于检索的模型提供支持,这些输出是某...

龙哥盟 4万+

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1578

使用Python实现简单的人工智能聊天机器人

本文介绍了一个人工智能学习网站,并详细讲解了如何使用Python实现一个简单的基于规则的聊天机器人。文章首先介绍了聊天机器人的两种类型:基于规则和基于机器学习,并指出基于规则的聊天机器人适合初学者。接着,文章通过代码示例展示了如何使用Python的re模块实现一个简单的聊天机器人,并逐步解析了代码的实现过程。最后,文章提出了扩展和改进聊天机器人的方法,如增加更多规则、使用自然语言处理库或结合深度学习技术。本文为初学者提供了一个入门聊天机器人开发的实用指南,并鼓励读者进一步探索和学习。

qq_74383080的博客 4303

centos8 安装新版bind9源码

bind一直在更新,使用了比较多的新架构 本文记录新版本的bind怎么安装,以及其依赖库的安装 1. 在https://www.isc.org/download/ 下载最新stable版本bind,本文以bind-9.17.9.tar.xz为例。将软件传到/root目录下。 也可以到https://ftp.isc.org/isc/bind9/ 下载更多历史版本 2. 安装基本的依赖库,像gcc、amake等 3. 需要安装libuv库,但直接用yum时可能安装不全 建议使用源码安装,需要安..

linggang_123的博客 2539

第1集:面试官视角:AIOps 核心能力模型与面试项目全局搭建【免费试读】

本文介绍了一门面向AIOps工程师的面试实战课程,针对当前运维领域薪资差距明显的痛点,帮助学员系统掌握企业级AIOps平台开发能力。课程承诺提供可直接用于面试和生产环境的代码实现,从零构建模块化AIOps平台。第一集重点讲解了面试官视角下的核心能力模型,并指导学员搭建项目基础环境,包括Python虚拟环境配置、本地大模型部署(Ollama)以及智能巡检Agent的代码实现。课程强调实战导向,通过40集系统讲解,帮助学员实现薪资40-60万的职业跃升。

qq_2937655951的博客 615

使用 PyTorch 的聊天机器人 - NLP 和深度学习

为此,我们需要收集训练词,即我们的机器人可以在训练数据中查看的所有单词。基于所有这些单词,我们可以计算每个新句子的词袋。我们不能直接将输入句子传递给我们的神经网络。我们必须以某种方式将模式字符串转换为网络可以理解的数字。)是用于构建处理人类语言数据的 Python 程序的领先平台。对于标签,我们按字母顺序对其进行排序,然后使用索引作为类标签。单词在传入的句子中可用,则每个位置包含 1,否则包含 0。您已实现聊天机器人!正如开头提到的,您可以根据自己的需求进行自定义。可能的模式和响应,然后重新运行训练即可。

学习,输出==》再学习再输出 1300

Python控制TEMI1000/TEMI1500测试温箱

该温箱是我司从昆山振弘检测设备有限公司采购的TEMI 1000,但是控制器用的是韩国的,关于控温箱这个项目,可参考的资料仅有一份官方的manual,里面包含一些命令格式。只要你有温箱,就应该可以向厂家索取该文档。该温箱的通讯接口只有一个RS232接口,要想实现远程控制,需要有串口转USB的线;类似于下图所以,想依靠python来与之进行通信,还是要通过python 的pyserial库,关于怎么安装pyserial,过于简单,这里不做赘述,可自行百度。

xgh1951的博客 1万+
上一篇: 一种多领域动态融合对话模型介绍
下一篇: DeblurGAN-v2去模糊(数量级)更快更好
iFlyAI
博客等级 码龄9年 238粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值