将在专门主题上训练的单词嵌入合并到预先训练过的单词嵌入

时间:2017-11-01 16:32:44

标签: keras word2vec

我有两个字嵌入。一个预训练的手套和我在医疗相关文件上训练过的手套。预训练的矢量包含更多的单词,但我的单词矢量对医学术语有更好的表示。我要融合两套嵌入。

Glove(200d)有400万个术语,其中约10%也可以在我自己的嵌入中找到(也是200d)。我想知道创建一个将Glove空间中的矢量映射到我自己的嵌入空间的神经网络是否有用,而不是简单地将两者连接在一起(这会产生大量的0)。专门:

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential()
model.add(Dense(units=100, input_dim=200))
model.add(Activation('sigmoid'))
model.add(Dense(units=50))
model.add(Activation('sigmoid'))
model.add(Dense(units=100))
model.add(Activation('sigmoid'))
model.add(Dense(units=200))
model.add(Activation('linear'))
model.compile(optimizer='rmsprop',
          loss='mse')
model.fit(x_train, y_train, epochs=10, batch_size=32)

结果非常糟糕,我想知道是不是因为方法不正确或模型没有正确调整。

1 个答案:

答案 0 :(得分:0)

未经训练的单词矢量集彼此之间没有本质关系 - 距离和方向只能在相关约束下开发的一组矢量中解释。 (作为一个简单的例子:如果你要采用一组单词向量并否定它们的所有坐标,每个集合在寻找相关单词或解决类比等方面都会同样擅长。但是单词之间的距离/方向在备用集合中几乎没有意义。)

设计两者之间的映射转换是一个合理的想法,在一篇原始的Word2Vec论文中提到("利用机器翻译的语言之间的相似性")和#34 ; Skip-Thought Vectors"论文,第2.2节("词汇扩展")。

在这些情况下,学习线性变换矩阵 - 而不是像您的代码摘录似乎暗示的多层映射。

用于(除其他事项外)使用单词向量的gensim库最近添加了一个学习和使用的工具。在TranslationMatrix课程中应用此类转换。你的10%词汇重叠,它可能适合你的目的。