词嵌入技术

词嵌入是将单词转换成数值向量的技术,能解决传统方法的维度灾难问题,捕捉语义关系。介绍了Embedding Layer、Word2Vec/Doc2Vec、GloVe三种主要算法,并通过在KNIME中对影片评论进行情感分析的案例,展示了词嵌入在自然语言处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

词嵌入(Word Embedding)是一种将单词或字符转换成数值向量的技术,目的是为了让这些数值能够代表单词之间的语义关系。这种表示方法使得具有相似含义的单词在向量空间中拥有相似的表示

词向量的概念可以追溯到1986年,由Rumelhart、Hinton和Williams等人提出。他们的工作为词向量的后续发展奠定了基础,通过机器学习算法将自然语言处理成计算机可以识别的格式,其中词向量是实现这一目标的重要方法。

随后,在词向量技术的实际应用和优化方面,Tomas Mikolov等人做出了重要贡献。2013年,他们创建了Word2Vec模型,这是一种能够使用语义关系来表示低维度、高质量词向量的方法。Word2Vec模型的提出极大地推动了词向量技术的发展,并使其成为NLP领域中不可或缺的组成部分。

此外,还有其他研究者如Jeffrey Pennington等人提出了Glove模型,以及Tomas Mikolov再次提出的FastText模型等,这些模型都在不同程度上对词向量的表示和训练进行了优化和改进。

词嵌入的名称来源于它的处理过程,即“嵌入”单词到一个通常是多维的向量空间中在这个过程中,每个单词被映射到一个实数向量,这个向量能够捕捉单词的语义信息。这样的表示方式允许模型利用数学运算来处理语言数据,从而在自然语言处理(NLP)任务中实现更高效的计算和学习。

此外,词嵌入是自然语言处理领域的一个重要突破,因为它解决了传统方法(如独热编码)中的一些问题,比如维度灾难和忽略了单词之间的语义联系。通过词嵌入,单词不仅仅是单纯的数字标识,而是携带了上下文和语义信息的丰富表示,这极大地提高了NLP模型的性能和准确性。

为什么使用词嵌入可以解决维度灾难问题?

使用词嵌入可以有效地解决维度灾难问题,以下是详细解释:

1、降低数据维度词嵌入通过将单词从高维的词汇空间映射到低维的连续向量空间,显著降低了数据的维度。这种降维有助于减轻由于词汇量庞大而导致的维度灾难问题,因为传统的独热编码方式会为每个单词分配一个维度,导致向量空间非常庞大且稀疏。

2、捕获语义关系:词嵌入不仅降低了数据维度,还能够捕捉词语之间的语义关系。这意味着在新的低维向量空间中,具有相似含义或上下文共现模式的词语会被放置在彼此靠近的位置,这样的表示方式使得模型能够更好地理解词语之间的关系。

3、泛化能力:词嵌入还具有一定的泛化能力,这有助于模型在新的数据上也能表现良好。此外,选择合适的维度对于词嵌入的性能至关重要。如果维度过低,可能会丢失重要的信息;而维度过高,则可能引入不必要的噪音。

4、技术实现:现代的词嵌入技术如Word2Vec,通过预测上下文或目标单词来学习词向量,这些方法生成的词向量通常是低维且密集的,有助于进一步减轻维度灾难的问题。

总的来说,词嵌入通过将单词表示为低维的连续向量,不仅解决了维度灾难问题,还提高了模型捕捉和利用语义关系的能力,这对于自然语言处理任务来说是至关重要的。

词嵌入(word embedding)是一种词的类型表示具有相似意义的词具有相似的表示,是将词汇映射到实数向量的方法总称(将句子中的词嵌入到低维向量空间)。词嵌入是自然语言处理的重要突破之一。下面将围绕什么是词嵌入、三种词嵌入的主要算法展开讲解,并通过案例具体讲解如何利用词嵌入进行文本的情感分析。

什么是词嵌入?

