文章目录
- 一、基础与应用
- 二、词表示与语言模型
-
- 词表示
-
- 方案一:用一组的相关词来表示当前词
- [方案二:one-hot representation,将每一个词表示成一个独立的符号](#方案二:one-hot representation,将每一个词表示成一个独立的符号)
- [方案三:上下文表示法(contextual representation)](#方案三:上下文表示法(contextual representation))
- [方案四:word embedding](#方案四:word embedding)
- 语言模型
-
- 基本假设:一个未来的词,只会受到它前面的词的影响
- [N-gram Model](#N-gram Model)
- [Neural Language Model](#Neural Language Model)
- 参考
一、基础与应用
简单介绍
自然语言处理 (Natural Language Processing,简称NLP)是计算机科学与人工智能领域的一个重要研究方向,目的是让计算机能够理解、解析、生成和处理人类的自然语言。
自然语言处理有着非常重要的意义,其一,我们认为人类语言是人类智能一个非常重要的体现;其二,NLP 是人工智能能够通过图灵测试的一个非常重要的工具。其中图灵测试 (最开始的名字是 imitation game)是判断机器是否智能的一个非常重要的手段。它的基本思想是,如果机器的回答能够让人类无法判断是否是机器回答的,那么可以认为机器具备了智能。
2011年,IBM 开发的 Watson DeepQA system,参加了一个非常有名的在线问答的电视节目(类似于一站到底),取得了第一名!这是 NLP 一个重要的应用。
基本任务
- 词性标注(part of speech tagging) :为每个词语标注其词性,如名词、动词、形容词等
- 命名实体的识别(Named entity recognition) :识别文本中的实体,如人名、地名、组织名等
- 共指消解(Co-reference) :知道某个代词和前面哪个实体是指向的现实世界中的同一个实体
- Basic dependencies :分析句子中成分互相之间的依存关系。比如,这句话的主语什么,谓语是什么,宾语是什么,它们之间的修饰关系是什么
- 以上四点是 NLP 非常基础的任务,除了这些,还有一些其他与语言相关的任务。比如对于中文,由于词与词没有空格,因此还需要有一个中文的自动分词的任务,即将一句话中词与词之间的空格标注出来。
重要应用
- 搜索引擎和在线广告:衡量用户的 query 与所有 document 的语义相似度,将用户和所需要的信息进行很好的匹配,即 text matching 的一个应用
- Knowledge Graph:如给定一个用户的查询,如何去匹配或寻找最相关的实体,以及相关知识;如何从大规模文本中挖掘,构建大的知识图谱;如何获取三元组结构化知识等需要 NLP 技术。
- Machine Reading:让自然语言处理的技术自动地去阅读文本的内容,然后来挖掘出相关的一些结构化知识
- 人机对话:智能音箱、智能助手等
- 机器翻译:将其中一个语言中的一句话翻译成另外一个语言中的一句话
- 情感分析和意见挖掘:与社会科学交叉,用语言作为一个视角,分析我们人类的心理,帮助做出对人类社会更深刻更深层次的研究工作
二、词表示与语言模型
词表示
词表示 是将自然语言表示中最基本的语言单位,即词,转换成机器可以理解的意思。主要用于两点:
一是完成词与词之间的相似度计算
二是发现词与词之间的语义关系
那具体怎么进行词表示呢?
方案一:用一组的相关词来表示当前词
比如用一些同义词、反义词来表示 "good",用一些上位词(具有更广义或更普遍含义的词语,如 "动物" 是 "狗" 的上位词)来表示 "NLP" 等
这种方案的不足之处在于:
- 词之间有一些比较细微的差异没有办法被表示
- 当这些词出现一些新的含义的时候,没有办法很好地去进行处理
- 存在主观性问题,即它受限于你的词典的标注
- 存在数据稀疏的问题,跟所有的词表来相比的话,它总是比较少的
- 需要大量的人工去构建和维护词典
方案二:one-hot representation,将每一个词表示成一个独立的符号
这种方案是计算机中最常用的表示,任何一个词都会用一个和词表一样长的向量表示
这种表示方法的缺点是:任意两个词都是相互正交的。不利于考虑相似性。
方案三:上下文表示法(contextual representation)
一个词的词义实际上跟它经常出现在的那个位置的上下文有密切的关系,因此可以用上下文中的一些词来表示某个词。如下图中可以用 shining、cold、night 等来表示 stars。
我们依然可以用一个向量来表示一个词,这个向量的长度也是跟词表一样,但是里面的每一维表示的是这个词的上下文到底它出现了多少次,或者是出现的重要性怎么样。如此一来,每一个词都可以用它上下文的出现的频度或者重要性来表示,可以得到关于每一个词的一个稠密的向量,从而在这个空间里面,可以利用这个稠密的向量去计算出两个词之间的相似度。
这种方案的局限性是:当词表变得越来越大时,存储的需求就会变得特别大;而且对于那些出现频度特别少的词,它的向量很稀疏,这就会导致这个词的表示会变得效果没有那么好
方案四:word embedding
提出了一种分布式表示,即要建立起一个低维的一个稠密的向量空间 ,尝试着将每一个词都学到这个空间里面,用这个空间里面的某一个位置所对应的那个向量来表示这个词。这样一来,我们可以去计算词与词之间的相似度等特点。
这种低维的向量可以利用大规模的数据自动去学习,其中一个代表性工作是Word2Vec
语言模型
语言模型有两个主要工作:
一是计算联合概率:一个序列的词成为一句话的概率
二是计算条件概率:根据前面的已经说过的这些话,预测它的下一个词的概率
那怎样去计算这些概率呢?
基本假设:一个未来的词,只会受到它前面的词的影响
这样的话,可以将一个句子的联合概率拆解成一个一个的条件概率的乘积
基于这个假设,我们如何进行语言模型的构建呢?
N-gram Model
N-gram 模型统计前面出现了 N-1 个词之后,后面出现那个词的频度是怎么样的,其背后遵守上面的基本假设。
以 4-gram 为例,这个模型讨论前面出现了 3 个词,后面出现这个词的概率是多少。讨论 never too late to 后面出现 w j w_j wj 的概率,可以用语料库中,too late to w j w_j wj 出现的次数除以 too late to 出现的次数得到,即:
存在的问题:
- 实际上在 N-gram 广泛应用的时候,用的更多的是bigram、trigram。当 N 越大,则考虑的上下文越长,由于采用的是基于符号的统计,在整个自然语言文本中出现的次数会越少,这会导致统计结果非常地稀疏,同时 N 越大,要存储地量也越大,因此不是一个特别好的方式
- N-gram 会假设所有的词之间都是互相独立,因此在做统计的时候上下文其实都是基于符号去统计的,它是没有办法去理解这些词互相之间的相似度,比如对于"The cat is walking in the bedroom" 和 "A dog was running in a room" 这两句话,用 N-gram 是无法判断它们之间是相似的
Neural Language Model
神经语言模型 基于神经网络 使用词的分布式表示即 word embedding 去建构前文和当前词的预测条件概率。
基本思路:
1、首先将前面几个词都表示成一个低维的向量
2、然后再把这个低维的向量拼在一起,形成一个更高维的上下文的向量
3、然后经过一个非线性的转换
4、最后就可以用这个向量来预测下一个词到底是什么
所有词的向量,以及整个预测的过程,都是基于神经网络的可调节可学习参数来完成,因此可以利用大规模数据来学习这些向量。