深度学习 (五)cbow、skip-gram of word2vec

介绍

       NLP 自然语言处理即让计算机理解学会人类语言,让计算机像人一样能有分辨能力、语言交流能力,并为我们服务产生价值的一种研究方向,从发展历史来说经过了很多代人的努力,向我们的目标更近了一步,从传统的基于规则的语言逐步向基于统计的理论发展。
在这里插入图片描述
       下面先来看一张旅游地图,不至于迷失方向,后面会详细介绍它们之间的关系。
在这里插入图片描述

历程

rules-Based

       1950年时基于规则的自然语言处理非常火,它是把规则提前编码好并告诉计算机按着规则来分析解析句子结构和语法,如主谓宾语法,这些规则是咋来的呢,人为编制的,可能是计算机科学家和中文语言学家坐在一起开了个会沟通了一下,中文学家把语言规则提了一个产品需求扔给计算机科学家,说你把这个搞到计算机里面让它能懂我们说得话,就这么简单的开了个会规则、符号就确定了,显然这一过程依赖于几个有经验的人以及他们的水平,人的水平是有限的一个人同时懂了世界上所有语言不太可能。
       另一方面出来各种新词之后我们设定的规则是否要从新变更呢,另外翻译准确率也不是很高,经过一段难熬的时间,很多人们开始把目光转向了另一种思路,以统计学为基础统计概率问题。

language modeling

       到了1970年时随着统计学的快速发展,人们开始尝试应用统计学和机器学习相结合来解决语言处理问题,要判断一段文字是不是一句自然语言,可以通过确定这段文字的概率分布来表示其存在的可能性,语言模型中的词是有顺序的,给定m个词看这句话是不是一句合理的自然语言,人们尝试了各种机器学习模型,从那时起语言模型这个概念逐渐流程起来,语言模型这个词的含义其实也包括传统的规则符号表示模型,不过现如今一般指基于统计的语言模型。

representation model

       机器学习模型前面我们已经接触过,常见的监督学习和非监督学习,无论哪种都学要输入经过数据清洗好的数值数据即向量,我们面临的第一个问题就是书本或各大新闻上的那么多文字如何让计算机理解看懂呢,想象小时候我们学习了什么,是从单个的字词 偏旁、结构学起 时间一长积累了大量单词词汇并理解各个词的意思,相近词等,开始人们建立了一个超大型词表或叫‘’汉语词典‘’,在转换一句话时如果单词存在字典中即为1,不存在即为0,单词长度为词典长度。

one hot encoding(word)

举个使用one hot encoding编码的具体例子:
第一句:John likes to watch movies.Mary likes too.
第二句:John also likes to watch football games.
将两句编码为词典:
{“John”:1,“likes”:2,“to”:3,“watch”:4,“movies”:5,“also”:6,“football”:7,“games”:8,“Mary”:9,“too”:10}
对词典里面每个词编码
John [1,0,0,0,0,0,0,0,0,0]
likes [0,1,0,0,0,0,0,0,0,0]
to [0,0,1,0,0,0,0,0,0,0]
watch [0,0,0,1,0,0,0,0,0,0]
movies [0,0,0,0,1,0,0,0,0,0]
also [0,0,0,0,0,1,0,0,0,0]
football [0,0,0,0,0,0,1,0,0,0]
games [0,0,0,0,0,0,0,1,0,0]
mary [0,0,0,1,0,0,0,0,1,0]
too [0,0,0,1,0,0,0,0,1,1]

bag of words

第一句话整合编码为:[1 2 1 1 1 0 0 0 1 1 1]
第二句为 [1 1 1 1 0 1 1 1 0 0]
       从实事求是的角度来观察:句子的编码可以看出来一个单词出现的次数越多权重会越大,上面like出现了两次权重为2,假如John这人还喜欢apple peal 等那又多出来几个like,经常一篇文章的主题和里面重复太多的词关系不大,往往和那么在本篇中出现的有关系。

  • TF-IDF
           有人因此提出来了TF-IDF模型,此处略过可以自行网上搜索,它在表示一个单词重要性时不止和本篇有关系,同在其它文档中的频次成反比,它在一定程度上解决了文章中单个重要程度的合理表达,but依然存在词之间的相互关系不能表达,每个词之间顺序完全没有体现出来。

