Global Vectors for Word Representation (GloVe)

GloVe 模型包含一个训练在单词-单词的共同出现次数上的加权的最小二乘模型。

什么是Co-occurrence Matrix

假设单词与单词的 co-occurrence matrix 矩阵用 X 表示,\(X_{i j}\)表示单词 \(j\) 出现在单词 i 的上下文中的次数, \(X_{i}=\sum_{k} X_{i k}\)表示任何一个单词 k 出现在单词 i 的上下文中的次数,
\[
P_{i j}=P\left(w_{j} | w_{i}\right)=\frac{X_{i j}}{X_{i}}
\]
就表示单词 j 出现在单词 i 上下文中的概率。所以填充这个矩阵需要遍历一次语料库。

Least Squares Objective

在 skip-gram算法中,我们在输出层使用的是 \(softmax\) 函数计算单词 j 出现在单词 i 上下文的概率:
\[
Q_{i j}=\frac{\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)}{\sum_{w=1}^{W} \exp \left(\vec{u}_{w}^{T} \vec{v}_{i}\right)}
\]
因此,如果我们将这个用于全局的数据的话,那么交叉熵损失函数就可以这么算:
\[
I=-\sum_{i \in \text {corpus}}\sum_{j \in \text { context }(i)} \log Q_{i j}
\]
这个公式的本质就是在上一节讲的一句话的skip-gram上上升到对整个文本的处理。如果我们考虑单词上下文大小以及文本大小为 \(W\).那么交叉熵损失函数可以写成:
\[
J=-\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i j} \log Q_{i j}
\]

上面公式面临的一个问题是,在计算整个文本的时候,计算 \(Q\) 的 \(softmax\) 函数,这个计算量太大了。所以下面想办法优化一下:所以我们根本就不使用交叉熵损失函数,而是使用最小二乘法,那么损失函数就是下面这样:
\[
\hat{\jmath}=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\hat{P}_{i j}-\hat{Q}_{i j}\right)^{2}
\]
其中 \(\hat{P}_{i j}=X_{i j}\) and \(\hat{Q}_{i j}=\exp \left(\vec{u}_{j}^{T} \vec{v}_{i}\right)\) 是非正态分布的. 这里的 \(X_{i j}\) 等价于 j 出现在 i 的上下文的次数, 而 \(\hat{Q}_{i j}\) 是我们通过 skip-gram 预测的次数,所以是最小二乘法。这样的计算量还是很大,习惯上取个对数,公式就变成下面这样了:
\[
\begin{aligned} \hat{J} &=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\log (\hat{P})_{i j}-\log \left(\hat{Q}_{i j}\right)\right)^{2} \\ &=\sum_{i=1}^{W} \sum_{j=1}^{W} X_{i}\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2} \end{aligned}
\]
上面的公式中直接使用 \(X_{i}\) 不一定能够达到最优,因此我们选择 \(f\left(X_{i j}\right)\),使用上下文来表示以提高准确率:
\[
\hat{\jmath}=\sum_{i=1}^{W} \sum_{j=1}^{W} f\left(X_{i j}\right)\left(\vec{u}_{j}^{T} \vec{v}_{i}-\log X_{i j}\right)^{2}
\]

Evaluation of Word Vectors

Intrinsic Evaluation

内部评估的思想,在一个较大的系统中,不能直接校准结果,而是对中间的一些结果进行评估:

  • 内部评估应用于特殊的一个中间任务
  • 可以很快地计算出效果
  • 有助于了解内部系统
  • 在输出端需要于实际的任务相连用来判断准确率

Intrinsic Evaluation 的例子:

我们使用计算单词语义上的类比性来表示模型的准确率:那么我们可以用下面的式子来求出我们最佳的预测:
\[
d=\underset{i}{\operatorname{argmax}} \frac{\left(x_{b}-x_{a}+x_{c}\right)^{T} x_{i}}{\left\|x_{b}-x_{a}+x_{c}\right\|}
\]
可以这样考虑上面的式子,从语义上分析单词的相似性的话,那么我们希望有 \(x_{b}-x_{a}=\) \(x_{d}-x_{c}\) 。所以对于单词 \(x_{c}\) 我们希望得到最优的 \(x_{i}\)。但是这里还要注意一些问题,从训练数据的角度考虑的话就是训练数据的语义之间的相似性决定了预测数据的相似性,另一方面,我们往往会对原始的训练数据进行 PCA降维,降维在这里可以提取出原训练数据最相关的特征,但是也会损失一些训练数据的信息。

从 Intrinsic Evaluation 看影响模型的因素

主要是三个方面:

  • 使用的模型的种类
  • 数据集越大表现越好
  • 单词向量的维度,维度太小,结果不好,太好会引入噪声

