我们可以在 Pytorch 中拥有超过一维的输入吗(例如词嵌入)

Can we have inputs that is more than 1D in Pytorch (e.g word-embedding)

假设我有一些文本,我想将它们分为三组food, sports, science。如果我有一个句子 I dont like to each mushrooms 我们可以使用词嵌入(比如 100 维)为这个特定的句子创建一个 6x100 矩阵。

通常在训练神经网络时,我们的数据是维度为 n_obs x m_features

的二维数组

如果我想在词嵌入句子上训练神经网络(我使用的是 Pytorch),那么我们的输入是 3D n_obs x (m_sentences x k_words)

例如

#Say word-embedding is 3-dimensions
I = [1,2,3]
dont = [4,5,6]
eat = [7,8,9]
mushrooms = [10,11,12]

"I dont eat mushrooms" = [I,dont,eat,mushrooms] #First observation

当我们有 N>2 维时,最好的方法是进行某种池化,例如均值,还是我们可以使用实际的 2D 特征作为输入?

从技术上讲,输入将是一维的,但这并不重要。

您的神经网络的内部架构将负责识别不同的单词。例如,您可以使用步幅等于嵌入大小的卷积。

您可以将 2D 输入展平为 1D,并且效果很好。这是您通常使用词嵌入的方式。

I = [1,2,3]
dont = [4,5,6]
eat = [7,8,9]
mushrooms = [10,11,12]

input = np.array([I,dont,eat,mushrooms]).flatten()

神经网络的输入必须始终具有相同的大小,但由于句子不是,您可能必须将句子的最大长度限制为一组单词的长度并添加填充到短句结束:

I = [1,2,3]
Am = [4,5,6]
short = [7,8,9]
paddingword = [1,1,1]

input = np.array([I,Am,eat,short, paddingword]).flatten()

您可能还想看看 doc2vec from gensim,这是一种为文本制作嵌入的简单方法,然后很容易用于文本分类问题。