当前位置:   article > 正文

利用pytorch自然语言探索(一):单词预测_单词预测算法

单词预测算法

程序设计思路加代码

1、读取句子

sequence = ['i like reading','i love dog','i miss you']
  • 1

这里先简单设置一些语句,刚开始入门NLP可以将每个语句格式设置为一样,之后再学习长短不一的语句如何预测。

2、句子切分为一个个单词并去重

wordslist = ' '.join(sequence).split()
words_non = sorted(set(wordslist))
  • 1
  • 2

sorted可以给单词排个序

3、制作word-label和label-word的词汇表

words_ix = {
   w:i for i,w in enumerate(words_non)}
ix_word = {
   i:w for i,w in enumerate(words_non)}
  • 1
  • 2
  • 3
  • 4

我们知道无论是单词还是图片在计算机中都是以数字存储的,计算机在学习的过程中就是对这些数字信息进行处理的,如果是字母的话可以直接用ASCLL码进行处理,但当字母组成单词后信息就比较多了,所以我们可以化繁为简为他们打上标签以示每个单词之间的区别就可以了,类似于图像识别的标签。其实单词预测也是个分类问题,后面就可以看到了。至于label-word表是为了方便利用模型预测单词,因为最终你得到的是每个单词的可能性。

4、将每句话中最后一个词与其他词分离作为目标词,其他词作为训练词,并将训练词对应的label转成one-hot

#将最后每句话最后一个词分离
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]]) # 测试集
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

搭建RNN模型

前面我们说过,其实这种预测也是一种分类问题,但为什么不用卷积神神经网络呢?简单地说,卷积神经网络虽然是分类了,但每个特征提取与上一时刻没有关系,也就是没有时间信息,时间信息一定程度上反映了单词之间的逻辑关系,而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 
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/575473
推荐阅读
相关标签
  

闽ICP备14008679号