【NLP】Word2Vec 介绍

Word2Vec 是一种非常流行的自然语言处理技术,它将每个单词表示为高维向量,并且通过向量之间的相似度来表示单词之间的语义关系。
1 One-Hot 编码🍂
在自然语言处理任务中,我们需要将文本转换为计算机可以理解的形式,即向量表示。One-Hot 编码是一种常见的文本向量化方法,它将每个单词表示为一个长度为词汇表大小的向量,其中只有一个元素为1,其余元素都为0,该元素的位置表示单词在词汇表中的索引。
"cat": [1, 0, 0, 0]
"dog": [0, 1, 0, 0]
"apple": [0, 0, 1, 0]
"orange": [0, 0, 0, 1]
例如,假设有一个包含4个单词的词汇表[“cat”, “dog”, “apple”, “orange”],则对应的 One-Hot 编码如上所示。
但是设想一下词汇表包含上万个单词呢,那么就意味着每一个单词的 One-Hot 编码向量长度都是上万的,这无疑添加了计算的复杂度。
1.1 优缺点🍁
虽然 one-hot 编码是一种简单有效的表示方法,但它也存在一些缺点。
- 线性表示:由于每个单词只有一个维度为1,其余维度都是0,因此 one-hot 编码的向量是线性表示的。这意味着,单词之间的关系只能通过向量之间的距离来衡量,而无法通过其他非线性的方式来表示单词之间的语义和语法关系,也就是无法度量词语之间的相似性。
- 稀疏性:one-hot 编码的向量通常非常稀疏,其中大部分维度都是0。这导致 one-hot 编码需要存储大量的无用信息,使得向量变得非常庞大,且容易出现维度灾难,从而增加了计算的复杂度和存储成本。
- 无法处理未知词:由于 one-hot 编码只能表示已知单词,因此它无法处理未知词汇。当出现新单词时,必须重新调整向量空间的维度,并重新训练模型,这会带来很大的计算成本和时间开销。
尽管 one-hot 编码有一些缺点,但它仍然是一种简单而有效的文本向量化方法,尤其适用于一些简单的自然语言处理任务,例如文本分类等。同时,one-hot 编码也是其他文本表示方法的基础。
2 Word2Vec🌸
因此,针对上述 one-hot 编码缺点,近年来出现了很多新的词向量表示方法,例如 Word2Vec、GloVe 等,它们能够更好地捕捉单词之间的语义和语法关系,同时也具有更高的计算效率和更小的存储空间。
Word2Vec 是一种广泛使用的自然语言处理技术,用于将单词映射到低维向量空间中。它是由谷歌公司的研究人员在2013年提出的,主要用于解决语言模型中的词汇丰富性和数据稀疏性问题。
Word2Vec 算法通过训练神经网络模型来学习单词的分布式表示,这些分布式表示可以用于表示单词的语义和语法特征。具体来说,Word2Vec 算法包括两个主要的模型:连续词袋模型(CBOW)和 Skip-gram 模型。
2.1 CBOW🌹
连续词袋模型(CBOW)是一种根据上下文单词来预测目标单词的模型。具体来说,给定一个窗口大小为 n 的上下文单词序列,连续词袋模型的任务是预测中间的目标单词,如下图所示。
连续词袋模型的优点是:由于它是基于上下文单词来预测目标单词的,因此它可以利用上下文单词的信息来推断目标单词的语义和语法特征;模型参数较少,训练速度相对较快。

2.2 Skip-gram🌍
Skip-gram 模型是一种根据目标单词来预测上下文单词的模型。具体来说,给定一个中心单词,Skip-gram 模型的任务是预测在它周围窗口大小为 n 内的上下文单词,如下图所示。
Skip-gram 模型的优点是:由于它是基于目标单词来预测上下文单词的,因此它可以利用目标单词的语义和语法特征来预测上下文单词;模型能够生成更多的训练数据,因此可以更好地训练低频词汇的表示;Skip-gram 模型在处理大规模语料库时效果比 CBOW 模型更好。

