Datawhale-NLP学习 Task01 Word2Vec

又来学习NLP啦!几个月前跟着组织的d2l课程挑战过一次nlp,当时是学了RNN、LSTM这些酷酷的模型,然后最后有个评论展示任务,我强行把LSTM的示例代码改了一番,分数最高九十多一点,然后怎么都调不上去了。但是,比赛榜里有些大佬早早的就九十大几了,我与他们仿佛隔着技术的鸿沟。后来代码公开,原来大神用了bert,可是我看了半天才看懂transformer,他们居然直接去用了,果然大神永远超前n步。后来我看了好几遍bert示例,真是大力出奇迹啊!
如果说之前是囫囵吞枣的当了次调参侠,那么这次要好好学下基础啦!

1.NLP介绍

NLP是natural lauguage processing的缩写,就是让计算机明白人类的语言。语言,是大自然给予人类最好的礼物,也是最神奇和抽象的存在。
一开始,为了让机器读懂人的语言,各方语言大师大展身手,给语言各种分门别类,但是世上的语言那么多,一样的词在不一样的语境又有不同的意思,面对浩如烟海并且还不断进化的语言,任何大师在其面前不过是牙牙学语的婴孩,所以这种专家系统的做法实在是固步自封啊。
后来,既然机器只能看懂01,那索性玩个大的,所有的词汇都拥有单独的编号,即one-hot,把每个词都单独表示为形如[0,0,0……,0,1,0,0,……,0,0,0]的形式,每个词都不一样,这样相当于给词汇数字化了。
专家系统和one-hot两种方式呢,太极端,专家系统太过主观,one-hot太过客观。
于是就有了糅合两者优点的word2vec,有了他,语言才得以被真正的带有“感情色彩”的数字化。

2.Word2Vec

估计世界上大约有一千三百万的英文词汇,但是他们是完全不相关的吗?我认为不是,像feline和cat、hotel和motel之类,他们有着或多或少的联系。如果我们可以使用诸如时间、数量等维度对one-hot进行压缩,那么词向量的维度将会大幅缩减,词向量之间的关联性也可以更好的刻画。但是不同于专家系统,事实上词向量的维度是什么并不是非常的清楚。

Word-Document Matrix
为了得到词向量,一个简单粗暴的方法是,拿M篇文章,Xij代表词汇i在文章j中出现的次数,于是矩阵的维度就变成了V×M,非常的大。

Window based Co-occurrence Matrix
Datawhale-NLP学习 Task01 Word2Vec
矩阵X很好的表示出了每个单词与单词之间的关联性。

Applying SVD to the cooccurence matrix
矩阵X还是太大啦,并且也可以认为是n×n的维度,还是太大了。因为X是个方阵,所以可以用SVD奇异值分解的方法,去压缩这个大方阵。
Datawhale-NLP学习 Task01 Word2Vec

*Continous Bag of Words Model(CBOW) 和 Skip-Gram Model
上文中是window size为1的矩阵,当window size>1时,有两种可以描述词汇关联的方法,简单来说,就是:
CBOW——用输入单词作为周边单词去预测中心单词的方式
Skip-Gram——用输入单词作为中心单词去预测周边单词的方式
Datawhale-NLP学习 Task01 Word2Vec