前言

  自然语言处理,基础部分是语言模型,即如何描述自然语句所需要的数学模型,在此之上,词的表达是重要的学习任务。

概率语言模型

  现在应用范围最广的就是概率语言模型了,以条件概率来描述某句话出现的概率。比如这个句子“小猫在草地上打滚”,我们将这句话出现的概率拆解成条件概率:

P(sentence)=P(w0)P(w1|w0)P(w2|w0w1)P(w3|w0w1w2)P(sentence)=P(w0)P(w1|w0)P(w2|w0w1)P(w3|w0w1w2)···


  多么简单明了的数学模型啊,当前词出现的概率,依赖于之前的所有出现过的词,很符合顺序逻辑。
  首先面临的问题是: 依赖关系太长,计算成了不现实的问题;另外, 词的表示 就成了NLP迫切需要解决的事情了。针对第一个问题,最先出现的是Ngram方法,将依赖限制到固定相邻几个词范围内,其本质上仍然将词作为孤立的单元,以one-hot形式出现的;关于后者,如下要介绍的方法,都是在概率语言模型下,就学习词向量所做的工作。

skip-gram & CBOW

  首先出现的神级作品,就是Mikolov的skip-gram学习模型,第一次用超级简单的模型实现了大规模数据集(百个10亿规模)的词向量学习
  1)skip-gram: 以中心词来预测周围词。
  2)CBOW: 以周围词来预测中心词,词袋模型。
  两者相比,词袋模型训练时间更短,但是skip-gram更精准。
  

  为提高优化效率,利用 分层softmax,该方法首次应用在语言模型中,是在05年,Morin, Bengio的 《Hierarchical Probabilistic Neural Network Language Model》。
   skip-gram的升级版本,还是Mikolov,使用Negative Sample Method NEG代替Hierarchical Softmax, 并辅助以 下采样方法解决高低频词分布不均衡问题。同时,将熟语作为整体来训练,得到熟语的词向量表示。其 负采样下的样本pair概率计算如下
  

logP(wO|wI)=logσ(vTwOvwI)+i=1kEwiPn(w)[logσ(vTwivwI)]logP(wO|wI)=logσ(vwO′TvwI)+∑i=1kEwi∼Pn(w)[logσ(−vwi′TvwI)]


  其中 Pn(w)Pn(w)
是单个词在语料中的频次分布,再作 3/43/4
的幂次方, kk
在是小样本集下取[5,20],大样本集下取[2,5],论文中的经验值。
整体优化目标,仍是窗口内的周围词概率最大化:

1Tt=1Tcjc,j0logP(wt+j|wt)

1


T








t


=


1



T











c





j





c


,


j





0




l


o


g


P


(



w



t


+


j





|




w


t



)


   下采样的基本思想 是由于高低频词的严重不均衡化,导致高频词的信息能提供的信息比低频词要少,那么适当的采样是科学合理的。其采样概率基于频词作适当调整,以 P(wi)P(wi)
丢弃训练词 wiwi
,越高频的越容易被丢弃, tt
是手选阈值,通常为105

10






5



P(wi)=1tf(wi)P(wi)=1−tf(wi)


  NEG方法训练更快,不再沿路径计算路径节点只需采样即可,并且对高频词更友好;下采样方法可提高2~10倍训练速度,且对低频词更友好。
   NCE和NEG的关系: NCE可以用来做为softmax的log概率的最大化估计,基于NCE采样来表示条件概率 logP(WO|WI)logP(WO|WI)
,以此做词向量训练的方法名称被Mikolov称为NEG。NCE的首次提出是12年Gutmann, Hyvrinen 的 《Noise-Contrastive Estimation of Unnormalized Statistical Models, with Applications to Natural Image Statistics》,首次用在Language Model中是13年Minh, Whye Teh的 《A Fast and Simple Algorithm for Training Neural Probabilistic Languages Models》。
   notice 1:为什么之前的方法不能够实现超大规模数据集的学习,因为大部分的方法,比如LSI / LSA是基于矩阵分解的。
   notice 2: 2003,bengio的 《A Neural Probabilistic Language Model》才是Word Embedding的首次提出,尝试将one-hot词表示通过前向神经网络映射成稠密表示。
   noitce 3: 对分层softmax 和 NEG有个比较好的 博客介绍。

GloVec

  GloVec,global vectors 弥补了全局和局部(窗口类方法)的割裂性,本质仍然是统计模型分解,也是简单模型计算词向量的典型算法,14年由Pennington提出,是一个统计强化版的skip-gram。
  如何得到的GloVec的思路有点绕,简单如下解释:
  1) 假设Pij=P(j|i)=XijXiPij=P(j|i)=XijXi
