赞
踩
NLP区别与CV的一个重要特征之一,在于模型的输入需要预先处理,从CV转行NLP的炼丹者一开始定会对模型的输入形式感到疑惑。不像CV中模型的输入就是图像的RGB值,本来就是数值型,且像素值可以认为是连续型变量,不需要再做什么处理,最多就是做一下归一化,或者翻转、裁剪等数据增强处理。而NLP输入的是文字,非数值型变量,要如何将文字更加合理地映射成某种数值型变量,是NLP要解决的一个重要问题。
在NLP中数值型变量一般是以向量的形式展现出来,本文接下来将阐述NLP中出现过的多种词向量表示方式,并阐述词向量好坏的评判标准。
文本特征的的表示方式有两大类共六种。
将词(或字)表示成一个向量,该向量的维度是词典(或字典)的长度(该词典是通过语料库生成的),该向量中,该单词索引的位置值为1,其余的位置为0。one-hot是一种极为稀疏的表示形式。
缺点:
在词袋模型中不考虑语序和词法的信息,每个单词都是相互独立的,将词语放入一个“袋子”里,统计每个单词出现的频率。
和one-hot独热编码不同,词袋模型是对文本进行编码而不是对字、词进行编码,编码的后向量是表示整篇文档的特征,而不是单一个词。向量中每个元素表示的是某个单词在文档中的出现次数,可想而知,向量的长度等于词典的长度。在sklearn库中可以直接调用CunterVectorizer实现词袋模型。
缺点
这是一种词袋模型的升级版,为的是解决词袋模型无法区分常用词(如:“是”、“的”等)和专有名词(如:“自然语言处理”、“NLP ”等)对文本的重要性的问题。跟词袋模型一样,它也是对文档编码,编码后词向量的长度就是词典的长度。
缺点
前面提到的词向量表示为离散型,另一种是分布型表示,区别两种表示的最重要区别是分布型表示需要建立统计语言模型,那么什么是统计语言模型?统计语言模型就是用来计算一个句子的概率的模型,通常是基于语料库来构建,一个句子的概率可以表示为:
p ( W ) = p ( w 1 T ) = p ( w 1 , w 2 , . . . , w T ) = p ( w 1 ) ⋅ p ( w 2 ∣ w 1 ) ⋅ p ( w 3 ∣ w 1 2 ) … p ( w T ∣ w 1 T − 1 ) p(W)=p(w_1^T)=p(w_1,w_2,...,w_T)=p(w_1) \cdot p(w_2|w_1) \cdot p(w_3|w_1^2) \dots p(w_T|w_1^{T-1}) p(W)=p(w1T)=p(w1,w2,...,wT)=p(w1)⋅p(w2∣w1)⋅p(w3∣w12)…p(wT∣w1T−1)
上面这条公式中,W表示一个句话,它是由单词 w 1 , w 2 , . . . , w T w_1,w_2,...,w_T w1,w2,...,wT按顺序排列而构成的,三个括号里的符号内容是等价的,见到 w 1 T w_1^T w1T不要往幂次想,它就是表示首单词为 w 1 w_1 w1,长度为T,末尾单词为 w T w_T wT的一句话。
统计语言模型描述的是一段词序列的概率,通俗点说,就是计算一个句子属于正常人类所说的话的概率。那么统计语言模型和词向量有何关系,这里需要提及统计语言模型的一个重要观点:词的语意可以通过一系列句子来传达,一个中心词如果能存在与某句子中而不违和,那么其上下文所出现的词就可以用来解析中心所蕴含的意义。句子违不违和应该怎么评判?就是通过统计语言模型,如果一段词序列的概率越大P(W),说明这段话越不违和。现在问题的关键就是,如何用词向量来构造统计语言模型。
n-gram 是简单地基于统计语言模型的词向量表示,词向量可以认为是共现矩阵中每一行或者每一列,但是共现矩阵是通过统计得到的,所以n-gram是完全基于词频统计的模型,没有需要学习的参数或词向量。
注意区分n-gram和词袋模型,虽然都是在计算词频,但是他们有两个区别:
同理由于TF-IDF是词袋模型的改进版,它和n-gram有一样的差异
关于n-gram的详细解释,请点击另一篇文章:
优点
缺点
两种形式,CBOW利用上下文的词预测中心词,SKIP-GRAM利用中心词预测上下文的词。
关于word2vec的详细解释,请点击另一篇文章:
优点
缺点
GloVe 是斯坦福大学Jeffrey、Richard 等提供的一种词向量表示算法,GloVe 的全称是Global Vectors for Word Representation,是一个基于全局词频统计(count-based & overall staticstics)的词表征(word representation)算法。该算法综合了global matrix factorization(全局矩阵分解) 和 local context window(局部上下文窗口) 两种方法的优点。
关于Glove的详细解释,请点击另一篇文章:
word2vec 和 glove 算法得到的词向量都是静态词向量(静态词向量会把多义词的语义进行融合,训练结束之后不会根据上下文进行改变),静态词向量无法解决多义词的问题(如:“我今天买了7斤苹果” 和 “我今天买了苹果7” 中的 苹果 就是一个多义词)。而ELMO模型进行训练的词向量可以解决多义词的问题。
该算法的精髓是:用语言模型训练神经网络,在使用word embedding 时,单词已经具备上下文信息,这个时候神经网络可以根据上下文信息对word embedding 进行调整,这样经过调整之后的word embedding 更能表达在这个上下文中的具体含义,这就解决了静态词向量无法表示多义词的问题。
词向量的评判标准可以分为内部标准(intrinsic criteria or intrinsic evaluation)和外部标准(external criteria or external evaluation)。
所谓的内部标准,就是不考虑下游任务,仅从词向量本身是否能够准确地表征语义来评判词向量的好坏,比如词向量间的距离是不是能够很好地表示语义上的联系,这里举CS224N上在讲解word2vec时很爱说的一个例子:
考虑man、woman、king三个词,我们可以计算woman和man在向量空间上的差 d i f f = w w o m a n − w m a n diff = w_{woman}-w_{man} diff=wwoman−wman,来表示woman和man间的差异性,如果king在向量空间上加上这个差, w k i n g + d i f f w_{king}+diff wking+diff,那么直觉上应该得到queue的向量 w q u e u e w_{queue} wqueue,因为男人对女人、国王对女王。我们希望最终训练出来的词向量能够很好地表示这种词之间的联系,这样的词向量才是好的词向量。
在讲解glove时也有这种类似的分析:各种词从原型变换到比较级再变换到最高级,在向量空间上如果具有相同的变换方向,那么这样的词向量是好的词向量。像上述这种评价方式也叫做类比评估(analogy evaluation),它对词向量好坏的评价仅仅在向量空间倒来倒去,因此算是一种内部标准。
另外一种内部标准的评价方式就要借用人手工的评判了:给定两个词,让多个人去给这两个词的相似性打分,然后同样是计算这两个词的向量距离,看看它跟人类打的分是不是比较吻合。
外部标准就是通过词向量在下游任务表现的优劣来评价词向量的好坏了,常见的任务有:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。