【发布时间】:2018-09-01 10:49:53
【问题描述】:
我想实现一个简单的 word2vec 模型,但出现以下错误
ValueError: Error when checking target: expected dense-softmax to have 3 dimensions, but got array with shape (32, 14).
变量train_x和train_y是表格的32行
[[0 0 0 0 0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0 0 0 0 0]
...]]
python代码如下
vocal_size = 14
input = Input(shape=(vocal_size, ), dtype='int32', name='input')
embeddings = Embedding(output_dim=5, input_dim= vocal_size)(input)
output = Dense(vocal_size, use_bias=False, activation='softmax')(embeddings)
model = Model(input=input, output=output)
model.compile(optimizer='adam', loss='categorical_crossentropy')
model.summary()
model.fit(train_x, train_y)
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input (InputLayer) (None, 14) 0
_________________________________________________________________
embeddings (Embedding) (None, 14, 5) 70
_________________________________________________________________
dense_1 (Dense) (None, 14, 14) 70
=================================================================
Total params: 140
Trainable params: 140
Non-trainable params: 0
编辑:
(“我喜欢 stackoverflow”)上下文大小为 1,我创建以下元组,
(“我”、“喜欢”)、(“喜欢”、“我”)、(“喜欢”、“stackoverflow”)、(“stackoverflow”、“喜欢”)
然后我对它们进行一次热编码并将它们提供给模型。
train_x[0] -> 是单词“I”的一种热编码
train_y[0] -> 是上下文词“like”的一种热编码
编辑 2
对 skip-gram 使用第一种编码:
将 0 视为特殊词(即不是最常见的前 10.000 个)并从 1 开始计数。
我假设我应该输入一个数字并输出一个单热编码,即(“stack”,“overflow”),输入[3](“stack”)和输出[0,0,0,0,1,0,0,0,0,0,0](“overflow”)。
Input(shape=(1,)..) ->
Embedding(output_dim=embedding_size, input_dim=vocab_size, mask_zero=True, ...) ->
Dense(vocab_size+1, activation="Softmax")
model.compile(optimizer='SGD', loss='categorical_crossentropy')
即 embedding_size = 5,输入你例子中的句子,
【问题讨论】:
-
你能提供更多的设置/预处理吗? Keras 通常会读取带有标记词的句子(例如,
[7,12,328,99]表示“Hello world 我是 JDOE”)而不是二进制标签,因为我认为这是一个单词的存在/不存在。这会造成混淆,因为您似乎同时使用vocal_size来表示句子长度(应输入shape)和词汇量(即Embedding中的input_dim) -
@Pdubbs 你好,我编辑了我的帖子。我怀疑我的问题是我将单词作为单热编码向量提供给它。
标签: python neural-network nlp keras