词嵌入实际上是一类技术,单个词在预定义的向量空间中被表示为实数向量,每个单词都映射到一个向量。举个例子,比如在一个文本中包含“猫”“狗”“爱情”等若干单词,而这若干单词映射到向量空间中,“猫”对应的向量为(0.1 0.2 0.3),“狗”对应的向量为(0.2 0.2 0.4),“爱情”对应的映射为(-0.4 -0.5 -0.2)(本数据仅为示意)。像这种将文本X{x1,x2,x3,x4,x5……xn}映射到多维向量空间Y{y1,y2,y3,y4,y5……yn },这个映射的过程就叫做词嵌入

之所以希望把每个单词都变成一个向量,目的还是为了方便计算,比如“猫”,“狗”,“爱情”三个词。对于我们人而言,我们可以知道“猫”和“狗”表示的都是动物,而“爱情”是表示的一种情感,但是对于机器而言,这三个词都是用0,1表示成二进制的字符串而已,无法对其进行计算。而通过词嵌入这种方式将单词转变为词向量,机器便可对单词进行计算,通过计算不同词向量之间夹角余弦值cosine而得出单词之间的相似性

在这里插入图片描述

此外,词嵌入还可以做类比,比如:v(“国王”)-v(“男人”)+v(“女人”)≈v(“女王”),v(“中国”)+v(“首都”)≈v(“北京”),当然还可以进行算法推理。有了这些运算,机器也可以像人一样“理解”词汇的意思了。

词嵌入主要算法

那么如何进行词嵌入呢?目前主要有三种算法:

Embedding Layer

由于缺乏更好的名称,Embedding Layer是与特定自然语言处理上的神经网络模型联合学习的单词嵌入。该嵌入方法将清理好的文本中的单词进行one hot编码(独热编码),向量空间的大小或维度被指定为模型的一部分,例如50、100或300维。向量以小的随机数进行初始化。Embedding Layer用于神经网络的前端,并采用反向传播算法进行监督。

被编码过的词映射成词向量,如果使用多层感知器模型MLP,则在将词向量输入到模型之前被级联。如果使用循环神经网络RNN,则可以将每个单词作为序列中的一个输入。

这种学习嵌入层的方法需要大量的训练数据,可能很慢,但是可以学习训练出既针对特定文本数据又针对NLP的嵌入模型。

Word2Vec(Word to Vector)/ Doc2Vec(Document to Vector)

Word2Vec是由Tomas Mikolov 等人在《Efficient Estimation of Word Representation in Vector Space》一文中提出,是一种用于有效学习从文本语料库嵌入的独立词语的统计方法。其核心思想就是基于上下文,先用向量代表各个词,然后通过一个预测目标函数学习这些向量的参数。Word2Vec 的网络主体是一种单隐层前馈神经网络,网络的输入和输出均为词向量,其主要训练的是图中的红圈部分。

在这里插入图片描述

该算法给出了两种训练模型,CBOW (Continuous Bag-of-Words Model) 和 Skip-gram (Continuous Skip-gram Model)。CBOW将一个词所在的上下文中的词作为输入,而那个词本身作为输出,也就是说,看到一个上下文,希望大概能猜出这个词和它的意思。通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型;而Skip-gram它的做法是,将一个词所在的上下文中的词作为输出,而那个词本身作为输入,也就是说,给出一个词,希望预测可能出现的上下文的词,2-gram比较常用。

在这里插入图片描述

通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型。给定xx预测xxx的模型的输入都是词的向量,然后通过中间各种深度学习DL的CNN或RNN模型预测下一个词的概率。通过优化目标函数,最后得到这些词汇向量的值。Word2Vec虽然取得了很好的效果,但模型上仍然存在明显的缺陷,比如没有考虑词序,再比如没有考虑全局的统计信息

Doc2Vec与Word2Vec的CBOW模型类似,也是基于上下文训练词向量,不同的是,Word2Vec只是简单地将一个单词转换为一个向量,而Doc2Vec不仅可以做到这一点,还可以将一个句子或是一个段落中的所有单词汇成一个向量,为了做到这一点,它只是将一个句子标签视为一个特殊的词,并且在这个特殊的词上做了一些处理,因此,这个特殊的词是一个句子的标签。如图所示,词向量作为矩阵W中的列被捕获,而段落向量作为矩阵D中的列被捕获。

