NLP相关知识入门总结
第一章 自然语言和单词的分布式表示
前言
NLP的简单入门以及一些自己的总结整理。
自然语言处理的目标是让计算机理解语言。我们的语言由文字构成,含义由单词构成,所以为了让计算机理解自然语言,就需要让他理解单词含义。下面将会介绍一些表示单词含义的方法
一、基于同义词词典的方法
顾名思义,同义词词典中,具有相同含义(同义词)或者含义类似的单词被归类到同一个组中。另外,有时候也会有其他粒度关系,比如上下位,整体部分的关系。像摩托车、轿车都属于机动车。WordNet是NLP领域里最著名的同义词词典,使用它就可以获得单词的近义词从而计算单词之间的相似度。如果想要使用WordNet,得先安装NLTK
模块。
当然,同义词词典也存在以下一些问题:
- 难以适应时代的变化,随着时间的推移,有许多新词会出现比如鸡你太美等等,另一方面,单词的含义、用法、褒贬属性等等也许会发生变化
- 维护成本巨大,无论是英语还是中文,单词的数量都非常大,需要巨额人力成本
- 无法展示单词间的微妙差异
所以在使用同义词词典,会存在很多问题。接下来将介绍另一种基于计数的方法。
二、基于计数的方法
在使用这个方法的时候,首先我们需要使用语料库(corpus)。此方法的目标就是从语料库中自动且高效的提取本质。举例来说,有一段语料’Learning makes me happy’,我们需要对其进行预处理,简单地说,有下列几个步骤:
- 将单词全部转为小写
- 给单词标ID,例如0:learning,1:makes等等,同理,反向的映射也需要
接下来需要将单词表示为向量,这就需要用到分布式假设
:某个单词的含义由它周围的单词形成
1.单词的分布式假设
单词的分布式表示将单词表示为固定长度的向量。这种向量的特征在于它是用密集向量表示的。密集向量的意思是,向量的各个元素(大多数是由非0实数表示的。此外,单词的上下文就是指改单词左右的词汇,将上下文的大小(即周围的单词有多少个)称为窗口大小(window size)。窗口大小为 1,上下文包含左右各 1 个单词,以此类推。有了分布式假设,接下来考虑如何基于分布式假设使用向量表示单词。
2.共现矩阵
在有了单词ID后,我们就可以使用共现矩阵来表示单词
learning | makes | me | happy | |
---|---|---|---|---|
learning | 0 | 1 | 0 | 0 |
makes | 1 | 0 | 1 | 0 |
me | 0 | 1 | 0 | 1 |
happy | 0 | 0 | 1 | 0 |
其中,表格第一行的意思是,learning的上下文只有makes,所以标记为1,第二行,makes的上下文为learning和me以此类推。这样我们就有了每个单词的向量表示。
3.向量间的相似度
有了单词的向量表示后,我们就可以评测单词间的相似度,方法有很多种比如说向量内积
或欧氏距离
以及余弦相似度
,设 x = ( x 1 , x 2 . . . , x n ) , y = ( y 1 , y 2 . . . y n ) x=(x_1,x_2...,x_n),y=(y_1,y_2...y_n) x=(x1,x2...,xn),y=(y1,y2...yn),那么他们的余弦相似度可以表示为:
s i m i l a r i t y ( x , y ) = x ∗ y ∣ ∣ x ∣ ∣ ∣ y ∣ = x 1 y 1 + . . . x n y n x 1 2 + . . . x n 2 y 1 2 + . . . + y n 2 similarity(x,y)=\frac{x*y}{||x|||y|}=\frac{x_1y_1+...x_ny_n}{ \sqrt{x^2_1+...x^2_n\sqrt{y^2_1+...+y^2_n}}} similarity(x,y)=∣∣x∣∣∣y∣x∗y=x12+...xn2y12+...+yn2x1y1+...xnyn
该表达式中,分子为向量内积,分母为向量的L2范数。求内积之前,先对向量进行正规化
。余弦相似度表示了“两个向量在多大程度上指向同一方向”。两个向量完全指向相同的方向时,余弦相似度为 1;完全指向相反的方向时,余弦相似度为 −1。在实现相关代码时,由于涉及到除法,所以遇到0向量会出错,所以需要在除法的时候加上一个非常小的值。
4.相似单词排序
有了相似度,就就可以对单词进行排序,步骤如下:
- 取出查询词的但词向量
- 分别求出查询词和其他所有单词的余弦相似度
- 降序显示
总结
至此,基于计数的基本内容介绍的差不多了,下次介绍一下改进版。