Training for Extrinsic Tasks

Retraining Word Vectors

一般情况下,我们使用内部的小任务优化单词向量,然后将单词向量用于整个任务。这是预训练的好处,但是在我们训练好模型之后,如果再继续加入数据的话,数据量不大的情况下不可以重新训练,而是保持原来的训练模型。

Softmax Classification and Regularization

我们使用 \(softmax\) 分类的时候,往往希望的是预测出数据对应的一种类别,这是 \(softmax\) 函数于交叉熵损失函数可以写成
\[
p\left(y_{j}=1 | x\right)=\frac{\exp \left(W_{j} \cdot x\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x\right)}
\]

\[
-\sum_{j=1}^{C} y_{j} \log \left(p\left(y_{j}=1 | x\right)\right)=-\sum_{j=1}^{C} y_{j} \log \left(\frac{\exp \left(W_{j} \cdot x\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x\right)}\right)
\]

交叉熵损失函数就是目标函数取反得到的。上面情况的,假设我们预测的数据只能处于一种类别,那么如果可以处于多种类别该怎么计算呢?我们假设 K 种类别都是正确的,那么可以写成这样:
\[
-\sum_{i=1}^{N} \log \left(\frac{\exp \left(W_{k(i)} \cdot x^{(i)}\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x^{(i)}\right)}\right)
\]
也就是 \(k(i)\) 是 \(x^{(i)}\) 对应的不同类别。

引入正则化

上面的方法是可以的,但是参数太多了,容易过拟合,参数主要是:
\[
\nabla_{\theta} J(\theta)=\left[ \begin{array}{c}{\nabla w_{.1}} \\ {\vdots} \\ {\nabla_{W_{\cdot d}}} \\ {\nabla_{x_{\text {aardvark}}}} \\ {\vdots} \\ {\nabla_{x_{z e b r a}}}\end{array}\right]
\]
正则化的思想就是,过拟合的原因就是参数太多了,那么我们在最小化损失函数的时候引入参数,同时最小化参数,就可以避免完全只考虑最小化损失函数,而不考虑参数,
\[
-\sum_{i=1}^{N} \log \left(\frac{\exp \left(W_{k(i)}, x^{(i)}\right)}{\sum_{c=1}^{C} \exp \left(W_{c} \cdot x^{(i)}\right)}\right)+\lambda \sum_{k=1}^{C \cdot d+|V| \cdot d} \theta_{k}^{2}
\]

CS224n学习笔记(二)的更多相关文章

  1. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  2. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  3. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  4. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  5. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  6. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  7. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  8. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

随机推荐

  1. 学习笔记之盘一盘 Python 系列 1 & 2 - 入门篇

    盘一盘 Python 系列 1 & 2 - 入门篇 https://mp.weixin.qq.com/s?__biz=MzIzMjY0MjE1MA==&mid=2247486473&a ...

  2. The Middle English word was Affrike非洲

    Africa (n.) Latin Africa (terra) "African land, Libya, the Carthaginian territory, the province ...

  3. dmesg命令

    用于检测和控制内核环缓冲.程序用来助用户了解系统的启动信息 Linux命令dmesg用来显示开机信息,kernel会将开机信息存储在ring buffer中 开机信息保存在/var/log目录中名称为 ...

  4. 【Spring Boot】Spring Boot之跨域解决方案

    一.什么是跨域 跨域,指的是从一个域名去请求另外一个域名的资源.即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制. 跨域的严格一点来讲就是只要 ...

  5. 线性回归-API

    线性回归的定义 利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式 线性回归的分类 线性关系 非线性关系 损失函数 最小二乘法 线性回归优化方法 正规方程 ...

  6. sq分页

    create proc RowNumber @pageindex int,@pagesize int AS BEGIN select * from (select ROW_NUMBER() OVER( ...

  7. Zepto.js简介

    Zepto.js简介 一.总结 一句话总结: Zepto.js语法和jquery起码百分之90相似,主要做移动端框架,和jquery mobile是一个类型的概念 1.Zepto.js做移动端的特点? ...

  8. sql分割函数

    drop function [dbo].[f_split] create function [dbo].[f_split] ( ),--需要分割的字符串(例如:1,2,3,4,5 我|和|你) )-- ...

  9. 数组,字符串,json互相转换

    数组转字符串 var arr = [1,2,3,4,'巴德','merge']; var str = arr.join(','); console.log(str); // 1,2,3,4,巴德,me ...

  10. python 批量打印PDF

    有一批PDF文件,好几百个,每个只打印第2,3页,双面打印. 网上搜索一波,方案如下: 安装Ghostscript,GhostView,使用gsprint命令打印pdf文件. gsprint命令参数说 ...