在这里插入图片描述

GloVe(Global Vectors for Word Representation)

GloVe是Pennington等人开发的用于有效学习词向量的算法,结合了LSA矩阵分解技术的全局统计与word2vec中的基于局部语境学习。

LSA全称Latent semantic analysis,中文意思是隐含语义分析,LSA算是主体模型topic model的一种,对于LSA的直观认识就是文章里有词语,而词语是由不同的主题生成的,比如一篇文章包含词语:计算机,另一篇文章包含词语:电脑,在一般的向量空间来看,这两篇文章不相关,但是在LSA看来,这两个词属于同一个主题,所以两篇文章也是相关的。该模型不依赖本地上下文,是对全局字词同现矩阵的非零项进行训练,其中列出了给定语料库中单词在彼此间共同出现的频率。

从本质上说,GloVe是具有加权最小二乘法目标的对数双线性模型。字词共现概率的比率又编码成某种形式的潜在可能意义。例如,以下是基于60亿词汇语料库的各种关于冰和蒸汽的词的共现概率:

在这里插入图片描述

如上表所示,“ice(冰)”与“solid(固体)”共现的可能性比“gas(气体)”大,“steam(蒸汽)”与“gas(气体)”共现的可能性比“solid(固体)”大,从而很轻易地可以区别出二者区别。而“ice(冰)”和“steam(蒸汽)”都与“water(水)”的共现概率较大,都与“fashion(时尚)”共现概率很小,因此无法区别“ice”和“steam”。只有在可能性的比率中(图表第三行),才会将像“water”和“fashion”这样的非区别性词汇(non-discriminative)的噪音相抵消,可能性比率越大(远大于1)的词与“ice”特性相关联,可能性比率越小(远小于1)则与“steam”的特性相关联。以这种方式,可能性比率编码了许多粗略形式的意义,这些意义与热力学相位的抽象概念相关联。

GloVe的训练目标是学习词向量,使得它们的点积等于“共现概率”的对数,由于比率的对数等于对数差,这个目标将共现概率的比率与词向量空间中的向量相关联,由于这些比率可以编码某种形式的意义,所以该信息也被编码为向量差异。所以所得到的词向量在单词类比任务上执行的很好。

词嵌入应用案例

当您在自然语言处理项目中使用词嵌入时,您可以选择自主学习词嵌入,当然这需要大量的数百万或数十亿文本数据,以确保有用的嵌入被学习。您也可以选择采用开源的预先训练好的词嵌入模型,研究人员通常会免费提供预先训练的词嵌入,例如word2vec和GloVe词嵌入都可以免费下载。

下面我们具体来看一下如何在KNIME中利用词嵌入进行情感分析,整体流程如下图所示:

在这里插入图片描述

首先,我们从IMDb网站上获取关于《Girlfight》这部影片的2000条评论,储存为.CSV格式的文件,利用File Reader这个节点把文本读入。

在这里插入图片描述

然后我们要将文件中的字符串转化成文档,把文件中除了文档的列都过滤掉,在结构图中是Document Creation这个节点,这是一个节点合集,点开包含三个子节点:

在这里插入图片描述

接下来是进行文本的词向量训练,我们预设置词向量维度为200维,并通过上文所介绍的Doc2Vec算法将2000条评论文本转换成2000个向量数值,获得如下图所示的2000个词向量:

在这里插入图片描述

另一方面,在进行词向量训练的同时导入预先设定的情感分类标签:

在这里插入图片描述

然后,在Joiner节点处,带有”POS”或”NEG”标签的情感词典与训练好的2000条词向量进行匹配,使得2000条词向量分别贴上”POS”或”NEG”标签,这样就获得了2000条词向量的标签数据,以便后面训练情感分析模型。

在这里插入图片描述

