此博客内容是本人在学习自然语言模型中的一些学习和总结,之所以记录下来,也是自己对相关知识的一种巩固,正所谓好记性不如烂笔头。好啦!闲话不多说,开始进入正题!

随着近几年deep learning 的发展,已在图像、视频、语音、自动驾驶等领域得到了空前的发展和进步,与此同时,在NLP领域,deep learning 的应用也是与日俱增。虽然目前仍然存在着一些诟病和困难,但是不可否认deep learning给NLP领域注入了新的血液,产生了不少的研究成果。

本文,旨在对NLP领域的词向量问题作一些梳理,首先我们来看看,人类是怎么来理解语言的,以及机器对自然语言的理解应该如何完成?

1  认知语言学

认知语言学(cognitive linguistics)是认知科学(cognitive science)与语言学交叉的一个研究分支,是研究人脑的思维、心智、智能、推理和认识等认知机理及其对语言进行分析和理解过程的一门学问。人脑处理语言的能力十分强大,可以快速、准确地阅读和理解各种类型的文本,即使文本中含有少量的错误,也不影响正常的理解,而且对语言的理解是增量式的,可以不断地将当前阅读的词汇语义与上文的含义进行整合,形成新的含义,并可在一定程度上推断下文的内容。另外,人脑在语言理解时只利用有限的记忆空间就可处理与当前词汇距离较远的词汇。如何对这些特性进行数学建模和模拟,一直是神经语言学家和计算语言学家关注的问题。

而语言认知计算模型就是刻画人脑语言认知和理解过程的形式化模型。理想情况下,希望建立可计算的、复杂度可控的数学模型,以便在计算机系统上实现对人脑语言理解过程的模拟。尤其近几年随着人工智能研究的再度兴起,人们在对人脑理解语言的生物过程尚不清楚的情况下,也在尝试通过模拟人脑神经系统的结构和功能,或者借鉴人脑的某些认知行为(记忆、编码、搜索、概念形成、缺省推理、隐喻投射、概念整合等)的表现,或受人脑某些功能和表现的启发,建立实用、有效的自然语言处理模型或方法,实现所谓的“类脑语言信息处理”。

2 语言表示

2.1 什么是语言表示

语言表示(language representation),是使用这种“类脑语言信息处理”的模型或方法来对自然处理进行处理的第一步,即如何将字,词,段落等信息转换为机器可以理解的方式进行,是自然语言处理的关键一步。语言表示是对人类语言的一种描述或约定,是认知科学、人工智能等多个领域共同存在的问题。在认知科学里,语言表示是语言在人脑中的表现形式,关系到人类如何理解和产生语言。在人工智能里,语言表示主要指用于语言的形式化或数学的描述,以便在计算机中表示语言,并能让计算机程序自动处理。从人工智能的角度,语言表示的研究内容可以定义为:如何设计一种计算机内部的数据结构来表示语言,以及语言和此数据结构之间的相互转换机制。语言表示是自然语言处理以及语义计算的基础。语言具有一定的层次结构,具体表现为词、短语、句子、段落以及篇章等不同的语言粒度。为了让计算机可以理解语言,需要将不同粒度的语言都转换成计算机可以处理的数据结构。

2.2 符号化的离散表示

早期的NLP研究中普遍使用的语言表示方法是一种符号化的离散表示。最常用的就是One-Hot Representation,这样的表示方式一般先对一段文本进行分词,去掉一些标点符号和停用词后,得到所有的词汇表,通过hash表给词汇表中的每个词一个编号,这样每一个词就可以表示成固定长度的向量,向量的长度为词汇表的长度,向量的大部分位置上的值为0,当前词汇所在位置上的值为1。例如对于这样一句话,“今天天气不错,大家心情都不错。”首先,进行分词和去除停用词,得到“今天  天气  不错  大家  心情  不错”这样一个结果,进而得到词汇表,{“今天”,“天气”,“不错”,“大家”,“心情”},紧接着对每个词赋予一个id(从0开始),比如今天:0,天气:1,不错:2,大家:3,心情:4,因此,最终“心情”的词汇向量就可以表示为[0,0,0,0,1]。这就是早期的语言表示方式One-Hot Representation。基于这种词的表示,句子或篇章可以通过词袋模型、TF-IDF 模型、N 元模型等方法进行转换。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。
但是,这种符号化的离散表示方式,明显存在着一个问题,即散失了词语间的语义信息。比如“电脑”和“计算机”被看成是两个不同的词,这和语言的特性并不相符。这样,离散的语言表示需要引入人工知识库,比如同义词词典、上下位词典等,才能有效地进行后续的语义计算。另一个存在的问题是维度灾难问题,因为当词汇表的大小特别大时,比如十几万个时,这样每个词就表示成了一个十几万维的词汇向量,只有该词对应的位置上为1,其余位置都为0,可以说这个向量高维且稀疏,这样也对计算机内存带来巨大的开销,不利于后续任务的进行。
离散表示无法解决的“多词一义”问题,且容易造成维度灾难,同时这也不符合人类处理语言信息的方式。 脑生理结构和现代认知心理学的研究表明,语言信号中的不同词汇与大脑相应处理区域相对应,信号空间具有相似特征的信号被反映到脑皮质相近区域时,大致保留了信号空间的概率分布特征和拓扑结构特征,即大脑具有自动归类的功能。为了解决这一问题,可以将语言单位表示为连续语义空间中的一个点,这样的表示方法称之为连续表示。基于连续表示,词与词之间就可以通过欧式距离或余弦距离等方式来计算相似度。

