研究 word2vec 之类的嵌入,我在 PyTorch 的网站上发现了这个练习,它提示读者在 PyTorch 中实现一个 CBOW 网络。
我的问题是关于实现这个 CBOW 网络的架构。
这是我的理解:从许多来源看来,网络似乎应该有一个隐藏层(有权重且没有偏差),它连接到一个激活层(大多数来源说 softmax)。然后,网络将被训练以将 one-hot 编码的单词映射到可能的上下文。最后,隐藏层的权重将用作嵌入矩阵。
我的困惑是:我在谷歌上看到了很多这样的解决方案,其中有多个隐藏层。在这个例子中,有一个嵌入层和两个通过 relu 连接的线性层。这是另一个使用一个线性层的。
我的问题是:
- 训练 CBOW 编码的正确架构是什么?
- 如果这种多隐藏层方法是正确的,那么当您只使用其中一层作为编码时,如何不丢失语义信息?
- 如果单隐藏层方法是正确的,是否有人有在 PyTorch 中使用这种方法实现的示例(如果没有也可以)?
注意:对 ML 非常陌生,所以即使是在挑剔的事情上也可以随时纠正我,这样我就可以学习了!