n-gram

       我们先来说一下基于统计的语言模型,它们都是基于条件率来求解,在A事件发生的情况下,B事件发生的概率是多少,我们想一句话是否合理转化为了数学向量,然后又通过概念来计算这一向量是否合理的概率,可以说是结合数学+统计学解决自然语言识别翻译等问题,概率论的鼻祖是贝叶斯,所以都称贝叶斯是自然语言理论的开拓者。
       假设句子为S,由m个词组成,即求这m个字词组成句子S的概率是多少,概率值越大表明这个句子接近正确越近、表达也越合理。
P(S) = p(w1)*p(w2|w1)*p(w3|w1,w2)*p(w4|w1,w2,w3)****p(wm|w(m-1+n)**wm)
马尔科夫链假设:
       由于上述问题非常复杂求解,后来马尔科夫提出来了一个假设,每个词出现的概率只与前面n-1个词有关系,那么可以节省很多计算,常用模型如下:
n=1 unique gram
在这里插入图片描述
n=2 binary gram
在这里插入图片描述
n=3 third gram

在这里插入图片描述
       这里面的n是划分预料库的一个标准,n=1表明整个语料库都是单个词,n=2表明都是大小为2的短语,我们要做的便是基于这么多的预料库计算我们所给出的句子发生的概率是多少,语料库中的每一个词都有可能是组成我们将要预测词的一部分,因此每个词都要有一个概率值,即语料库的个数即我们参数规模的大小,语料库成指数增长,那么参数个数也呈指数增长,n值越大句子越精确但是n>=4时语料库将非常大不利于计算,项目中很少使用,对于计算概率我们可以写一个例子来实现说明。
       计算时大概是根据出现次数来计算.

distributed representation

You shall know a word by the company it keeps
       distributed描述的是把词语包含的信息分布式地存储在向量的各个维度中相反的是局部表示(local representation),如词语的独热表示(one-hot representation),在高维的one hot向量中只有一个维度描述了词的语义如为1的那个维度,其它维度都是0,语义是离散的,可以通过矩阵降维或神经网络降维可以将语义分散存储到向量的各个维度中,因此,这类方法得到的低维向量可称为分布式表示。
cocurrence matrix
       topic model 说道这里有必要先说下主题topic model,即识别一个文档是属于或包含哪些主题,如今日头条文章都是自动分好类的,这个分类如何来分呢,一个分类就是一个主题,下面这两种常用方法经常用来识别文档主题,主题模型也是自然语言的一个研究方向,详细的这里先不深入研究。
在这里插入图片描述

  • word document
           词-文档表示用来发现topic,大概描述方法矩阵的每行表示词(one hot) ,纵列表示文档,可想而知每个文章包含的单词个数是很大的,那么每行将非常长,虽然可以利用SVD来降维,结果还是难于计算如LSA,后面人们又优化了有了LDA等,详情请百度。
  • word-word
           表示方法变了但要记住我们的思想 ,我们是想通过上下文来表示目标词的含义,word-document也可以表示它的上下文自然是整个文档,因此这种方法在分析句子含义方面很少用,它的关系是词语整篇文章,这个word-word关系表示法即可以用来表达句子语义信息,看下面三句话:
    l like deep learning
    l like NLP
    I enjoy flying,编码为词典
    效果如下图:
    在这里插入图片描述
           上图也好理解,我们发现好多方法都存在向量维度非常大的问题,对新加入词兼容性不好,它没有表明词与词之间的顺序,当我们设置划窗大小时,划窗只是表示目标词周围几个词和他共同出现的现象,共现的意义也在于此,在2013年有人提出来了更好的设计词语义表示方法,如下
    word embedding
           嵌入即把一个东西放在另一个东西里面的意思,在生活中也常常听说嵌入钻石的戒指、项链等,嵌入貌似都是将大的物件嵌入到小的物品中,其实词向量这里也是这个意思,嵌入这个词真是异曲同工,在数学上可以理解为有两个集合A、B,A包含B,那么B也可以说嵌入到了A中,具体的例子可以正整数、整数的关系来说,我们可以说把正整数集合嵌入到整数集合中,那么整数的特征可以表达出来正整数,正整数依然有些自己的特性,再高级说即将整数映射到实数,本篇尾部我们来谈谈一个高级话题黎曼猜想,人类的这些认为常识的东西,也是逐渐积累起来的,现在认为的常识,放在几千年前可能是难以想象的数学难题,word embdding也是类似,词嵌入是将高维稀疏的词向量映射到低维稠密的向量空间,主要为了方便计算。
           word embedding完成了哪些事呢,首先它将硬生生的语言文字(不只限于中文)用数学中的向量来表达出来了,即表达原有语言文字,将语义信息分不到了多个向量维度来表达,另外只表达出来还不算,还要能尽量把表达的东西的本身特性不能丢了也要表达出来,一句话总结即用低维稠密向量完美表达语言本意信息。
           word embedding可以理解为一个概念层面的东西,好比接口api有人定义有人实现,java ee里面基本的规范有十三个,而实现这些规范的公司有很多,随便举个例子MDB,实现产品就有activeMQ、rocketMQ等流程框架,目前实现将词嵌入到有着更多表达信息的稠密向量方法中常用的有nnlm、cbow、skip-gram等。

