假设我有一些文本,我想将它们分为三组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)
e.g
#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特征作为输入吗?
发布于 2021-05-05 22:40:43
从技术上讲,输入将是1D,但这并不重要。
神经网络的内部架构将负责识别不同的单词。例如,您可以有一个卷积,其步长等于嵌入大小。
您可以将2D输入展平为1D,它将工作得很好。这是您通常使用word嵌入的方法。
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,它是一种对文本进行嵌入的简单方法,然后很容易用于文本分类问题。
https://stackoverflow.com/questions/67403070
复制相似问题