赞
踩
sequence = ['i like reading','i love dog','i miss you']
这里先简单设置一些语句,刚开始入门NLP可以将每个语句格式设置为一样,之后再学习长短不一的语句如何预测。
wordslist = ' '.join(sequence).split()
words_non = sorted(set(wordslist))
sorted可以给单词排个序
words_ix = {
w:i for i,w in enumerate(words_non)}
ix_word = {
i:w for i,w in enumerate(words_non)}
我们知道无论是单词还是图片在计算机中都是以数字存储的,计算机在学习的过程中就是对这些数字信息进行处理的,如果是字母的话可以直接用ASCLL码进行处理,但当字母组成单词后信息就比较多了,所以我们可以化繁为简为他们打上标签以示每个单词之间的区别就可以了,类似于图像识别的标签。其实单词预测也是个分类问题,后面就可以看到了。至于label-word表是为了方便利用模型预测单词,因为最终你得到的是每个单词的可能性。
#将最后每句话最后一个词分离
train_list = []
test_list = []
for seq in sequence:
words = seq.split()
a = [words_ix[x] for x in words[:-1]]
a = np.eye(timestep)[a]
train_list.append(a) # 维度不一致报错
test_list.append(words_ix[words[-1]]) # 测试集
前面我们说过,其实这种预测也是一种分类问题,但为什么不用卷积神神经网络呢?简单地说,卷积神经网络虽然是分类了,但每个特征提取与上一时刻没有关系,也就是没有时间信息,时间信息一定程度上反映了单词之间的逻辑关系,而RNN模型也就是循环神经网络比较好的处理了这一问题。
用某个博主的图说明一下RNN神经网络,如下:
具体可以看一下[蓝翔飞鸟]这位博主,我觉得他解释挺好的。链接:(https://blog.csdn.net/level_code/article/details/108122808)
模型代码如下:
class NET(nn.Module):
def __init__(self,input_size,hidden_size):
super(NET, self).__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.rnn
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。