表示词wjwj
出现在词wiwi
上下文中的概率,XijXij
表示词wjwj
在词wiwi
上下文中的频次。其中Pik/PjkPik/Pjk
依赖于三个词wi,wj,wkwi,wj,wk
,将依赖关系表示为F(wi,wj,wk)=PikPjkF(wi,wj,wk)=PikPjk

  2) 词向量的空间是具有线性特质的,那么表示两个词的商,用差来描述也是可以的:PikPjk=F(wiwj,wk)PikPjk=F(wi−wj,wk)

  3) 为了更好地对齐两边的形式,压缩为数值:PikPjk=F((wiwj)Twk)PikPjk=F((wi−wj)Twk)

  4) 将商与差的假设关系【隐藏着log通解】替换上去:F(wTiwk)=Pik=XikXiF(wiTwk)=Pik=XikXi

  5) 将假设关系对应的通解带入:wTiwk=log(Pik)=logXiklogXiwiTwk=log(Pik)=logXik−logXi

  6) 一般还会加入bias:wTiwk+bi+bk=logXikwiTwk+bi+bk=logXik
logXilogXi
作为常数合并到bias中。
  整体优化目标

J=i,j=1Vf(Xij)[wTiwk+bi+bklogXij]2J=∑i,j=1Vf(Xij)[wiTwk+bi+bk−logXij]2


  f(x)是非减函数,f(0)=0,对大值x->f(x)较小,避免overweight。论文给出了非常适合的一个f函数:
         {(x/xmax)α1ifx<xmaxelse{(x/xmax)αifx<xmax1else
,其中 α=3/4,xmax=100α=3/4,xmax=100

  最后还给出了skip-gram也放到这个解释框架下的样式,从而给出结论,GloVec能覆盖住skip-gram窗口所不能覆盖的全局统计信息。
   notice 1: 词向量的学习有个有意思的现象, 模型简单并不会影响词向量的好使程度
   notice 2: 矩阵分解类方法,矩阵形式有term-doc和term-term;分解方法有LSA/HAL/COALS/PPMI/HPCA。
   noitce 3: 关于方程通解问题,详细了解可以找下高等数学下册部分。

RNN-LM

  基于RNN结构来学习词向量,还是这个Mikolov,他的RNNLM工作都总结在博士论文里,超级长还不如看开源代码。
  主要是做啥呢?如下图解释:
  

  主要公式: s(t)=sigmoid(Uw(t)+Ws(t1))s(t)=sigmoid(Uw(t)+Ws(t−1))
,其中 ww
是one-hot的词,U
U


是向量矩阵。
  RNN可以真正充分地利用所有上文信息来预测下一个词,而不像前面的其它工作那样,只能开一个 n 个词的窗口,只用前 n 个词来预测下一个词。就是这里使用的RNN是最简单的RNN结构,训练优化比较困难。为缓解巨大的词表带来的softmax过大问题,根据词频将 VV
个词分成V

V


,先判断是哪个组再判断是哪个词。

拓展思考

非直接统计目标学习的词向量

  直接用索引式的向量矩阵来表示词向量集合,然后基于当前的学习任务(非上述统计的学习任务,而是比如分类等任务),这个时候学习得到的词向量,是匹配当前任务度最好的词向量。只不过不再是基于统计目标优化得到的词向量,而成了是基于任务目标优化得到的词向量。没有明确结论两者有优劣之分的。

Debiasing Word Embdding

  这个问题应该是模型对现实世界的真实反映,为什么词向量里面会出现歧视色彩,主要是语料库来自现实世界,而现实中就是存在歧视现象。所谓的修正,也仅限于人为的修正。基本方法如下:
  1)用一组偏性别词向量,计算其主成分,top-one则是性别方向g,作为性别子空间。
  2)指定中性别词集合,其与性别子空间的距离要保持阈值以上。
受限于各种原因,本文对word embedding的各个方面并没有照顾地那么全,希望读者多多思考和补充。

Reference

  1. 《2013 - Efficient Estimation of Word Representations in Vector Space》
  2. 《2013 - Distributed Representations of Words and Phrases and their Compositionality》建议重点阅读。
  3. 《2003 - A Neural Probabilistic Language Model》
  4. 《2005 - Hierarchical Probabilistic Neural Network Language Model》
  5. 《2012 - Noise-Contrastive Estimation of Unnormalized Statistical Models, with Applications to Natural Image Statistics》
  6. 《2013 - A Fast and Simple Algorithm for Training Neural Probabilistic Languages Models》
  7. 《2014 - GloVe: Global Vectors for Word Representation》
  8. 《2010 - Recurrent Neural Network based Language Model》
  9. 《2013 - Distributed Representations of Words and Phrases and their Compositionality》

