简单的记录一下自己对于这个模型的理解,以10000300为例
这个模型的输入是一个one_hot编码的词向量,也就是中心词为一其他的为零的向量(110000)
然后这个向量和矩阵1(10000300)相乘,得到了(1300)这里就是描述中心词的词向量
然后用这个1300的词向量乘上30010000的矩阵2,得到110000的结果
110000的结果利用softmax进行处理,就会得到10000个和为1的概率分布
这个结果和对应的y_label,就是窗口词进行loss计算然后优化
(部分的说法认为矩阵1和矩阵2是不一样的,但是在实验中两个矩阵的值是相等的,我觉得是因为在loss的优化里是同时对两个嵌入矩阵进行修改,所以虽然变量不一样,但是值是一样的)
考虑对模型功能进行完善,增加了断点继续训练以及保存训练log的功能
代码见https://github.com/Ricardokevins/Local_python/blob/master/Deeplearning/temp.py
主要是
if os.path.exists('checkpoint.pth.tar'):
checkpoint = torch.load('checkpoint.pth.tar')
model.load_state_dict(checkpoint['state_dict']) # 模型参数
optimizer.load_state_dict(checkpoint['optimizer']) # 优化参数
iter = checkpoint['iter']
epoch=checkpoint['epoch']
print("loading successfully!!!")
if i % 1000 == 0:
state = {'iter': i + 1, # 保存的当前轮数
'epoch':e,
'state_dict': model.state_dict(), # 训练好的参数
'optimizer': optimizer.state_dict(), # 优化器参数,为了后续的resume
'embedding': model.input_embeddings()
}
# 保存模型到checkpoint.pth.tar
torch.save(state, 'checkpoint.pth.tar')
print("save success")
有了如上的成果(寻找“china”的相似词)
然后利用同样的模型对中文文本进行了训练(寻找“一个”的相似词)