微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们可以在 Pytorch 中有超过 1D 的输入吗例如词嵌入

如何解决我们可以在 Pytorch 中有超过 1D 的输入吗例如词嵌入

假设我有一些文本,我想将它们分为三组 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,3]
Am = [4,6]
short = [7,9]
paddingword = [1,1,1]

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

此外,您可能还想查看 doc2vec from gensim,这是一种为文本进行嵌入的简单方法,然后可以轻松用于文本分类问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。