词嵌入

前言

    词嵌入是单词的一种数值化表示方式,一般情况下会将一个单词映射到一个高维的向量中(词向量)来代表这个单词。例如我们将:  

  1.  ‘机器学习’表示为 [1,2,3]   
  2.  ‘深度学习‘表示为[2,3,3]  
  3.  ‘英雄联盟‘表示为[9,1,3]

   对于词向量,我们可以使用余弦相似度在计算机中来判断单词之间的距离: 

‘机器学习’与‘深度学习‘的距离:cos(\Theta_1 )=\frac{1*2+2*3+3*3}{\sqrt{1^2+2^2+3^3}\sqrt{2^2+3^2+3^3}}=0.97

‘机器学习’与‘英雄联盟‘的距离:cos(\Theta_2 )=\frac{1*9+2*1+3*3}{\sqrt{1^2+2^2+3^3}\sqrt{9^2+1^2+3^3}}=0.56

通过这篇文章你可以学习到下面内容:

  1. 文本的词嵌入是什么,以及它与其他特征提取方法有什么区别。
  2. 介绍3种主流的从文本数据中学习词嵌入的方法。
  3. 怎么训练新的词嵌入以及如何在日常的NLP任务中使用预先训练好的词嵌入。  

 

什么是词嵌入?

     词嵌入是一种对文本算法学习后的表示形式,甚至,你可以理解为一个单词在算法中的储存形式。大家知道存入计算机的都是0101的数值化序列,这里也是同理,词嵌入就是将文本数值化以方便拟合算法。这种将单词或者文档数字化表示的方式被认为是深度学习在自然语言处理任务中最具有挑战性的问题之一。

 

使用密集和低维向量的一个好处是方便计算:大多数神经网络工具包不能很好地处理非常高维,稀疏的向量。......密集表示的主要好处是泛化能力,如果我们认为某些特征可能提供类似的线索,那么提供能够捕获这些相似性的表示是值得的。

 — Page 92, Neural Network Methods in Natural Language Processing, 2017.

       词嵌入实际上是一种将各个单词在预定的向量空间中表示为实值向量的一类技术。每个单词被映射成一个向量(初始随机化),并且这个向量可以通过神经网络的方式来学习更新。因此这项技术基本集中应用与深度学习领域。

     这项技术的关键点在于如何用密集的分布式向量来表示每个单词。这样做的好处在于与one-hot这样的编码对比,使用词嵌入表示的单词向量往往只有几十或者几百个维度。极大的减少了计算和储存量。 

 

将词汇表中的每个词与分布式词特征向量相关联...特征向量表示词的不同方面特征,每个词与向量空间中的点相关联。特征的数量......远小于词汇的大小

— A Neural Probabilistic Language Model, 2003.

      这种分布式的词向量表示方式依赖于单词的使用习惯,这就使得具有相似使用方式的单词具有相似的表示形式。这个怎么理解呢?回想我们在看游戏直播,IG获得冠军时候的弹幕,很多主播(无论游戏还是娱乐)的直播间都在发‘IG牛逼’和 ‘77777’,所以我们算法能学习到,‘IG牛逼’和 ‘77777’是向量空间中很相近的2个词。

      虽然看起来有些粗糙,但是这个方法背后有很深的语言学理论支撑。即Zellig Harris的“distributional hypothesis”。这个假设可以归纳为:具有相似语境的词语具有相似的含义。有关更深入的信息,请参阅Harris的1956年论文 “Distributional structure“。

这种使用语境定义单词的概念可以通过John Firth经常重复的谚语来概括:

 

You shall know a word by the company it keeps!

— Page 11, “A synopsis of linguistic theory 1930-1955“, in Studies in Linguistic Analysis 1930-1955, 1962.

小知识:(链接

英语中有俗语You shall know a person by the company it keeps.

而英国语言学家 J. R. Firth在此基础上造出You shall know a word by the company it keeps.的语料库语言学名句。

类似的说法,在中国古已有之。


其一:不知其人视其友 出自《孔子家语》(中华书局版,2009:136页)电子版下载
子曰:"商也好与贤己者处,赐也好说不若己者。不知其子视其父,不知其人视其友,不知其君视其所使,不知其地视其草木。故曰与善人居,如入芝兰之室,久而不闻其香,即与之化矣。与不善人居,如入鲍鱼之肆,久而不闻其臭,亦与之化矣。丹之所藏者赤,漆之所藏者黑,是以君子必慎其所与处者焉。"

其二:观人于其所友
李敖引自中国古语,详细出处未考出。也或许为李敖所造。

词嵌入算法

词嵌入是从文本语料中学习到的一种将单词表示为预定义大小的实值向量形式。学习过程一般与某个神经网络的模型任务一同进行,比如文档分类。

下面介绍3中词嵌入技术。

1.Embedding Layer

       这里并没有专业的名次,使用就称之为Embedding Layer吧。Embedding Layer是特定的自然语言处理任务(例如语言建模或者文档分类)上的与神经网络模型共同学习更新的词嵌入方法。

      使用Embedding Layer通常步骤一般是先预处理语料文本,将每个单词转化成one-hot形式的编码。而此单词对应的词向量其实是算法模型的其中一部分,词向量用预定义的维度来表示,大小我们随机初始化。在这里Embedding Layer其实就是神经网络的input layer,而词向量矩阵即是input layer 到 hidden layer中间的权值矩阵。

… when the input to a neural network contains symbolic categorical features (e.g. features that take one of k distinct symbols, such as words from a closed vocabulary), it is common to associate each possible feature value (i.e., each word in the vocabulary) with a d-dimensional vector for some d. These vectors are then considered parameters of the model, and are trained jointly with the other parameters.

— Page 49, Neural Network Methods in Natural Language Processing, 2017.

    牢骚一下: 神经网络本来可解释性就不高,懂了也未必能理解其中参数的意味

    这种将one-hot编码的单词映射到预定维度向量空间的方法,在处理句子时候,如果使用多层感知器模型,那么在作为模型的输入之前,需要将多个单词的向量连接起来(理解成CNN的全连接层吧),如果使用RNN来做的话,就不用这么考虑了,因为RNN本来就是以序列为输入的。

       这种学习嵌入层的方法需要大量的训练数据并且可能很慢,但是确实能学习到针对特定文本数据和NLP任务的词嵌入。

2. Word2Vec

      Word2Vec是一种能有效从文本语料库中学习到独立词嵌入的统计方法。它是由Tomas Mikolov等人2013年在谷歌开发的一个基于神经网络的词嵌入学习方法,并从那时起,开创了预训练单词嵌入的这种标准。

     这项工作涉及到语义基本的分析和单词向量化的数学探索。举个例子,在wrod2vec词向量空间中,“ 国王 ” -“ 男人 ”=“ 女王 ” -“ 女人”,这就好像算法模型学习到了 国王对于女王的意义就好比男人对于女人的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聆一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值