专栏首页村雨遥Word Embedding

Word Embedding

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/github_39655029/article/details/100023809

如何表示词义

  • 流程 文本文件->分词后的序列->词表示的向量(词嵌入)->解决具体任务的算法;

用离散符号表示词

传统NLP中,我们将词表示为一个个的离散符号,如:sun、hotel、fruit……,我们可以用one−hotone-hotone−hot方式将词代表为向量形式,如:

sun=[0,1,0,0,0,0,0,0,0,0]sun=[0,1,0,0,0,0,0,0,0,0]sun=[0,1,0,0,0,0,0,0,0,0]

hotel=[0,0,0,0,1,0,0,0,0,0]hotel=[0,0,0,0,1,0,0,0,0,0]hotel=[0,0,0,0,1,0,0,0,0,0]

此时存在问题:

  1. 向量之间无相似性,各个词用one−hotone-hotone−hot方式表示时,不同词之间都是正交的,不含有近似单词的信息;
  2. 向量维度过高,利用one−hotone-hotone−hot方式表示词向量时,向量维度等于词表中的词数,当词数量过多时,这个方法所带来的维度过高问题就会凸显出来;

分布式语义

  • 分布表示的思路 语料->对共现词计数->将计数后的数据转换为向量 ->通过一系列降维方法,将高维转换为低维
  • LSA(潜在语义分析)
  • Word Embedding(词嵌入) 通过给每个单词学习一个密集向量,类似于出现在相似上下文中的单词向量,这样的词向量就叫做word embedding或者word representations;
  • 模型结构图
  • 算法基本思想 输入层通过将大规模语料中的每个单词表示为一个密集向量,其中每个单词都是通过向量来表示,对文本进行遍历,每个位置都有一个中心词ccc和语境词表示ooo,通过利用ccc和ooo词向量之间的相似度,从而在给定ccc,计算出ooo的概率(或给定ooo,计算出ccc的概率),还需要通过调节词向量来最大化概率;
  • 具体例子

在给定第ttt个位置中心词bankingbankingbanking的情况下,当窗口大小设为222时,通过给定p(wt)p(w_t)p(wt​)来计算左右窗口大小为222的词的条件概率;

  • 相似度 对于每个位置t=1,2,……,Tt=1,2,……,Tt=1,2,……,T,当预测固定窗口大小为mmm的上文问关联词时,给出中心词为wtw_twt​,则相似度为:

L(θ)=∏t=1T∏−m&lt;=j&lt;=m,j̸=0P(wt+j∣wt;θ),其中θ是所有需要优化的变量L(\theta)=\prod ^T_{t=1} \prod _{-m&lt;=j&lt;=m,j\not=0} P(w_{t+j}|w_t;\theta),其中\theta是所有需要优化的变量L(θ)=t=1∏T​−m<=j<=m,j̸​=0∏​P(wt+j​∣wt​;θ),其中θ是所有需要优化的变量

  • 目标函数(损失/代价函数)

J(θ)=−1TlogL(θ)=−1T∑t=1T∑−m&lt;=j&lt;=m,j̸=0logP(wt+j∣wt;θ)J(\theta)=-\frac{1}{T}logL(\theta)=-\frac{1}{T}\sum^T_{t=1}\sum_{-m&lt;=j&lt;=m,j\not=0}logP(w_{t+j}|w_t;\theta)J(θ)=−T1​logL(θ)=−T1​t=1∑T​−m<=j<=m,j̸​=0∑​logP(wt+j​∣wt​;θ)

即目标函数为负的相似度函数对数的平均值,通过最小化目标函数,从而将预测的准确率最大化;

  • 预测函数 如何最小化目标函数呢?我们可以通过对预测函数的的处理来解决这一问题。对于预测函数P(wt+j∣wj,θ)P(w_{t+j}|w_j,\theta)P(wt+j​∣wj​,θ),可以通过用词www的两个向量来解决。我们假设VwV_wVw​是中心词,UwU_wUw​是语境词。则对于中心词ccc和语境词ooo而言,存在如下关系:

