本周推文目录如下: 周三:【词向量】Hsigmoid加速词向量训练 周四:【词向量】 噪声对比估计加速词向量训练 周五:【RNN语言模型】使用RNN语言模型生成文本 词向量用一个实向量表示词语,向量的每个维都表示文本的某种潜在语法或语义特征 在词向量任务中,我们向大家展示如何使用Hierarchical-Sigmoid 和噪声对比估计(Noise Contrastive Estimation,NCE)来加速词向量的学习。 本文训练的是5-gram模型,即用每条数据的前4个词来预测第5个词。 网络结构 本文通过训练N-gram语言模型来获得词向量,具体地使用前4个词来预测当前词。 网络输入为词在字典中的id,然后查询词向量词表获取词向量,接着拼接4个词的词向量,然后接入一个全连接隐层,最后是Hsigmoid层。详细网络结构见图2: ? 图2.
一、前言 词向量、词嵌入或者称为词的分布式表示,区别于以往的独热表示,已经成为自然语言任务中的一个重要工具,对于词向量并没有直接的方法可以评价其质量,下面介绍几种间接的方法。 二、评价方法 对于词向量的评价更多还是应该考虑对实际任务的收益,脱离的实际任务很难确定A模型就一定比B好,毕竟词向量方法更多是一种工具。 1、语义相关性任务 这个任务用来评价词向量模型在两个词之间的语义相关性,如:学生与作业,中国与北京等。 上述文件代表了词语之间的语义相关性,我们利用标注文件与训练出来的词向量相似度进行比较,如:词向量之间的cos距离等,确定损失函数,便可以得到一个评价指标。 任务中最相似的词,一般使用向量间距离来进行寻找,如: queen-king+man=women 同样需要准备标记文件,根据寻找出来的词的正确率判断词向量的质量。
NLP的相关任务中,要将我们能看懂的语言交给计算机来处理,通常需要首先将语言数学化,只有这样机器才能认得出,而词向量正是将我们看懂的词进行数学化的一种方法,就是把一个词语表示成一个向量。 不能很好地刻画词语与词语间的相似性,称为“词汇鸿沟”,因为从adore和respect的词向量,编号上,我们看不出它们之间是否存在某种关系,比如为同义词,反义词等,尽管adore和respect是一对同义词 ,当然训练的预料库不一样,或者方法不一样,最终得到了某个词的向量长的也不一样。 显然,这种方法获得了 adore 和 respect 两个词的词向量,这样他俩组成了一个词向量空间,而每一个向量则为该空间中的一个点,即向量的终端点,那么adore和repect这两个点的距离,我们就可以拿来分析了 利用这个特性,可以用于机器翻译领域,通过向量空间,把一种语言转变成另一种语言,举个别人的例子,将英语中的one, two, ..., five自动转化为西班牙语,怎么做呢,首先得到这5个词的词向量,如下图所示
本周推文目录如下: 周三:【词向量】Hsigmoid加速词向量训练 周四:【词向量】 噪声对比估计加速词向量训练 周五:【RNN】使用RNN语言模型生成文本 词向量用一个实向量表示词语,向量的每个维都表示文本的某种潜在语法或语义特征 02 噪声对比估计加速词向量训练 |1. 为什么需要噪声对比估计 语言模型是许多自然语言处理任务的基础,也是获得词向量表示的一种有效方法。 |4. 网络结构 在 5-gram 神经概率语言模型详细网络结构见图1: ? 词向量层:id 表示通过词向量层作用得到连续表示的词向量表示,能够更好地体现词与词之间的语义关系。训练完成之后,词语之间的语义相似度可以使用词向量之间的距离来表示,语义越相似,距离越近。 词向量拼接层:将词向量进行串联,并将词向量首尾相接形成一个长向量。这样可以方便后面全连接层的处理。 全连接隐层:将上一层获得的长向量输入到一层隐层的神经网络,输出特征向量。
假设语料库中有V个词,那么语料库中的任一词都可以表示为一个长度为V的向量,另外,每个词都有一个unique的id,one-hot将向量中词id相应位置置为1,其他位置为0来表示这个词。 ,m为词向量的维度。 映射层和输出层,输入层即为某个单词A周围的n-1个单词的词向量。 这个时候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的输入是当前词的词向量,而输出是周围词的词向量
将词语表示为向量的技术并不是最近几年的新思想。例如向量空间模型将词表示为词典维度的高维向量。这种表示带来的问题主要包括两个方面。一方面词与词之间相互独立,无法表达词语之间的关系。 有了低维的向量后,词之间可以进行相似度计算。将词向量作为底层输入时,词向量已经被证实有助于提高很多自然语言处理任务的性能,例如命名实体识别和情感分析等。 那么怎样将词表示为低维稠密实数向量呢? 本节即将介绍的第三种词向量方法ELMo,能够学习到一个模型,该模型能够实时针对单词序列预测每个单词的词向量。因此当一个词出现在不同的上下文时,可以得到不同的词向量表示。 GloVe是一种无监督学习算法,用于获得词向量表示。对来自语料库的聚合的全局词共现统计数据进行训练,得到的词向量展示了向量空间的有趣线性子结构。 也可以将这些词向量作为再次训练的初始值,基于自己的任务微调这些词向量。如果拥有大规模语料库,也可以完成从头开始训练自己的词向量。
词向量综述 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次,彻底说清楚在自然语言处理中,词向量的由来,本质和训练。公众号专栏主要讲基本原理,知识星球讲实际的操作。 本篇主要讲述词向量的由来及本质。 最容易想到的,就是对文本进行向量化的表示。例如,根据语料库的分词结果,建立一个词典,每个词用一个向量来表示,这样就可以将文本向量化了。 最早的文本向量化方法是词袋模型,我们先来看看词袋模型。 接下来,词向量就“粉墨登场”了。 3 词向量 相比于词袋模型,词向量是一种更为有效的表征方式。怎么理解呢?词向量其实就是用一个一定维度(例如128,256维)的向量来表示词典里的词。 那么,该如何获取词向量呢?我们先来看看神经概率语言模型。 4 神经概率语言模型 一个语言模型通常构建为一句话的概率分布p(W),这里的p(W)实际上反映的是W作为一个句子出现的概率。 5 总结 上面详细介绍了词向量的来历和作用,并介绍了一种词向量的训练方法。 在实际过程中,并不是用上述神经网络来训练词向量的因为词向量是如此的重要,NLP工作者们设计了专门的网络来训练词向量。
Embedding 给我的印象是,可以将词映射成一个数值向量,而且语义相近的词,在向量空间上具有相似的位置。 以词向量为例, Embedding dict 的 Key 是词在词表中的索引位置(Index),Embedding dict 的 Value 是这个词的 dim 维的向量。 假设我们想把“北京欢迎你”编码为向量。词表一共5个词(Token)(每个字作为一个词):“北”: 0、“京”: 1、“欢”: 2、“迎”: 3、“你”: 4。 embedding_dim 为词向量维度。 预训练好的词向量上可以使用 Cosine 等方式,获得距离和相似度,语义相似的词有相似的词向量表示。
本篇文章主要介绍传统词向量的生成算法,在Word2Vec算法的基础上,词向量生成算法在推荐系统上的衍生。 传统词向量生成算法EmbeddingWord2Vec传统的编码方式:one-hot编码,不同单词[1, 0, 0]和[0, 1, 0]之间的余弦相似度为0。 因此,Word2Vec希望能够通过训练得到一个新的词向量表达方式,从而丰富向量的语义信息。主要目标如图所示,从一个稀疏的one-hot向量通过训练得到一个丰富稠密的新向量。 学习参考链接:【词向量表示】Word2Vec原理及实现-CSDN博客Item2Vec狭义上:一种物品Embedding方法,是对Word2Vec算法的延申,Item2Vec方法是将物品视为“单词”,而一个行为 算法实现生成物品关系图:利用物品的相同特征生成基于内容的知识图谱,通过知识图谱生成的物品向量被称为补充向量;对于不同特征的向量,模型通过加权求和的方式得到最后的Embedding输出,其中权重参数为$e
目录 1、语言表示 1.1、分布假说 1.2、语言模型 2、词向量表示 2.1、词向量表示之one-hot 2.2、词带模型之 (Bag of Words) 2.3、词的分布式表示 2.3.1 基于矩阵的分布式表示 2、词向量表示 2.1、词向量表示之one-hot 1、 构建语料库 2、构建id2word的词典 3、词向量表示 例如构建的词典为: {“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too 将左奇异向量和右奇异向量都取后2维(之前是3维的矩阵),投影到一个平面上,可以得到(如果对左奇异向量和右奇异向量单独投影的话也就代表相似的文档和相似的词): 在图上,每一个红色的点,都表示一个词,每一个蓝色的点 该结构的学习中,各层的规模: 输入层:n为上下文词数,一般不超过5,m为词向量维度,10~10^3; 隐含层:n_hidden,用户指定,一般为10^2量级; 输出层:词表大小V,10^4~10^
深度学习为自然语言处理带来的最令人兴奋的突破是词向量(word embedding)技术。词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。 在自然语言处理应用中,词向量作为深度学习模型的特征进行输入。因此,最终模型的效果很大程度上取决于词向量的效果。 接下来,将介绍词向量技术,并且分享我们使用词向量的一些经验。 二、如何生成词向量 本小节来简单介绍词向量的生成技术。生成词向量的方法有很多,这些方法都依照一个思想:任一词的含义可以用它的周边词来表示。 (3)大的上下文窗口学到的词向量更反映主题信息,而小的上下文窗口学到的词向量更反映词的功能和上下文语义信息。 (4)语料的纯度越高(杂质少),词向量效果越好。 在对“苹果” 进行训练时,将会对其对应的词向量向两个方向拉伸,进而造成词向量歧义。 词向量的歧义将会对词向量的应用效果产生影响。
因此,Word2Vec希望能够通过训练得到一个新的词向量表达方式,从而丰富向量的语义信息。主要目标如图所示,从一个稀疏的one-hot向量通过训练得到一个丰富稠密的新向量。 How achieveword2vec通过神经网络模型训练新的词向量表达模型中参数的定义:one-hot:1, 7 表示一共有七个单词;Embedding:表示输入层到隐藏层的权重矩阵,是从one-hot 与目标标签做损失进行模型训练;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)之间的近似关系,论文的作者提出以下的公式可以近似地表达两者之间的关系: ? GloVe与LSA、Word2Vec的比较 LSA(Latent Semantic Analysis)是一种比较早的count-based的词向量表征工具,它也是基于co-occurance matrix 4. 代码实现 ?
这种方法把每个词顺序编号,但每个词就变成一个很长的向量,向量的维度就是词表的大小,只有对应位置上的数字为1,其他都为0。这种方式的弊病是很显然的,就是无法捕捉到词与词之间的相似度,也称为“语义鸿沟“。 词向量模型 词向量模型是基于假设:衡量词之间的相似性,在于其相邻词汇是否相识,这是基于语言学的“距离相似性“原理。 word2vec通过训练,可以把对文本内容的处理简化为k维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度,因此word2vec输出的词向量是一个基础性的工作,比如聚类、同义词、 此外cbow模型,使用上下文各词的词向量的平均值替代nnlm模型各个拼接的词向量。 整体流程: 首先明确输入是周围词的词向量,而输出则是当前词的词向量,也就是通过上下文来预测当前的词。 其运算流程如下: 随机生成一个所有单词的词向量矩阵,每一个行对应一个单词的向量 对于某一个单词(中心词),从矩阵中提取其周边单词的词向量 求周边单词的的词向量的均值向量 在该均值向量上使用logistic
经过张量乘法,我们就得到了一个4×128的张量,从而完成了把单词表示成向量的目的。 如何让向量具有语义信息 2013年,Mikolov提出的经典word2vec算法就是通过上下文来学习语义信息。 如 图4 CBOW所示,把“Spiked”作为中心词,把“Pineapples、are、and、yellow”作为中心词的上下文。 在学习过程中,使用上下文的词向量推理中心词,这样中心词的语义就被传递到上下文的词向量中,如“Spiked → pineapple”,从而达到学习语义信息的目的。 如 图4 Skip-gram所示,把“Spiked”作为中心词,把“Pineapples、are、and、yellow”作为中心词的上下文。 4. berlin 5. seoul ...
原文: On word embeddings 作者: Sebastian Ruder 译者: KK4SBB 审校:王艺 责编: 王艺,关注人工智能,投稿请联系 wangyi@csdn.net 或公众号后台留言 每个词语对应一个输入词向量vw(即Embedding Layer的向量),维度是d,输出一个词向量v’w(另一个词向量)。 Collobert和Weston 4 (C&W来自于名字的首字母)在2008年发布的论文提到,当训练数据足够大时,训练得到的词向量自然能够包含相互之间句法和语义的信息,并且对下游任务的性能有提升。 于是,Mikolov利用目标词语wt前后各n个词语来进行预测,如图4所示。他们将此方法称为是连续词袋模型,因为用到了连续的表征,而与前后词语的位置顺序无关。 图4 连续词袋模型(Mikolov等,2013) CBOW的目标函数与语言模型的仅有细微差别: 差别在于CBOW模型每一步接受到目标词语wt前后各n个词语,而不是给模型输入前n个词语。
如果可以的话,那么这样的词向量就与共现矩阵有着一致性,可以体现词间的关系。 3. 设计词向量函数 想要表达共现概率比,这里涉及到的有三个词即 i , j , k i,j,k i,j,k,它们对应的词向量我用 v i 、 v j 、 v ~ k v_i、v_j、\widetilde 于是乎: 于是,glove模型的学习策略就是通过将词对儿的词向量经过内积操作和平移变换去趋于词对儿共现次数的对数值,这是一个回归问题。 4. 论文中还提到一个词最终的glove词向量用的是训练后的两个词向量之和,关于这一点论文中有解释,如果感兴趣的话最好阅读一下原论文。
AI Lab开源大规模高质量中文词向量数据,800万中文词随你用,质量非常高,就是一个词向量.txt文件都有16G之多,太夸张了。。 : 由于采用了更大规模的训练数据和更好的训练算法,所生成的词向量能够更好地表达词之间的语义关系。 DSG算法基于广泛采用的词向量训练算法Skip-Gram (SG),在文本窗口中词对共现关系的基础上,额外考虑了词对的相对位置,以提高词向量语义表示的准确性。 每个词维度为4. ---- 2 未知词、短语向量补齐与域内相似词搜索 这边未知词语、短语的补齐手法是参考FastText的用法:极简使用︱Gemsim-FastText 词向量训练以及OOV(out-of-word)问题有效解决