【问题标题】:Using pretrained word embeddings to classify "pools" of words使用预训练的词嵌入对词的“池”进行分类
【发布时间】:2018-05-26 17:54:39
【问题描述】:

我看到很多论文解释了在使用 CNN 的句子情感分类中使用预训练的词嵌入(例如 Word2Vec 或 Fasttext)(例如 Yoon Kim 的论文)。但是,这些分类器也说明了单词出现的顺序。

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

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

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

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

如果这与本论坛的主题无关,我很抱歉。如果是这样,请让我知道在哪里发布它会更好。

【问题讨论】:

  • 你有这些对应的标签吗,也许是数据集?因为你可以在没有任何深度学习的情况下解决这个问题,只需要 word2vec,因为颜色已经聚集,动物也会聚集。您可以使用向量的点积和分类来检查单词最相似的池。
  • @nuric 是的,这是一个非常简单的示例来演示我的任务的想法,但我的应用程序并不那么简单。我有一个带有单词列表的训练集(随机顺序,每个列表包含大约 100,000 个单词,并且列表中的所有单词都不是,例如,所有关于颜色或动物的)以及类标签,以及一个验证集。因此,我一直在寻找深度学习解决方案,因为简单地查看余弦相似度是行不通的。
  • 您可以使用 gensim 库训练 Word2Vec。除此之外,您可以使用单热编码器和词袋来完成任务,因为正如您所说,顺序并不重要。

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


【解决方案1】:

创建该分类器的关键是要避免列表中单词顺序的任何偏差。一个简单的 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')

如果减少的总和可以避免任何排序偏差,如果大多数单词表达某个类的相似特征,那么总和也会倾向于那个。

【讨论】:

  • 什么是latent_dim?你能解释一下 TimeDistributed 层的作用以及为什么有两个(而不是其他数字)吗?谢谢!
  • 另外,这个模型中的词嵌入在哪里?抱歉,我对机器学习很陌生。
  • 所以latent_dim 是你的隐藏层的大小,如果你愿意,可以给神经元编号,尽管我不喜欢这个词。这是一个您事先修复的超参数。 TimeDistributed 在这种情况下将 Dense 层应用于列表中的每个单词。词向量由你设置为预处理,但你也可以查看Embedding
  • latent_dim 的合理值范围是多少?如果我添加了一个嵌入层,你能确认它应该是in = Input(shape=(max_words_per_sentence, )); embedding = Embedding(vocab_size, 300)(in); latent = TimeDistributed(Dense(latent_dim, activation='relu'))(embedding)
  • 没有关于设置隐藏值的文献,我会从 150 开始。是的,看起来不错。
猜你喜欢
  • 2019-12-30
  • 1970-01-01
  • 2016-06-20
  • 2018-05-21
  • 2019-10-27
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多