[我正在寻找一种在Pytorch中使用LSTM层实现单词嵌入网络的方法,以使nn.Embedding
层的输入具有与单词ID向量不同的形式。
在我的情况下,每个单词都有一个对应的向量,因此,我的语料库中的句子是一个向量的向量。因此,例如,我可能拥有带有矢量[500、3、18]的单词“ King”,其中500是单词ID,3是单词颜色,18是字体大小,等等。这里的嵌入层作用是进行一些自动特征缩减/提取。
我如何向嵌入层提供此类表单数据?还是您有更好的建议?
我不确定使用LSTM的word2vec算法是什么意思,因为原始的word2vec算法不使用LSTM,而是直接使用嵌入来预测周围的单词。
无论如何,您似乎要嵌入多个类别变量。在示例中,它是单词ID,颜色ID和字体大小(如果将其舍入为整数值)。您有两种选择:
您可以为所有可能的功能组合创建新的ID,并为它们使用nn.Embedding
。但是,存在大多数ID在数据中显得稀疏而无法学习可靠嵌入的风险。
对每个特征分别进行嵌入。然后,您需要将功能的嵌入组合在一起。您基本上有三种选择方法:
nn.Dense
层(或两个,第一个具有ReLU激活的层,第二个不具有激活的层),将显式地结合要素的嵌入。如果需要包含不能离散化的连续要素,则可以始终采用连续要素,在其上应用一两层,然后将其与离散要素的嵌入结合起来。