最近在kaggle上找了一个文本细分类的比赛做,觉得NLP这块有很多值得学习和自己实现的东西,就开一个坑开始写。主要内容会是根据斯坦福CS224D给的阅读材料进行的学习过程,也会结合一些课程内容做出自己的理解,所以主要的方法会是深度学习。代码实现这块,初步想法是用Tensorflow,这样也顺带复习一下tf的相关知识,当然作为备忘,也会给出Keras的代码。
1.Word2Vec
NLP中很多时候我们遇到的一个任务就是如何将自然语言转换为合适的形式,然后输入到各种各样的模型中去。那机器最容易处理的形式就是数字向量(vector)了,所以顾名思义,Word2Vec广义上代表的就是将词转换为向量了。
提到向量,肯定就会想到向量空间,空间中所包含的位置信息对于一个机器学习模型是非常重要的。那么在Word2Vec这个任务中,如何尽可能地将词所蕴含的语言信息(多为词的相似度)转换为向量空间的位置信息,笔者认为是十分重要的目的。
最简单的Word2Vec方法就是one-hot encoding了,当然有时也不会直接用1-0形式的向量,而是使用该词在one-hot 词典中的索引作为特征来表示。但这种方法并没有有效地将语言信息进行提取,换言之,特征工程过于简单,对之后模型的构建和计算复杂性提出了很高的要求。
2.Skip-Gram 模型
Skip-Gram是一个神经网络模型,
用比较通俗(非数学推导)的话来解释Skip-Gram模型的原理就是,语义类似的词周围出现的词也是差不多的。带着这句话我们来看它的网络结构: