Assignment5

这里我就把后面的Word2Vec章节与LSTM合起来讲。由于后面课程篇幅较短,且Assigment基本都给全代码任务都是改进,许多同学也不知道具体这两节代码是做什么的,这里来解释一下。首先语言模型,语言模型的目的是计算给出一段输入,可以预测下一个字符或者词的一种模型。

首先Word2Vec的作用很字面,就是把word映射到vector,专业点叫做embedding,也很直白,将一个词概念嵌入到k维的空间中。这里一般是得到语言模型顺便得到单词的嵌入表示。

Word2Vec一般的想法是根据语义信息,将词嵌入到k维空间中,且使得具有相同语义信息的词对应的向量求出的欧氏距离较小。也就是嵌入后的模型是有语义信息的。

一般的,Word2Vec是通过语料库训练一个Bag of Words,也就是比方说k列的矩阵。这个k很显然就是k维空间的基,通过训练,k个基来调整整个嵌入模型(矩阵)。最终使得,每一个输入乘以模型得到的嵌入后的向量间的欧式距离能够和语意远近产生关系。

具体一个实例:

1.把输入的字符串转化成数字表示:

Most common words (+UNK) [['UNK', 418391], ('the', 1061396), ('of', 593677), ('and', 416629), ('one', 411764)] Sample data [5243, 3083, 12, 6, 195, 2, 3136, 46, 59, 156]

2.准备训练的batch

data: ['anarchism', 'originated', 'as', 'a', 'term', 'of', 'abuse', 'first']

with num_skips = 2 and skip_window = 1:

batch: \['originated', 'originated', 'as', 'as', 'a', 'a', 'term', 'term'\]

labels: \['as', 'anarchism', 'a', 'originated', 'term', 'as', 'a', 'of'\]

这里是2-gram语言模型,所以只追踪上下文的一个单词。由于2-gram这样送入训练,所以就能够使我们最后训练的提取矩阵具有语义信息。训练好的矩阵可以用来提取词向量了,由于输入是m维的,矩阵是mXk的,输出就是k维的向量了。

这第六个任务是LSTM用来训练字符级别的语言模型。

依旧是先将a~z对应到数字1~26,然后输入定长的training batch,训练LSTM模型。由于训练输入是定长序列,且普通的LSTM模型仅仅取最后一个时刻的输出,我们的模型输出就是输入的下一个字符。题外话,由于神经网络中往往使用one hot encoding作为标签,所以如果我们想把字符级别的LSTM语言模型扩展到word级别,那么显然one hot encoding将会超级稀疏。所以我们一般先将输入做word2vec处理,将这个输出作为LSTM的输入。也有end-to-end的方法一起训练,不过需要语料库足够强大,不然的话连word2vec部分训练的都会不具有语义信息。

results matching ""

    No results matching ""