使用预训练的单词嵌入来对单词的“池”进行分类

时间:2018-05-26 17:54:39

标签: python nlp keras deep-learning conv-neural-network

我见过许多论文解释使用预训练词嵌入(如Word2Vec或Fasttext)对使用CNN的句子情感分类(如Yoon Kim的论文)。但是,这些分类器也会考虑单词出现的顺序。

我对单词嵌入的应用是预测单词的“池”类。例如,在以下列表列表中

example = [["red", "blue", "green", "orange"], ["bear", "horse", "cow"], ["brown", "pink"]]

单词的顺序无关紧要,但我想将子列表分为颜色类或动物类。

是否有任何预先构建的Keras实现,或者您可以指出哪些论文基于预训练的字嵌入来解决这种类型的分类问题?

我很抱歉,如果这个论坛是偏离主题的话。如果是这样,请告诉我哪里会发布更好的地方。

1 个答案:

答案 0 :(得分:2)

创建该分类器的关键是避免列表中单词顺序的任何偏差。一个天真的LSTM解决方案只会查看第一个或最后几个单词并尝试分类,这种效果可以通过每次给出列表的排列来减少。也许更简单的方法可能是:

# unknown number of words in list each 300 size from word2vec
in = Input(shape=(None, 300))
# some feature extraction per word
latent = TimeDistributed(Dense(latent_dim, activation='relu'))(in)
latent = TimeDistributed(Dense(latent_dim, activation='relu'))(latent)
sum = Lambda(lambda x: K.sum(x, axis=-1))(latent) # reduce sum all words
out = Dense(num_classes, activation='softmax')(sum)
model = Model(in, out)
model.compile(loss='categorical_crossentropy', optimiser='sgd')
如果大多数单词表达某个类别的相似特征,那么减少的总和将避免任何排序偏差,那么总和也将倾向于此。