word2vec的学习思路

夜里坐在椅子上发着呆,想着到底接下来学点什么比较合适,大脑里把知识列举了一遍,却突然间把之前一直没有想通的word2vec明白了一些。
大致说一下该算法的学习顺序所及参考文献。不会Latex的人只能截图了…..

1. 多层神经网络

 

 


熟悉神网的人就不用再看了,总之就是一个简单的FeedForward运算, 然后通过基本的BP算法来做训练。

2. 概率语言模型

需读的paper: http://machinelearning.wustl.edu/mlpapers/paper_files/BengioDVJ03.pdf
该paper算是使用神经网络来做概率语言模型的始祖之作了,学习过LDA的同学不妨对照LDA来理解这篇paper的思路,不看其具体实现算法,其最不同的地方应该是通过N-gram引入了context的概念。
paper在第二节最初的时候就指明了我们需要优化的目标函数:

 


第六页的尾部及其第七页的顶部给出了待优化的参数:

 

 


优化算法就是基本的BP算法,虽然参数很多,但是别害怕,整体思路依旧是个链式的积分法则而已。

3. 通过分层优化语言模型
需读的paper: http://www.iro.umontreal.ca/labs/neuro/pointeurs/hierarchical-nnlm-aistats05.pdf
这篇paper的核心思想是如何解决所有词遍历的时间复杂度问题,可以看第三页的右侧中部:

 


paper将上一篇paper中的优化问题通过编码改成了一个优化编码位的问题,而接下来则是将该问题作为了一个二分类问题来解,可以看第四页的右侧中部:

 


在paper的第五节中使用wordnet对词进行编码:
A very important component of the whole model is the choice of the words binary encoding, i.e. of the hierarchical word clustering. In this paper we combine empirical statistics with prior knowledge from the WordNet resource (Fellbaum, 1998). Another option would have been to use a purely data-driven hierarchical clustering of words, and there are many other ways in which the WordNet resource could have been used to influence the resulting clustering
这个略作了解就可以了,并不重要。

4. Extensions of recurrent neural network language model
这篇paper从google上只能找到对应的slide,paper是麻烦在校的同学帮我下的,各位不妨去搜一下。
这篇paper主要讲了一些recurrent neural network来做language model的一些基础的方法及其优化函数,另外很重要的一点是该文在Speedup techniques的时候指出了,词出现的频率是不等的,如果将词分成20类的话,则第一类会出现很多类似“The”这种高频词,而最后一类则会是很多低频词。这也是word2vec优化效率的一个很重要的基础。
此外,该文章很重要的一个优化技术则是将词之间的条件概率模型转换成了类和词之间的条件概率模型,感兴趣的同学不妨看一下。

5. Word2vec
需读的paper: http://arxiv.org/pdf/1301.3781.pdf
嗯,就是Word2vec最基础的那篇paper,其实paper上没有讲什么内容。
2.1部分说明了时间复杂度的主要瓶颈:

 

在新的模型改进时,主要是做了如下的两点:

 


6. 工程化实现
先吐个槽,Google的这个代码写的真心是让人不忍过目,所以读代码之间各位不妨先自行整理一下代码,把方法该拆的拆开,该删的删掉,该换行的给换个行.......


<1> ExpTable:这个地方如果读过LibFm代码的人应该清楚,就是利用了Pre-Computing的思想对一些之前的东西来做缓存。
<2> 霍夫曼编码,这个地方是我之前看的最纠结的一个地方,但是读了上面第三段说的paper各位应该就明白意思了,其实通过频率对词进行霍夫曼编码的一个好处是大多数的词编码长度都很短,所以在做 P(a,b,c) = P(a | b,c) * P(b|c) * P(c) 这种运算的时候所需的次数都比较少,有效地降低了时间复杂度。

最后关于Skip-gram实现原理上没有什么区别,只是优化函数上略有不同,看一下paper的3.2节以及第五页的配图应该就很容易懂了。
### 特点 Word2Vec是一种用于生成向量的浅层神经网络模型,其主要通过预测目标单周围的上下文来学习语表示。这种模型能够捕捉到一定程度上的语义关系,并且计算效率较高[^1]。 BiLSTM(双向长短期记忆网络)属于循环神经网络的一种变体结构,可以同时利用前向和反向的信息流处理序列数据,在自然语言理解任务上具有更好的效果。它不仅考虑了当前时刻之前的输入信息,还兼顾到了后续可能出现的内容特征[^2]。 ### 应用场景 对于Word2Vec而言,由于其实现简单快速并且能有效地获取低维稠密型分布式表达形式,因此非常适合应用于大规模文本预训练阶段或是作为其他复杂NLP系统的初始化参数;另外也可以用来解决诸如近义查找等问题。 而BiLSTM则更适用于那些需要深入挖掘句子内部逻辑关联的任务场合,比如情感分类、命名实体识别等。此外,在机器翻译领域也表现出色,因为这类工作往往涉及到较长距离依赖性的建模需求[^3]。 ### 对比学习中的表现 当涉及对比学习时,两种方法各有千秋: - **Word2Vec**: 主要优势在于速度方面——它可以非常迅速地完成大量未标注语料库的学习过程并得到初步的结果。然而,由于架构本身的局限性,使得该算法难以直接适应于复杂的下游任务中去实现端到端优化。 - **BiLSTM**: 虽然训练时间相对较长一些,但是凭借强大的表征能力以及灵活的设计思路,使其成为构建高效对比损失函数的理想选择之一。特别是在多轮迭代更新过程中不断调整权重矩阵从而达到最优解的能力尤为突出[^4]。 ```python import torch.nn as nn class BiLSTMLayer(nn.Module): def __init__(self, input_size, hidden_size, num_layers=1): super(BiLSTMLayer, self).__init__() self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers, bidirectional=True) def forward(self, x): lstm_out, _ = self.lstm(x) return lstm_out ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值