《深度学习进阶 自然语言处理》第二章:自然语言和单词的分布式表示


之前文章链接:

开篇介绍:《深度学习进阶 自然语言处理》书籍介绍
第一章:《深度学习进阶 自然语言处理》第一章:神经网络的复习


本章开始介绍自然语言处理相关的知识。自然语言处理的根本任务是让计算机理解我们的语言,我们在此先介绍深度学习出现之前的古典方法,是如何实现自然语言处理的。

2.1 什么是自然语言处理

自然语言(natural language)指的是我们平常使用的语言(比如汉语或英语),自然语言处理(Natural Language Processing, NLP)就是一种能够让计算机理解人类语言的技术。相较于机械的、缺乏活力的编程语言,自然语言是意思和形式灵活变化的活着的语言。当我们能通过方法使计算机能够理解自然语言,计算机就能完成更多对人们有用的事情,比如搜索引擎、机器翻译、问答系统、情感分析和自动文本摘要等。

2.1.1 单词含义

我们的语言由文字构成,语言的含义是由单词(字)构成,也就是说单词是含义最小的单位。计算机要理解自然语言,它得从理解单词含义开始。本章将介绍人工整理好的同义词词典的方法,并对基于计数的方法进行说明。下一章会讨论利用神经网络的基于推理的方法。

2.2 同义词词典

回顾NLP历史,人们曾多次尝试类似《新华字典》那样人工一个词一个词定义单词含义。但是被广泛使用的是一种被称为同义词词典(thesaurus)的词典,即同义词或近义词被归到同一个组中,词典中有时会定义单词之间的更细粒度的关系,比如“上位 — 下位”关系、“整体 — 部分”关系。如下图所示,利用图结构定义各个单词之间的关系。

img

通过对所有单词创建近义词集合,并用图表示单词之间的关系,可以定义单词之间的联系。利用这个“单词网络”便可以间接地将单词含义教给计算机。

2.2.1 WordNet

在NLP领域,最著名的同义词词典是WordNet,它是普林斯顿大学的心理学家,语言学家和计算机工程师于1985年开始联合设计的同义词词典。使用WordNet,可以获得单词的近义词,或者利用单词网络计算单词之间的相似度。感兴趣的同学可以查一下相关资料,这里不做细述。

2.2.2 同义词词典的问题

WordNet等同义词词典的构建是由人工标记完成,可以让计算机理解单词含义,但也存在一些较大的缺陷。下面是同义词词典的主要问题:

  • 难以顺应时代变化
  • 人力成本高
  • 无法表示单词的微妙差异

2.3 基于计数的方法

计数方法离不开语料库(corpus),语料库就是大量的文本数据,基于计数的方法就是从这些文本语料中自动且高效地提取本质。

2.3.1 语料库的预处理

我们将使用python对一个非常小的文本数据(一个句子)进行预处理,这里的预处理是指将文本分割为单词(分词),并将分割后的单词列表转化为单词ID列表。

def preprocess(text):
  # 将所有字母转小写,可以将开头单词转常规单词处理
  text = text.lower()
  text = text.replace(".", " .")
  words = text.split(" ")

  word_to_id = {}
  id_to_word = {}
  for word in words:
    if word not in word_to_id:
      new_id = len(word_to_id)
      word_to_id[word] = new_id
      id_to_word[new_id] = word

  corpus = np.array([word_to_id[w] for w in words])

  return corpus, word_to_id, id_to_word

上面的函数preprocess是对一个英文句子的简单预处理,corpus是单词ID列表,word_to_id是单词到单词ID的字典,id_to_word是单词ID到单词的字典。本节语料库的处理是为了后面基于计数的方法将单词表示为向量,提取单词含义。

2.3.2 单词的分布式表示

以颜色的命名为例,一种颜色可以有一个特定的名字,比如嫣红、鹅黄、靛青,也可以通过RGB三原色分别存在多少来表示。前者有多少种颜色就需要多少不同的名字,后者将颜色表示三维向量(更能准确地指定颜色)。类似颜色的向量表示方法运用到单词上,将其表示为固定长度的向量(这里的向量是稠密向量)称为分布式表示。

2.3.3 分布式假设

用向量表示单词的研究几乎都基于一个简单的想法,即“某个单词的含义由它周围的单词形成”,这就是分布式假设(distributional hypothesis)。分布式假设的理念是单词本身没有含义,由它所在的上下文(周围单词)形成。

img

窗口大小为2的上下文例子。关注goodbye时,将其左右各2个单词作为上下文

2.3.4 共现矩阵

基于计数的方法,是指在关注某个单词的情况下,对它周围(这里的“周围”大小由“窗口”大小来定)出现的什么单词进行计数。

以下图为例:

img

用表格表示单词say的上下文包含的单词的频数,say可以表示为向量[1, 0, 1, 0, 1, 1, 0]。

"you say goodbye and i say hello"这句话所有单词的上下文词频统计,以共现矩阵的方式呈现。如下图:

img

当语料库足够大时,每个单词都有对应的向量表示,通过计算余弦相似度就可以测量单词向量间的相似度。假如我们想查询某个单词A的相似单词B,首先取出单词A的向量,分别求得该向量与其他所有单词向量的余弦相似度,按降序排序取靠前的单词。

2.4 基于计数方法的改进

上一节用共现矩阵表示两个单词同时出现的次数,这种原始的方式在遇到高频词(比如冠词the)就不好用了。更好的方式是使用点互信息(Pointwise Mutual Information, PMI)这一指标,定义如下:

img

P(x)表示x发生的概率,P(y)表示y发生的概率,P(x, y)表示x和y同时发生的概率,PMI的值越高,相关性越强。这里有个问题是,当两个单词的共现次数是0时,PMI= -∞,实际上我们会使用下述的正的点互信息(Positive PMI, PPMI)。

img

PPMI矩阵存在一个很大的问题是,随着词汇量的增加,各个单词向量的维度也会增加,而且很多元素是0,很稀疏。这表明向量中的绝大多数元素并不重要,而且这样的向量也容易受到噪声影响,稳定性差。常见的解决方式是向量降维。

向量降维,是在尽量保留“重要信息”的基础上减少向量维度。从高维往低维降低时,要考虑到数据分布的广度。

总结

为了让计算机理解单词的含义,本章介绍了两个方法:基于同义词词典的方法和基于计数的方法。前者耗费人力,表现力有限制。后者首先创建单词的共现矩阵,转化为PPMI矩阵,在降维提高稳健性,获得每个单词的分布式表示。下一章我们将介绍基于神经网络的方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值