一、自然语言的初步了解和word2vec语言模型的学习

1. 人类如何理解一个单词的含义?(How do we represent the meaning of a word?)

人类用单词、词组表示概念,运用单词、符号表示自己的观点,通过写作作品、艺术来表达观念,理解含义最普遍的语言方式(denotational semantics用语言符号对语义进行转化): signifier(symbol)⇔signified(idea or thing)

2. 如何让电脑也能够理解语义?(How do we have usable meaning in a computer?)

2.1 用包含同义词集和上位词的一个巨大词典来表示(Wordnet)
但是Wordnet的劣势很明显:

是很好的资源但忽略了细微的一些差别:例如词典中‘proficient’与‘good’认为是同义词,但是这只 在某些文本上下文中成立。
忽略了一些单词的含义(即含义不完整)
偏主观(缺少客观性)
需要人类来不断地更新和改写
无法计算单词之间的相似度

2.2 将单词看作是离散的值来表示(Representing words as discrete symbols)

传统NLP中,我们将单词看作是离散的表示,通过独热编码(one-hot vector)来表示。


One-hot vector表示,由于向量是正交的,因此没法表示他们之间啊的相似度,如果词汇量太多,将使 得向量的维度过大。

2.3 通过上下文来表示词义(Representing words by their context)

Distributional semantics:一个单词的含义通常由在它附近经常出现的单词给出的。

  • 对于文本中的一个单词w,它的上下文就是出现在它附近的一组单词(在一个划定好size的窗口下)
  • 通过许多包含w的文本中的上下文来构建w的含义表示:


3. Word2vec 介绍(Word2vec introduction)

3.1 词向量(Word vectors)

词向量就是根据单词的上下文将单词转化为向量,用来表示词义。我们将为每个单词构建一个稠密的向量,使得它能够与相似文本里的词向量相近,word meaning 作为 一种神经词向量,在我们对向量空间进行可视化:


3.2 Word2vec 概览(Word2vec Overview)

Word2vec 是一种学习词向量的框架
包含大量的文本语料
固定词表中的每一个单词由一个词向量表示
文本中的每个单词位置 t,有一个中心词c,和它的上下文 o(除了 c 的外部单词)。 通过 c 和 o 的词向量相似性来计算 P o/c
不断的调整词向量,最大化概率
固定窗口,滑动窗口并计算:



3.3 Word2vec 主要分为两类:Skip-gram 和 CBOW 模型
  • N是词向量维度(与隐含层节点数一致)
  • V是词语总数

词向量的维度N一般情况下要远远小于词语总数 V 的大小,所以 Word2vec 本质上是一种降维操作——把词语从 one-hot encoder 形式的表示降维到 Word2vec 形式的表示。

3.3.1 如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』

3.3.2 而如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』


3.3 Word2vec 目标函数:

对于每个位置 t = 1,...,T,固定窗口大小m,给定中心词wj:



注: θ 是需要优化的参数

注:

  • θ 为损失函数(这里是平均负对数似然);
  • 负号将极大化损失函数转化为极小化损失函数;
  • log函数方便将乘法转化为求和(优化处理)
3.4 如何计算

如何计算 P(w_{t+j}|w_t; θ) ?
对于每个单词 w 我们使用两个向量 v_wu_w
v_w :当 w 是中心词时
u_w :当 w 是上下文单词时
对于中心词 c 和上下文单词 o,有:

4. Word2vec 目标函数的梯度(Word2vec objective function gradients)

Training a model by optimizing parameters
(通过优化参数的方式训练模型)- 最小化损失
整个模型里只有一个参数 \theta ,所以我们只用优化这一个参数就行。 例如:模型在一个 d 维,词典大小为 V :

  • 每个单词有两个向量
  • 通过梯度(导数)下降的方式优化参数
  • 梯度下降会用到链式法则
  • 迭代计算每个中心词向量和上下文词向量随着滑动窗口移动的梯度
  • 依次迭代更新窗口中所有的参数

5. Optimization basics

Optimization Gradient Descent(梯度下降)

  • 我们的损失函数 J(\theta) 需要最小化
  • 使用的方法为:梯度下降
  • 对于当前 \theta ,计算 J(\theta) 的梯度
  • 然后小步重复朝着负梯度方向更新方程里的参数 \alpha=(step\ size)\ or\ (learning\ rate)

更新唯一的参数 \theta:

SGD:随机梯度下降法(Stochastic Gradient Descent)

  • 由于 J(\theta) 是在语料文本中所有窗口的方程
  • 当语料很大的时候,计算梯度会消耗巨大
  • 解决办法:SGD
  • 不断sample窗口,不断更新
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。