总的来说,CBOW 模型适合用于训练低频词汇的表示,并且可以较快地训练;Skip-gram 模型适合用于处理大规模语料库,并且可以更好地学习单词之间的语义和语法关系。
2.3 负采样(negative sampling)☎️
Word2Vec 技术中使用负采样(negative sampling)的主要目的是加速训练过程,同时也可以提高模型的准确性。在 Word2Vec 模型中,Skip-gram 和 CBOW 模型都需要对每个单词计算 softmax 概率,这个过程需要对整个词汇表进行计算,计算量非常大,因此会导致训练速度非常慢。为了解决这个问题,Mikolov 等人在2013年提出了负采样的方法。
负采样的基本思想是对每个训练样本,随机选择一定数量的负样本,并令它们的标签为0,然后将这些正样本和负样本送入模型进行训练。这样做可以避免对整个词汇表进行 softmax 计算,从而大大降低了计算量。
具体来说,对于每个正样本,我们随机选择 k 个负样本(即从词汇表中随机选取k个单词),并将它们与 target word 组成 k+1 个样本,其中正样本的标签为1,负样本的标签为0。然后,我们使用 sigmoid 函数将这 k+1 个样本的得分(即向量点积)转换为概率,并将其作为模型的输出,然后通过反向传播算法更新模型参数。
通过负采样,Word2Vec 模型的训练速度得到了极大的提升,同时也可以提高模型的准确性。在实践中,通常将k的取值设为5-20之间,较小的 k 可以加快训练速度,但可能会影响模型的准确性,较大的 k 可以提高模型的准确性,但会增加计算量。
3 GloVe⚽️
虽然 word2vec 是一种非常流行的词向量模型,但它也有一些缺点。
- Out-of-vocabulary 问题:如果 word2vec 没有在训练数据中看到某个单词,则它无法将其表示为向量。
- 上下文窗口大小的选择:word2vec 中上下文窗口大小的选择对最终词向量的质量有很大影响。如果窗口大小太小,则可能无法捕捉到单词之间的语义关系;如果窗口大小太大,则可能会引入太多的噪音。
- 训练时间长:word2vec 的训练时间通常很长,特别是对于大型语料库和高维词向量来说。
- 无法处理多义词:word2vec 为每个单词生成唯一的向量表示,因此它不能处理多义词,即一个单词有不同的含义,例如 “bank” 既可以表示银行,也可以表示河岸。
相比之下,GloVe 是一种基于全局矩阵分解的词向量模型,它可以缓解一些 word2vec 的缺点,以下是一些 GloVe 的优点。
- 处理多义词能力:GloVe 使用词与词之间的共现统计信息来学习词向量,因此它可以将多个含义相似的单词映射到同一个向量空间中。
- 更好的向量质量:由于 GloVe 使用全局矩阵分解来学习词向量,因此它可以利用整个语料库中的统计信息来学习更准确的词向量。
- 更少的超参数:GloVe 中只有一个超参数,即词汇表大小,而 word2vec 需要选择多个超参数,例如上下文窗口大小和负采样数量。
虽然 GloVe 相对于 word2vec 具有一些优点,但它也有一些缺点,例如它的训练时间可能比 word2vec 更长。在选择哪种词向量模型时,需要考虑特定任务的要求以及可用的计算资源和数据量等因素。
4 Supplement🏀
除了one-hot 编码、Word2Vec 和 GloVe 等常见的文本向量表示方法外,还有许多其他的方法可以将文本表示为向量,下面列举了几种比较常见的方法:
- FastText:FastText 是 Facebook 于2016年提出的一种文本向量表示方法,它基于 Word2Vec 模型,但是将单词视为子词的集合,通过子词级别的向量表示来表示单词。这种方法不仅能够表示常见单词,还能够表示罕见单词和未知单词,因此在自然语言处理中得到了广泛应用。
- Paragraph Vector(Doc2Vec):Paragraph Vector 是一种将文本表示为向量的方法,它是在Word2Vec 的基础上进行扩展,可以同时将单词和文本表示为向量。Paragraph Vector 通过在训练中使用文本标签来捕捉文本的上下文信息,从而提高了文本向量的质量。
- ELMo:ELMo 是一种基于深度双向语言模型的文本向量表示方法,它可以为每个单词生成多个不同的向量表示,每个向量表示都捕捉了不同层次的语义信息。这种方法能够更好地捕捉单词的多义性和上下文相关性,因此在自然语言处理中得到了广泛应用。
- Transformer:Transformer 是一种基于自注意力机制的神经网络结构,它在机器翻译任务中表现出了优异的性能。Transformer 可以将文本表示为向量序列,每个向量捕捉了该位置的语义信息和上下文相关性。这种方法不仅能够捕捉单词之间的语义和语法关系,还能够处理长文本和多语言文本等复杂情况。
这些方法各有特点,可以根据不同的任务需求选择合适的方法进行文本表示。
相关文章:

【NLP】Word2Vec 介绍
Word2Vec 是一种非常流行的自然语言处理技术,它将每个单词表示为高维向量,并且通过向量之间的相似度来表示单词之间的语义关系。 1 One-Hot 编码🍂 在自然语言处理任务中,我们需要将文本转换为计算机可以理解的形式,即…...
3月6日,30秒知全网,精选7个热点
///石家庄地铁:在指定店铺购物金额不限 就可免费乘地铁 乘客只要在指定商铺或地铁站内36524便利店购物,便能得到一张当日乘车券,可免费乘坐地铁一次,不限里程 ///神州泰岳:公司语音机器人等产品能够进行多轮问答 公司…...

