网络的第三层(输出层)一共有|V|个节点,每个节点yi表示下一个单词i的未归一化log概率。最后使用softmax函数将输出值y归一化成概率,最终y的计算公式如下: y = b + Wx + Utanh(d+Hx)
最后,用随机梯度下降法把这个模型优化出来就可以了。
5.代码实现—PyTorch版本
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date : 2019-02-26 14:15:49# @Author : cdl (1217096231@qq.com)# @Link : https://github.com/cdlwhm1217096231/python3_spider# @Version : $Id$import torch
import numpy as np
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
"""
1.Basic Embedding Model
1-1. NNLM(Neural Network Language Model)
"""
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 inenumerate(word_list)}# 将每个单词对应于相应的索引
number_dict ={
i: w for i, w inenumerate(word_list)}# 将每个索引对应于相应的单词
n_class =len(word_dict)# 单词的总数# NNLM parameters
n_step =2# 根据前两个单词预测第3个单词
n_hidden =2# 隐藏层神经元的个数
m =2# 词向量的维度# 由于pytorch中输入的数据是以batch小批量进行输入的,下面的函数就是将原始数据以一个batch为基本单位喂给模型defmake_batch(sentences):
input_batch =[]
target_batch =[]for sentence in sentences:
word = sentence.split()input=[word_dict[w]for w in word[:-1]]
target =