word2vec_中的数学原理详解
word2vec_中的数学原理详解个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!wordzvec中的数学hoty@163.com2014年7月目录前言2预备知识2.1 sigmoid函数2.2逻辑回归3 Bayes公式2.4 Huffman编码,,,,,,,,524.1Humu树242 Huttman树的构造62.4.3 Huffman编码..,.3背景知识3.1统计语言模3.2n-gram模型103.3神经概率语言模型123.4词向量的理解4基于 Hierarchical softmanⅹ的模型41CBOW模型..191.1.1网络结构41.2梯度计算201.2 Skip-gram模型42.1网络结构42.2梯度计算255基于 Negative sampling的模型285.1CBOW模型285.2 Skip-gram模型53负采样算法326若干源码细节346.1a(x)的近似计算62词典的存储63换行符3564低频词和高频词366.5窗口及上下文3766自应学习率3767参数初始化与训练386.8多线程并行3869几点疑问和思考11m3881前言word2vec是 Google于2013年开源推出的一个用于获取 word vector的工具包,它简单、高效,因此引起了很多人的关注,由于word2vec的作者 Tomas nikolov在两篇相关的论文(,[4)中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟第一次接触word2ve是2013年的10月份,当时读了复且大学郑骁庆老师发表的论文7,其主要工作是将SENA的那套算法(8])搬到中文场景.觉得挺有意思,于是做了一个实现(可参见[20),但苦于其中字向量的训练时间太长,便选择使用word2we来提供字向量,没想到中文分词效果还不错,立马对word2vec刮目相看了一把,好奇心也随之增长后来.陆陆续续看到∫word2ve的一些具体应用,而 lomas nikolov团队本身也将其推广到了句子和文档(),因此觉得确实有必要对word2vec里的算法原理做个了解,以便对他们的后续研究进行追踪.于是,沉下心来,仔细读了一回代码,算是基本搞明臼里面的做法了.筼一个感觉就是,“明明是个很简单的浅层结构,为什么被那么多人沸沸扬扬地说成是Decp Learning呢?”解剖word2vec溟代码的过程中,除了算法层面的收获,其实编程技巧方面的收获乜颇多.既然花了功夫来读代码,还是把理解到的东西整理成文,给有需要的朋友提供点参考吧在整理本文的过程中,和深度学习群的群友北流浪子(15,16)进行了多次有益的讨论在比表示感谢另外,也参考了其他人的一些资料,鄱列在参考文献了,在此对他们的工作也并表示感谢2预备知识本节介绍word2vee中将用到的些重要知识点,包括 sigmoid函数、 Beyes公式和Huffman编码等821 sigmoid函数sigmoid函数是神经网络中常用的激活函数之一,其定义为1+e该函数的定义域为(-x,+x),值域为(0,1).图1给出了 sigmoid函数的图像0.5图1 sigmoid函数的图像sigmoid数的导函数具有以下形式)=0(x)1-0(x)由此易得,函数logo(a)和log(1-0(x)的导函数分别为log o(a)(21)公式(2.1)在后面的推寻中将用到822逻辑回归生活中经常会碰到二分类问题,例如,某封电子邮件是否为垃圾邮件,某个客户是否为在客户,某次在线交易是舌仔在诈行为,等等.设{(x,)}1为一个二分类问题的样本数据,其中x∈R",∈{0,1},当1=1时称相应的样本为正例,当v=0时称相应的样本为负例利用 sigmoid函数,对于任意样木x=(x1,x2,…,xn),可将二分类问题的 hypothesis函数写成h(x)=0(o+61x1+622+…+nxn),其中0=(0o,01,…,O)为待定参数.为了符号上简化起见,引入x0=1将x扩展为(x0,x1,x2,…,xrn)},且在不引起混淆的情况下仍将其记为ⅹ.于是,he可简写为取阀值T-0.5,则二分类的判别公式为1,b(x)≥0.5y(x0.5那参数θ如何求呢?通常的做法是,先确定一个形如下式的整体损失函数∑co(x,v)然后对其进行优化,从而得到最优的參数θ实际应用中,单个样本的损失函数cost(x,)常取为对数似然函数cosl(xi, yi)),v-1;(1-(x),v=0注意,上式是一个分段函数,也可将其写成如下的整体表达式cost(x2,3)=·log(ho(x)(1y1)·log(1h(x)323 Baves公式贝叶斯公式是英国数学家贝叶斯( Thomas Bayes)提出来的,用来描述两个条件概率之间的关系.若记P(A),P(B)分别表示事件A和事件B发生的概率,P(AB)我示事件B发生的情况下事件4发生的慨率P(A,B)表示事A.B同时发生的概率.则有P(AB)P(B), P(BLA)=P(A, B)P(A, B利用上式,进一步可得P(B AP(AB)-P(A)P(B)这就是 Bayes公式g2.4 Huffman编码本节简单介绍Humn编码(具体内容主要来白百度百F的词条.[10),为此,首先介绍Huffman树的定义及其构造算法§24.1 Huffman树在计算机科学中,树是一种重要的非线性数据结构,它是数据元素(在树中称为结点)按分支关系组织起来的结构.若干棵互不相交的树所构成的集合称为森林.下面给出几个与树相关的常用概念·路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径.通路中分支的数目称为路径长度.若规定根结点的层号为1,则从根结点到第L层结虑的路径长度为L-1●结点的权和带权路径长度若为树中结点赋予一个具有某种含义的(非负)数值,则这个数值称为该结点的权结点的带权路径长度是指,从根结点到该结点之间的路径长度亐该结点的杈的乘矾·树的带权路径长度树的带权路径长度规定为所有叶子结点的带权路径长度之和二叉树是每个结点最多有两个子树的有序树.两个子树通常被称为“左子树”和“右子树”,定义中的“有序”是指两个子树有左石之分,顺序不能颠倒给定n个权值作为n个叶子结点,树造一棵二叉树,若它的带权路径长度达到最小,则称这样的二叉树为最优二叉树,也称为 Huffman树82.4.2 Huffman树的构造给定m个权值{mn,m2;…,mn}作为二叉树的m个叶子结点,可通过以下算法来构造颗 Huffman树算法2.Ⅰ(Hu「man树构造算法)(1)将{1,2,……,wn}看成是有n棵树的表林(每树仅有一个结点)2)在森林中选出两个根结,的权值最小的树合并,作为-棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和〔3)从森林中燜除选取的两樑树,并将新树加入森林(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求的 luffman树接下来,给出算法2.1的一个具体实例例2.1假设2114年世界杯期间,从新浪毀博中抓取了若干条与足球相关的微博,经统计,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词岀现的次薮分别为15,8,6,5,3,1.请以这6个词为叶子结点,以相应词频当权值,构造一棵Hu∥n树.⊙Q⑨Q⊙只66如→只只③⊙图2 Huffman树的构造过程利用算法.,易知其枃造过程如国g所示,团中第六步给出了最终的 Hutman树,由囚可见词频越大的词离根结点越近构造过程中,通过合并新増的结点被标记为黄色.由于每两个结点邡要进行一次合并,因此,若叶子结点的个数为η,刘枃造的H們πω树中新増结点的个数为π-1.本例中n6,因此新增结,的个数为5注意,前面有捉到,二叉树的丙个子树是分左右的,对于某个非叶子结点来说,就是其两个孩子结点是分左右的,在本例中,统一将词频大的结点作为左孩子结点,词频小的作为右孩子结点当然,这只昃一个约定:你要将词頻大的结点作为右孩子结点也浸有问题§24.3 Huffman编码在数据通倍中,需要将传送的文宁转换成二进制的字符串,用0,1码的不同排列米表示字符.例如,需传送的报文为“A上 TER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为84,5,3,1,1,现要求为这些字母设计编码要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制(23=8>6),可分别用000.001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码显然编码的长度取决报文中不同字符的个数,若报文中可能出现26个不同字符,则固定编码长度为5(2=32>26).然而,传送报文时总是希望总长度尽可能短.在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、7,自然会想到设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码.为使不等长编码为前缀编码(即要求一个字符的编码不能是另一个字符編码的前缀),可用字符集中的每个宇符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的岀现频率作为字符结烹的权值赋予该结点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是颎率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度,效果上就是传送报文的最短长度.因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的Hman树的问题.利用 Hultman树设计的二进制前缀編码,称为 LuminaL编码,它既能满足前缀编码的条件,又能保证报文编码总长最短本文将介绍的word2ve工具中也将用到 Huffman编码,它把训练语料中的词当成叶子缩点,其在语料中出现的次数当作权值,通过构造相应的 Huttman树来对每一个词进行Huffman编码图3给岀了例2.1中六个词的 Huffman编码,其中约定(词频较大的)左孩子结点编码为1,(词频较小的)石孩子编码为θ.这惮一米,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词的 Huffman编码分别为0.111,110,101,1001和10000我告欢巴匹0足球图3 Huffman编码示意图注意,到目前为止,关于 Huttman树和 Huttman編码,有两个约定:(1)将权值大的结点作为左孩子结点,权值小的作为右孩子结点(2)左孩子结点编码为1,右孩子结点编码为0.在word2vec源码中将权值较大的孩子结点编码为1,较小的孩子结点编码为0.为与上述约定统一起见,下文中提到的“左孩了结点"都是指权值较大的孩了结点83背景知识word2vec是用来生成词向量的工具,而词向量与语言模型有着密切的关系,为此,不妨先了解一些语言模型方面的知识83.1统计语言模型当今的互联网迅猛发展,每天都在产生大量的文本、图片、语音和视频数据,要对这些数据进行处理并从中挖掘岀有价值的信息,离不开自然语言处理( Nature Language processing,NP)技术,其中统计语言模型( Statistical language model)就是很重要的一环,它是所有NLP的基础,被广泛应用于语音识别、机器翻译、分词、词性标注和信息检索等任务.例.1在语音识别糸统中,对于给定的语音段Vire,霄要找到一个使概率p( TertVoice最大的文本段Tert.利用 Bayes公式,有P(Teat voice)p(VoiceText). p(Textp(Voice)其中p( CicetE.c)为声学模型,而 elEct)为语言模型(18])简单地说统计语言模型是用来计算一个句子的概率的概率模驷,它通常基于一个语料库来构建.那什么叫做一个句子的概率呢?假设W=m1:=(m1,2,…,mr)表示由T个词,2,……,按顺序构成的一个句子,则1,c2…,w的联合慨率p()=p(x1)=p(01,t2,…,r)就是这个句子的概率利用 Bayes公式,上式可以被链式地分解为p(uh)-p(1)·p(u2lu1)p(u3lu2)…p( wru-1),(3.1)其中的(条件)概率p(1),p(2t1),p(un),…,p(mr1-)就是语言模型的参数,若这些参数已经全部算得,那么给定一个句子U1,就可以很快地算出相应的p(1)了看起来奷像很简单,是吧?但是,具体实现起来还是有点麻烦.例如.先来看看模型参数的个数.剛刚才是考虑一个给定的长度为T的句子,就需要计算T个参数.不妨假设语料库对应词典D的大小(即词汇量)为N,那么,如果考虑长度为T的任意句子,理论上就有M种可能.而每种可能都要计算T个参数,总共就需要计算TN7个参数.当然,这里只是简单估算,并没有考虑重复参数,但这个量级还是有蛮吓人.此外,这些概率计算好后,还得保存下来,因此,存储这些信息乜需要很大的內存开销此外,这些参数如何计算呢?常见的方法有n-gram模型、决策树、最大熵模型、最大熵马尔科夫模型、条件随机场、神经网络等方法,本文只讨论n-gram模型和神经网络两种方法.首先来看看 n-gram模型
- 2020-12-04下载
- 积分:1
通信原理MATLAB仿真实验指导书
通信原理MATLAB仿真实验指导书V3.0最终版内容很全的实验指导书通信原理仿真实验指导书林志谋目录实验:基础实验的建模仿真实验:信道与噪声仿真实验:调制与解调仿真实验:调制与解调仿真实验调制与解调仿真实验编码与解码仿真实验:单极性码与双极性码眼图仿真实验调制与解调仿真实验调制与解调仿真实验调制与解调仿真实验:循环码的差错控制系统仿真综合实验:通信系统的仿真附录程序设计通信原理仿真实验指导书林志谋实验:基础、实验目的:.熟悉开发环境掌握矩阵、变量、表达式的各种基本运算熟悉和了解图形绘制程序编辑的基本指令;熟悉掌握利用图形编辑窗口编辑和修改图形界面,并添加图形的各种标注掌握等指令格式和语法二、实验原理:基础知识程序设计语言简介的缩写,是由公司升发的一套用科学工程计算的可视化髙性能语言,具有强大的矩阵运算能力。与大家常用的和等高级语言相比,的语法规则更简单,更贴近人的思维方方式,被称为“草稿纸式的语言”软件主要由主包、仿真系统()和工具箱()主大部分组成。界面及帮助基本界面如图所示,命令窗口包含标题栏、菜单栏、工具栏、命令行区、状态栏、垂盲和水平波动条等区域。标题栏菜单栏工具栏命令行区状态栏垂直和水平瘕动条)ATLA日? Ntt Dr ivory C MATLA86A5B=iwuEy1山具C2 dPubLe wrE田用田田3TZ doublE Wra面自172自的272 double ra9 dpublE rsa double wremn■double r电田ydoubl mri1.00000mm-0.1.0>I Workspace cuuneniDIncnpiF国]47【7.193,E,日:151117笔k【7,19B,z,B1,45图基本界面()菜单栏在主窗凵的菜单栏,共包含和个菜单项菜单项:菜单项实现有关文件的操作。通信原理仿真实验指导书林志谋菜单项:菜单项用于命令窗∏的编辑操作。菜单项:菜单项用于设置集成环境的显示方式。菜单项:菜单项用于设置的操作。菜单项:主窗口菜单栏上的菜单,只包含一个子菜单用」关闭所有打开的编辑器窗凵,包括和窗凵。菜单项菜单项用于提供帮助信息()工只栏主窗∏的工具栏共提供了个命令按钮。这些命令按钮均有对应的菜单命令,但比菜单命令使用起来更快捷、方便,()命令行区按以下顺序对输入命令进行解释:检查它是否是工作空间中的变量,实则显示变量内容检查它是否是嵌入函数,是则运行之。检查它是否是子函数。检查它是否是私有函数检查它是否是位于搜索路径范围內的函数文件或脚本文件甲有以下几种方法可获得帮助()帮助命令()是查询函数相关信息的最直接方式,信息会直接显示在命令窗中键入,会显示相关信息命令可以从键入的关键字列出所有相关的题材,和/相比覆盖范围更广,可查找到某个主题所有词组或短语。()帮助窗凵()提供与帮助命令相同的信息,但帮助窗凵界面更为方便直接。()帮助桌面()通过在命令窗口中选择帮助菜单的“选项或键入命令即可进入帮助桌面。()在线帮助页是帮助桌面的在线帮助均有相应的格式文件。网站,对于连接入的用户通过公司的网站询问有关问题。熟悉环境桌面和命令窗口、命令历史窗、帮助信息浏览器、工作空间浏览器文件和搜索路径浏览器。掌握常用命令除命令窗口中内容清除工作空间中变量对所选函数的功能、调用格式及相关函数给出说明查找具有某种功能的函数但却不知道该函数的准确名称査询工作空间中的变量信息变量与运算符变量命名规则如下()变量名可以由英语字母、数字和下划线组成()变量名应以英文字母开头()长度不大于个()区分大小写中设置了一些特殊的变量与常量,列于下表。表的特殊变量与常量变量名1功能说明变量名功能说明默认变量名,以应答最小的正实数最近一次操作运算结果通信原理仿真实验指导书林志谋或虚数单位无穷大圆周率不定值(浮点数的相对误差网数实际输入参数个数最大的正实数函数实际输出参数个数运算符,通过下面几个表来说明的各种常用运算符表算术运算符操作符功能说明操作符功能说明矩阵左除数组左除矩阵乘矩阵右除数组乘数组右除矩阵乘方矩阵转置数组乘方数组转置表关系运算符操作符功能说明等于不等于大于小于人于等于小于等于逻辑运算符逻辑运算符逻辑运算说明逻辑与逻辑或逻辑非逻辑异或表特殊运算符号功能说明示例符号功能说明例分隔行分隔列注释构成向量、矩阵调用操作系统命令构成单元数组用于赋值1的一维、二维数组的寻访通信原理仿真实验指导书林志谋表了数组访问与赋值常用的相关指令格式指令格式指令功能数组中指定行、指定列之元素组成的子数组数组中指定行对应的所有列之元素组成的了数组数组中指定列对应的所有行之元素组成的了数组数组中各列元素首尾相连组成的“维长列”了数组维长列了数组中的第个元素数组中指定行、指定列之元素组成的子数组的赋值数组仝元素赋值,保持的行宽、列长不变,、两组几素总合应相同的基本运算表两种运算指令形式和实质内涵的异同表数组运算矩阵运算指令含义含义非共轭转置共轭转置把标量赋给的每个元素标量分别与元素之和标量分别与元素之差标量分别与元素之积标量分别与每个元素之积标量分别被的元素除阵的逆乘的每个元素自乘次阵为方阵,自乘次对各元素分别求非整数幂方阵的非整数乘方对应元素相加矩阵相加对应元素相减矩阵相减对应元素相乘内维相同矩阵相乘的元素别的对应元泰除右除与上相同左除以自然数为底,分别以的元素为的矩阵指数函数指数,求幂对的各元素求对数「的矩阵对数函数对的各元素求平方根的矩阵平方根函数的常用函数表标准数组生成函数指令含义含义对角形数组(对高维不适用)生均匀分布随机数组单位数组(对高维不适用)E正态分布随机数组产生魔数组(对高维不适用)生全数组产生全数组返回指定矩阵的行数和列表数组操作函数通信原理仿真实验指导书林志谋指令含义提取对角线元素,或生成对角阵以数组“水平中线”为对称轴,交换上下对称位置上的数组儿素以数组“垂直中线”为对称轴,交换左右对称位置上的数组元素在总元素数不变的前提下,改变数组的“行数、列数”矩阵逆时针旋转度方阵的行列式值矩阵的秩三、实验内容和步骤学习使用命令例如在命令窗口输入,然后根据帮助说明,学习使用指令(其它不会用的指令依照此方法类推学习使用观察和等窗口的变化结果,执行前后有什么不同?初步程序的编写练习新建,保存(自己设定文件名,例如……),学习使用的基木运算符、数组寻访指令、标准数组生成函数和数组操作函数。注意:每一次的修改后,都要存盘。二维曲线绘图基本指令演示。指令基本操作演示问题:本例运作后,再试验观察产生图形的有什么不同,为什么?问题:本例运作后,再试验观察产生图形的有什么不同,为什么?问题:本例运作后,再试验观察产生图形的有什么不同,为什么?用图形表示连续调制波形及其包络线。通信原理仿真实验指导书林志谋0∈问题请查找的的帮助,想想怎么用行语句来代替卜面这行一句绘制标准三维曲面。函数的调用格式为:凶数的调用格式为还有一个函数,称为多峰函数,常用于三维曲面的演示。图像如下:四、实验报告要求:回答实验内容和步骤上面所有的问题。并总结本次实验遇到了哪些问题?你是怎么解决的?如何避免下次实验再遇到同样的问题?如何在帮助窗口,帮助命令,帮助演示中查找的相关命令和演示程序?软件由几部分组成?各有什么作用?通信原理仿真实验指导书林志谋实验的建模仿真、实验目的熟悉工作环境及特点.掌握线性系统仿真常用基本模块的用法掌握的建模与仿真方法二、实验原理:简介提供的用于对动态系统进行建模、仿真和分析的工具包。提供了专门用」显示输岀信号的模块,可以在仿真过程中随时观察仿真结果。同时,通过的存储模块,仿真数据可以方便地以各种形式保存到工作区或文件中,供用户在仿真结束之后对数据进行分析和处理。另外,把具有特定功能的代码组织成模块的方式,并且这些模块可以组织成具有等级结构的子系统,因此具有内在的模块化设计要求。基于上述优点,成为一种通用的仿真建模工具,)泛应用于通信仿真、数字信号处理、模糊逻辑、神经网终.机控制和虚拟现实等领域。它使用户把精力从编程转向模型的构造。随着实验的不断深入,你们会发现它为用户省去了许多重复的代码编写工作,用户就不必、步步地从最底层廾始编写。如果把动态系统建模仿真过程比作建造房子,那么用高级语言或语言编写的仿真程序的方式就如同是从一堆沙子开始造房子。这不但麻烦,而且有许多重复操作,建造者的精力会大量地浪费在一些相同地例如把沙子变成砖块的事情上,以及如何把它们组在一起变成房子这些技术性的事情.而不能把更多的精力集中用到房子的设计上,这在计算机仿真里,就等于是把精力厦多地投入到某一个具体的算法的设计上,而不是用到模型的设计构造本身,的目的就是让用户能化更多的精力投入到模型设计本身。它首先提供了些基本模块,这些模块就放在上面的库浏览器里.用户可以调用这些模块,而不必再从最基△的做起的每个模块对用户而言都是透明的,用户只需知道模块的输入输出以及模块旳功能,而不必管模块内部是怎么实现。于是,留给用户的事情就是如何连接这些模块来完成自的仿真任务。连接的方式在里是很简单的,例如要连接两个摸块只需要将一个模块的输入和另一个模块的输岀用一根直线连起米就行了。模型构造好之后,用户可以进行仿真、等待结果、或者改变参数,再运行。至于像各个模块在运行时如何执行,时间是如何采样离散系统,事件足如何驱动等等细节性问题,用户可以根木不用去关心,都替你做好了。总之,把那些最没有意思、最烦人的细节都屏蔽掉了,而留绐用户的是一个友好的环境,让用户以最轻松、最有效的万式完成他们感兴趣的东西。启动的方法有很多种,按照的传统方式,只要在的命令窗口中键入:个称为的窗口就会弹出,如下图所示:
- 2020-12-09下载
- 积分:1