1.走近自然语言理解
文本是一种极其重要的数据类型,下面介绍文本数据中有哪些研究问题和挖掘价值。
1.1概念
在处理数据时经常会接触到文本,如电影简介、新闻报道等,以及互联网上每天大量积累的用户产生内容,如新浪微博、用户评论等,因此文本是一种十分常见和重要的数据类型。这些文本大多以自然语言的形式存在,即通过人类语言组织和产生,广泛应用于我们的日常对话、办公写作、阅读浏览等行为中。自然语言处理希望让机器能够像人一样去理解以人类自然语言为载体的文本所包含的信息,并完成一些语言领域的特定任务。
1.2内容
语言是人类智慧长期沉淀的成果,对于看似简单的文本,从词汇级别、语法级别、语义级别、应用级别等不同角度出发,都包含大量研究问题和工作内容。
中文NLP中最基础的一块内容便是中文分词。英文等外文语言的单词之间以空格分开,因此显式提供了词和词之间的边界。而中文仅使用标点符号进行断句,字和字之间彼此相连,例如“上海自来水来自海上”。虽然类似N-grams等语言模型并不需要进行中文分词,但毕竟中文的基本语义单元是词而不是字,所以在大多数应用场景下,为了正确理解一句话包含的语义,进行准确的中文分词仍是必不可少的预处理步骤。
词性标注是指在中文分词的基础上,结合上下文对分好的每个词标注最合适的词性。常见的词性有名词、动词、形容词、副词等,同一词语在不同的语境下可以表现为不同的词性,进而在语句中充当不同的语义角色。因此,词性标注主要是依据词本身的词性分布,以及上下文的实际语境来判断的。
命名实体识别是指识别出语句中的人名、地名、机构名、数字、日期、货币、地址等以名称为标识的实体,大多属于实词。而关系抽取则是指完成命名实体识别之后,抽取实体之间存在的关系。例如,“乔布斯出任苹果公司CEO”,其中乔布斯和苹果公司分别属于人名和机构名,而CEO则是两个命名实体之间的关系。
关键词提取是指从大量文本中提取出最为核心、最具有代表性的关键词。常用的实现算法有TF-IDF和TextRank两种,在提取之前需要对给定文本进行中文分词并移除停用词,即例如,“你”“我”“着”“了”等十分常用但不包含具体语义的词。TF-IDF选出那些一般并不常用,但是在给定文本中频繁出现的词作为关键词;而TextRank则基于词之间的上下文关系构建共现网络,将处于网络核心位置的词作为关键词。
德国世界自然基金会出售 NFT 为濒危物种筹集资金:金色财经报道,德国世界自然基金会 (WWF) 昨日宣布将发布 NFT 收藏品,为保护濒危动物及其栖息地筹集资金。NFT 艺术家们为该系列创作了艺术作品,该系列将以濒临灭绝的动物为特色,被称为“不可替代的动物”,包括 Bosslogic、Freehand Profit、Eric Peters、Vinzent Britz、Lea Fricke、Romulo Kuranyi、Andres Ribon、Rocket&Wink,艾蒂安·基弗和安娜·鲁普雷希特。每个艺术家的 NFT 数量将与某些濒危物种的当前数量相关联。例如,将有290个NFT代表世界上仅存的290只巨型朱鹭。(theblockcrypto)[2021/10/22 20:48:15]
信息抽取是从非结构化文本中抽取出有意义或者感兴趣的字段。例如,对于一篇法律判决文书,从中提取出原告、被告、案件类型、判决结果等信息字段,从而将非结构化文本转化为结构化数据,便于信息管理和数据分析。目前大多数信息抽取都是通过人工制定规则,使用整理好的模式去目标文本中匹配出相应的字段,或者使用半监督学习,结合人工标注样本和机器学习模型,在不断的迭代和反馈中提高信息抽取的准确率。
依存分析主要包括句法依存分析和语义依存分析,其过程都是将原始语句解析为依存树,树中的每个节点都代表一个词,节点之间的连接则反应了词之间的句法关系或语义关系。通过依存分析,原本以顺序排列的词语之间产生了更加复杂和层次化的关系,便于机器更好地理解语句的语法和语义,从而能够为后续自然语言处理任务带来帮助。
词嵌入是指将词映射成低维、实值、稠密的词向量,从而赋予词语更加丰富的语义涵义,同时更加适合作为机器学习等模型的输入。词嵌入的概念非常有用,在自然语言处理任务中应用也十分广泛。
1.3应用
如果以上内容是从理论角度出发探讨NLP涉及的内容,那么从实际应用角度出发,NLP又可以用来实现哪些任务呢?
篇章理解是指对于给定的文章集合,通过处理后能够把握文章的主要内容并完成一些分类任务,如对文章进行主题分类。篇章理解的实现大多基于有监督学习,即提供标注好的训练集和待测试的测试集,基于训练集得到一个能够准确提取信息、全面把握内容的分类模型,从而应用于测试集的分类任务。
文本摘要是指对于给定的大量文本,提取出核心思想和主要内容,快速生成篇幅更小、便于阅读和理解的摘要。文本摘要主要分为提取式和生成式两种,前者从原始文本中直接提取出已有的代表性语句,经过处理和组合后输出为摘要,后者在理解和融合原始文本的基础上,自动生成原始文本中没有的语句并组合为摘要。相较而言,生成式比抽取式更加困难,而人类的习惯也是先阅读并理解,选出重要的语句,再用自己的语言进行复述、总结和融合。
动态 | 北京市规划自然资源委上线“区块链+不动产登记”平台:北京市规划自然资源委近日在全市推行“互联网+不动产登记”服务,并会同市住建委、市税务局和市城管委上线基于区块链技术的不动产登记信息平台升级版。“区块链+不动产登记”平台的上线,进一步缩短了不动产业务办理时间。(北京日报)[2020/2/24]
情感分析是指根据语句中蕴含的情感成分判断整个语句表达的情感倾向,例如,判断用户评论是否为积极或消极。情感分析的实现可以是简单地使用一些情感词典,对语句中出现的情感词进行加权组合,从而输出整个语句的情感得分,也可以使用有监督学习,基于人工标注数据训练情感分类或回归模型。
知识图谱是一种表示知识的方法,使用节点表示实体,使用有向边表示实体之间的关系,实体和边都可以具备丰富的属性,从而将海量知识表示成一个庞大的网络。知识图谱模拟了人脑管理和检索知识的过程,当我们看到乔布斯和苹果公司这两个实体时,会很自然地联想两者之间的关系。如果能够将某一领域涉及的知识都以知识图谱的形式进行整理和组织,那么对于领域知识的管理、推理和检索等都能起到很大的便利。
文本翻译是一项十分常用的NLP应用,大家都或多或少使用过Google翻译等工具将文本从一种语言翻译成另一种语言。从本质上来看,文本翻译是一种序列到序列的映射,其实现大多是基于人工标注数据集,即大量源语言文本以及对应的目标语言文本,使用循环神经网络等深度学习网络训练映射模型。当然,不能简单地将源语言文本中的每个字翻译成目标语言并直接拼接,而是需要结合两种语言的语法特点以及具体的上下文语境进行调整,而这也正是文本翻译面临的最大困难和挑战。
问答系统是对传统搜索引擎的一种改进。传统搜索引擎接受用户的关键词作为输入,以列表形式输出按相关性递减排序的搜索结果,用户仍然需要依次浏览,直到找到最符合自己要求的内容。问答系统则直接根据用户问题返回最准确的答案,其实现涉及NLP的诸多领域,例如,对用户输入内容进行理解和处理、以庞大的知识图谱作为知识存储、快速高效的知识检索和推理技术等。
聊天机器人很早便得到了应用,完成一些自动信息采集和回复的功能,但那时的聊天机器人主要基于关键词和模板等人工制定规则,智能程度不高。近年来随着深度学习等相关技术的发展,以及海量聊天语料的积累,聊天机器人逐渐可以接受任意文本输入并输出较为合理的回复。从本质上来看,聊天机器人也属于序列到序列的映射,但其涉及对用户输入文本的理解、知识图谱、文本生成等多个领域,并且需要解决多轮对话一致性等挑战。智能聊天机器人主要包括日常调侃的聊天机器人,如微软小冰等,以及垂直领域的功能机器人,如法律、购车、医疗等领域的专业咨询机器人。它们作为用户需求的万能入口,吸引了大量研究机构和创业公司的密切关注。
动态 | 国家自然科学基金委员会发布项目申报指南 包括区块链相关研究:3月5日,国家自然科学基金委员会发布2019年度区域创新发展联合基金项目的申报指南。其中包括面向西部物流中心的区块链动产交易与智能威胁感知关键技术,研究内容是围绕四川在建设西部物流中心方面的技术需求,研究基于区块链的可信交易与智能威胁感知关键技术,为区块链应用提供实时的威胁感知和处理平台,探索解决威胁感知终端数据获取及高效存储和查询难题的方法。据悉,区域创新发展联合基金是由四川省与国家自然科学基金委于2018年底共建,今年拟在七个领域49个方向上进行资助,每个方向拟设立1个重点类项目,共计49个项目。260万元/项,项目执行周期4年。[2019/3/7]
2.使用jieba分词处理中文
我们对NLP是什么和做什么,以及和NLP领域相关的内容和应用有了大致的概览,现在通过Python中的jieba来部分实现中文分词。
2.1jieba中文分词
中文分词是中文NLP的第一步,一个优秀的分词系统取决于足够的语料和完善的模型,很多机构和公司也都会开发和维护自己的分词系统。这里推荐的是一款完全开源、简单易用的分词工具,jieba中文分词。官网是里面提供了详细的说明文档。虽然jieba分词的性能并不是最优秀的,但它开源免费、使用简单、功能丰富,并且支持多种编程语言实现。
以下使用Python中的jieba分词完成一些基础的NLP任务,如果对jieba分词感兴趣,希望了解更多内容,可以参考官方使用文档。
首先没有jieba分词的话需要安装,使用pip即可安装。
pipinstalljieba
2.2中文分词
中文分词的模型实现主要分为两大类:基于规则和基于统计。
基于规则是指根据一个已有的词典,采用前向最大匹配、后向最大匹配、双向最大匹配等人工设定的规则来进行分词。例如对于“上海自来水来自海上”这句话,使用前向最大匹配,即从前向后扫描,使分出来的词存在于词典中并且尽可能长,则可以得到“上海/自来水/来自/海上”。这类方法思想简单且易于实现,对数据量的要求也不高。当然,分词使用的规则可以设计得更复杂,从而使分词效果更理想。但是由于中文博大精深、语法千变万化,很难设计足够全面而且通用的规则,并且具体的上下文语境、词语之间的搭配组合也都会影响到最终的分词结果,这些挑战都使得基于规则的分词模型并不能很好地满足需求。
声音 | 美国参议院能源和自然资源委员会主席:矿场或致其他用户用电成本增加:据coindesk报道,美国参议院能源和自然资源委员会周三举行了一次听证会,讨论了加密货币挖矿的成本以及公共部门使用区块链的机会。委员会主席、阿拉斯加参议员Lisa Murkowski表示,新的加密挖矿场在地方层面对电力需求的不断增长可能会给公用事业供应商带来压力,甚至可能会对电网造成损害。她担心这可能会导致提供商其他客户的成本增加。[2018/8/22]
基于统计是从大量人工标注语料中总结词的概率分布以及词之间的常用搭配,使用有监督学习训练分词模型。对于“上海自来水来自海上”这句话,一个最简单的统计分词想法是,尝试所有可能的分词方案,因为任何两个字之间,要么需要切分,要么无需切分。对于全部可能的分词方案,根据语料统计每种方案出现的概率,然后保留概率最大的一种。很显然,“上海/自来水/来自/海上”的出现概率比“上海自/来水/来自/海上”更高,因为“上海”和“自来水”在标注语料中出现的次数比“上海自”和“来水”更多。
其他常用的基于统计的分词模型还有HMM和CRF等,以及将中文分词视为序列标注问题,进而使用有监督学习、深度神经网络等模型进行中文分词。
jieba分词结合了基于规则和基于统计两类方法。首先基于前缀词典进行词图扫描,前缀词典是指词典中的词按照前缀包含的顺序排列,例如词典中出现了“上”,之后以“上”开头的词都会出现在这一块,例如“上海”,进而会出现“上海市”,从而形成一种层级包含结构。如果将词看作节点,词和词之间的分词符看作边,那么一种分词方案则对应从第一个字到最后一个字的一条分词路径。因此,基于前缀词典可以快速构建包含全部可能分词结果的有向无环图,这个图中包含多条分词路径,有向是指全部的路径都始于第一个字、止于最后一个字,无环是指节点之间不构成闭环。基于标注语料,使用动态规划的方法可以找出最大概率路径,并将其作为最终的分词结果。
jieba提供了3种分词模式。
·精确模式:试图将句子最精确地切开,适合文本分析。·全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
·搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
以下代码使用jieba实现中文分词,使用jieba.cut()函数并传入待分词的文本字符串即可。使用cut_all参数控制选择使用全模式还是精确模式,默认为精确模式。如果需要使用搜索引擎模式,使用jieba.cut_for_search()函数即可。运行以下代码之后,jieba首先会加载自带的前缀词典,然后完成相应的分词任务。
IBM呼吁使用区块链来减轻自然灾害:据geekzone报道,近日,IBM和合作伙伴发起了“全球代码倡议”(Code Global Initiative)的号召,通过使用云、数据、人工智能和区块链来减轻自然灾害,此举将初创企业、学术和企业开发人员联合起来,解决社会最紧迫的问题之一:预防、应对和减轻自然灾害迫害。[2018/5/25]
importjieba
seg_list=jieba.cut("我来到清华大学",cut_all=True)
Billions项目组即使用一个拼接符将一个列表拼成字符串
print("/".join(seg_list))Billions项目组精确模式
seg_list=jieba.cut("他来到了网易杭研大厦")Billions项目组搜索引擎模式
print("/".join(seg_list))
2.3关键词提取
jieba实现了TF-IDF和TextRank这两种关键词提取算法,直接调用即可。当然,提取关键词的前提是中文分词,所以这里也会使用到jieba自带的前缀词典和IDF权重词典。
对于提取的关键词以及权重,将每个关键词的权重作为文字大小,便可以进行字符云可视化。
2.4词性标注
jieba在进行中文分词的同时,还可以完成词性标注任务。根据分词结果中每个词的词性,可以初步实现命名实体识别,即将标注为nr的词视为人名,将标注为ns的词视为地名等。所有标点符号都会被标注为x,因此可以根据这个方法去除分词结果中的标点符号。
3.词嵌入的概念和实现
词嵌入是一项非常重要且应用广泛的技术,可以将文本和词语转换为机器能够接受的数值向量,这里详细讨论其概念和实现。
3.1语言的表示
如何向计算机解释一个词语的意思?或者说如何表示一个词语才能恰当地体现出其包含的语义?看到“苹果”这个词时,我们会联想起可以吃的苹果这一水果,还会联想起乔布斯创建的苹果公司,因此一个词可以包含多重语义。如果让计算机分析“苹果”和“梨子”两个词之间的相关性,通过字符串匹配只能得到完全不相等的结论,但是我们知道它们都属于水果,因此词语所蕴含的语义实际上非常复杂,无法通过简单的字符串表示。
语言的表示主要有两种:符号主义和分布式表示。
符号主义
符号主义中典型的代表是Bagofwords,即词袋模型。如果将语料词典中的每个词都看作一个袋子,那么一句话无非是选择一些袋子,然后将出现的词丢入相应的袋子。用数学的语言来说,假设词典中一共有N个词,就可以用N个N维向量来表示每个词。以下是用Python描述的一个简单例子,这里的词典中只有5个词:苹果、梨子、香蕉、和、好吃,分别用一个五维向量表示,仅对应的维度上为1,其他维度都为0。基于词袋模型可以方便地用一个N维向量表示任何一句话,每个维度的值即对应的词出现的次数。
词袋模型虽然简单,但其缺点也十分显著。主要有以下几点。
·当词典中词的数量增大时,向量的维度将随之增大。虽然常用的汉字只有几千个,但是依然会给计算带来很大的不便。
·无论是词还是句子的表示,向量都过于稀疏,除了少数维度之外的大多数维度都为0。
·每个词对应的向量在空间上都两两正交,任意一对向量之间的内积等数值特征都为0,无法表达词语之间的语义关联和差异。
·句子的向量表示丢失了词序特征,即“我很不高兴”和“不我很高兴”对应的向量相同,而这显然是不符合语义的。
分布式表示
分布式表示中典型的代表是WordEmbedding,即词嵌入,使用低维、稠密、实值的词向量来表示每一个词,从而赋予词语丰富的语义含义,并使得计算词语相关度成为可能。以最简单的情况为例,如果使用二维向量来表示词语,那么可以将每个词看作平面上的一个点,点的位置即横纵坐标由对应的二维向量确定,可以是任意且连续的。如果希望点的位置中蕴含词的语义,那么平面上位置相邻的点应当具有相关或相似的语义。用数学的语言来说,两个词具有语义相关或相似,则它们对应的词向量之间距离相近,度量向量之间的距离可以使用经典的欧拉距离和余弦相似度等。
词嵌入可以将词典中的每个词映射成对应的词向量,一个好的词嵌入模型应当满足以下两方面要求。
·相关:语义相关或相似的词语,它们对应的词向量之间距离相近,例如“苹果”和“梨子”的词向量距离相近。
·类比:具有类比关系的4个词语,例如,男人对于女人,类比国王对于王后,满足男人-女人=国王-王后,即保持词向量之间的关联类比,其中的减号表示两个词向量之间求差。
这样一来,通过词嵌入模型得到的词向量中既包含了词本身的语义,又蕴含了词之间的关联,同时具备低维、稠密、实值等优点,可以直接输入计算机并进行后续分析。但词典中的词如此之多,词本身的语义便十分丰富,词之间的关联则更为复杂,所以相对于词袋模型,训练一个足够好的词向量模型更加困难。
3.2训练词向量
词向量的训练主要是基于无监督学习,从大量文本语料中学习出每个词的最佳词向量,如维基百科、大量新闻报道等。训练的核心思想是,语义相关或相似的词语,大多具有相似的上下文,即它们经常在相似的语境中出现,例如,“苹果”和“梨子”的上下文中可能都会出现类似“吃”“水果”等词语,可以使用“开心”的语境一般也能使用“高兴”。
词嵌入模型中的典型代表是Word2Vec,模型实现原理可以参考Mikolov的两篇文章,,主要包括CBOW和Skip-Gram两个模型,前者根据上下文预测对应的当前词语,后者根据当前词语预测相应的上下文。如果希望进一步深入理解词嵌入模型训练的原理和细节,可以仔细研读以上两篇文章。如果仅需要应用词嵌入模型,则直接了解如何用代码实现即可。
3.3代码实现
gensim是一款开源的Python工具包,用于从非结构化文本中无监督地学习文本隐层的主题向量表示,支持包括TF-IDF、LSA、LDA和Word2Vec在内的多种主题模型算法,并提供了诸如相似度计算、信息检索等常用任务的API接口。gensim官网对于其中Word2Vec模型的介绍为里面提供了和Word2Vec相关的完整使用文档。首先如果没有gensim的话,使用pip即可安装。
pipinstallgensim
另外,gensim仅提供了Word2Vec的模型实现,训练词向量的另一个必须条件是足够大的文本语料。这里将要使用的是中文维基百科语料,已经整理成文本文件并放在网盘上,直接下载使用即可,提取密码为kade。
下载之后,可以在SublimeText中打开并查看其内容,文件名和后缀名可以不用在意,因为SublimeText支持打开任意类型的文本文件。其中每一行是一条维基百科,即一项词条对应的百科内容,并且已经完成了分词处理。
以下代码使用gensim提供的Word2Vec模型训练并使用词向量,主要包括加载包、训练模型、保存模型、加载模型、使用模型等步骤。
除此之外,gensim中的Word2Vec还实现了多项NLP功能,例如,从多个词中找出和其他词相关性相对更弱的一个,以及根据给定的3个词类比推理出第4个词等,详细使用方法可以参考官方完整文档。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。