NNLM神经网络语言模型简单实现词语预测(含python代码详解)

NNLM:Neural Network Language Model,神经网络语言模型。源自Bengio等人于2001年发表在NIPS上的《A Neural Probabilistic Language Model一文。

利用神经网络计算词向量的方法,根据(w{t-n+1}...w{t-1})来预测(w{t})是什么单词,即用前(n-1)个单词来预测第(n)个单词。

二、NNLM词语预测代码

1. 导入包

torch库——又称PyTorach,是一个以Python优先的深度学习框架,一个开源的Python机器学习库,用于自然语言处理等应用程序。

torch.nn包——nn全称为neural network,意思是神经网络,是torch中构建神经网络的模块。

torch.optim包——这个包里面有很多的优化算法,比如我们常用的随机梯度下降算法,添加动量的随机梯度下降算法。

import torch
import torch.nn as nn
import torch.optim as optim

2. 文本数据处理

输入三句短文本,"i like dog", "i love coffee", "i hate milk",作为模型预测的资料。

dtype = torch.FloatTensor
sentences = ["i like dog", "i love coffee", "i hate milk"]
word_list = " ".join(sentences).split()  # 提取句子中所有词语
#print(word_list)
word_list = list(set(word_list))  # 去除重复元素,得到词汇表
#print("去重后的word_list:", word_list)
word_dict = {w: i for i, w in enumerate(word_list)}  # 按照词汇表生成相应的词典 {‘word’:0,...}
number_dict = {i: w for i, w in enumerate(word_list)}  # 将每个索引对应于相应的单词{0:'word',...}
n_class = len(word_dict)  # 单词的总数,也是分类数

torch.FloatTensor——FloatTensor用于生成浮点类型的张量。 torch.FloatTensor()默认生成32位浮点数,dtype 为 torch.float32 或 torch.float。  

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 

3. 自定义mini-batch迭代器

自定义函数:def make_batch(sentences),make_batch(sentences)函数是一个mini-batch迭代器,实现数据的输入输出,函数以sentences列表作为输入, 最终函数将输入数据集input_batch和输出数据集target_batch返回为结果。详见代码注释。 

def make_
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值