NLP入门教程系列

NLP相关知识入门总结

第一章 自然语言和单词的分布式表示



前言

NLP的简单入门以及一些自己的总结整理。
自然语言处理的目标是让计算机理解语言。我们的语言由文字构成,含义由单词构成,所以为了让计算机理解自然语言,就需要让他理解单词含义。下面将会介绍一些表示单词含义的方法


一、基于同义词词典的方法

顾名思义,同义词词典中,具有相同含义(同义词)或者含义类似的单词被归类到同一个组中。另外,有时候也会有其他粒度关系,比如上下位,整体部分的关系。像摩托车、轿车都属于机动车。WordNet是NLP领域里最著名的同义词词典,使用它就可以获得单词的近义词从而计算单词之间的相似度。如果想要使用WordNet,得先安装NLTK模块。
当然,同义词词典也存在以下一些问题:

  1. 难以适应时代的变化,随着时间的推移,有许多新词会出现比如鸡你太美等等,另一方面,单词的含义、用法、褒贬属性等等也许会发生变化
  2. 维护成本巨大,无论是英语还是中文,单词的数量都非常大,需要巨额人力成本
  3. 无法展示单词间的微妙差异
    所以在使用同义词词典,会存在很多问题。接下来将介绍另一种基于计数的方法。

二、基于计数的方法

在使用这个方法的时候,首先我们需要使用语料库(corpus)。此方法的目标就是从语料库中自动且高效的提取本质。举例来说,有一段语料’Learning makes me happy’,我们需要对其进行预处理,简单地说,有下列几个步骤:

  1. 将单词全部转为小写
  2. 给单词标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∣∣∣yxy=x12+...xn2y12+...+yn2 x1y1+...xnyn
该表达式中,分子为向量内积,分母为向量的L2范数。求内积之前,先对向量进行正规化 。余弦相似度表示了“两个向量在多大程度上指向同一方向”。两个向量完全指向相同的方向时,余弦相似度为 1;完全指向相反的方向时,余弦相似度为 −1。在实现相关代码时,由于涉及到除法,所以遇到0向量会出错,所以需要在除法的时候加上一个非常小的值。

4.相似单词排序

有了相似度,就就可以对单词进行排序,步骤如下:

  1. 取出查询词的但词向量
  2. 分别求出查询词和其他所有单词的余弦相似度
  3. 降序显示

总结

至此,基于计数的基本内容介绍的差不多了,下次介绍一下改进版。

猜你喜欢

转载自blog.csdn.net/weixin_39524208/article/details/131335502