word2vector学习笔记(一)

2023-11-09


word2vector学习笔记(一)


 最近研究了一下google的开源项目word2vector,http://code.google.com/p/word2vec/。

其实这玩意算是神经网络在文本挖掘的一项成功应用。

本文是看了论文《Distributed Representations of Words and Phrases and their Compositionality》的学习笔记。


论文中,展示了几种原始skip-gram模型的扩展。

频繁词下采样可以加速训练和提高了词频较少的词语的特征表示的精确度。

此外,对NCE做了简单的变化来训练skip-gram模型,对比于此前采用的hierarchical softmax,加速了训练,优化了词频较高的词语的特征表示。

 

一 Skip-gram模型(传统原始模型)

给定一串待训练的词语:

w1,w2,w3, . . . ,wT

我们的目标是最大化log概率的平均值,如下:


其中,

1 c是训练上下文的大小。比如c是5,我们一次就拿5个连续的词语来训练。C越大,效果越好,但花的时间越多。

2 p(wt+j |wt)是表示wt条件下出现wt+j的概率。

 

基本的skip-gram模型的p(wt+j |wt)公式是用softmax函数:


这个公式是不切实际的,因为W太大了,通常是105–107


二 Hierarchical Softmax

这种是原始skip-gram模型的变形。

我们假设有这么一棵二叉树,每个叶子节点对应词汇表的词语,一一对应。所以我们可以通过这棵树来找到一条路径来找到某个词语。比如我们可以对词汇表,根据词频,建立一棵huffman树。每个词语都会对应一个huffman编码,huffman编码就反映了这个词语在huffman树的路径。对于每个节点,都会定义孩子节点概率,左节点跟右节点的概率不同的,具体跟输入有关。

我之前知道huffman树就是用来压缩的。没想到用在这里这么神奇。

因此,给定一个词,我们就知道该词的编码,就知道该词在这个树的路径。我们的目的就是使得,给定一个输入(这个输入肯定不是目标词语本身,而是它的上下文),使得该条路径的概率最大。

 

拿一个具体的例子来分析。

比如,待训练的词组“我 爱 蓝蓝”。

我们要用“爱”的向量去预测“我”的向量。

输入:爱

预测:我

假设,“我”的huffman编码是:1 1 0 1。

于是,我们就在huffman树上从跟节点沿着往下走,

每次走的时候,我们会根据当前节点和“爱”的向量算出(具体怎么算先不管),走到下一个节点的概率是多少。于是,我们得到一连串的概率,我们的目标就是使得这些概率的连乘值(联合概率)最大。


图示左右节点的概率:



显然,我们计算这个联合概率的复杂度取决了词语在huffman树的路径长度,显然她比W小得多了。另外,由于按词频建立的huffman树,词频高的,huffman编码短,计算起来就比较快。词频高的需要计算概率的次数肯定多,而huffman让高频词计算概率的速度比低频词的快。这也是很犀利的一个设计。

 

 

三 Negative Sampling

另一种可以取代hierarchical softmax的是Noise ContrastiveEstimation

 

Neg是nce的一种简化


相当于换了目标函数。

函数前半部分表示一个正样本,后半部分是若干个负样本。



四 subsampling of Frequent Words

高频词二次抽样

the vector representations of frequent words do not change significantly

after training on several million examples.

经过很多次迭代训练之后,再次更新的时候高频词的向量不应该改变太大。

 

To counter the imbalance between the rare and frequent words, we used asimple subsampling approach:

each word wi in the training set is discarded with probabilitycomputed by the formula

为了平衡低频词和高频词,使用了一种二次抽样的方法。对于每个词语,如果由以下公式算出的概率少某个值,则丢弃。



其中,t是一个设定的阈值,f是词频。



Learning Phrases

对于某些词语,经常出现在一起的,我们就判定他们是短语。那么如何衡量呢?用以下公式。


输入两个词向量,如果算出的score大于某个阈值时,我们就认定他们是“在一起的”。

为了考虑到更长的短语,我们拿2-4个词语作为训练数据,依次降低阈值。






本文作者:linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/38048335



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

word2vector学习笔记(一) 的相关文章