P(o∣c)=exp(uoTvc)∑w∈Vexp(uwTvc)P(o|c)=\frac{exp(u^T_ov_c)}{\sum_{w\in V}exp(u^T_wv_c)}P(o∣c)=∑w∈V​exp(uwT​vc​)exp(uoT​vc​)​

其中,分子中ooo和vvv的点积uoTvCu^T_o v_CuoT​vC​越大,则最后得到的概率P(o∣v)P(o|v)P(o∣v)越大。而分母则通过指数函数计算之后,从而实现了对整个词表的标准化;

  • 实例

其中P(uproblems∣vinto)P(u_{problems}|v_{into})P(uproblems​∣vinto​)为P(problems∣into;uproblems,vinto,θ)P(problems|into;u_{problems},v_{into},\theta)P(problems∣into;uproblems​,vinto​,θ)的简写形式;

  • SoftmaxSoftmaxSoftmax回归

softmax(x)i=exp(xi)∑j=1nexp(xj)=pisoftmax(x)_i = \frac{exp(x_i)}{\sum^n_{j=1}exp(x_j)}=p_isoftmax(x)i​=∑j=1n​exp(xj​)exp(xi​)​=pi​

softmaxsoftmaxsoftmax又称为多项逻辑回归(multinomiallogisticregressionmultinomial logistic regressionmultinomiallogisticregression),多用于分类过程,它通过将多个神经元的输出,映射到(0,1)(0,1)(0,1)区间。它通过将任意值xix_ixi​映射到一个概率分布pip_ipi​上,"maxmaxmax“是因为它会将输入中最大的值的概率进一步放大,而”softsoftsoft"则是因为对于输入中极小的值,它也人然后分配一些概率,而不是直接丢弃。因此,softmaxsoftmaxsoftmax函数常常用在深度学习中;

word2vec中将文本进行向量表示的方法

  • CBOW(ContinuousBagofWords)CBOW(Continuous Bag of Words)CBOW(ContinuousBagofWords)

给定上下文中的词,然后预测中心词。从而利用中心词的预测结果情况,利用梯度下降方法不断调整上下文词的向量。训练完成后,每个词都作为中心词遍历了一遍,将上下文中的词向量进行调整,从而获取整个文本中所有词的向量;

  • SG(Skip−Gram)SG(Skip-Gram)SG(Skip−Gram)

给定中心词,然后预测上下文中的词。从而利用上下文中的词的预测结果情况,利用梯度下降法不断调整中心词的词向量,最后文本遍历完一遍之后,就得到了所有词的词向量;

  • CBOWCBOWCBOW和SGSGSG的比较 两者均为三层神经网络(输入层、投影层和输出层)。SGSGSG中,每个词作为中心词时,是一对多的情况,多个上下文中的词对一个中心词进行“训练”,然后得出较准确地中心词的向量结果,这样最终的效果更好。CBOWCBOWCBOW中,是多对一的情况,多个上下文中的词从一个中心词处进行“学习”,这样效率更高,速度快,但是最终效果却不如SGSGSG。此外,在SGSGSG中,每个词都会受上下文词的影响,每个词作为中心词时,需要进行KKK次训练(KKK为窗口大小),所以经过多次调整将使得词向量相对更准确。CBOWCBOWCBOW预测词数和整个文本中词数几乎相等,每次预测才会进行一次反向传播。

模型优化的方法

  • 分层SoftmaxSoftmaxSoftmax

用于计算softmaxsoftmaxsoftmax的方法,用二叉树(根据类标频数构造的霍夫曼树)来表示词汇表中的所有单词。如上图,其中,白色节点表示词汇表中的所有单词,而黑色节点则表示隐节点。其中VVV个单词存储于二叉树的叶子节点单元,而对于每个叶子节点,都有一条唯一的路径可以从根节点达到该叶子节点,这条路径用于计算该叶子节点所代表的单词的概率。在这个模型中,不存在单词的输出向量,而是V−1V-1V−1个隐节点中都有一个输出向量vn(w,j)‘v ^`_{n(w,j)}vn(w,j)‘​,单词作为输出词的概率被定义为:

p(w=wO)=∏j=1L(w)−1σ([[n(w,j+1)=ch(n(w,j))]].vn(w,j)‘Th)p(w=w_O)=\prod ^{L(w)-1}_{j=1}\sigma([[n(w,j+1)=ch(n(w,j))]].{v^`_{n(w,j)}}^Th)p(w=wO​)=j=1∏L(w)−1​σ([[n(w,j+1)=ch(n(w,j))]].vn(w,j)‘​Th)