Word Embedding 简述相关推荐

  1. Pytorch:jieba分词、hanlp分词、词性标注、命名实体识别、one-hot、Word2vec(CBOW、skipgram)、Word Embedding词嵌入、fasttext

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 文本预处理及其作用: 文本语料在输送给模型前一般需要一系列的预 ...

  2. word2vec代码_TensorFlow2.0 代码实战专栏(四):Word2Vec (Word Embedding)

    作者 |  Aymeric Damien编辑 | 奇予纪出品 | 磐创AI团队 Word2Vec (Word Embedding) 使用TensorFlow 2.0实现Word2Vec算法计算单词的向 ...

  3. Word Embedding News|词嵌入新鲜事:六月刊:GPT-3来了

    这里是 WEN(Word Embedding News)|词嵌入新鲜事. 作为起步,它将基于 Sebastian Ruder NLP News 的每月筛选,聚焦词嵌入领域.对涉及内容在本人阅读后的基础 ...

  4. Word Embedding List|ACL 2020 词嵌入长文汇总及分类

    ACL 2020 于 5 月 17 日放榜啦,在此祝贺.羡慕每一位论文被接收的朋友.以下汇总并尝试按主题分类了 37 篇与 word embedding 有关的长文,让我们一起看看今年词嵌入的研究又有 ...

  5. Word Embedding News | 词嵌入新鲜事:COVID-19特刊

    这里是 WEN(Word Embedding News)|词嵌入新鲜事. 作为起步,它将基于 Sebastian Ruder NLP News 的每月筛选,聚焦词嵌入领域.对涉及内容在个人阅读后的基础 ...

  6. 06_1.Pytorch中如何表示字符串、word embedding、One - hot、Embedding(Word2vec、BERT、Glove)【学习总结】

    1.6.1.如何表示字符串 1.6.1.1.word embedding 1.6.1.1.1.文本表示(Representation) 1.6.1.1.2.独热编码 | one-hot represe ...

  7. 文本的表示-词嵌入(word embedding)

    文本的理解 文本是常用的序列化数据类型之一.文本数据可以看作是一个字符序列或词的序列.对大多数问题,我们都将文本看作词序列. 深度学习序列模型(如RNN及其变体)能够较好的对序列化数据建模. 深度学习 ...

  8. 【李宏毅机器学习】Unsupervised Learning - Word Embedding 无监督学习 - 词嵌入(p22) 学习笔记

    文章目录 Unsupervised Learning Word Embedding 用一个vector来表示一个word的几种方法 1-of-N Encoding Word Class Word Em ...

  9. 《How to Generate a Good Word Embedding?》导读(转)

    http://licstar.net/archives/620 <How to Generate a Good Word Embedding?>导读 Posted on 2015 年 7 ...

最新文章

  1. 微信小程序之apply和call ( 附示例代码和注释讲解) apply call  bind
  2. python爬虫的scrapy安装+pymongo的安装
  3. android 渠道打包工具,Android渠道打包技术小结
  4. 3.12 SE11创建锁对象
  5. bubbleSort 冒泡排序
  6. “不差钱”华为刷屏 拟募资60亿!
  7. php 打印多维数组中的值,从多维数组php中提取值
  8. docker 镜像注册【图文教程】
  9. 华为鸿蒙2.0安装包,鸿蒙2.0系统官网正式版下载-华为鸿蒙2.0系统官网安装包下载-战地2中文网...
  10. vc++ 2008 Redistributable Setup Error 1935.An error occurred during the ...
  11. 年度总结 | 目标检测2019,你还有不知道的吗?
  12. 程序员月薪过7万,可以落户北京了
  13. 二十岁的男人(应该需要做什么)
  14. director入门
  15. 算法——暴力之美(volence‘s beautify of algorithm)
  16. 一个数据库超全,支持免费高速下载专利的资源库--欧洲专利局Espacenet
  17. 赤纬转换为度 (字符切割和字符类型转换 string→double)
  18. 科研实习 | 新加坡国立大学尤洋老师课题组招收Data-centric AI科研实习生
  19. CVPR 2022 Oral 学习不分割的内容:关于小样本分割的新视角
  20. PADS布线问题【同网络不能够连线】【不能够任意放置过孔】

热门文章

  1. 基于JSP的运动会综合管理系统
  2. 信号与系统——信号的分解
  3. ubuntu系统安装安卓模拟器(Android SDK)的方法
  4. vue buid打包,修改环境变量
  5. BMS(电池管理系统)第五课 ——核心!!!SOH算法开发
  6. enabled的使用
  7. BroadCastReceiver 与 startService
  8. 用计算机做科学实验心得体会,做实验的心得体会3篇
  9. Javascript的设计模式之从设计到模式(其他设计模式)
  10. 串联谐振电路的品质因数