NLP入门系列—词嵌入 Word embedding

NLP入门系列—词嵌入 Word embedding

2013年,Word2Vec横空出世,自然语言处理领域各项任务效果均得到极大提升。自从Word2Vec这个神奇的算法出世以后,导致了一波嵌入(Embedding)热,基于句子、文档表达的word2vec、doc2vec算法,基于物品序列的item2vec算法,基于图模型的图嵌入技术相继诞生。

现有的机器学习方法往往无法直接处理文本数据,因此需要找到合适的方法,将文本数据转换为数值型数据,由此引出了Word Embedding(词嵌入)的概念。

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称,它是NLP里的早期预训练技术。它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,这也是分布式表示:向量的每一维度都没有实际意义,而整体代表一个具体概念。

文本表示

文本是一种非结构化的数据信息,是不可以直接被计算的。

文本表示的作用就是将这些非结构化的信息转化为结构化的信息,这样就可以针对文本信息做计算,来完成我们日常所能见到的文本分类,情感判断等任务。

文本表示将非结构化数据转化为结构化数据

文本表示的方法有很多种,下面只介绍 3 类方式:

  1. 独热编码 | one-hot representation
  2. 整数编码
  3. 词嵌入 | word embedding

word embedding的关系

独热编码 one-hot representation

假如我们要计算的文本中一共出现了4个词:猫、狗、牛、羊。向量里每一个位置都代表一个词。所以用 one-hot 来表示就是:

猫:[1,0,0,0]

狗:[0,1,0,0]

牛:[0,0,1,0]

羊:[0,0,0,1]

one-hot编码

但是在实际情况中,文本中很可能出现成千上万个不同的词,这时候向量就会非常长。其中99%以上都是 0。

one-hot 的缺点如下:

  1. 无法表达词语之间的关系
  2. 这种过于稀疏的向量,导致计算和存储的效率都不高

这里稍微解释一下

  1. 无法表达词语之间的关系,因为站在向量的角度,我们是可以计算向量之间的距离,one-hot 模式之下,所有的向量之间的距离都一样
  2. 关于向量过于稀疏,这主要是因为不论向量多长,只有一个位置是非0的

整数编码

这种方式也非常好理解,用一种数字来代表一个词,上面的例子则是:

猫:1

狗:2

牛:3

羊:4

整数编码

将句子里的每个词拼起来就是可以表示一句话的向量。

整数编码的缺点如下:

  1. 无法表达词语之间的关系
  2. 对于模型解释而言,整数编码可能具有挑战性。

什么是词嵌入 word embedding

word embedding 是文本表示的一类方法。跟 one-hot 编码和整数编码的目的一样,不过他有更多的优点。

词嵌入并不特指某个具体的算法,跟上面2种方式相比,这种方法有几个明显的优势:

  1. 可以将文本通过一个低维向量来表达,不像 one-hot 那么长。
  2. 语意相似的词在向量空间上也会比较相近。
  3. 通用性很强,可以用在不同的任务中。

word embedding:语意相似的词在向量空间上也会比较相近

目前有两种主流的 word embedding 算法

2 种主流的 word embedding 算法

Word2vec

这是一种基于统计方法来获得词向量的方法,他是 2013 年由谷歌的 Mikolov 提出了一套新的词嵌入方法。

Word2vec,是一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏

这种算法有2种训练模式:

  1. 通过上下文来预测当前词
  2. 通过当前词来预测上下文

Word2vec 是 Word Embedding 方式之一,属于 NLP 领域,是将词转化为「可计算」「结构化」的向量的过程,这种方式在 2018 年之前比较主流,但是随着 BERT、GPT2.0 的出现,这种方式已经不算效果最好的方法了。

在说明 Word2vec 之前,需要先解释一下 Word Embedding。 它就是将「不可计算」「非结构化」的词转化为「可计算」「结构化」的向量。

将现实问题转化为数学问题只是第一步,后面还需要求解这个数学问题。所以 Word Embedding 的模型本身并不重要,重要的是生成出来的结果——词向量。因为在后续的任务中会直接用到这个词向量。

Word2vec 的 2 种训练模式

CBOW(Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model),是Word2vec 的两种训练模式。下面简单做一下解释:

CBOW

通过上下文来预测当前值。相当于一句话中扣掉一个词,让你猜这个词是什么。

CBOW通过上下文来预测当前值

Skip-gram

用当前词来预测上下文。相当于给你一个词,让你猜前面和后面可能出现什么词。

Skip-gram用当前词来预测上下文

优化方法

为了提高速度,Word2vec 经常采用 2 种加速方式:

  1. Negative Sample(负采样)
  2. Hierarchical Softmax
Word2vec 的优缺点

需要说明的是:Word2vec 是上一代的产物(18 年之前), 18 年之后想要得到最好的效果,已经不使用 Word Embedding 的方法了,所以也不会用到 Word2vec。

优点:

  1. 由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
  2. 比之前的 Embedding方 法维度更少,所以速度更快
  3. 通用性很强,可以用在各种 NLP 任务中

Word2vec在相似度计算上效果不错