2.3 嵌入式的连续表示

这种连续的表示方式最常用的就是Distributed Representation(分布式表示),Distributed representation 最早由 Hinton在 1986 年提出。它是一种低维实数向量,这种向量一般长成这个样子:

[-0.1223,0.5561,0.7768,-0.2991,...]

向量的维度一般以50-200维比较常见。当然,向量的维度是可以自己定的。Distributed representation的思想是将语言的潜在语法或语义特征分散式地存储在一组神经元中,可以用稠密、低维、连续的向量来表示,也叫嵌入(Embeddings)。不同的深度学习技术通过不同的神经网络模型来对字、词、短语、句子以及篇章进行建模。除了可以更有效地进行语义计算之外,Distributed representation也可以使特征表示和模型变得更加紧凑。将词语映射到一个新的空间中,并以多维的连续实数向量进行表示叫做“Word Represention或“Word Embedding”。自从21世纪以来,人们逐渐从原始的词向量稀疏表示法过渡到现在的低维空间中的密集表示。用稀疏表示法在解决实际问题时经常会遇到维数灾难,并且语义信息无法表示,无法揭示word之间的潜在联系。而采用低维空间表示法,不但解决了维数灾难问题,并且挖掘了词语之间的关联属性,从而提高了向量语义上的准确度。

向量之间的距离通常使用欧氏距离或者cos余弦距离进行计算。使用分布式表示,将所有的词语投射到低维的空间中,使得相似语义的词语距离越近,比如“计算机”和“电脑”应该在低维空间中距离应该大于“计算机”和“面包”之间的距离。

3 词向量模型

a)  LSA矩阵分解模型
  采用线性代数中的奇异值分解方法,选取前几个比较大的奇异值所对应的特征向量将原矩阵映射到低维空间中,从而达到词矢量的目的。
b)  PLSA 潜在语义分析概率模型
  从概率学的角度重新审视了矩阵分解模型,并得到一个从统计,概率角度上推导出来的和LSA相当的词矢量模型。
c)  LDA 文档生成模型
  按照文档生成的过程,使用贝叶斯估计统计学方法,将文档用多个主题来表示。LDA不只解决了同义词的问题,还解决了一次多义的问题。目前训练LDA模型的方法有原始论文中的基于EM和 差分贝叶斯方法以及后来出现的Gibbs Samplings 采样算法。
d)  Word2Vec 模型

  最近几年刚刚火起来的算法,通过神经网络机器学习算法来训练N-gram 语言模型,并在训练过程中求出word所对应的vector的方法。

在接下来的文章中,主要来介绍word2vec模型,以及如何训练自己的word2vec模型,敬请关注。本文是个人第一篇博客,写的不好或者有错误的地方望大家指出,并与本人联系,对NLP感兴趣的同学也可以与本人联系,相互学习。本人邮箱:1179632655@qq.com。

特别感谢:

