1、人工智能在自然语言处理中的应用初步研究一个项目的需求 通过微信,实现以下功能: 用户可以输入病情描述,了解挂号科室(即所谓“分诊”) 用户可以通过过微信了解医院及及业务的基本情况(如科室分布、流程) 怎么办?再如: 有没有可能让电脑代替人来看论文,以节约研究者看论文的时间,以便以比较小的代价了解学术前沿? 如何帮助学生解决阅读理解的问题?一、什么是人工智能 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能
2、以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。二、自然语言处理概述 什么是语言? 语言是用于传递信息的表示方法、约定和规则的集合,它由语句组成,每个语句又由单词组成;组成语句和语言时,应遵循一定的语法与语义规则。语言词汇词熟语词素构形法 构词法语法词法句法词组构造法造句法语言的构成图1 什么是自然语言理解 从微观上讲,语言理解是指从自然语言到机器(计算机系统)内部之间的一种映射。 自然语言处理(Natural Language Processing,简称NLP)就是用计算机来处理、理解以及运用人类语言(如中文、英文等),它属于人工
3、智能的一个分支,是计算机科学与语言学的交叉学科,又常被称为计算语言学。语言理解所包含的功能,即NLP的应用 从宏观上看,语言理解是指机器能够执行人类所期望的某些语言功能。这些功能包括: 回答有关提问; 提取材料摘要; 不同词语叙述; 不同语言翻译。2 自然语言处理的兴起 值得一提的是,自然语言处理的兴起与机器翻译这一具体任务有着密切联系。 由于人工进行翻译需要训练有素的双语专家,翻译工作非常耗时耗力。更不用说需要翻译一些专业领域文献时,还需要翻译者了解该领域的基本知识。世界上有超过几千种语言,而仅联合国的工作语言就有六种之多。如果能够通过机器翻译准确地进行语言间的翻译,将大大提高人类沟通和了解
4、的效率。3 自然语言理解过程的层次 语言的分析和理解过程是一个层次化的过程,它主要包括如下四个层次: 语音分析 词法分析 句法分析 语义分析言语文本语音分析OCR/标记化形态变化语法分析语义解释言谈处理语音分析 在有声语言中,最小的、可独立的声音单元是音素,音素是一个或一组音,它可与其他音素相区别。如pin和bin中分别有/p/和/b/这两个不同的音素,但pin, spin和tip中的音素/p/是同一个音素,它对应了一组略有差异的音。语音分析则是根据音位规则,从语音流中区分出一个个独立的音素,再根据音位形态规则找出一个个音节及其对应的词素或词。 语音分析传统的方法 音素深度学习下的语音分析 通
5、过声音特征并将这些特征表示为向量直接来预测音素(或词语)词法分析 词法分析的主要目的是找出词汇的各个词素,从中获得语言学信息,如unchangeable是由un-change-able构成的。在英语等语言中,找出句子中的一个个词汇是一件很容易的事情,因为词与词之间是由空格来分隔的。 但是要找出各个词素就复杂得多,如importable,它可以是im-port-able或import-able。这是因为im, port和import都是词素。 而在汉语中要找出一个个词素则是再容易不过的事情,因为汉语中的每个字就是一个词素。(是否正确?词素是构成词的最小单位) 但是要切分出各个词就远不是那么容易。
6、如“我们研究所有东西”,可以是“我们研究所有东西”也可以是“我们研究所有东西”。(这正是我们后面要讨论的重要内容:分词)中文的分词及其中存在的问题 由于单词是承载语义的最小单元,要解决自然语言处理,单词的边界界定问题首当其冲。特别是中文文本通常由连续的字序列组成,词与词之间缺少天然的分隔符,因此中文信息处理比英文等西方语言多一步工序,即确定词的边界,我们称为“中文自动分词”任务。通俗的说就是要由计算机在词与词之间自动加上分隔符,从而将中文文本切分为独立的单词。 中文自动分词处于中文自然语言处理的底层,是公认的中文信息处理的第一道工序,扮演着重要的角色,主要存在新词发现和歧义切分等问题。思考:
7、是否可以说:分词后的汉语与英语对计算机来讲可以看成一样的? This is the computer on my desk. 这 是 我 桌子 上 的 电脑。 或者说:NLP的很多适用于英语的是否可以直接用于分词后的汉语? 通过词法分析可以从词素中获得许多语言学信息。英语中词尾中的词素“s”通常表示名词复数,或动词第三人称单数,“ly”是副词的后缀,而“ed”通常是动词的过去式与过去分词等,这些信息对于句法分析都是非常有用的。 另一方面,一个词可有许多的派生、变形,如work,可变化出works, worked, working, worker,workings,workable,workab
8、ility等。这些词若全部放入词典将是非常庞大的,而它们的词根只有一个。词法分析的传统的方法 语素,例如前缀,词干,后缀等深度学习下的词法分析 每个语素都用向量表示 神经网络用于向量的两两合并句法分析 句法分析是对句子和短语的结构进行分析。在语言自动处理的研究中,句法分析的研究是最为集中的,这与乔姆斯基(Chomsky)的贡献是分不开的。 自动句法分析的方法很多,有短语结构语法、格语法、扩充转移网络、功能语法等。句法分析的最大单位就是一个句子。分析的目的就是找出词、短语等的相互关系以及各自在句子中的作用等,并以一种层次结构来加以表达。这种层次结构可以是从属关系、直接成分关系,也可以是语法功能关
9、系。句法分析的传统方法 将一个短语或句子划分到多个句法标记, 例如NP,VP等深度学习下的句法分析 每个单词或者短语都是一个向量 神经网络用于向量的两两合并语义分析 对于语言中的实词而言,每个词都用来称呼事物,表达概念。句子是由词组成的,句子的意义与词义是直接相关的,但也不是词义的简单相加。 “我打他”和“他打我”的词是完全相同的,但表达的意义是完全相反的。因此,还应当考虑句子的结构意义。英语中a red table(一张红色的桌子),它的结构意义是形容词在名词之前修饰名词,但在法语中却不同, one table rouge(一张桌子红色的),形容词在被修饰的名词之后。 语义分析就是通过分析找
10、出词义、结构意义及其结合意义,从而确定语言所表达的真正含义或概念。在语言自动理解中,语义越来越成为一个重要的研究内容。语义分析的传统方法 Lambda算子 or Lambda演算(Lambda calculus) 非常精细的函数设计 需要指定其他函数的输入 没有相似性的概念或者模糊语言深度学习下的语义分析 每个单词或者短语或者逻辑表达式都是一个向量 神经网络用于向量的两两合并语用分析 就是研究语言所在的外界环境对语言使用所产生的影响。它描述语言的环境知识、语言与语言使用者在某个给定语言环境中的关系。 4自然语言处理的主要困难:消歧 自然语言处理的困难可以罗列出来很多,不过关键在于消除歧义问题,
11、如词法分析、句法分析、语义分析等过程中存在的歧义问题,简称为消歧。 而正确的消歧需要大量的知识,包括语言学知识(如词法、句法、语义、上下文等)和世界知识(与语言无关)。这带来自然语言处理的两个主要困难。 其他级别的语言单位也存在着各种歧义问题。例如在短语级别上、句子级别上。 总之,同样一个单词、短语或者句子有多种可能的理解,表示多种可能的语义。如果不能解决好各级语言单位的歧义问题,我们就无法正确理解语言要表达的意思。 另外一个方面,消除歧义所需要的知识在获取、表达以及运用上存在困难。由于语言处理的复杂性,合适的语言处理方法和模型难以设计。 例如上下文知识的获取问题。由于上下文对于当前句子的暗示
12、形式是多种多样的,因此如何考虑上下文影响问题是自然语言处理中的主要困难之一。 再如背景知识问题。 正确理解人类语言还要有足够的背景知识。自然语言处理困难的根源 从上面的两个方面的主要困难,我们看到自然语言处理这个难题的根源就是人类语言的复杂性和语言描述的外部世界的复杂性。5自然语言处理的应用 从应用角度来看,自然语言处理具有广泛的应用前景。特别是在信息时代,自然语言处理的应用包罗万象 例如:机器翻译、手写体和印刷体字符识别、语音识别及文语转换、信息检索、信息抽取与过滤、文本分类与聚类、舆情分析和观点挖掘等,它涉及与语言处理相关的数据挖掘、机器学习、知识获取、知识工程、人工智能研究和与语言计算相
13、关的语言学研究等。自然语言处理的应用 拼写检查, 关键词提取与搜索,同义词查找与替换 从网页中提取有用的信息例如产品价格,日期,地址,人名或公司名等 分类:例如对教科书的文本进行分级,对长文本进行正负情绪判断 机器翻译 口语对话系统 复杂的问答系统工业界中NLP的应用 搜索引擎 在线广告 自动的或辅助的翻译技术 市场营销或者金融交易领域的情感分析 语音识别NLP应用:情感分析 传统的方法:精选的情感词典+词袋模型(忽略词序)+人工设计的特征(很难覆盖所有的信息) 深度学习:和上述词素,句法和语义相似的深度学习模型-RNNNLP应用:问答系统 传统的方法:用了非常多的特征工程去获取相关的知识,例
14、如正则表达式 深度学习:和上述词素,句法,语义,情感分析相似的深度学习模型 知识可以储备在向量中NLP应用:机器翻译 传统的机器翻译系统是一个非常大的复杂系统 可以思考一下在深度学习中中间语(interlingua)对于翻译系统是如何起作用的? 深度学习: 源句子首先映射为向量,然后在输出的时候进行句子生成三、自然语言处理的方法 目前,人们主要通过两种思路来进行自然语言处理,一种是基于规则的理性主义,另外一种是基于统计的经验主义。 理性主义方法认为,人类语言主要是由语言规则来产生和描述的,因此只要能够用适当的形式将人类语言规则表示出来,就能够理解人类语言,并实现语言之间的翻译等各种自然语言处理
15、任务。 而经验主义方法则认为,从语言数据中获取语言统计知识,有效建立语言的统计模型。因此只要能够有足够多的用于统计的语言数据,就能够理解人类语言。1基于规则的自然语言处理 仅讨论句法和语义句法模式匹配和转移网络 句法分析最为简单直观的方法-模式匹配。 一个句子可以表示成:(pronoun(adj*noun)verb(pronoun(adj*noun) 这也可以用状态转移图来表示,称之为转移网络(TN,transition network),如图11.2所示。 图中,q0,q1,qT是状态,q0是初态,qT是终态。弧上给出了状态转移的条件以及转移的方向。44转移网络(TN)q0nounpron.
16、q2q1adjq3qTverbverbpron.nounq4q5adj扩充转移网络 扩充转移网络ATN是由一组网络所构成的,每个网络都有一个网络名,每条弧上的条件扩展为条件加上操作。 ATN的每个寄存器由两部分构成: 句法特征寄存器 句法功能寄存器名词短语(NP)的扩充转移网络ghfNP7: pp8: send3: adj4: noun2: jump1: det5: pron.6: prop.句子的扩充转移网络词汇功能语法(LFG) LFG用一种结构来表达特征、功能、词汇和成分的顺序。 LFG对句子的描述分为两部分: 直接成分结构(Constituent Structure,简称C- Stru
17、cture); 功能结构(Functional Structure,简称F-structure)。用LFG语法对句子进行分析的过程 用上下文无关语法分析获得C-structure,不考虑语法中的下标;该C-structure就是一棵直接成分树; 将各个非叶节点定义为变量,根据词汇规则和语法规则中的下标,建立功能描述(一组方程式); 对方程式作代数变换,求出各个变量,获得功能结构F-structure。 语义的解析 语义解析的步骤如下: 第一步 确定每个词在句子中所表达的词义; 第二步 根据已有的背景知识来确定语义。 逻辑形式表达是一种框架式的结构,它表达一个特定形式的事例及其一系列附加的事实,
18、如“Jack kissed Jill”,可以用如下逻辑形式来表达: (PAST S1 KISS-ACTIONAGENT(NAME j1 PERSON“Jack”)THEM ENAME(NAME j2 PERSON“Jill”) 句子的自动理解:简单句的理解方法 为了理解一个简单句,需要做以下两方面 的工作: 理解语句中的每一个词。 以这些词为基础组成一个可以表达整个语句意义的结构。其中第二项工作又可分成以下3个部分来进行: 句法分析将单词之间的线性次序变换成一个显示单词如何与其它单词相关联的结构。 语义分析各种意义被赋于由句法分析程序所建立的结构,即在句法结构和任务领域内对象之间进行映射变换。
19、 语用分析为确定真正含义,对表达的结构重新加以解释。复合句的理解方法 复合句的理解,要求发现句子之间的相互关系。这种关系包括以下几种: 相同的事物 事物的一部分 行动的一部分 与行动有关的事物 因果关系 计划次序 语言的自动生成(Automatic Generation of Language) 语言生成就是把在计算机内部以某种形式存放的需要交流的信息,以自然语言的形式表达出来 。 语言生成是自然语言理解的一个逆过程。一般包括以下两部分: 建立一种结构,以表达出需要交流的信息 以适当的词汇和一定的句法规则,把要交流的信息以句子形式表达出来2自然语言处理的统计学模型 研究发现,通过对大量的文本数
20、据的自动学习和统计,能够更好地解决自然语言处理问题,如语言的自动翻译。这一思想被称为自然语言处理的统计学习模型,至今方兴未艾。自然语言处理与人工智能 由于自然语言是人类区别于其他动物的根本标志。没有语言,人类的思维也就无从谈起,所以自然语言处理体现了人工智能的最高任务与境界。 也就是说,只有当计算机具备了处理自然语言的能力时,机器才算实现了真正的智能。 下棋和自然语言处理是人工智能这一概念形成时人们提出的标志性的两个应用 统计语言学与基于规则的理性语义的结合 人们逐渐意识到,单纯依靠统计方法已经无法快速有效地从海量数据中学习语言知识,只有同时充分发挥基于规则的理性主义方法和基于统计的经验主义方
21、法的各自优势,两者互相补充,才能够更好、更快地进行自然语言处理。四、向量空间模型(Vector space models, VSMs) 将词语表示为一个连续的词向量,并且语义接近的词语对应的词向量在空间上也是接近的。 VSMs在NLP中拥有很长的历史,但是所有的方法在某种程度上都是基于一种分布式假说,该假说的思想是如果两个词的上下文(context)相同,那么这两个词所表达的语义也是一样的; 换言之,两个词的语义是否相同或相似,取决于两个词的上下文内容,上下文相同表示两个词是可以等价替换的。语义词典 通常使用类似Wordnet的这样的语义词典,包含有上位词(is-a)关系和同义词集语义词典存在
22、的问题 语义词典资源很棒但是可能在一些细微之处有缺失,例如这些同义词准确吗:adept, expert, good, practiced, proficient,skillful? 会错过一些新词,几乎不可能做到及时更新: wicked, badass, nifty, crack, ace, wizard, genius, ninjia 有一定的主观倾向 需要大量的人力物力 很难用来计算两个词语的相似度1词向量及其表示方式 词向量就是用来将语言中的词进行数学化的一种方式,顾名思义,词向量就是把一个词表示成一个向量。 主要有两种表示方式: one-hot representation 一种最简单
23、的词向量方式是 one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其他全为 0, 1 的位置对应该词在词典中的位置。这种 One-hot Representation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,话筒记为 3,麦克记为 8(假设从 0 开始记)。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。one-hot representation的
24、缺点 (1)容易受维数灾难的困扰,尤其是将其用于 Deep Learning 的一些算法时; (2)不能很好地刻画词与词之间的相似性(术语好像叫做“词汇鸿沟”):任意两个词之间都是孤立的。分布式表示:Distributed Representation 最早是 Hinton 于 1986 年提出的,可以克服 one-hot representation 的缺点。其基本想法是直接用一个普通的向量表示一个词,这种向量一般长成这个样子:0.792, 0.177, 0.107, 0.109, 0.542, .,也就是普通的向量表示形式。维度以 50 维和 100 维比较常见。Distributiona
25、l similarity based representations基于统计的分布相似 通过一个词语的上下文可以学到这个词语的很多知识2 词向量的获得方法 当然一个词怎么表示成这么样的一个向量是要经过一番训练的,训练方法较多,word2vec是其中一种。 每个词在不同的语料库和不同的训练方法下,得到的词向量可能是不一样的。 使用同样的训练方法,语料对词向量有最重要的影响 Garbage in, garbage out. 这也是很多AI公司首先要做数据清洗的原因。 由于是用向量表示,而且用较好的训练算法得到的词向量的向量一般是有空间上的意义的,也就是说,将所有这些向量放在一起形成一个词向量空间,
26、而每一向量则为该空间中的一个点,在这个空间上的词向量之间的距离度量也可以表示对应的两个词之间的“距离”。所谓两个词之间的“距离”,就是这两个词之间的语法,语义之间的相似性。 3 词向量的作用 一个比较爽的应用方法是,得到词向量后,假如对于某个词A,想找出这个词最相似的词,这个场景对人来说都不轻松,毕竟比较主观,但是对于建立好词向量后的情况,对计算机来说,只要拿这个词的词向量跟其他词的词向量一一计算欧式距离或者cos距离,得到距离最小的那个词,就是它最相似的。4 词向量应用 词向量在机器翻译领域的一个应用,就是google的Tomas Mikolov 团队开发了一种词典和术语表的自动生成技术,该
27、技术通过向量空间,把一种语言转变成另一种语言,实验中对英语和西班牙语间的翻译准确率高达90%。这意味着什么? 绝大部分翻译工作可以被机器代替。1 Word2vec及其实现模型 word2vec是一个典型的预测模型,用于高效地学习Word Embedding。 word2vec是将词表征为实数值向量的一种高效的算法模型,其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似。 Word embedding就是所谓的词向量 该工具提供了用于计算词的向量表示的连续的词袋和跳跃架构的有效实现。 这些表示可以随后用于许多
28、自然语言处理应用和用于进一步研究。word2vec工具将文本语料作为输入,并生成单词向量作为输出。 它首先从训练文本数据构造词汇表,然后学习单词的向量表示。 所得到的单词矢量文件可以用作许多自然语言处理和机器学习应用中的特征。词向量的语言学含义 最近表明,词矢量反应了许多语言规律,例如矢量操作: 矢量(Paris) - 矢量(French)+矢量(Italy)可以得到一个矢量,它非常接近矢量( 罗马 ); 而矢量(king) - 矢量(man)+矢量(woman)的结果则接近矢量(queen)。 为了观察单词向量空间中的强规律性,需要在大数据集上训练模型,具有足够的向量维度。 使用word2v
29、ec工具,可以在巨大的数据集(高达数百亿字)上训练模型。 该工具提供了用于计算词的向量表示的连续的词袋和跳跃架构的有效实现。 (见后面) 这些表示可以随后用于许多自然语言处理应用和用于进一步研究。word2vec工具将文本语料作为输入,并生成单词向量作为输出。 它首先从训练文本数据构造词汇表,然后学习单词的向量表示。 所得到的单词矢量文件可以用作许多自然语言处理和机器学习应用中的特征。2 Word2vec的应用 就词本身而言,Word2vec输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析等等。 如果换个思路, 把词当做特征,那么Word2vec就可以把特征映射到
30、 K 维向量空间,可以为文本数据寻求更加深层次的特征表示 。3Word2vec的应用过程 一、下载语料库,整理,编码为UTF8 二、合并多个文本文件 为一个 三、分词 五、训练模型 六、测试模型Word2vec开发环境(1)语料库 语料库要根据应用需要来选择,语料库的质量与训练后的模型的质量有密切的关系 语料库要求:数据量大(一般要G级),专业(垃圾数据少),经过清理(便于处理) 例如:搜狗实验室语料库http:/ 其他如维基中文百科也提供语料库下载 自己要解决的问题来寻找合适的语料库 *可以考虑使用下载工具、模拟击键工具来获得数据(2)文本合并与编码 如果不合并,会导致训练时处理不方便 也不
31、利于对文本统一进行处理 有的应用场合要将不同类的文本分别放在一起,而不是合并为一个大文本文件 为了保证跨平台使用(一般会是windows+linux平台),需要将文本转码为unicode(3)分词 英语不需要分词,去掉标点即可 汉语需要分词。有不同的分词工具可以选择,但分词都需要考虑以下几个问题: 分词工具的算法 分词工具是否可适应不同的应用需要 分词工具是否支持自定义词典 分词工具是否可以过滤不需要处理的词(stop words) 特殊词的处理,如量词(4)训练 利用word2vec提供的功能即可实现 训练结果可保存为文本格式或二进制格式的模型,供以后调用,这样一方面可以大节约时间,另一方面
32、还可以对数据脱敏 其实就是不让别人知道你用了什么数据来训练模型,想一想,有什么用? 可以利用更多的文本更新模型 工程应用很重要,避免重新训练模型带来的时间和设备开销(5)测试 利用模型,输入测试数据,看结果是否符合需要4 Word2vec应用举例 输入一个词语,显示该词的相似词 输入两个词语,则去計算两个词余弦相似度 输入三个词语,进行类比推理 输入四个词语,显示不同类的词(1)显示一个词的相关词与“苗族”相关的前200个词 彝族、藏族、壮族、哈萨克族、布依族、蒙古族、土家、苗家、傣族、羌族、白族、土族、侗族、瑶族、畲族、柯尔克孜族、维吾尔族、回族、客家、朝鲜族、大歌、土家族、佤族、哈萨克、仡
33、佬族、纳西族、民俗风情、民俗文化、黎族、瑶、哈尼族、民族风情、山歌、拉祜族、镇远、鄂伦春族、自治县、撒拉族、满族、民风、傈僳族、蜡染、少数民族、民俗、侗、火把节、蒙族、芦笙、马头琴、侗家、彝、绚丽多姿、呼麦、羌、珞巴、循化、仡佬、织锦、民族服饰、苗寨、服饰文化、原住民、飞钹、秧歌、壮乡、裕固族、围屋、龙灯、鄂伦春、东兰、毛南族、民间艺人、独龙族、歌舞、民歌、藏戏、唐卡、古村、潮汕、长调、柯尔克孜、村寨、缠溪镇、婚俗、淳朴、西域、黔东南、乡土、甘南、原生态、民族民间、摩梭人、汨罗、马边、苗乡、制陶、锡伯族、古村落、蒙古人、察哈尔、蔚县、珞巴族、手工艺、添仓、游牧民族、塔城市、麻江县、三江侗族自治
34、县、达斡尔族、瑶乡、伏羲、黔南、民族特色、乡高、契丹、巴里坤、古堰、工夫茶、炎帝、嘉绒、傩、铜鼓、融水苗族自治县、雷山县、宏村、咸水歌、刺绣、白洋淀、俄罗斯族、山村、闽南、同仁县、闻喜、石雕、汉族人、瓷都、花园村、自然风光、聂耳、中渡、百色市、敖包、秭归、手工艺品、郑氏、京族、社火、西江、海北藏族自治州、萨尔达、后裔、化隆、客家人、游牧、妈祖庙、哀牢山、特色美食、腰鼓、侗乡、民间文学、大山深处、平武、山乡、查干、安仁、乌兰牧骑、铜仁市、侗寨、年画、风物、民间文化、农民画、嫘祖、关帝、撒拉、大澳、梵净山、花灯、红瑶、前村、阿坝、维吾尔、舞龙、茅龙笔、吊脚楼、霍城县、唢呐、苗鼓、伊宁县、凤凰县、博
35、湖县、木简、营乡、楚文化、塔吉克族、帕米尔高原、布依、镇远县、瑶族自治县、天台山与“西南”有关的词(相关性0.45) 西北,东北,西部,东海,东南,偏南,南缘,南方,万联,红塔,北疆,成都平原,国元,攀西,西南地区,亚热带(2)三个词进行类比推理(3)显示不同类的词Word2vec在语义方面已经展现出了不错的潜能。如何利用其“聚类”功能实现基于语义的词语分类有待进一步研究。如何利用现有词典辅助Word2vec的语义研究也有待进一步深入。5 Word2vec更深入的应用 语义词典的修订Wordnet:英语成熟的语义词典visual Thesaurus为其可视化版本同义词林:汉语的语义词典Word
36、2vec计算出的所有相关词的分类 车票火车票.841399729251862 客票火车票.569890141487122 车站火车站.741208910942078 火车站西站.696171879768372 火车站北站.694334983825684 乘机乘火车.576373159885406 出差坐火车.607399046421051 起程乘火车.590905547142029 搭乘乘火车.58670836687088 驱车乘火车.528952598571777 动身坐火车.568086743354797 火车公交车.60146951675415 火车大巴车.578102648258209
37、 火车站车站.741208910942078 机场火车站.606023609638214 汽车站火车站.771833002567291 火车站汽车站.771833002567291 货运站火车站.528095364570618 火车站长途汽车站.795943439006805 首都机场太原火车站.540084898471832 火车头内燃机车.460995435714722 火车列车.671974003314972 列车火车.671974003314972 火车一列.589093863964081 火车铁轨.576129078865051不靠谱的信息 火车头狼堡.480554491281509
38、 火车头猎鹰.43925267457962 火车头小钢炮.448086827993393 火车头妖人.451286911964417 航速火车皮.530428886413574 马车火车头.411905080080032Word2vec应用 可以挖掘词之间的关系,譬如同义词、反义词。 可以将词向量作为特征应用到其他机器学习任务中 用于机器翻译。分别训练两种语言的词向量,再通过词向量空间中的矩阵变换,将一种语言转变成另一种语言。 推理:即已知a之于b犹如c之于d,现在给出 a、b、c,C(a)-C(b)+C(c)约等于C(d),C(*)表示词向量。可以利用这个特性,提取词语之间的层次关系。 Co
39、nnecting Images and Sentences,image understanding。例如文献,DeViSE: A deep visual-semantic em-bedding model。 Entity completion in Incomplete Knowledge bases or ontologies,即relational extraction。Reasoning with neural tensor net- works for knowledge base completion。 more word2vec applications,点击link1,link2
40、 除了产生词向量,word2vec还有很多其他应用领域,对此我们需要把握两个概念:doc和word。 在词向量训练中,doc指的是一篇篇文章,word就是文章中的词。假设我们将一簇簇相似的用户作为doc(譬如QQ群),将单个用户作为word,我们则可以训练user distributed representation,可以借此挖掘相似用户。 假设我们将一个个query session作为doc,将query作为word,我们则可以训练query distributed representation,挖掘相似query。 思考:你还能想得出来哪类应用可以用word2vec来实现?操作: 1. 打
41、开word2vec_Demo目录 本样例提供了访问两个模型的代码,test_shilu.py访问的是一个在线咨询疾病的模型,test_sogo.py访问的是根据搜狗新闻语料库训练出来的模型。 2. 分别运行这两个程序: 横向:输入一个词查询一个词的相关词、输入三个词进行推理分析,输入四个词进行聚类分析 纵向:两者都输入一个相同的词(如“感冒”),了解不同语料对模型的影响。自动提取关键词、自动摘要、文档相似度计算 TF-IDF算法 TextRank算法 simhash算法 LSA算法自动摘要 利用计算机将大量的文本进行处理,产生简洁、精炼内容的过程就是文本摘要,人们可通过阅读摘要来把握文本主要内
42、容,这不仅大大节省时间,更提高阅读效率。但人工摘要耗时又耗力,已不能满足日益增长的信息需求,因此借助计算机进行文本处理的自动文摘应运而生。近年来,自动文摘、信息检索、信息过滤、机器识别、等研究已成为了人们关注的热点。自动文摘(Automatic Summarization)的方法主要有两种:Extraction和Abstraction。 其中Extraction是抽取式自动文摘方法,通过提取文档中已存在的关键词,句子形成摘要;Abstraction是生成式自动文摘方法,通过建立抽象的语意表示,使用自然语言生成技术,形成摘要。由于生成式自动摘要方法需要复杂的自然语言理解和生成技术支持,应用领域受
43、限。主要方法 基于统计:统计词频,位置等信息,计算句子权值,再简选取权值高的句子作为文摘,特点:简单易用,但对词句的使用大多仅停留在表面信息。 基于图模型:构建拓扑结构图,对词句进行排序。例如,TextRank/LexRank 基于潜在语义:使用主题模型,挖掘词句隐藏信息。例如,采用LDA,HMM 基于整数规划:将文摘问题转为整数线性规划,求全局最优解。TF-IDF算法 TF-IDF(term frequencyinverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF词频(Term Frequency),IDF逆向文件频率(Inverse Docu
44、ment Frequency)。 TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序。 IDF =log(D/Dw)其中D是全部网页数,Dw为某个单词出现的次数 本质上IDF是一种试图抑制噪音的加权 ,并且单纯地认为文本频数小的单词就越重要,文本频数大的单词就越无用,
45、显然这并不是完全正确的。IDF的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以TFIDF法的精度并不是很高。TFIDF实现 第一步,计算词频 考虑到文章有长短之分,为了便于不同文章的比较,进行词频标准化。 第二步,计算逆文档频率 这时,需要一个语料库(corpus),用来模拟语言的使用环境 如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。 第三步,计算TF-IDF 可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的
46、出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。TFIDF特点 TF-IDF算法的优点是简单快速,结果比较符合实际情况。 缺点是,单纯以词频衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。TextRank 算法 是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法,通过把文本分割成若干组成单元(单词、句子)并建立图模型,利用投票机制对文本中的重要成分进行排序,仅利用单
47、篇文档本身的信息即可实现关键词提取、文摘。和 LDA、HMM 等模型不同,TextRank不需要事先对多篇文档进行学习训练,因其简洁有效而得到广泛应用。TextRank算法原理 TextRank算法基于PageRank,用于为文本生成关键字和摘要。 PageRank最开始用来计算网页的重要性。整个www可以看作一张有向图图,节点是网页。如果网页A存在到网页B的链接,那么有一条从网页A指向网页B的有向边。构造完图后,使用下面的公式: S(Vi)是网页i的中重要性(PR值)。d是阻尼系数,一般设置为0.85。In(Vi)是存在指向网页i的链接的网页集合。Out(Vj)是网页j中的链接存在的链接指向
48、的网页的集合。|Out(Vj)|是集合中元素的个数。PageRank需要使用上面的公式多次迭代才能得到结果。初始时,可以设置每个网页的重要性为1。上面公式等号左边计算的结果是迭代后网页i的PR值,等号右边用到的PR值全是迭代前的。使用TextRank提取关键字 将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。 每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:w1, w2, w3, w4, w5, ., wn w1, w2, ., wk、w2, w3, .,wk+1、w3, w
49、4, .,wk+2等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。 基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。使用TextRank提取关键短语 参照“使用TextRank提取关键词”提取出若干关键词。若原文本中存在若干个关键词相邻的情况,那么这些关键词可以构成一个关键短语。例如,在一篇介绍“支持向量机”的文章中,可以找到三个关键词支持、向量、机,通过关键短语提取,可以得到支持向量机。使用TextRank提取摘要 将每个句子看成图中的一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。 通过pa
50、gerank算法计算得到的重要性最高的若干句子可以当作摘要。论文中使用下面的公式计算两个句子Si和Sj的相似度: 分子是在两个句子中都出现的单词的数量。|Si|是句子i的单词数。利用simhash算法计算句子/文档相似度 simhash是一种局部敏感hash。我们都知道什么是hash。那什么叫局部敏感呢,假定A、B具有一定的相似性,在hash之后,仍然能保持这种相似性,就称之为局部敏感hash。 通过hash的方法,把上述得到的关键词集合hash成一串二进制,这样我们直接对比二进制数,看其相似性就可以得到两篇文档的相似性,在查看相似性的时候我们采用海明距离,即在对比二进制的时候,我们看其有多少