## 梗概
这是代码运行的结果。其中使用Linear模块epoch在200就可以达到很好的映射效果,但是如果使用Parameter模块,达到同样的映射效果至少需要linear两倍的epoch。
word2vec算是embedding中近年来比较火的方法了。从实践角度来讲有CBOW和skip-gram两套思路,一种是从context推断local,而另一种是从local推断context。但是我们其实并不关心模型的输出,而只关心模型内部的隐层。
核心代码
使用pytorch构建了一套标准pipeline
1 | import torch |
这套代码对于网络核心层采用了网上提供的版本,采用了nn.Parameter模块。最早的版本使用了torch.nn.Linear来完成核心投影层的构建,因为Linear模块是可以定义输入维数和输出维数的,对于$y=wx$这样的线性回归,如果$y\in \mathbb{R^v}, x\in \mathbb{R^n}$, 那么只要$w \in \mathbb{R^{n\times v}}$就能完成维度的映射。实际上使用线形层是没有问题的,只不过最后输出词向量的时候需要使用第一层的权重矩阵点乘词语的onehot向量。下面给出修改后的部分代码:
1 | # Structure of the Network |
结果
尝试在模型中开启Linear层中加入偏置量,发现也可以得到预期的结果!
这是代码运行的结果。其中使用Linear模块epoch在200就可以达到很好的映射效果,但是如果使用Parameter模块,达到同样的映射效果至少需要linear两倍的epoch。
本文作者:MyTech::Author