word2vec原理总结

news2024/9/25 15:29:28

参考文章:https://www.cnblogs.com/pinard/p/7160330.html
word2vec是google在
2013
年推出的一个NLP工具,它的特点是将所有的词向量化,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。

1 词向量编码

1.1 one hot

最早出现的词向量的编码方式是one hot,其维度大小是整个词汇表的大小,具体是那个词汇,该词汇维度上为1,其余为0。
这种词向量具有很多的问题:

  1. 一般来说词汇表都很大,因此这种编码方式非常吃内存。
  2. 该向量只有一个位置是1,其余位置都是0,效率太低

1.2 Distributed representation

后面出现了方法Distributed representation,其通过训练,将每个词都映射到一个较短的词向量上来。
所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。

2 早期训练词向量

word2vec出现之前,我们用DNN进行训练词向量进而处理词与词之间的关系,有CBOW和Skip-Gram两种模型

2.1 CBOW

输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。下面举例说明输入和输出:
在这里插入图片描述
比如下面这段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入,对应8个神经元。
输出是所有词的softmax概率,有词汇表大小个神经元 ,最终找到概率最大的词对应的神经元即可。

2.2 Skip-Gram

Skip-Gram的思路和CBOW相反。输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量 。
还以上面为例,特定的这个词是"Learning",也就是我们需要的输入词向量,对应的Skip-Gram神经网络模型输入层有1个神经元。
输出是所有词的softmax概率,有词汇表大小个神经元 ,最终找到概率排前8的词对应的神经元即可。

2.3 存在的问题

我们的词汇表一般在百万级别以上,这意味着我们DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大,因此非常耗时。

3 霍夫曼树

word2vec还是使用CBOW和SKip-Gram模型,但是不再以DNN为基础,使用的是霍夫曼树。其用霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。 而内部节点则起到隐藏层神经元的作用。

3.1 建立霍夫曼树

**输入:**权值为(w1, w2, w3, w4, …, wn)的n个节点
**输出:**对应的霍夫曼树
流程:

  1. 将(w1, w2, w3, w4, …, wn)看做是有n棵树的森林,每个树仅有一个节点
  2. 在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节
    点权重为左右子树的根节点权重之和
  3. 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林。
  4. 重复步骤2和3直到森林里只有一棵树为止。
    举例说明:
    假设我们有(a,b,c,d,e,f)共6个节点,节点的权值分布是(20,4,8,6,16,3)。
    首先是最小的b和f合并,得到的新树根节点权重是7.此时森林里5棵树,根节点权重分别是20,8,6,16,7。此时根节点权
    重最小的6,7合并,得到新子树,依次类推,最终得到下面的霍夫曼树。
    在这里插入图片描述

3.2 霍夫曼树的优势

在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小
于右子树的权重。比如上图中f的编码为(1001)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/809918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【滑动窗口】算法实战

文章目录 一、算法原理二、算法实战1. leetcode209 长度最小的子数组2. leetcode3 无重复字符的最长子串3. leetcode1004 最大连续1的个数4. leetcode1685 将x减到0的最小操作数5. leetcode904 水果成篮6. leetcode438 找到字符串中所有字母异位词7. leetcode30 串联所有单词的…

助你丝滑过度到 Vue3 其他变化 ②⑨

作者 : SYFStrive 博客首页 : HomePage 📜: VUE3~TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 👉…

【COlor传感器】通过扰动调制光传感实现智能光传输的占用分布估计研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

重排链表——力扣143