其中,ch(n)ch(n)ch(n)是节点nnn的左侧子节点,vn(w,j)‘v^`_{n(w,j)}vn(w,j)‘​是隐节点n(w,j)n(w,j)n(w,j)的向量表示(即“输出向量”)。而hhh则是隐藏层的输出值(SG模型中,h=vwih=v_{wi}h=vwi​;CBOW模型中,h=1C∑c=1Cvwch=\frac{1}{C}\sum_{c=1}^C v_{w_c}h=C1​∑c=1C​vwc​​),[[x]][[x]][[x]]则为一个特殊函数,其定义如下:

[[x]]={1 ,if x is true−1 , others[[x]]=\begin{cases}1\ \ ,if\ x\ is\ true\\-1\ ,\ others\end{cases}[[x]]={1 ,if x is true−1 , others​

  • 负采样技术 为解决数量过于庞大的输出向量的更新问题,于是在更新时不更新所有向量,而只更新他们的一个样本。正样本应该出现在我们的样本中,此外也需要加入几个单词作为负样本。而在采样的过程中,我们需要任意指定一个总体的概率分布,这个分布就叫做噪声分布,标记为Pn(w)P_n(w)Pn​(w)。在word2vecword2vecword2vec中,作者用一个定义好的后多项分布的负采样形式取代简化的训练目标,从而产生高质量的嵌入:

E=−logσ(vwO‘Th)−∑wj∈Wneglogσ(−vwj‘Th)E=-log\sigma({v^`_{w_O}}^Th)-\sum_{w_j\in W_{neg}}log\sigma(-{v^`_{w_j}}^Th)E=−logσ(vwO​‘​Th)−wj​∈Wneg​∑​logσ(−vwj​‘​Th)

其中,wOw_OwO​是正样本(即输出单词),vwO‘v^`_{w_O}vwO​‘​是词向量。而hhh则是隐藏层的输出值(SG模型中,h=vwih=v_{wi}h=vwi​;CBOW模型中,h=1C∑c=1Cvwch=\frac{1}{C}\sum_{c=1}^C v_{w_c}h=C1​∑c=1C​vwc​​)。Wneg={wj∣j=1,…,K}W_{neg}=\{w_j|j=1,…,K\}Wneg​={wj​∣j=1,…,K}是从Pn(w)P_n(w)Pn​(w)中采样得到的单词集合,即负样本。

GloveGloveGlove

  • 定义 基于计数和直接预测的方法;
  • 目标函数

J(θ)=12∑i,j=1Wf(Pij)(uiTvj−logPij)2J(\theta)=\frac{1}{2}\sum^W_{i,j=1}f(P_{ij})(u^T_iv_j-logP_{ij})^2J(θ)=21​i,j=1∑W​f(Pij​)(uiT​vj​−logPij​)2

Xfinal=U+VX_{final}=U+VXfinal​=U+V

其中,PijP_{ij}Pij​是单词jjj出现在单词iii上下文中的概率,而f(Pij)f(P_{ij})f(Pij​)则是为了去除噪声而设定的函数。

如何评价EmbeddingEmbeddingEmbedding

  • 内在方式:对特定/中间子任务的评估;
  • 外在方式:应用到具体任务中;

fastTextfastTextfastText分类

在文本分类任务中,fastTextfastTextfastText作为一种浅层网络,能取得媲美于深度网络的精度,但是训练时间却比深度网络快许多数量级。一般情况下,用fastTextfastTextfastText进行文本分类的同时也会产生词的embeddingembeddingembedding;

  • 字符级的n−gramn-gramn−gram word2vecword2vecword2vec中以词作为原子,为每个词生成一个向量,而忽略词内部形态特征。面对这一问题,fastTextfastTextfastText采用字符级的n−gramn-gramn−gram来表示一个单词。通过这样处理则有两个优点;
  1. 对于低频词,生成的词向量效果更好,其n−gramn-gramn−gram可以与其他词共享;
  2. 对于训练词库外的词,仍然可以构建其词向量,可通过叠加其字符级n−gramn-gramn−gram从而生成向量;
  • 模型架构

类似于word2vecword2vecword2vec中的CBOWCBOWCBOW模型,只有输入层、隐藏层、输出层三层。其中,输入为多个单词表示成的向量,输出是一个特定的targettargettarget,隐藏层是对多个词向量的叠加平均。不同的是,CBOWCBOWCBOW的输入是目标词上下文中的词,而fastTextfastTextfastText的输入则是多个单词及其n−gramn-gramn−gram特征。这些特征用于表示单个文档,CBOWCBOWCBOW中输入词的是经过one−hotone-hotone−hot编码过的,输出为目标词;而fastTextfastTextfastText中输入特征则是经embeddingembeddingembedding过的特征,输出是各个文档对应的类标,且采用分层softmaxsoftmaxsoftmax优化措施,大大加快了训练速度;

  • 核心思想 将整篇文档的词及n−gramn-gramn−gram向量叠加平均,从而得到文档向量,然后利用文档向量做多层softmaxsoftmaxsoftmax多分类,主要涉及到n−gramn-gramn−gram特征的引入以及分层SoftmaxSoftmaxSoftmax分类技术;
  • fastTextfastTextfastText样例
    • 主要步骤
      1. 添加输入层(即embeddingembeddingembedding层);
      2. 添加隐藏层(即投影层);
      3. 添加输出层(即softmaxsoftmaxsoftmax层);
      4. 指定损失函数、优化器类型、评价指标、编译模型;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LeetCode 系列 面试题 02.03. 删除中间节点

    要删除链表中的中间节点,我们可以直接删除指定中间节点的下一个结点。此时呈现出的表面结果为删除的当前节点,但实际上删除的却是下一个结点。此时主要进行的是赋值操作,...

    村雨遥
  • LeetCode 58.最后一个单词的长度

    给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

    村雨遥
  • Java 版 C 语言经典 100 例(26 - 30)

    假设第 5 个人为 岁,则第 4 个人为 岁,第 3 个人为 岁,以此类推,第一个人应该是 岁,而第一个人为 10 岁,所以

    村雨遥
  • CS224N 课程笔记之二:词向量(下)

    之前我们介绍了两种表示词向量的方法:「基于数量」的矩阵分解方法(HAL & LSA)和「基于窗口」的概率方法(word2vec)。第二种方法明显优于第一种,但其...

    口仆
  • 线性代数的本质-课程笔记(上)

    00 - “线性代数的本质”系列预览:https://www.bilibili.com/video/av5977466?from=search&seid=213...

    石晓文
  • 吹弹牛皮之Unity 引擎基础 - 向量

    菜菜的小菜在长期的工作积累中发现:基础知识的深入和刨析真的很重要,尤其是在遇到一些复杂的高层次的功能块面设计的时候。积跬步方能行千里,小菜想尝试来慢慢的撇弃掉一...

    用户7698595
  • 从向量空间的角度来理解方程组有无解的问题

    中所有列向量线性独立,换句话说就是其中一个列向量无法由其余的列向量线性表示,即不存在

    marsggbo
  • 算法工程师的数学基础|线性代数中的向量内积和外积概念及几何意义

    线性代数主要包含向量、向量空间(或称线性空间)以及向量的线性变换和有限维的线性方程组。本篇文章主要介绍线性代数部分中的向量和向量空间。

    week
  • 向量(vector)

    在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线...

    easyAI
  • 机器学习算法之砖瓦:向量详解

    问题导读 1.你认为什么是向量? 2.向量最开始是来自于哪门学科? 3.本文例子中如何将原始数据转换为向量的? 上一篇

    用户1410343

扫码关注云+社区

领取腾讯云代金券