一文理解Skip-Gram上下文的预测算法
来源商业新知网,原标题:简单粗暴!一文理解Skip-Gram上下文的预测算法
自然语言处理属于人工智能领域,它将人类语言当做文本或语音来处理,以使计算机和人类更相似,是人工智能最复杂的领域之一。 由于人类的语言数据格式没有固定的规则和条理,机器往往很难理解原始文本。
要想使机器能从原始文本中学习,就需要将数据转换成计算机易于处理的向量格式,这个过程叫做词表示法。
词向量
词表示法在向量空间内表达词语。 所以,如果词向量之间距离较近,这就意味着这些词是相互关联的。 在上图中,可以看到与女性有关的词语聚集在左边,而与男性有关的词语聚集在右边。 所以,如果我们给出“耳环”这种词语,电脑会把它和女性联系起来,这在逻辑上是正确的。
语言的词汇量很大,人类难以对其进行一一分类和标识; 因此我们需要使用无监督学习技术,该技术可以独立学习词语的上下文。 无监督学习是指: 没有标注的训练数据集,需要根据样本间的规律统计对样本进行分析,常见如任务聚类等。 Skip-gram就是一种无监督学习技术,常用于查找给定单词的最相关词语。
Skip-gram用于预测与给定中心词相对应的上下文词。 它和连续词袋模型(CBOW)算法相反。 在Skip-gram中,中心词是输入词(input word),上下文词是输出词(output word)。 因为要预测多个上下文词,所以这一过程比较困难。
Skip-gram示例
给定 “sat” 一词后,鉴于sat位于0位,我们会尝试在-1位上预测单词 “cat” ,在3位上预测单词 “mat” 。 我们不预测常用词和停用词,比如 “the”。
**架构
Skip-gram模型架构
上图中,w(t)就是中心词,也叫给定输入词。 其中有一个隐藏层,它执行权重矩阵和输入向量w(t)之间的点积运算。 隐藏层中不使用激活函数。 现在,隐藏层中的点积运算结果被传递到输出层。 输出层计算隐藏层输出向量和输出层权重矩阵之间的点积。 然后用softmax激活函数来计算在给定上下文位置中,单词出现在w(t)上下文中的概率。
使用到的变量
- 在数据库或文本中出现的特殊单词的汇总词典。 这个词典就叫做词汇量,是系统的已知词。 词汇量用字母“v”来表示。
- “N”代表隐藏层中神经元的数量。
- 窗口大小就是预测单词的最大的上下文位置。 “c” 代表窗口大小。 比如,在给定的架构图中窗口大小为2,因此,我们会在 (t-2), (t-1), (t+1) 和 (t+2) 的上下文位置中预测单词。
- 上下文窗口是指会在给定词的范围内出现的、要预测的单词数量。 对于2*c的并且由K表示的窗口大小来说,上下文窗口值是该窗口大小的两倍。 给定图像的上下文窗口值是4。
- 输入向量的维度等于|V|。 每个单词都要进行one-hot编码。
- 隐藏层的权重矩阵(W)的维度是[|V|, N]。 “||” 是把数组值还原的模函数。
- 隐藏层的输出向量是H[N]。
- 隐藏层和输出层之间的权重矩阵 (W’) 维度是[N,|V|]。
- W’和H之间的点积生成输出向量U[|v|]。
N = 上下文窗口
工作步骤
- 利用one-hot编码将单词转换为向量,这些向量的维度是 [1,|v|]。
one-hot编码
- 单词w(t)从|V|神经元被传递到隐藏层。
- 隐藏层执行权重向量W[|v|, N] 和输入向量w(t)之间的点积运算。 这里,我们可以总结出: 第(t)行的W[|v|, N] 会输出(H[1, N])。
- 谨记: 隐藏层不使用激活函数,所以H[1,k] 会直接传递到输出层。
- 输出层会执行 H[1, N] 和 W’[N, |v|] 之间的点积运算,并给出向量 U 。
- 现在,要得出每个向量的概率,我们要使用softmax函数,因为每次迭代都得出输出向量U,这是一种one-hot编码模式。
- 概率最大的那个单词就是最终结果。 如果在指定上下文位置中预测的单词是错误的,我们会使用反向传播算法来修正权重向量W和W’。
以上步骤对字典中的每个单词w(t) 都要执行。 而且,每个单词w(t) 会被传递K次。 所以我们可以得知,正向传播算法在每段时间内会执行 |v|*k次。
概率函数
Softmax概率
w(c, j) 是在第c个上下文位置上预测的第j个单词; w(O, c)是在第c个上下文位置上出现的实际单词; w(I)是唯一的输入词; u(c, j)是在第c个上下文位置上预测单词时,U向量的第j个值。
损失函数
损失函数
由于我们想在第c个上下文位置预测w(c, j) 时实现概率最大化,可以使用损失函数L。
优势
- Skip-gram是一种无监督学习技术,因此它可以用于任何原始文本。
- 相比于其他单词转向量表达法,Skip-gram需要的记忆更少。
- 它只需要两个维度为[N, |v|]而不是[|v|, |v|]的权重矩阵。 而且通常情况下,N约为300,|v| 则约为数百万。
劣势
- 找到N和c的最佳值很困难。
- Softmax函数计算耗费的时间很长。
- 训练这个算法耗时较长。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
1.1 Prometheus 简介
Prometheus 是一个开源的系统监控和警报工具,最初是在 SoundCloud 上构建的。自2012年启动以来,许多公司和组织都采用了 Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并阐明该项目的治理结构,Prometheus 于2016年加入 CNCF (云原生计算基金会),成为继 Kubernetes 之后的第二个托管项目。2018 年 8 月 9 日,CNCF 宣布开放源代码监控工具 Prometheus 已从孵化状态进入毕业状态。 特性 Prometheus 的主要特性有: 一个多维数据模型,包含由 metric 和 key/value 标识的时间序列数据 PromQL是一种灵活的查询语言 不依赖分布式存储,单个服务器节点是自治的 基于 HTTP 协议通过 pull 形式进行收集时间序列数据 push 形式的时间序列数据是通过一个中间网关来支持的 targets 可以通过服务发现或静态配置发现的 多种模式的图形和仪表盘支持 组件 Prometheus 生态系统由多个组件组成,其中许多是可选...
- 下一篇
印度版的“大众点评”如何将 Food Feed 业务从 Redis 迁移到 Cassandra
Zomato 是一家食品订购、外卖及餐馆发现平台,被称为印度版的“大众点评”。目前,该公司的业务覆盖全球24个国家(主要是印度,东南亚和中东市场)。本文将介绍该公司的 Food Feed 业务是如何从 Redis 迁移到 Cassandra 的。 Food Feed 是 Zomato 社交场景中不可或缺的一部分,因为它可以让我们的用户参与其中并与朋友的餐厅评论和图片保持同步,甚至可以通过这个获取餐厅提供的优惠和折扣。开始我们选择 Redis 作为消息 Feed 流的存储引擎,因为在当时的用户场景这是最好的选择。但是随着业务的发展,我们需要更高的可用性和负载支持,而 Redis 不能很好的满足这个需求。虽然我们可以通过丢失一些数据来避免系统的中断,但这不是我们想做的事情。为了确保我们的系统具有高可用性,我们不得不放弃 Redis,而选
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果