文章目录 题目描述法一:寻找链表中点、链表逆序、链表合并 题目描述 法一:寻找链表中点、链表逆序、链表合并 void reorderList(ListNode* head){if(headnullptr){return;}// 找到中点 ListNode* mid FindMiddle(head);ListNode *h1head, *h2mid->ne…

数值分析第七章节 用Python实现非线性方程与方程组的数值解法

参考书籍:数值分析 第五版 李庆杨 王能超 易大义编 第7章 非线性方程与方程组的数值解法 文章声明:如有发现错误,欢迎批评指正 文章目录 迭代法求解 x e x − 1 0 xe^x-10 xex−10牛顿法求解 x e x − 1 0 xe^x-10 xex−10简化牛顿法求解 …

PUBG(最短路BFS)

题目:https://ac.nowcoder.com/acm/contest/62106/E 最近,喜爱ACM的PBY同学沉迷吃鸡,无法自拔,于是又来到了熟悉的ERANGEL。经过一番搜寻,PBY同学准备动身前往安全区,但是,地图中埋伏了许多LYB&…

黑苹果如何在macOS Sonoma中驱动博通网卡

准备资源(百度:黑果魏叔 下载) 资源包中包含:AirportBrcmFixup.kext/IOSkywalkFamily.kext/IO80211FamilyLegacy.kext/OpenCore-Patcher 使用方法: 1.将 csr-active-config 设置为 03080000 全选代码 复制 2.在 …

Flutter ios真机调试连接断开后应用闪退

使用ios真机调试的时候,能正常打开应用,但是当数据线断开连接的时候,应用就会关闭,重新打开就会闪退。 原因是flutter默认在开发过程中使用debug模式编译 只需要将debug选择为release 重新编译就行。

AI工程师的崛起:填补AI革命中的空白

在一个拥有大约5000名语言学习模型(LLM)研究员,但大约有5000万软件工程师的世界中,供应限制决定了一种新型专业人才—AI工程师的迅猛增长。他们的崛起不仅仅是一种预测,更是对科技世界动态变化的必然反应。AI工程师作为…

AutoSAR系列讲解(实践篇)10.2-EcuM的上下电流程

目录 一、上电(StartUp) 二、下电(Shutdown) 三、睡眠(Sleep) 上下电,说白了就是给Ecu上下电后,Ecu的代码执行顺序。这里还讲到了大家可能经常会用到的Sleep流程,主要就是可以归纳为以下这张图,大家 掌握这张图就基本掌握了EcuM的上下电流程了。这张图的具体内容博…

MySQL的JSON操作

官网地址 1. MySQL json介绍 As of MySQL 5.7.8, MySQL supports a native JSON data type defined by RFC 7159 that enables efficient access to data in JSON (JavaScript Object Notation) documents. Automatic validation of JSON documents stored in JSON columns. …

CAPL(vTESTStudio) - CANCANFD信号检查

目录 一、获取目标报文数据 二、解析预期信号数据在目标报文中的数据

np.bincount、np.digitize、np.unique、np.histogram、np.searchsorted

np.bincount 简介 np.bincount是统计数组中数字出现数量的函数,数值n在输入数组x中每出现1次,则输出o的o[n]1。 函数 官方文档 函数参数: x: 输入,1维非负数组weights: 权重数组, 可选参数,如果指定了这一参数&am…

HCIP OSPF远离骨干非骨干区域-使用虚链路解决

虚链路 虚链路是OSPF针对不规则区域提出的一种解决方案,也被称为虚连接。 虚链路可以在任意两个ABR上建立,但是要求这两个ABR都有端口连接到一个相同的非骨干区域。 注:虚链路的建立是双向的,虚链路永远属于骨干区域&#xff0…

【学习笔记】关于图像YUV格式分类和排布方式的全学习

这里是尼德兰的喵学习笔记相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏 让我们一起为芯片前端全栈工程师而努力 目录 前言 YUV格式导图 YUV444 packed planar I444 YV24 semi-planar NV24 NV42 YUV422 packed …

pytorch(6)——神经网络基本骨架nn.module的使用

1 神经网络框架 1.1 Module类的使用 NN (Neural network): 神经网络 Containers: 容器 Convolution Layers: 卷积层 Pooling layers: 池化层 Padding Layers: 填充层 Non-linear Activations (weighted sum, nonlinearity): 非线性激活 Non-linear Activations (other): 非线…

mpi4py包安装报错

报错情况 #include <mpi.h>^~~~~~~compilation terminated.failure.removing: _configtest.c _configtest.oerror: Cannot compile MPI programs. Check your configuration!!![end of output]note: This error originates from a subprocess, and is likely not a probl…

设备取电芯片LDR6328Q

2021年5月&#xff0c;USB-IF 协会发布了全新的USB PD3.1规范&#xff0c;该规范将快充功率上限从100 W提升至240W&#xff08;支持Extended Power Range&#xff0c;简称EPR&#xff09;。充电功率的提升也让USB PD的应用从手机、笔记本电脑&#xff0c;扩展到便携式设备、物联…

Flowable-中间事件-消息中间抛出事件

定义 消息中间事件指在流程中将一个消息事件作为独立的节点来运行。它是一种抛出事件&#xff0c;当流程 执行到消息中间事件时就会中断在这里&#xff0c;一直等待被触发&#xff0c;直接到该事件接收到相应的消息后&#xff0c;流 程沿后继路线继续执行。消息事件是一种引用…

页面访问控制远程仓库

页面访问权限控制 什么是jwt身份认证 在前后端分离模式的开发中&#xff0c;服务器如何知道来访者的身份呢&#xff1f; 在登录后&#xff0c;服务器会响应给用户一个 令牌 &#xff08;token&#xff09;令牌中会包括该用户的id等唯一标识浏览器收到令牌后&#xff0c;自己…