PyTorch聊天机器人(一)

之前用yolo加sort做过目标追踪,后来导师建议可以试试看循环神经网络,当时就很纳闷一般它不是用来处理文本的吗?现在看起来我还是太年轻,从机制上来说,时序数据它好像都能处理。然后突发奇想想做一个聊天机器人来打发时间。然后再尝试把它引入到图像领域。

循环神经网络

相比于输入输出维度固定的卷积神经网络,循环神经网络中的循环单元可以随意控制输入输出的数量,具有很大的灵活性。循环神经网络通过不断对自身网络结构进行复制来构造不同的循环神经网络模型。其结构如下:
PyTorch聊天机器人(一)_第1张图片

这样可以看起来和残差还有点类似,但是实际上它展开之后可以看作:
PyTorch聊天机器人(一)_第2张图片
多输入多输出,从这个角度来看又很像fast-rcnn或者ssd中多尺度检测的结构。

自然语言处理

图像分类会使用ont-hot编码,比如卷积神经网络最后输出(0,1,0)则表示该图像属于第二类。但是自然语言中单词数目过多,如果还用这种方式来处理,效率比较低,然而不能体现单词的词性,因此就有了词嵌入的概念。

词嵌入

词嵌入就是用高维向量来反应一个单词的性质,比如定义橘子为(1,2)1代表为水果,2为黄色;那么苹果就是(1,4)水果红色,黄色T-shirt就是(3,2)衣服,黄色。然后通过词向量之间的夹角来定义他们的相似度。
通过神经网络,我们只需要定义我们想要的维度,然后用网络自己去更新每个词嵌入中的元素。这么一看好像可以用来解决图像识别中重复分类的问题。

pytorch实现

import torch
from torch import nn
embedding = torch.nn.Embedding(10,2) # 十个词,每个词用二维词向量表示
inputs = torch.arange(0,6).view(3,2).long() # 三个句子,每个句子两个词
outputs = embedding(inputs)
print(outputs.size())
print(embedding.weight.size())

输出:
torch.Size([3, 2, 2])
torch.Size([10, 2])
序列(句子)的形状为句子数 x 单词数 x 词向量维数
embedding权值得形状为词数 x 词向量维数

先滚去学习pytorch文档中的聊天机器人了,之后再改进

你可能感兴趣的:(Torch)