在这里插入图片描述

接下来,由于200维的向量数据量太大,通过主成分分析PCA算法将200维的数据进行降维处理转化为二维向量,以便对其分类效果进行可视化,通过颜色标记,最终2000条评论的情感分析情况如图所示:

在这里插入图片描述

在这里插入图片描述

从图上看,POS和NEG的情感正负标签很明显,分类比较理想。
然后,我们开始训练模型。先将数据进行分区,训练集和测试集,七三开分为两部分,一部分是训练数据,一部分是检验数据。

在这里插入图片描述

训练模型为Random Forest模型,顾名思义,就是用随机的方式建立一个“森林”,“森林”里面有很多的决策树组成,随机森林的每一颗决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一颗决策树分别进行一下判断,看看这个样本该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。最终训练出来的Random Forest模型如下图所示:

在这里插入图片描述

最后,通过检测数据的测试,我们得出该模型的精度为95.5%,由此可见拟合的模型较为精确:

在这里插入图片描述

通过这个案例的练习,我们可以更好的理解词嵌入技术和算法对自然语言处理NLP的新思路,也是深度学习技术的革命性体现。

转自:自然语言处理:什么是词嵌入(word embedding)?_word特殊字符嵌入是什么意思-CSDN博客

### 词嵌入层的概念与使用方法 #### 1. 词嵌入层的基本概念 词嵌入层是一种用于将离散的词语转化为连续向量表示的技术。其核心思想是将词汇表中的每一个单词映射到一个低维度的稠密向量空间中,这些向量可以捕捉到单词间的语义相似性和上下文关系[^1]。 在深度学习框架中,词嵌入层通常作为神经网络的第一层存在。它的主要功能是从输入的一系列整数索引(代表词汇表中的单词)生成对应的词向量矩阵。这种转化过程不仅保留了原始数据的信息,还增强了模型对语言结构的理解能力[^4]。 #### 2. 词嵌入层的实现原理 词嵌入层本质上是一个查找表(Lookup Table),其中每一行对应于词汇表中的某个特定单词,并存储该单词的固定长度向量表示。当接收到输入序列时,词嵌入层会依据每个位置上的单词索引来提取相应的向量并返回结果[^3]。 以下是其实现的关键点: - **初始化权重矩阵**:初始状态下,查找表内的所有向量会被随机赋值或者加载预先训练好的嵌入向量。 - **前向传播阶段**:对于每一批次的数据,在经过嵌入操作之后得到的是形状为(batch_size, sequence_length, embedding_dim) 的三维张量。 - **反向传播更新参数**:随着整个模型的学习进程推进,通过梯度下降调整嵌入矩阵里的数值以便优化最终预测效果。 #### 3. Python代码示例 下面展示如何利用PyTorch构建简单的词嵌入层: ```python import torch import torch.nn as nn # 定义超参 vocab_size = 10 # 假设我们的词汇大小为10 embedding_dim = 5 # 我们希望把每个词编码成五维实数组成的空间里去表达它们的关系 batch_size = 2 # 批处理规模设定为两个样本一组进行运算 # 创建Embedding Layer对象实例化 embed_layer = nn.Embedding(num_embeddings=vocab_size, embedding_dim=embedding_dim) # 构造模拟输入数据 (这里简单起见只用了二维tensor代替实际文本转id后的形式) input_tensor = torch.tensor([[1, 2, 4], [3, 5, 9]], dtype=torch.long) output_embedding = embed_layer(input_tensor) print(output_embedding.shape) # 输出应显示:(2L, 3L, 5L),即两组各有三个词组成的句子被投影到了五个特征构成的新坐标系当中去了! ``` 此段脚本展示了怎样快速搭建属于自己的自定义尺寸可调的小型实验环境来进行探索研究工作流程图解说明如下所示: #### 4. 应用场景举例 除了理论探讨之外,还需要知道这项技术广泛应用于各类自然语言处理任务之中,比如情感分析、命名实体识别、机器翻译等领域均可见其身影活跃其间发挥重要作用[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值