1.[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

2.中文信息处理发展报告(2016)

3.Deep Learning in NLP (一)词向量和语言模型

自然语言处理中传统词向量表示VS深度学习语言模型(一)相关推荐

  1. CV中,传统视觉算法 vs 深度学习算法

    计算机视觉中, 传统视觉算法,侧重于提取,识别容易量化的特征:颜色.面积.圆度.矩形度,角度.长度等. 深度学习算法,侧重于难于量化的特征:例如瑕疵. 传统视觉算法都是基于人为特征提取得到样本特征库去 ...

  2. 注意力机制-深度学习中的注意力机制+注意力机制在自然语言处理中的应用

    1 深度学习中的注意力机制 https://mp.weixin.qq.com/s?__biz=MzA4Mzc0NjkwNA==&mid=2650783542&idx=1&sn= ...

  3. 认识机器学习与深度学习

    目录 1. 认识机器学习 1.1 什么是机器学习? 1.2 机器学习可以解决的问题 1.3 机器学习的基础知识 2. 认识深度学习 2.1 什么是深度学习? 2.2 深度学习能做什么? 2.3 深度学 ...

  4. 深度学习 (五)cbow、skip-gram of word2vec

    介绍 NLP 自然语言处理即让计算机理解学会人类语言,让计算机像人一样能有分辨能力.语言交流能力,并为我们服务产生价值的一种研究方向,从发展历史来说经过了很多代人的努力,向我们的目标更近了一步,从传统 ...

  5. 这38篇原创文章,带我入门深度学习!

    这38篇原创文章带我入门卷积神经网络,循环神经网络和强化学习,希望对您有帮助. 37.  深度学习算法(第37期)----如何用强化学习玩游戏? 36.  深度学习算法(第36期)----强化学习之时 ...

  6. 深度学习:词嵌入之word2vec

    http://blog.csdn.net/pipisorry/article/details/76147604 word2vec简介 深度学习在自然语言处理中第一个应用:训练词嵌入.Google 的 ...

  7. 复旦大学黄萱菁教授:自然语言处理中的表示学习

    AI TIME欢迎每一位AI爱好者的加入! 比尔·盖茨曾说:"语言理解是人工智能皇冠上的明珠."在语音交互的AI时代,自然语言处理(NLP)发挥着不可替代的作用.深度学习的出现与发 ...

  8. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:08 自然语言处理中的机器学习方法

    08 自然语言处理中的机器学习方法 8.1 机器学习的基本概念 8.1.1 ML类型 8.1.2 ML 监督学习 8.1.3 无监督学习 8.1.4 强化学习 8.2 自然语言处理应用的开发步骤 8. ...

  9. 深度学习 VS 传统计算机视觉

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心 作者:Niall O' Mahony等  | ...

最新文章

  1. 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要。
  2. 线程的挂起是错误的概念实际是线程的阻塞,挂起只针对进程,将进程挂起会将进程从内存空间交换到磁盘空间的过程
  3. Linux help websites
  4. Altiris 7.1 插件
  5. Hadoop学习全程记录——在Eclipse中运行第一个MapReduce程序
  6. Map实现java缓存机制的简单实例
  7. 尚硅谷_JavaScript_学习笔记
  8. maven安装遇到的坑
  9. github上的python爬虫_python爬虫入门(2):让你的github项目火起来
  10. python tkinter grid布局
  11. Transfer-Encoding
  12. CISSP重点知识总结1
  13. 【学习笔记】Java工程师成神之路-基础篇
  14. 废旧 Android 手机如何改造成 Linux 服务器
  15. 《嵌入式系统 – NUC980 IoT应用开发实战指南(基于RT-Thread系统)》第3章 NUC980 IoT I2C实践
  16. 京东登录页面html代码_如何制作一个简单的HTML登录页面(附代码)
  17. 做网站要服务器和什么软件,做网站的软件有哪些,自己建网站要用到哪些软件?...
  18. Facebook创始人扎克伯格呼吁加强互联网监管
  19. 微信提醒事项功能怎么设置
  20. 十大护眼灯品牌什么牌子好?盘点护眼灯品牌排行前十名

热门文章

  1. 计算机怎么解除c盘用户权限,电脑c盘没有权限如何恢复_win10系统c盘没有管理员权限怎么设置-系统城...
  2. urllib库(二)parse模块:urlparse()/urlsplit(),parse_qs()/parse_qsl(),urlunparse()/urlunsplit(),urlencode()
  3. RTX2080ti显卡+win10+安装Tensorflow-gpu
  4. 电脑录音文件删除怎么找回——告诉你3个专业方法
  5. 水晶报表插件下载地址
  6. linux网络流量统计,linux下网络流量监控统计
  7. AspNetCore 3.1(ABP.Next)集成MiniProfile(简要)
  8. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解
  9. 西北乱跑娃 --- 持续稳定的isbn接口
  10. VMWare workstation 和 player区别