[DeepNLP]Keras + 预训练好Word2Vec模型做文本分类核心解释

2017年11月26日 21191点热度 22人点赞 0条评论

现在网上有一些预先训练好的Word2Vec模型, 比如Glove, Google-News以及我最喜欢的FastText,都有各自使用大数据训练出来的Word2Vec模型。 根据不同的业务, 也可以自己搜集语料库训练Word2Vec.

关于如何使用Keras加上预训练好的W2V模型, 具体可以参考官网教程:Using pre-trained word embeddings in a Keras model

 

篇幅比较长, 写得“太详细”了。 不过核心就在下面一行代码: (Example Code on GitHub

 

我们一点点来解释:

 

len(word_index)+1

word_index : 表示从语料库之中保留多少个单词。 因为Keras需要预留一个全零层, 所以+1

有的代码使用num_words来表示len(word_index)

word_index 又是如何得到的?

即:使用Tokenizer,从语料库之中训练(fit_on_texts)之后得到的

 

EMBEDDING_DIM

即Word2Vec模型的维度。 比如你使用的是Glove_840B_300d, 那么EMBEDDING_DIM=300

 

weights=[embedding_matrix]

这一个参数, 应该是最关键的地方了。 weights,即权重。 权重的来源,embedding_matrix又是如何得来的?

思路大致如下:

(1) 构建一个[num_words, EMBEDDING_DIM]的矩阵

(2) 遍历word_index。 将word在W2V模型之中对应vector复制过来。

换个方式说:

  • embedding_matrix 是原始W2V的子集
  • 排列顺序按照Tokenizer在fit之后的词顺序。作为权重喂给Embedding Layer

 

input_length=MAX_SEQUENCE_LENGTH

我们输入的语料,长短不一。 有的比较长, 有的比较短。

在预处理的时候, 我们必经的一个步骤就是pad_sequence:

 

上面的解释只是为了更好的让自己以及给位读者能更清楚的知道Keras是如何跟Pre-trained Word Embedding 对接的。

其实最好的方式还是亲自把原文博客之中的代码跑一遍, 然后可以按照笔者刚才的思路回过头来看代码。

本文并不能代替各位读者的亲身实践。

 

本文原创, 原文链接:
http://www.flyml.net/2017/11/26/deepnlp-keras-pre-trained-word2vec-explaination

RangerWolf

保持饥渴的专注,追求最佳的品质

文章评论