【NLP】Word2Vec 介绍

news2024/11/25 1:27:03

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. 线性表示:由于每个单词只有一个维度为1,其余维度都是0,因此 one-hot 编码的向量是线性表示的。这意味着,单词之间的关系只能通过向量之间的距离来衡量,而无法通过其他非线性的方式来表示单词之间的语义和语法关系,也就是无法度量词语之间的相似性。
  2. 稀疏性:one-hot 编码的向量通常非常稀疏,其中大部分维度都是0。这导致 one-hot 编码需要存储大量的无用信息,使得向量变得非常庞大,且容易出现维度灾难,从而增加了计算的复杂度和存储成本。
  3. 无法处理未知词:由于 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 是一种非常流行的词向量模型,但它也有一些缺点。

  1. Out-of-vocabulary 问题:如果 word2vec 没有在训练数据中看到某个单词,则它无法将其表示为向量。
  2. 上下文窗口大小的选择:word2vec 中上下文窗口大小的选择对最终词向量的质量有很大影响。如果窗口大小太小,则可能无法捕捉到单词之间的语义关系;如果窗口大小太大,则可能会引入太多的噪音。
  3. 训练时间长:word2vec 的训练时间通常很长,特别是对于大型语料库和高维词向量来说。
  4. 无法处理多义词:word2vec 为每个单词生成唯一的向量表示,因此它不能处理多义词,即一个单词有不同的含义,例如 “bank” 既可以表示银行,也可以表示河岸。

相比之下,GloVe 是一种基于全局矩阵分解的词向量模型,它可以缓解一些 word2vec 的缺点,以下是一些 GloVe 的优点。

  1. 处理多义词能力:GloVe 使用词与词之间的共现统计信息来学习词向量,因此它可以将多个含义相似的单词映射到同一个向量空间中。
  2. 更好的向量质量:由于 GloVe 使用全局矩阵分解来学习词向量,因此它可以利用整个语料库中的统计信息来学习更准确的词向量。
  3. 更少的超参数:GloVe 中只有一个超参数,即词汇表大小,而 word2vec 需要选择多个超参数,例如上下文窗口大小和负采样数量。

虽然 GloVe 相对于 word2vec 具有一些优点,但它也有一些缺点,例如它的训练时间可能比 word2vec 更长。在选择哪种词向量模型时,需要考虑特定任务的要求以及可用的计算资源和数据量等因素。

4 Supplement🏀

除了one-hot 编码、Word2Vec 和 GloVe 等常见的文本向量表示方法外,还有许多其他的方法可以将文本表示为向量,下面列举了几种比较常见的方法:

  1. FastText:FastText 是 Facebook 于2016年提出的一种文本向量表示方法,它基于 Word2Vec 模型,但是将单词视为子词的集合,通过子词级别的向量表示来表示单词。这种方法不仅能够表示常见单词,还能够表示罕见单词和未知单词,因此在自然语言处理中得到了广泛应用。
  2. Paragraph Vector(Doc2Vec):Paragraph Vector 是一种将文本表示为向量的方法,它是在Word2Vec 的基础上进行扩展,可以同时将单词和文本表示为向量。Paragraph Vector 通过在训练中使用文本标签来捕捉文本的上下文信息,从而提高了文本向量的质量。
  3. ELMo:ELMo 是一种基于深度双向语言模型的文本向量表示方法,它可以为每个单词生成多个不同的向量表示,每个向量表示都捕捉了不同层次的语义信息。这种方法能够更好地捕捉单词的多义性和上下文相关性,因此在自然语言处理中得到了广泛应用。
  4. Transformer:Transformer 是一种基于自注意力机制的神经网络结构,它在机器翻译任务中表现出了优异的性能。Transformer 可以将文本表示为向量序列,每个向量捕捉了该位置的语义信息和上下文相关性。这种方法不仅能够捕捉单词之间的语义和语法关系,还能够处理长文本和多语言文本等复杂情况。

这些方法各有特点,可以根据不同的任务需求选择合适的方法进行文本表示。

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

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

相关文章

ChatGPT后劲很大,问题也是

ChatGPT亮相即封神,最初的访客是程序员、工程师、AI从业者、投资人,最后是无数懵懂又好奇的普通人:ChatGPT是什么?自己会被ChatGPT取代吗?看待ChatGPT的立场也是两个极端: 快乐,是因为ChatGPT太…

科普| 什么是云原生?

“新冠疫情从根本上改变了商业模式,工作流向在线迁移的速度比以往任何时候都要快。越来越多的公司和消费者依靠电子商务“ B2B”和B2C”,以及网上银行促进创新以满足日益增长的客户需求,云原生技术在其中发挥重要作用,同时也加速了…

vm centos7搭建k8s集群

关闭防火墙,三台systemctl stop firewalld关闭selinux,三台sed -i s/enforcing/disabled/ /etc/selinux/config关闭swap,三台swapoff -a设置主机名,三台hostnamectl set-hostname 主机名,三个主机名分别设置成k8s-mast…

JavaScript新手学习手册-基础代码(一)

什么是JavaScript? 百度百科 什么是控制台? 网页➡快捷键F12 进入Console就是控制台,它的作用与开发软件相同,可以进行代码的编写在紫色位置进行编写,另外console.log()方法所打印的内容都是在此进行输出。 一&#…

