⾃然语⾔处理分类
NLP学习
Nlp基本分类
NLP领域的任务分为两个类别:
第⼀类是⼈⼯智能NLP。包括词性标注,分词,语法解析,语⾔模型,信息检索,信息抽取,语义表⽰,⽂本分类。这些任务发展较为成熟,各种相关⼯作的主要⽬的是提⾼当前模型的性能。
第⼆类是⼈⼯智障NLP。包括机器翻译,对话系统,问答系统。⽬前模型的性能尚不尽如⼈意,有些任务上甚⾄没有⾜够多的,真正有影响⼒的⼯作。
保剑锋老婆⼀、⽂本分类--情感分类
1.定义
情感分类是对带有感情⾊彩的主观性⽂本进⾏分析、推理的过程,即分析对说话⼈的态度,倾向正⾯,还是反⾯。它与传统的⽂本主题分类⼜不相同,传统主题分类是分析⽂本讨论的客观内容,⽽情感分类
是要从⽂本中得到它是否⽀持某种观点的信息。⽐如,“⽇媒:认为歼-31能够抗衡F-35,这种说法颇具恭维的意味。”传统主题分类是要将其归为类别为“军事”主题,⽽情感分类则要挖掘出⽇媒对于“歼-31能够抗衡F-35”这个观点,持反⾯态度。这是⼀项具有较⼤实⽤价值的分类技术,可以在⼀定程度上解决⽹络评论信息杂乱的现象,⽅便⽤户准确定位所需信息。按照处理⽂本的粒度不同,情感分析可分为词语级、短语级、句⼦级、篇章级以及多篇章级等⼏个研究层次。按照处理⽂本的类别不同,可分为基于新闻评论的情感分析和基于产品评论的情感分析。
2. 常⽤分类⽅法介绍
⽂本分类⽅法⼀般包含如下⼏个步骤:训练语料准备、⽂本预处理、特征挖掘(TF-IDF、卡⽅、互信息、信息增益、X2统计量、交叉熵、Fisher判别式等)、分类算法选择(基于统计的Rocchio算法、贝叶斯算法、KNN算法、⽀持向量机⽅法,基于规则的决策树⽅法,和较为复杂的神经⽹络)分类应⽤。具体的分类流程可以参考另⼀篇KM⽂章《⽂智背后的奥秘—⾃动⽂本分类》。这⾥,对⼀些常⽤的特征挖掘和分类算法做简单的介绍。
3.情感分类系统实现
情感分类与主题分类除了第⼀章提到的挖掘信息不同外,处理的⽂本也⼤不相同。情感分类主要处理⼀些类似评论的⽂本,这类⽂本有以下⼏个特点:时新性、短⽂本、不规则表达、信息量⼤。我们在
系统设计、算法选择时都会充分考虑到这些因素。情感分灰系统分为在线、离线两⼤流程,在线流程将⽤户输出的语句进⾏特征挖掘、情感分类、并返回结果。离线流程则负责语料下载、特征挖掘、模型训练等⼯作。
3.1 语料库建设
语料的积累是情感分类的基⽯,特征挖掘、模型分类都要以语料为材料。⽽语料⼜分为已标注的语料和未标注的语料,已标注的语料如对商家的评论、对产品的评论等,这些语料可通过星级确定客户的情感倾向;⽽未标注的语料如新闻的评论等,这些语料在使⽤前则需要分类模型或⼈⼯进⾏标注,⽽⼈⼯对语料的正负倾向,⼜是仁者见仁、智者见智,所以⼀定要与标注的同学有充分的沟通,使标注的语料达到基本可⽤的程度。
迄今,我们已对涵盖电商、新闻、影视、⾳乐、APP等类别的20多个站点评论进⾏抓取,累计已有4亿标注语料,每天新增标注语料200多万。
3.2极性词挖掘
情感分类中的极性词挖掘,有⼀种⽅法是“全词表法”,即将所有的词都作为极性词,这样的好处是单词被全⾯保留,但会导致特征维度⼤,计算复杂性⾼。我们采⽤的是“极性词表法”,就是要从⽂档中挖掘出⼀些能够代表正负极性的词或短语。如已知正⾯语
料“@jjhuang:电话本太赞了!能免费打电话,推荐你使⽤哦~”,这句话中我们需要挖掘出“赞”、“推荐”这些正极性词。分为以下两步:
1)⽂本预处理 语料中的有太多的噪⾳,我们在极性词挖掘之前要先对⽂本预处理。⽂本预处理包含了分词、去噪、最佳匹配等相关技术。分词功能向⼤家推荐腾讯TE199的分词系统,功能强⼤且全⾯,拥有短语分词、词性标注等强⼤功能。去噪需要去掉⽂档中的⽆关信息
如“@jjhuang”、html标签等,和⼀些不具有分类意义的虚词、代词如“的”、“啊”、“我”等,以起到降维的作⽤。最佳匹配则是为了确保提出的特征能够正确地反映正负倾向,如“逍遥法外”⼀词,如果提取出的是“逍遥”⼀词,则会被误认为是正⾯情感特征,⽽“逍遥法外”本⾝是⼀个负⾯情感词,这⾥⼀般可以采⽤最长匹配的⽅法。
2)极性词选择 ⽂本预处理之后,我们要从众多词语中选出⼀些词作为极性词,⽤以训练模型。我们对之前介绍的TF-IDF⽅法略作变化,⽤以降维。因为我们训练和处理的⽂本都太短,DF和TF值⼤致相同,我们⽤⼀个TF值就可以。另外,我们也计算极性词在反例中出现的频率,如正极性词“赞”必然在正极性语料中的TF值⼤于在负极性语料中的TF值,如果⼆者的差值⼤于某个域值,我们就将该特征纳⼊极性词候选集,经过⼈⼯审核后,就可以正式作为极性词使⽤。
⽬前,我们已挖掘出12w+ 极性词,通过⼈⼯审核的有 8w+ 个,每天仍会从语料中挖掘出100+ 个极
性词。
3.3极性判断
极性判断的任务是判断语料的正、负、中极性,这是⼀个复杂的三分类问题。为了将该问题简化,我们⾸先对语料做⼀个主客观判断,客观语料即为中性语料,主观语料再进⾏正、负极性的判断。这样,我们就将⼀个复杂三分类问题,简化成了两个⼆分类问题。
在分类器选择中,主客观判断我们使⽤了上节介绍的⽀持向量机模型。⽽极性判断中,我们同时使⽤了朴素贝叶斯和⽀持向量机模型。其中朴素贝叶斯使⽤⼈⼯审核过的极性词作特征,⽽⽀持向量机模型则使⽤全词表作为特征。两个模型会对输⼊的语料分别判断,给出正、负极性的概率,最后由决策模块给出语料的极性。
在朴素贝叶斯模型中,我们⽐较了多项式模型和伯努⼒模型的效果。伯努⼒模型将全语料中的单词做为反例计算,因为评测⽂本⼤多是短⽂本,导致反例太多。进⽽伯努⼒模型效果稍差于多项式模型,所以我们选择了多项式模型。
⽀持向量机模型中,我们使⽤的是台湾⼤学林智仁开发的SVM⼯具包LIBSVM,这是⼀个开源的软件包,可以解决模式识别、函数逼近和概率密度估计等机器学习基本问题,提供了线性、多项式、径向基和S形函数四种常⽤的核函数供选择。LIBSVM 使⽤的⼀般步骤是:
1. 按照LIBSVM软件包所要求的格式准备数据集;
2. 对数据进⾏简单的缩放操作;
3. 考虑选⽤RBF 核函数;
4. 采⽤交叉验证选择最佳参数C与g;
5. 采⽤最佳参数C与g 对整个训练集进⾏训练获取⽀持向量机模型;
6. 利⽤获取的模型进⾏测试与预测。
上述介绍的是我们通⽤的情感分类系统,⾯对的是通⽤的主观评论语料。但在⼀些领域中,某些⾮极性词也充分表达了⽤户的情感倾向,⽐如下载使⽤APP时,“卡死了”、“下载太慢了”就表达了⽤户的负⾯情感倾向;股票领域中,“看涨”、“⽜市”表达的就是⽤户的正⾯情感倾向。所以我们要在垂直领域中,挖掘出⼀些特殊的表达,作为极性词给情感分类系统使⽤:
垂直极性词 = 通⽤极性词 + 领域特有极性词
该系统即为垂直领域的情感分类系统。⽬前,我们已对社会事件、APP、电影⼏个领域建⽴了垂直情感分类系统。领域的覆盖正在不断扩⼤……
情感分类的⼯作,我们还在继续。我们在现在和未来还可以做更多的⼯作来优化我们的情感分类系统:
1. 挖掘更多的极性词(多领域)
2. 尝试不同的分类器,调优现有的模型
3. 句式识别:否定句,转折句,排⽐句等……
4. 语料清洗:识别⽔军评论和⽤户评论
5. 极性词扩展:采⽤近义词、反义词等⽅法,将挖掘的极性词扩展更多
⼆、信息提取--关系抽取
需要从⽂本中抽取两个或多个实体之间的语义关系,主要⽅法有下⾯⼏类:
基于模板的⽅法(hand-written patterns)
基于触发词/字符串
基于依存句法
监督学习(supervised machine learning)
机器学习
深度学习(Pipeline vs Joint Model)
半监督/⽆监督学习(semi-supervised and unsupervised)
Bootstrapping
Distant supervision
Unsupervised learning from the web
三、⽂本向量化
⽂本的向量化可谓是NLP进⼊深度学习时代的标志。所谓⽂本的向量化(embedding),就是将⽂本⽤⼀定维度的向量来表⽰,也可以理解为⽂本的数值化。通过embedding,⽂本的语义、句法等特征得以表征,便于下游模型的处理。
定义:词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。
词的向量化,最早尝试是词袋模型,后来证明,词袋模型⽆法表征词序特征,并且会带来维度灾难;Yoshua Bengio在2003年《A Neural Probabilistic Language Model》⼀⽂中提出了⼀种神经⽹络的⽅法,⽤于语⾔模型的计算,词向量作为副产品后来却引起了业界的关注。2008年Collobert和Weston展⽰了第⼀个能有效利⽤预训练词嵌⼊的研究⼯作,他们提出的神经⽹络架构,构成了当前很多⽅法的基础。这⼀项研究⼯作还率先将词嵌⼊作为 NLP 任务的⾼效⼯具。不过词嵌⼊真正⾛向NLP主流还是Mikolov 等⼈在 2013 年做出的研究《Distributed Representations of Words and Phrases and their Compositionality》。Mikolov 等研究者在这篇论⽂中提出了连续词袋模型CBOW和 Skip-Gram 模型,通过引⼊负采样等可⾏性的措施,这两种⽅法都能学习⾼质量的词向量。基于此,ELMO提出了⼀种相同词能够根据语境⽣成不同词向量的模型。⾼质量的词向量的获得,结合LSTM、CNN等神经⽹络抽取器,使得NER,⽂本分类以及信息抽取等任务获得了长⾜的进步。
此外,基于词向量的思想,从2018年开始,NLP中预训练模型开始流⾏,BERT、GPT、ALBERT以及XLNET等模型不断刷榜。
1、⽂本表⽰哪些⽅法/词向量?
下⾯对⽂本表⽰进⾏⼀个归纳,也就是对于⼀篇⽂本可以如何⽤数学语⾔表⽰呢?
基于 one-hot、tf-idf、textrank 等的 bag-of-words;
主题模型:LSA(SVD)、pLSA、LDA;
基于词向量的固定表征:Word2vec、FastText、GloVe
基于词向量的动态表征:ELMo、GPT、BERT
2、各种词向量的特点:
(1)One-hot 表⽰ :维度灾难、语义鸿沟;
(2)分布式表⽰ (distributed representation) :
矩阵分解(LSA):利⽤全局语料特征,但 SVD 求解计算复杂度⼤;
基于 NNLM/RNNLM 的词向量:词向量为副产物,存在效率不⾼等问题;
Word2vec、FastText:优化效率⾼,但是基于局部语料;
GloVe:基于全局预料,结合了 LSA 和 Word2vec 的优点;
曹大伟
dnf安全模式怎么解ELMo、GPT、BERT:动态特征;词的表⽰
在⾃然语⾔处理任务中,⾸先需要考虑词如何在计算机中表⽰。通常,有两种表⽰⽅式:one-hot representation和distribution representation。
1.1离散表⽰(one-hot representation)
传统的基于规则或基于统计的⾃然语义处理⽅法将单词看作⼀个原⼦符号
被称作one-hot representation。one-hot representation把每个词表⽰为⼀个长向量。这个向量的维度是词表⼤⼩,向量中只有⼀个维度的值为1,其余维度为0,这个维度就代表了当前的词。向量的分量只有⼀个 1,其他全为 0。1 的位置对应该词在词典中的位置。但这种词表⽰有两个缺点:(1)容易受维数灾难的困扰,尤其是将其⽤于 Deep Learning 的⼀些算法时;(2)不能很好地刻画词与词之间的相似性(术语好像叫做“词汇鸿沟”)。
例如:
苹果 [0,0,0,1,0,0,0,0,0,……]
one-hot representation相当于给每个词分配⼀个id,这就导致这种表⽰⽅式不能展⽰词与词之间的关系。另外,one-hot
representation将会导致特征空间⾮常⼤,但也带来⼀个好处,就是在⾼维空间中,很多应⽤任务线性可分。
1.2分布式表⽰(distribution representation)
word embedding指的是将词转化成⼀种分布式表⽰,⼜称词向量。分布式表⽰将词表⽰成⼀个定长的连续的稠密向量。
分布式表⽰优点:
(1)词之间存在相似关系:
演员李念是词之间存在“距离”概念,这对很多⾃然语⾔处理的任务⾮常有帮助。
(2)包含更多信息:
词向量能够包含更多信息,并且每⼀维都有特定的含义。在采⽤one-hot特征时,可以对特征向量进⾏删减,词向量则不能。
2、如何⽣成词向量
本⼩节来简单介绍词向量的⽣成技术。⽣成词向量的⽅法有很多,这些⽅法都依照⼀个思想:任⼀词的含义可以⽤它的周边词来表⽰。⽣成词向量的⽅式可分为:基于统计的⽅法和基于语⾔模型(language model)的⽅法。
2.1 基于统计⽅法
2.1.1 共现矩阵
通过统计⼀个事先指定⼤⼩的窗⼝内的word共现次数,以word周边的共现词的次数做为当前word的vector。具体来说,我们通过从⼤量的语料⽂本中构建⼀个共现矩阵来定义word representation。
矩阵定义的词向量在⼀定程度上缓解了one-hot向量相似度为0的问题,但没有解决数据稀疏性和维度灾难的问题。
2.1.2 SVD(奇异值分解)
既然基于co-occurrence矩阵得到的离散词向量存在着⾼维和稀疏性的问题,⼀个⾃然⽽然的解决思路是对原始词向量进⾏降维,从⽽得到⼀个稠密的连续词向量。对2.1.1中矩阵,进⾏SVD分解,得到矩阵正交矩阵U,对U进⾏归⼀化得到矩阵。
SVD得到了word的稠密(dense)矩阵,该矩阵具有很多良好的性质:语义相近的词在向量空间相近,甚⾄可以⼀定程度反映word间的线性关系。
2.2语⾔模型(language model)
语⾔模型⽣成词向量是通过训练神经⽹络语⾔模型NNLM(neural network language model),词向量做为语⾔模型的附带产出。NNLM背后的基本思想是对出现在上下⽂环境⾥的词进⾏预测,这种对上下⽂环境的预测本质上也是⼀种对共现统计特征的学习。
较著名的采⽤neural network language model⽣成词向量的⽅法有:Skip-gram、CBOW、LBL、NNLM、C&W、GloVe等。接下来,以⽬前使⽤最⼴泛CBOW模型为例,来介绍如何采⽤语⾔模型⽣成词向量。
2.2.1 CBOW(Continuous Bag-of-Word)
⽣成word的distribution representation的模型有很多,⽣成的向量效果差距不⼤(⽣成向量的效果更取决于良好的训练数据)。本节以CBOW模型中的层次化的softmax为例,介绍如何采⽤神经⽹络⽣成词向量。
CBOW模型是预测上下⽂已知的情况下,当前词出现的概率。上下⽂的选取采⽤窗⼝⽅式,即只将当
前词窗⼝范围内的词作为上下⽂。3.词向量的训练
本节将分享我使⽤词向量的⼀些经验。
3.1词向量效果的影响因素
(1)增加词向量的维度能够增加词向量效果。
(2)在同⼀领域语料下,语料越多越好,增加不相关领域语料将会降低词向量效果。
(3)⼤的上下⽂窗⼝学到的词向量更反映主题信息,⽽⼩的上下⽂窗⼝学到的词向量更反映词的功能和上下⽂语义信息。
(4)语料的纯度越⾼(杂质少),词向量效果越好。因此,在利⽤语料训练词向量时,进⾏预处理能够提⾼词向量的效果。
3.2词向量的歧义问题
例如,词”苹果”可以指代⽔果也可以指代苹果⼿机。在对“苹果”
进⾏训练时,将会对其对应的词向量向两个⽅向拉伸,进⽽造成词向量歧义。
psp小游戏
词向量的歧义将会对词向量的应⽤效果产⽣影响。例如,对苹果进⾏序列标注,指代⼿机的苹果应打上品牌词标签,⽽指代⽔果的苹果对应打上产品词标签。对同⼀个词打上多种不同的标签⽽采⽤同⼀个词向量,将降低词性标注的效果。
通常解决这⼀问题是对词向量进⾏聚类,以多个向量来表⽰同⼀个词。
女士香水品牌排行榜四、机器翻译
有关机器翻译这⼀任务的研究已延续数⼗年。与词性标注,语法解析任务不同,机器翻译模型的性能依然不够强。当前流⾏的⽅法是应⽤深度学习实现⾼性能的机器翻译。这⼀任务依然任重道远。学术界,⼯业界都相当关注
五、语义表⽰
⽬标是将字,词,句,⽂章的语义表⽰在合适的向量空间中,以此为基础提⾼各项任务中模型的性能。随着机器学习的发展,语义表⽰已成为⾃然语⾔处理的⼀⼤核⼼。尤其最近深度学习很⽕,这⼀领域也是⽕得不⾏。
六、序列标注任务
序列标注任务是NLP⾥⾮常基础和重要的任务,例如分词、NER等都属于序列标注任务,包括⼀些预测span的阅读理解任务也可归于此列。
分词通常是中⽂⾃然语⾔处理的第⼀步(随着深度学习模型表征能⼒越来越强,慢慢证明,分词未必是必要的);NER是⾮常重要和基础的信息抽取任务,在⾮常多的场景中都需要⽤到,例如聊天机器⼈中的槽位抽取、⽂本结构化过程中的实体抽取等等。
七、⽂本分类
⽂本分类是⼀个不难理解的概念,即通过计算机对输⼊⽂本进⾏分类,例如判断“你真是个帅哥啊”这句话是褒义还是贬义。⽂本分类的应⽤场景很多,例如情感分类、机器⼈中的意图识别等。
听上去,分类问题似乎是个不难解决的问题,实际上⽂本分类有它的难度。当类别⾮常多或者类别与类别之间差异很⼩时,⽂本分类就开始变得困难;再者,有时需要考虑额外特征才能分类正确,例如常常需要根据说话者语⽓,才能判断“你真是个帅哥啊”这句话是讽刺还是真⼼的赞美。