neural network model

在这里插入图片描述

       我们想理解上面模型首先要理解各个字母表达的含义,v是词典的大小,就是词典中包含多少个单词或汉字,n在这里表示划窗大小,如n=5表示用前4个词来预测第五个词是啥(从词典v中查找),我们是想将一个词的表达映射到一个稠密向量d,d一般是可以设置的一般在几百维度左右,可令d=100,不宜太大不好计算。
       例如下面这句话:我爱自然语言处理。jieba分词后为【我、爱、自然、语言、处理】 ,我们要根据【我、爱、自然、语言】预测 【处理】,即一个样本有了,也可以这样表示(context(w),w) ,w代表目标词处理,context(w)表示它前面n-1个词,这样的样本有很多,这里只是一个,上图原理图只代表一个样本处理过程,这点我在这类疑惑了还以为是多个样本。
       假设词典只包含中文常用词大小为5000,即v=5000,那么投影矩阵C = 1005000大小的矩阵,输入的最下面一层为 我[1 0000**] 、爱[010000*]、自然[0010000***]、语言[00010000*],它们都为15000的向量,让C矩阵和上面四个输入做映射,将得到4个1001的稠密向量,即倒数第二层,然后让这个4个向量连接起来变为一个向量,大小就4*100,即(n-1)d ,也可以看做输入层的大小,它在与隐层做全连接权重个数为(n-1)dh,h为隐层的节点个数(可以调节),到这里就和BP网络类似了,前面我们利用sigmoid激活函数分析过。输出层大小为hv,输出层大小为词典大小,即预测词典里面哪一个测称为目标词的概率大。
       前面我们在训练BP网络时已经发现,其参数量很大,而且输入的维度一般也很大,这里我们输入的语料库依然很大,模型将训练变慢,同样不太实用。

continuous bag of word

       顺着概念的不断扩展来扩充知识,是一个水到渠成的过程,上面介绍了nnlm这里介绍cbow感觉一句话即可概括,在经过projection layer线性映射后,为了减少训练参数数量将隐层去掉了,改为了求(n-1)个向量的和,再做输出层变换softmax结果,还有一点主要区别是cbow是利用上下文n-1个词去预测中间的词,nnlm是利用前n-1个词预测后一个词,如下图左:
在这里插入图片描述
       再想想简化后的过程其实只是对稠密向量做了一个softmax多类回归,这里计算量依然耗时的是softmat分类,词典多大softmax就有多大,为了减少这部分耗时采用了哈夫曼树和下采样方法,下次再说如何优化的。
右边模型是skip-gram 思想是利用中间次去预测周围你个词,思路类似。

疑问

       刚看这里的时候有很多疑问,可以带着疑问往下看,有了众多疑问更是学习的动力,如:

  • word2vec 与cbow skip-gram 关系
    word2vec只是一个项目名称,也可以叫工具名称,其原理主要是利用了cbow sip-gram两个模型思想来实现词向量的训练
  • HMM、最大熵模型、CRF 、LDA 之间关系
    LDA是预测主题模型的框架,HMM CRF 最大熵模型都是用来解决序列问题。
  • one-hot词向量表示法 词汇鸿沟 维度灾难
  • 训练一份好的词向量表示对深度学习很有帮助
  • RNN LSTM为什么能处理文字?
  • 什么是序列问题
  • n-gram规模为什么随着n指数增长?
  • word embedding如何理解

随笔

网约车垄断的行程
       现在生活中人们已经习惯滴滴一下,网约车就来了,方便了我们的生活,也可以说是生态圈已经行程,贸然采取措施会是生态区被迫害,再行程下一个生态之前会有一段混乱时间,垄断的缺点是使得服务和技术落后,没有了推动力去提高服务和质量,联想、惠普等大公司在购买芯片时一般不会只买in特尔,也会买一些amd,作为购买方知道有责任维持这个行业的生态,同样作为乘客如果我们每次出行都换一种出行方式,会不会好些,好像比较难,我每次出行都会选价格低一些的,价钱好像是大部分人靠谱的主要因素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章