Python笔记 -- 字典
文章目录1、概述2、增删改查3、遍历3.1、遍历所有键值对3.2、分别遍历键和值4、嵌套4.1、字典列表4.2、在字典中储存列表4.3、在字典中储存字典1、概述 字典是一系列键值对,可将任何Python对象作为字典中的值 字典和列表容易混淆,列表也可用{} 字典是一…...
【独家】华为OD机试 - 滑动窗口(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

MySQL调优 - SQL查询深度分页问题
一、问题引入 例如当前存在一张表test_user,然后往这个表里面插入3百万的数据: CREATE TABLE test_user (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键id,user_id varchar(36) NOT NULL COMMENT 用户id,user_name varchar(30) NOT NULL COMMENT 用…...

0306spring--复习
一,spring是什么 Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架 理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架 优点࿱…...

动手实现一遍Transformer
最近乘着ChatGpt的东风,关于NLP的研究又一次被推上了风口浪尖。在现阶段的NLP的里程碑中,无论如何无法绕过Transformer。《Attention is all you need》成了每个NLP入门者的必读论文。惭愧的是,我虽然使用过很多基于Transformer的模型&#x…...
【Flutter入门到进阶】Flutter基础篇---弹窗Dialog
1 AlertDialog 1.1 说明 最简单的方案是利用AlertDialog组件构建一个弹框 1.2 示例 void alertDialog(BuildContext context) async {var result await showDialog(barrierDismissible: false, //表示点击灰色背景的时候是否消失弹出框context: context,builder: (context)…...

【操作系统】进程和线程的区别
文章目录1. 概述2. 进程3. 线程4. 协程5. 进程与线程区别1. 概述 进程和线程这两个名词天天听,但是对于它们的含义和关系其实还有点懵的,其实除了进程和线程,还存在一个协程,它们的关系如下: 首先,我们需要…...

Linux开发环境配置--正点原子阿尔法开发板
Linux开发环境配置–正点原子阿尔法开发板 文章目录Linux开发环境配置--正点原子阿尔法开发板1.网络环境设置1.1添加网络适配器1.2虚拟网络编辑器设置1.3Ubuntu和Windows网络信息设置Ubuntu网络信息配置方式:1.系统设置->网络->选项2.配置网络文件2源码准备2.…...
Android ThreadPoolExecutor的基本使用
ThreadPoolExecutor是Java中的一个线程池类,Android中也可以使用该类来管理自己的线程池,它为我们管理线程提供了很多方便。 线程池是一种能够帮助我们管理和复用线程的机制,它可以有效地降低线程创建和销毁的开销。使用线程池可以避免不必要…...

基于区域生长和形态学处理的图像融合方法——Matlab图像处理
✅ 大三下时弄的 文章目录最终效果图摘要1 研究背景及意义2 基本原理描述3 实验数据来源3.1 原始图像的来源3.2 天空背景图像的来源4 实验步骤及相应处理结果4.1 原始图像的预处理4.2 区域生长法分割图像4.3 形态学处理填充孔洞4.4 边缘检测根据二值图像构造RGB图像4.5 图像拼接…...

三个案例场景带你掌握Cisco交换机VLAN互通
VLAN间路由的方式现在主流的组网主要是依靠三层交换机通过配置SVI接口【有的厂商叫VLANIF接口】,当然也有比较小型的网络,它就一个出口路由器可管理的二层交换机,还有一种更加差的,就是出口路由一个可管理的二层交换机,…...
小白入门之持久连接与非持久连接的差别
对比 HTTP 0.9 已过时 HTTP1.0:非持续连接,每个连接只处理一个请求响应事务,有些服务器端甚至还在用此,可以在一定时间内复用连接,具体复用时间的长短可以由服务器控制,一般在15s左右。 HTTP 1.1 默认使用持…...
TypeScript篇.01-简介,类,接口,基础类型
1.简介(1)安装及编译安装: npm install -g typescript创建 .ts 后缀名的文件编译: tsc 文件名.ts 编译后会生成同名 .js 的文件查看: 在html文件中script引入js文件,运行查看控制台即可(2)类型注解TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式 变量或函数声…...

分享几种WordPress怎么实现相关文章功能
一淘模板(56admin.com)给大家介绍一下WordPress代码实现相关文章的几种方法,希望对大家有所帮助! WordPress很多插件可以实现相关文章的功能,插件的优点是配置简单,但是可能会对网站的速度造成一些小的影响…...
PANGO的IOB的电平能力那些事
LVCMOS33 如果要使用33电平,VCCIO则必须供电3V3. 在此制式下,VILMAX为0.8V,VIHMIN为2.0V,即,电平处于0.8V到2.0V之间时,处于浮游态。 VOLMAX是0.4V,VOHMIN是VCCIO-0.4V,折算下来&am…...

scrpy学习-02
新浪微博[Scrapy 教程] 3. 利用 scrapy 爬取网站中的详细信息 - YouTubedef parse(self,response):soup BeautifulSoup(response.body,html.parser)tags soup.find_all(a,hrefre.compile(r"sina.*\d{4}-\d{2}-\d{2}.*shtmls"))#匹配日期for tag in tags:url tag.get(…...

MySQL运维篇之Mycat分片规则
3.5.3、Mycat分片规则 3.5.3.1、范围分片 根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。 示例: 可以通过修改autopartition-long.txt自定义分片范围。 注意: 范围分片针对于数字类型的字段,…...

vue router elementui template CDN模式实现多个页面跳转
文章目录前言一、elementui Tabs标签页和NavMenu 导航菜单是什么?二、使用方式1.代码如下2.页面效果总结前言 写上一篇bloghttps://blog.csdn.net/jianyuwuyi/article/details/128959803的时候因为整个前端都写在一个index.html页面里,为了写更少的代码…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...