缺点:

  1. 由于词和向量是一对一的关系,所以多义词的问题无法解决。
  2. Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化

Word2vec无法解决多义词的问题

GloVe

GloVe 是对 Word2vec 方法的扩展,它将全局统计和 Word2vec 的基于上下文的学习结合了起来。

GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。

GloVe是如何实现的

GloVe的实现分为以下三步:

  • 根据语料库(corpus)构建一个共现矩阵(Co-ocurrence Matrix)𝑋(什么是共现矩阵),矩阵中的每一个元素𝑋𝑖𝑗代表单词𝑖和上下文单词𝑗在特定大小的上下文窗口(context window)内共同出现的次数。

    一般而言,这个次数的最小单位是1,但是GloVe不这么认为:它根据两个单词在上下文窗口的距离𝑑,提出了一个衰减函数(decreasing weighting):𝑑𝑒𝑐𝑎𝑦=1/𝑑

    用于计算权重,也就是说距离越远的两个单词所占总计数(total count)的权重越小

    In all cases we use a decreasing weighting function, so that word pairs that are d words apart contribute 1/d to the total count.

  • 构建词向量(Word Vector)和共现矩阵(Co-ocurrence Matrix)之间的近似关系,论文的作者提出以下的公式可以近似地表达两者之间的关系:
    (1)𝑤𝑖𝑇𝑤𝑗+𝑏𝑖+𝑏𝑗=log⁡(𝑋𝑖𝑗)
    其中,**𝑤𝑖𝑇和𝑤𝑗是我们最终要求解的词向量;**𝑏𝑖和𝑏𝑗分别是两个词向量的bias term。
    当然你对这个公式一定有非常多的疑问,比如它到底是怎么来的,为什么要使用这个公式,为什么要构造两个词向量𝑤𝑖𝑇和𝑤𝑗~?下文我们会详细介绍。

  • 有了公式1之后我们就可以构造它的loss function了:

    (2)𝐽=∑𝑖,𝑗=1𝑉𝑓(𝑋𝑖𝑗)(𝑤𝑖𝑇𝑤𝑗+𝑏𝑖+𝑏𝑗–log⁡(𝑋𝑖𝑗))2

    这个loss function的基本形式就是最简单的mean square loss,只不过在此基础上加了一个权重函数𝑓(𝑋𝑖𝑗),那么这个函数起了什么作用,为什么要添加这个函数呢?我们知道在一个语料库中,肯定存在很多单词他们在一起出现的次数是很多的(frequent co-occurrences),那么我们希望:

    • 1.这些单词的权重要大于那些很少在一起出现的单词(rare co-occurrences),所以这个函数要是非递减函数(non-decreasing);
    • 2.但我们也不希望这个权重过大(overweighted),当到达一定程度之后应该不再增加;
    • 3.如果两个单词没有在一起出现,也就是𝑋𝑖𝑗=0,那么他们应该不参与到loss function的计算当中去,也就是𝑓(𝑥)要满足𝑓(0)=0

    满足以上两个条件的函数有很多,作者采用了如下形式的分段函数:
    (3)𝑓(𝑥)={(𝑥/𝑥𝑚𝑎𝑥)𝛼if 𝑥<𝑥𝑚𝑎𝑥1otherwise
    这个函数图像如下所示:
    Imgur

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物联网与智慧景区的未来:机遇与挑战并存

随着科技的不断发展&#xff0c;物联网技术在智慧景区中的应用越来越广泛&#xff0c;为旅游业带来了巨大的变革。然而&#xff0c;在物联网与智慧景区的未来发展中&#xff0c;机遇与挑战并存。本文将探讨物联网与智慧景区面临的机遇和挑战&#xff0c;并提出应对措施&#xf…

【复现】WordPress html5-video-player SQL 注入漏洞_39

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 在WordPress中播放各种视频文件。一个简单&#xff0c;可访问&#xff0c;易于使用和完全可定制的视频播放器&#xff0c;适用于所…

[开源]GPT Boss – 用图形化的方式部署您的私人GPT镜像网站

在这个以数据和智能为核心的时代&#xff0c;掌握最新的技术趋势是每个企业和个人都需要做到的。这就是GPT Boss存在的意义&#xff1a;一个基于OpenAI技术的一站式GPT应用解决方案。 自2022年起&#xff0c;GPT Boss团队便投身于人工智能领域&#xff0c;将OpenAI的GPT模型带给…

回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)

回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现WOA-CNN-LSTM-Attention鲸鱼算法优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&…

MATLAB多元线性回归对信息化进行相关性分析(附完整数据和代码)

MATLAB代码: clc;clear all;close all;warning off;%关闭警报 %% 多元线性回归 dataxlsread(归一化数据.xls); Inputdatadata(:,2:end);%载入输入数据 Outputdatadata(:,1);%载入输出数据 % index11:length(Outputdata);%顺序样本 index1randperm(length(Outputdata));%随机样…

Multisim14.0仿真(五十)基于CD4518的计数器设计