Spark Join

Spark Join关联形式内关联外关联左外关联右外关联全外关联左半/逆关联关联机制NLJSMJHJ分发模式Join 选择等值 Join不等值 JoinJoin 按照关联形式(Join Types)划分 : 内关联、外关联、左关联、右关联 Join 按实现机制划分 : NLJ (Nested Loop Join) 、S…

【操作系统原理实验】页面替换策略模拟实现

选择一种高级语言如C/C等,编写一个页面替换算法的模拟实现程序。1) 设计内存管理相关数据结构;2) 随机生成一个页面请求序列;3) 设置内存管理模拟的关键参数;4) 实现该页面置换算法;5) 模拟实现给定配置请求序列的换页…

【python socket】实现websocket服务端

一、获取握手信息首先通过如下代码,我们使用socket来获取客户端的握手信息import socketsock socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("127.0.0.1", 8002)) sock.li…

启动项管理工具Autoruns使用实验(20)

实验目的 (1)了解注册表的相关知识; (2)了解程序在开机过程中的自启动; (3)掌握Autoruns在注册表和启动项方面的功能;预备知识 注册表是windows操作系统中的一个核心数据…

Android Framework-Android启动过程

第一个系统进程(init) Android设备的启动必须经历3个阶段,即Boot Loader、Linux Kernel和Android系统服务,默认情况下它们都有各自的启动界面。严格来说,Android系统实际上是运行于Linux内核之上的一系列“服务进程”…

元宇宙XR应用,如何迎接大规模普及的时代?

未来,具有互动性、沉浸感的元宇宙/XR应用将逐渐成为主流,这个趋势已毋庸置疑。 然而,在大趋势下,大众终端用户普遍设备能力不足、网络传输时延、GPU算力分配限制等技术挑战,依然是元宇宙/XR应用在大众广泛渗透的瓶颈。…

【vulhub漏洞复现】Fastjson 1.2.24反序列化漏洞

一、漏洞详情Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。漏洞成因:目标网站在解析 json 时,未对 json 内容进行验证,直接将 json 解析成 java 对象并执行&…

国产数字源表在压力传感器电阻测量上的应用

压力传感器分类压力传感器(Pressure Transducer)是能感受压力信号,并能按照一定的规律将压力信号转换成可用的输出的电信号的器件或装置,压力传感器通常由压力敏感元件和信号处理单元组成。常见的压力传感器有四种:应变式压力传感器、压阻式压力传感器、电容式压力传…

OpenMMLab 目标检测

OpenMMLab 目标检测1. 目标检测简介1.1 滑窗2. 基础知识2.1 边界框(Bounding Box)3. 两阶段目标检测算法3.1 多尺度检测技术4. 单阶段目标检测算法4.1 YOLO: You Only Look Once (2015)4.2 SSD: Single Shot MultiBox Detetor (2016)5. 无锚框目标检测算…

Nginx的搭建与核心配置

目录 一.Nginx是什么? 1.Nginx概述 2.Nginx模块与作用 3.Nginx三大作用:反向代理、负载均衡、动静分离 二.Nginx和Apache的差异 三.安装Nginx 1.编译安装 2.yum安装 四.Nginx的信号使用 五.Nginx的核心配置指令 1.访问状态统计配置 2.基于授…

非华为电脑安装华为电脑管家以及注意事项

非华为电脑安装华为电脑管家前言安装注意事项效果展示前言 非华为电脑是可以安装华为电脑管家的,不过部分功能可能不兼容。值得一提的是,超级终端、多屏协同、文件共享、远程控制等功能大部分电脑是可以使用的,本人在联想ThinkBook 15电脑上…

【CS144】Lab1总结

Lab1Lab汇总概述具体实现Lab汇总 概述 lab1要求实现一个字符串的装配器,用于将TCPTCPTCP接收方接收到的字节流拼接起来,并缓存一定量的乱序到达的字节,便于TCPTCPTCP接收方相关功能的实现。 具体实现 该装配器实现的重点是push_substring…

Java线程池使用与原理解析2(自定义线程池、合适的线程数量、线程池阻塞队列、线程拒绝策略)

在上篇我们学习了线程池各个参数的含义,线程池任务处理流程,使用线程池的好处等内容,本篇我们学习如何创建一个适合我们业务的线程池。为此,我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小…

Malware Dev 04 - 隐匿之 ETW(Event Tracing for Windows)Bypass

写在最前 如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里: https://discord.gg/9XvvuFq9Wb我拥有 OSCP,OSEP,OSWE,OSED&…

使用leangoo领歌单团队敏捷开发项目管理

概述单团队敏捷开发主要是针对10人以下、只有一个Scrum团队的小型产品或项目的敏捷开发。对于小型团队来说,在Leangoo中创建一个单团队敏捷开发项目就可以很好地支持团队产品或项目的开发。适用场景适用于单个团队进行Scrum敏捷开发协作,Leangoo项目内也…

Linux - 磁盘存储管理 磁盘引入

# 我们要介绍下 磁盘管理, 那不妨先来看一张图来简单 引入 :这张图呢,是我们 Windows 上的磁盘管理的显示 。根据这幅图呢,提出一个问题 :>>> 这幅图磁盘管理所显示的内容,你能判断出 该电脑 有几…