本周推文目录如下: 周三:【词向量】Hsigmoid加速词向量训练 周四:【词向量】 噪声对比估计加速词向量训练 周五:【RNN语言模型】使用RNN语言模型生成文本 词向量用一个实向量表示词语,向量的每个维都表示文本的某种潜在语法或语义特征 广义的,词向量也可以应用于普通离散特征。词向量的学习通常都是一个无监督的学习过程,因此,可以充分利用海量的无标记数据以捕获特征之间的关系,也可以有效地解决特征稀疏、标签数据缺失、数据噪声等问题。 在词向量任务中,我们向大家展示如何使用Hierarchical-Sigmoid 和噪声对比估计(Noise Contrastive Estimation,NCE)来加速词向量的学习。 例如我们一共有4个类别分别是0、1、2、3,softmax会分别计算4个类别的得分,然后归一化得到概率。 网络输入为词在字典中的id,然后查询词向量词表获取词向量,接着拼接4个词的词向量,然后接入一个全连接隐层,最后是Hsigmoid层。详细网络结构见图2: ? 图2.
一、前言 词向量、词嵌入或者称为词的分布式表示,区别于以往的独热表示,已经成为自然语言任务中的一个重要工具,对于词向量并没有直接的方法可以评价其质量,下面介绍几种间接的方法。 二、评价方法 对于词向量的评价更多还是应该考虑对实际任务的收益,脱离的实际任务很难确定A模型就一定比B好,毕竟词向量方法更多是一种工具。 任务中最相似的词,一般使用向量间距离来进行寻找,如: queen-king+man=women 同样需要准备标记文件,根据寻找出来的词的正确率判断词向量的质量。 3、文本分类任务 这个任务利用词向量构成文本向量,一般采用求和平均的方式,之后利用构成的文本向量进行文本分类,根据分类的准备率等指标衡量词向量的质量。 3、向量维度 向量维度太小难以表现出语义的复杂度,一般更大的维度的向量表现能力更强,综合之下,50维的向量可以胜任很多任务。
NLP的相关任务中,要将我们能看懂的语言交给计算机来处理,通常需要首先将语言数学化,只有这样机器才能认得出,而词向量正是将我们看懂的词进行数学化的一种方法,就是把一个词语表示成一个向量。 不能很好地刻画词语与词语间的相似性,称为“词汇鸿沟”,因为从adore和respect的词向量,编号上,我们看不出它们之间是否存在某种关系,比如为同义词,反义词等,尽管adore和respect是一对同义词 ,当然训练的预料库不一样,或者方法不一样,最终得到了某个词的向量长的也不一样。 显然,这种方法获得了 adore 和 respect 两个词的词向量,这样他俩组成了一个词向量空间,而每一个向量则为该空间中的一个点,即向量的终端点,那么adore和repect这两个点的距离,我们就可以拿来分析了 利用这个特性,可以用于机器翻译领域,通过向量空间,把一种语言转变成另一种语言,举个别人的例子,将英语中的one, two, ..., five自动转化为西班牙语,怎么做呢,首先得到这5个词的词向量,如下图所示
本周推文目录如下: 周三:【词向量】Hsigmoid加速词向量训练 周四:【词向量】 噪声对比估计加速词向量训练 周五:【RNN】使用RNN语言模型生成文本 词向量用一个实向量表示词语,向量的每个维都表示文本的某种潜在语法或语义特征 02 噪声对比估计加速词向量训练 |1. 为什么需要噪声对比估计 语言模型是许多自然语言处理任务的基础,也是获得词向量表示的一种有效方法。 词向量层:id 表示通过词向量层作用得到连续表示的词向量表示,能够更好地体现词与词之间的语义关系。训练完成之后,词语之间的语义相似度可以使用词向量之间的距离来表示,语义越相似,距离越近。 词向量拼接层:将词向量进行串联,并将词向量首尾相接形成一个长向量。这样可以方便后面全连接层的处理。 全连接隐层:将上一层获得的长向量输入到一层隐层的神经网络,输出特征向量。 (3)预测的输出格式如下: 0.6734 their may want to move 每一行是一条预测结果,内部以“t”分隔,共计3列: - 第一列:下一个词的概率。
假设语料库中有V个词,那么语料库中的任一词都可以表示为一个长度为V的向量,另外,每个词都有一个unique的id,one-hot将向量中词id相应位置置为1,其他位置为0来表示这个词。 ,m为词向量的维度。 这个时候R=2,相对应的,那4个单词的词向量记为v(w(t-2)),v(w(t-1)),v(w(t+1)),v(w(t+2))。从输入层到映射层比较简单,将那n-1个词向量相加即可。 Skip-gram(Continuous Skip-gram Model) Skip-gram也是word2vec模型重要概念之一,与COBW不同是,Skip-gram的输入是当前词的词向量,而输出是周围词的词向量 2.man-woman=king-queen的方式 3.负采样的方式
有了低维的向量后,词之间可以进行相似度计算。将词向量作为底层输入时,词向量已经被证实有助于提高很多自然语言处理任务的性能,例如命名实体识别和情感分析等。 那么怎样将词表示为低维稠密实数向量呢? 本节即将介绍的第三种词向量方法ELMo,能够学习到一个模型,该模型能够实时针对单词序列预测每个单词的词向量。因此当一个词出现在不同的上下文时,可以得到不同的词向量表示。 ELMo模型[3]可以从官网下载并直接应用于给定序列的词向量生成。 我们可以直接将这些预训练的词向量,用于后续的任务,例如文本分类和情感分析。 也可以将这些词向量作为再次训练的初始值,基于自己的任务微调这些词向量。如果拥有大规模语料库,也可以完成从头开始训练自己的词向量。 ] GloVe: https://nlp.stanford.edu/projects/glove/ [3] ELMo模型: https://allenai.org/allennlp/software/elmo
词向量综述 one-hot by neighbor 基于全文档的词向量 基于window的词向量 SVD Skip-Gram 结构 输入输出 学习算法 优化角度 改进 word pair sub-sampling 过时性:新的词不可以及时更新 主观性 需要人力去创造词典集合 较难计算词之间的相似度 具体地,词在计算机中是以[0,1,0,0…]的向量表示的,该词对应的index的值为1,其他为0。 基于全文档的词向量 word count matrix tf-idf matrix LSA 基于window的词向量 一般来说,基于window的词向量有以下特点: window长为5-10 对称性,不区分左边右边 SVD 上面的co-occurrence matrix词向量的维度是词汇库的维度,向量太长。可以通过SVD降维得到维度较低的词向量。 SVD的缺点如下: 计算复杂度太高 新的词或者文档来的时候还要重新计算 Skip-Gram 与其计算co-occurrence matrix,不如直接学习词向量。
计划用3-4次,彻底说清楚在自然语言处理中,词向量的由来,本质和训练。公众号专栏主要讲基本原理,知识星球讲实际的操作。 本篇主要讲述词向量的由来及本质。 最容易想到的,就是对文本进行向量化的表示。例如,根据语料库的分词结果,建立一个词典,每个词用一个向量来表示,这样就可以将文本向量化了。 最早的文本向量化方法是词袋模型,我们先来看看词袋模型。 2 词袋模型 要讲词向量,我们首先不得不说的就是词袋模型。词袋模型是把文本看成是由一袋一袋的词构成的。 接下来,词向量就“粉墨登场”了。 3 词向量 相比于词袋模型,词向量是一种更为有效的表征方式。怎么理解呢?词向量其实就是用一个一定维度(例如128,256维)的向量来表示词典里的词。 5 总结 上面详细介绍了词向量的来历和作用,并介绍了一种词向量的训练方法。 在实际过程中,并不是用上述神经网络来训练词向量的因为词向量是如此的重要,NLP工作者们设计了专门的网络来训练词向量。
Embedding 给我的印象是,可以将词映射成一个数值向量,而且语义相近的词,在向量空间上具有相似的位置。 以词向量为例, Embedding dict 的 Key 是词在词表中的索引位置(Index),Embedding dict 的 Value 是这个词的 dim 维的向量。 假设我们想把“北京欢迎你”编码为向量。词表一共5个词(Token)(每个字作为一个词):“北”: 0、“京”: 1、“欢”: 2、“迎”: 3、“你”: 4。 在当前这个例子中,某个词被映射为3维的向量,经过 Embedding 层之后,输出是 Index 为1的 Token 的3维词向量。 Embedding 里面是什么? 预训练好的词向量上可以使用 Cosine 等方式,获得距离和相似度,语义相似的词有相似的词向量表示。
本篇文章主要介绍传统词向量的生成算法,在Word2Vec算法的基础上,词向量生成算法在推荐系统上的衍生。 传统词向量生成算法EmbeddingWord2Vec传统的编码方式:one-hot编码,不同单词[1, 0, 0]和[0, 1, 0]之间的余弦相似度为0。 因此,Word2Vec希望能够通过训练得到一个新的词向量表达方式,从而丰富向量的语义信息。主要目标如图所示,从一个稀疏的one-hot向量通过训练得到一个丰富稠密的新向量。 学习参考链接:【词向量表示】Word2Vec原理及实现-CSDN博客Item2Vec狭义上:一种物品Embedding方法,是对Word2Vec算法的延申,Item2Vec方法是将物品视为“单词”,而一个行为 算法实现生成物品关系图:利用物品的相同特征生成基于内容的知识图谱,通过知识图谱生成的物品向量被称为补充向量;对于不同特征的向量,模型通过加权求和的方式得到最后的Embedding输出,其中权重参数为$e
2.3.2 基于聚类的分布式表示 2.4基于神经网络的分布式表示 2.4.1、NNLM 2.4.2、Word2Vec 2.4.3、fasttext 3、静态词向量表示方法优缺点 ---- 1、语言表示 2、词向量表示 2.1、词向量表示之one-hot 1、 构建语料库 2、构建id2word的词典 3、词向量表示 例如构建的词典为: {“John”: 将左奇异向量和右奇异向量都取后2维(之前是3维的矩阵),投影到一个平面上,可以得到(如果对左奇异向量和右奇异向量单独投影的话也就代表相似的文档和相似的词): 在图上,每一个红色的点,都表示一个词,每一个蓝色的点 该结构的学习中,各层的规模: 输入层:n为上下文词数,一般不超过5,m为词向量维度,10~10^3; 隐含层:n_hidden,用户指定,一般为10^2量级; 输出层:词表大小V,10^4~10^ 3、静态词向量表示方法优缺点 one-hot;tfidf,bow: 优点:解释性强 缺点:维度大;词与词之间是孤立的,无法表示词与词之间的语义信息!
深度学习为自然语言处理带来的最令人兴奋的突破是词向量(word embedding)技术。词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。 在自然语言处理应用中,词向量作为深度学习模型的特征进行输入。因此,最终模型的效果很大程度上取决于词向量的效果。 接下来,将介绍词向量技术,并且分享我们使用词向量的一些经验。 二、如何生成词向量 本小节来简单介绍词向量的生成技术。生成词向量的方法有很多,这些方法都依照一个思想:任一词的含义可以用它的周边词来表示。 (3)大的上下文窗口学到的词向量更反映主题信息,而小的上下文窗口学到的词向量更反映词的功能和上下文语义信息。 (4)语料的纯度越高(杂质少),词向量效果越好。 在对“苹果” 进行训练时,将会对其对应的词向量向两个方向拉伸,进而造成词向量歧义。 词向量的歧义将会对词向量的应用效果产生影响。
因此,Word2Vec希望能够通过训练得到一个新的词向量表达方式,从而丰富向量的语义信息。主要目标如图所示,从一个稀疏的one-hot向量通过训练得到一个丰富稠密的新向量。 How achieveword2vec通过神经网络模型训练新的词向量表达模型中参数的定义:one-hot:1, 7 表示一共有七个单词;Embedding:表示输入层到隐藏层的权重矩阵,是从one-hot 向量到Embedding向量的关键,7, 3表示训练完成的每一个embedding向量维度为3;WeightLogits:表示隐藏层到输出层的权重矩阵,是模型损失计算的关键;Logits:表示最后每个单词输出的概率 Lookup table语料库十分巨大,每个单词都采用one-hot输入训练会大大增加存储和计算开销,因此,在输入的过程,仅仅输入单词的索引值,例如在上述例子中,直接采用索引4进行输入,同样也可以得到相同的词向量 embedding_dim) logits = self.linear(embedded) return logits Negative sameple提出动机:每次模型训练都需要计算所有词向量的损失
#!/usr/bin/env python # -*- coding: utf-8 -*- """ ---------------------------------- Version : ??
GloVe的实现步骤 2.1 构建共现矩阵 2.2 词向量和共现矩阵的近似关系 2.3 构造损失函数 2.4 训练GloVe模型 3. GloVe与LSA、Word2Vec的比较 4. 共现矩阵顾名思义就是共同出现的意思,词文档的共现矩阵主要用于发现主题(topic),用于主题模型,如LSA。 2.2 词向量和共现矩阵的近似关系 构建词向量(Word Vector)和共现矩阵(Co-ocurrence Matrix)之间的近似关系,论文的作者提出以下的公式可以近似地表达两者之间的关系: ? 3. GloVe与LSA、Word2Vec的比较 LSA(Latent Semantic Analysis)是一种比较早的count-based的词向量表征工具,它也是基于co-occurance matrix
此外cbow模型,使用上下文各词的词向量的平均值替代nnlm模型各个拼接的词向量。 整体流程: 首先明确输入是周围词的词向量,而输出则是当前词的词向量,也就是通过上下文来预测当前的词。 其运算流程如下: 随机生成一个所有单词的词向量矩阵,每一个行对应一个单词的向量 对于某一个单词(中心词),从矩阵中提取其周边单词的词向量 求周边单词的的词向量的均值向量 在该均值向量上使用logistic 其中主要修改有3个部分:输入层,隐藏层,输出层。其中输入层是存储词嵌入的层,隐藏层是做语义重组的层,输出层是根据目标构造输出语义的层。 以NNLM作为对比对象。 3.ELMo–动态词向量 ELMo官网:https://allennlp.org/elmo 艾伦研究所开发,并于6月初在NAACL 2018年发布ELMo(深度语境化的单词表示)。 先看encoder,单独看一个block,输入一行句子,先经过一个Self-Attention,Self-Attention首先是对每个Token的embedding通过3个不同的矩阵映射成3个向量,Query
在自然语言处理任务中,词向量(Word Embedding)是表示自然语言里单词的一种方法,即把每个词都表示为一个N维空间内的点,即一个高维空间内的向量。 在学习过程中,使用上下文的词向量推理中心词,这样中心词的语义就被传递到上下文的词向量中,如“Spiked → pineapple”,从而达到学习语义信息的目的。 最终,1×V的向量代表了使用上下文去推理中心词,每个候选词的打分,再经过softmax函数的归一化,即得到了对中心词的推理概率: skip-gram 如 上图 所示,Skip-gram是一个具有3层结构的神经网络 在实现的过程中,通常会让模型接收3个tensor输入: 代表中心词的tensor:假设我们称之为center_words V,一般来说,这个tensor是一个形状为[batch_size, vocab_size 我们会发现,word2vec模型可以自动学习出一些同义词关系,如: Top 5 words closest to "beijing" are: 1. newyork 2. paris 3. tokyo
为了便于比较,我们约定以下符号:假设训练文本集含有T个文本w1, w2, w3 … , wt,词表V的大小是|V|。 Intermediate Layer(s):一层或多层,生成输入层的中间表示,比如,用一个全连接层对前n个词语的词向量的拼接组合进行非线性变换; 3. 他们的模型结构如图3所示,不包括排序部分,与Bengio的模型类似。 图3 C&W模型结构(Collobert等,2011) 此模型生成的词向量已经包含了词语之间的许多关联,比如,国家名称的词向量被聚到了一起,语法相似的词语在向量空间的位置也很接近。 在Mikolov的第一篇论文中[2],他们提出了比之前模型计算量更小的两种模型结构来计算词向量。在第二篇论文中[3],他们在此结构的基础上添加新策略,进一步提升了训练速度和准确率。
因为作者发现用共现概率比也可以很好的体现3个单词间的关联(因为共现概率比符合常理),所以glove作者就大胆猜想,如果能将3个单词的词向量经过某种计算可以表达共现概率比就好了(glove思想)。 如果可以的话,那么这样的词向量就与共现矩阵有着一致性,可以体现词间的关系。 3. 设计词向量函数 想要表达共现概率比,这里涉及到的有三个词即 i , j , k i,j,k i,j,k,它们对应的词向量我用 v i 、 v j 、 v ~ k v_i、v_j、\widetilde 于是乎: 于是,glove模型的学习策略就是通过将词对儿的词向量经过内积操作和平移变换去趋于词对儿共现次数的对数值,这是一个回归问题。 论文中还提到一个词最终的glove词向量用的是训练后的两个词向量之和,关于这一点论文中有解释,如果感兴趣的话最好阅读一下原论文。
AI Lab开源大规模高质量中文词向量数据,800万中文词随你用,质量非常高,就是一个词向量.txt文件都有16G之多,太夸张了。。 : 由于采用了更大规模的训练数据和更好的训练算法,所生成的词向量能够更好地表达词之间的语义关系。 DSG算法基于广泛采用的词向量训练算法Skip-Gram (SG),在文本窗口中词对共现关系的基础上,额外考虑了词对的相对位置,以提高词向量语义表示的准确性。 ---- 2 未知词、短语向量补齐与域内相似词搜索 这边未知词语、短语的补齐手法是参考FastText的用法:极简使用︱Gemsim-FastText 词向量训练以及OOV(out-of-word)问题有效解决 ',wv_from_text,min_n = 1, max_n = 3) # 词向量获取 wv_from_text.most_similar(positive=[vec], topn=10) #