一、CD4518简介: CD4518是二、十进制(8421编码)同步加计数器,内含两个单元的加计数器。每单个单元有两个时钟输入端CLK和EN,可用时钟脉冲的上升沿或下降沿触发。可知,若用ENABLE信号下降沿触发,触发信号由EN端输入,CLK端置“0”;若用CL℃K信号上升沿触发,触发信号由C…

算法练习-三数之和(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;数组 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨在…

视觉SLAM十四讲学习笔记(一)初识SLAM

目录 前言 一、传感器 1 传感器分类 2 相机 二、经典视觉 SLAM 框架 1 视觉里程计 2 后端优化 3 回环检测 4 建图 5 SLAM系统 三、SLAM 问题的数学表述 四、Ubuntu20.04配置SLAM十四讲 前言 SLAM: Simultaneous Localization and Mapping 同时定位与地图构建&#…

VScode+PlatformIO 物联网Iot开发平台环境搭建

1.vscode &#xff08;1&#xff09;安装platformIO插件 &#xff08;2&#xff09;新建项目或导入已有的arduino项目 Name&#xff1a;需要填写你项目的名称&#xff1b; Board&#xff1a;点开是一个下拉框&#xff0c;但是可以输入你想要的开发板&#xff0c;这里选择&quo…

24.Android中的列表--ListView

ListView 1.简单列表--ArrayAdapter <?xml version"1.0" encoding"utf-8"?> <ScrollView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools&qu…

大数据分析|大数据分析的十大应用领域

有许多技术可用于分析大数据。这项工作介绍了BDA适用的各种分析技术领域如下。 &#xff08;1&#xff09;社会分析 社交分析是实时数据分析中一个重要且不断发展的分析方法。它分为社交网络(例如&#xff0c;Facebook和LinkedIn)&#xff0c;博客(例如&#xff0c;Blogger和W…

ERP 系统架构的设计与实践总结

企业资源计划&#xff08;ERP&#xff09;系统是一种集成多个业务功能的综合性软件解决方案。在设计和实践 ERP 系统架构时&#xff0c;需要考虑诸多因素&#xff0c;以确保系统能够满足企业的需求&#xff0c;并提供高效、可靠、安全的服务。本文将介绍一些关键的设计原则和实…

101 C++内存高级话题 内存池概念,代码实现和详细分析

零 为什么要用内存池&#xff1f; 从前面的知识我们知道&#xff0c;当new 或者 malloc 的时候&#xff0c;假设您想要malloc 10个字节&#xff0c; char * pchar new char[10]; char *pchar1 malloc(10); 实际上编译器为了 记录和管理这些数据&#xff0c;做了不少事情&…

vue中 日期选择--本日、本周、本月、本年选择器实现(基于elementui)

效果图&#xff1a; 由于项目需要图标统计展示&#xff0c;需要日期美观化选择如上图所示&#xff0c;代码如下&#xff1a; <template><div class"el-page body"><el-row><el-col class"statistic-analysis-report-style" :span&qu…

【Linux进程间通信】匿名管道

【Linux进程间通信】匿名管道 目录 【Linux进程间通信】匿名管道进程间通信介绍进程间通信目的进程间通信发展进程间通信分类 管道用fork来共享管道原理站在文件描述符角度——深度理解管道站在内核角度——管道本质 匿名管道在myshell中添加管道的实现&#xff1a;管道读写规则…

【iOS ARKit】环境反射

环境反射 在使用 iOS AR中 渲染虚拟物体时&#xff0c;RealityKit 默认使用了一个简单的天空盒&#xff08;Skybox&#xff0c;即IBL环境资源贴图&#xff09;&#xff0c;所有带反射材质的物体默认会对天空盒产生反射。 但在AR 中&#xff0c;使用IBL 技术实现的天空盒反射有一…

【快速上手QT】01-QWidgetQMainWindow QT中的窗口

总所周知&#xff0c;QT是一个跨平台的C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;当然我们用到QT就是要做GUI的&#xff0c;所以我们快速上手QT的第一篇博文就讲QT的界面窗口。 我用的IDE是VS2019&#xff0c;使用QTc…

神经网络 | 基于 CNN 模型实现土壤湿度预测

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在现代农业和环境监测中&#xff0c;了解土壤湿度的变化对于作物生长和水资源管理至关重要。通过深度学习技术&#xff0c;特别是卷积神经网络&#xff0c;我们可以利用过去的土壤湿度数据来预测未来的湿度趋势。本文将使用 Pad…

Postgresql体系结构

client连接PostgreSQL过程&#xff1a; 1、客户端发起请求 2、主服务postmaster进程负责服务器是否接受客户端的host通信认证&#xff0c;服务器对客户端进行身份鉴别 3、主服务进程为该客户端单独fork一个客户端工作进程postgres 4、客户端与postgres进程建立通信连接&#xf…

【算法与数据结构】647、516、LeetCode回文子串+最长回文子序列

文章目录 一、647、回文子串二、516、最长回文子序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、647、回文子串 思路分析&#xff1a;判断一个字符串是否为回文串那么必须确定回文串的所在区间&#xff0c;而一维…