随机推荐

  • 数据库 索引

    多数数据库 使用 B 树 Balance Tree 的结构来保存索引 B 树 最上层节点 根节点 最下层节点 叶子节点 两者之间的节点 中间节点 B 树 显著特征 从根节点 到各个叶子节点的距离都是相等的 如此 检索任何值时 都经过相同数目
  • 详解map、set、multimap、multiset的使用

    作者 阿润菜菜 专栏 C 目录 前言 set multiset的使用 1 set 2 multiset 3 什么时候应该使用multiset而不是set map multimap的使用 1 map 2 multimap 3 什么时候应该使用
  • 手把手教你创建的私人git仓库(Linux CentOS7 )

    手把手教你创建的私人git仓库 Linux CentOS7 安装git yes yum install git core 配置用户名和邮箱 此处以 lrq lrq email com 为例 git config global user na
  • js 实现rgb和十六进制的代码转化

    十六进制转化为RGB function set16ToRgb str 十六进制颜色代码的正则表达式 var reg 0 9A Fa f 3 0 9A Fa f 6 test 检测str是否匹配十六进制颜色的模式 if reg test st
  • python爬取英雄联盟所有皮肤

    import jsonpath import requests import json import os import time 程序开始时间 start time time from tqdm import tqdm from time
  • chrome应用商店打不开,怎么下载vue-devtools并安装呢?

    相信很多朋友曾经像我一样 安装vue devtools时总会从各种渠道最后综合转到chrome应用商店的网址 而国内chrome网页是打不开的 肿么办 一 下载 1 本地建立文件夹 自由命名 比如我的为了区分自己的和网上下载的 起名为vue
  • TypeScript 基础类型 —— void

    声明为 void 类型表示没有任何类型 当一个函数没有返回值时 通常其返回值会声明为 void 类型 function gretter void console log 123 编译成js function gretter console
  • 使用Python实现K均值聚类算法

    使用Python实现K均值聚类算法 K均值聚类算法是一种经典的无监督学习算法 它将数据集分为K个簇 每个簇中的数据点与同一簇中心点的距离最小 不同簇的数据点之间的距离较大 该算法常用于数据挖掘 图像处理等领域 以下是其优缺点和Python实
  • Electron+Vue入门(二)vue-cli3.0+electron项目初始化

    第一步 用vue cli3 0创建一个项目 打开命令行工具 vue create demo 选择默认 安装完成 第二步 安装vue cli plugin electron builder 进入项目 cd demo 进入vue项目管理器 vu
  • 怎么样理解同步清零和异步清零?

    DA专业论坛 通用设计 求助 大家是怎么样理解 同步清零和 异步清零的 查看完整版本 求助 大家是怎么样理解同步清零和异步清零的 mxflying 2005 4 20 03 45 求助 大家是怎么样理解 同步清零和 异步清零的 本人对 同步
  • ROS-kinetic中Gazebo中的机械臂仿真报错解决

    1 警告 其实是错误 但也要解决 WARN 1682069601 434351 0 000000 Controller Spawner couldn t find the expected controller manager ROS in
  • 有哪些因素影响服务器的访问速度

    在网络环境下 根据服务器提供的服务类型不同 分为文件服务器 数据库服务器 应用程序服务器 WEB服务器等 一些对服务器的了解不够深入的朋友 会认为服务器的配置越高 服务器的访问速度就会越快 这句话有一定的道理 但是服务器的配置高低只是影响服
  • 计算机视觉项目实战-图像特征检测harris、sift、特征匹配

    欢迎来到本博客 本次博客内容将继续讲解关于OpenCV的相关知识 作者简介 目前计算机研究生在读 主要研究方向是人工智能和群智能算法方向 目前熟悉python网页爬虫 机器学习 计算机视觉 OpenCV 群智能算法 然后正在学习深度学习的相
  • android中下拉菜单的制作(详解)

    在我们的android中下拉菜单的制作有两种的方法 1 一种的方式就是通过我们的布局文件的方法制作 2 第二种方式就是通过我们的java代码的方式制作 第一种方式
  • deepin 20.2版本亮度调节问题暂时解决方案

    可在设置 gt 键盘和语言 gt 快捷键 中设置自己需要的快捷键 建议alt 1和alt 2这两个 与现有快捷键没有冲突 使用原来的快捷键会提示冲突 如果覆盖了设置可能会使原来的快捷键失效 分别添加下面的命令 降低亮度 echo your
  • Anaconda 换源与更新

    参考 Windows下Anaconda安装 换源与更新 里面很详细介绍了 conda 的更新 与 Anaconda 的更新
  • Node.js入门笔记(一)——环境问题和版本号问题

    Node js入门笔记 一 1 node js的版本管理工具 nvm 2 npm全局安装和局部安装 3 开发环境安装与生产环境安装 4 其他常用的npm语法 5 版本号里面的讲究 6 npm上传包 其实就是寒假比较无聊搭了这个自己的博客网站
  • Visual Studio+VAssistX自动添加注释

    1 增加函数头注释 右击函数名 然后依次点击 Refacto gt Document Method 这个时候函数头注释就会蹦出来 不过这个注释的格式是默认的 想修改注释格式 可以通过以下方法 点击 VAssistX gt Visual VA
  • IE下载文件时,中文文件名乱码问题

    经排查 Content Disposition中的filename进行了两次URL转码 以汉字漫为例 第一次转码 漫变为 E6 BC AB 第二次转码 E6 BC AB变为 25E6 25BC 25AB 第二次转码时 因为 是特殊字符 所以
  • word2vector学习笔记(一)

    word2vector学习笔记 一 最近研究了一下google的开源项目word2vector http code google com p word2vec 其实这玩意算是神经网络在文本挖掘的一项成功应用 本文是看了论文 Distribu