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

程序设计思路加代码

1、读取句子

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

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

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

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

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)}

我们知道无论是单词还是图片在计算机中都是以数字存储的,计算机在学习的过程中就是对这些数字信息进行处理的,如果是字母的话可以直接用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]]) # 测试集

搭建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 = nn.RNN(inp
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无忧阁阁主

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值