当前位置: 代码迷 >> 综合 >> 自然语言处理分类
  详细解决方案

自然语言处理分类

热度:80   发布时间:2024-02-13 06:24:59.0

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 的优点;
  • 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词向量的歧义问题

例如,词”苹果”可以指代水果也可以指代苹果手机。在对“苹果”

进行训练时,将会对其对应的词向量向两个方向拉伸,进而造成词向量歧义。

词向量的歧义将会对词向量的应用效果产生影响。例如,对苹果进行序列标注,指代手机的苹果应打上品牌词标签,而指代水果的苹果对应打上产品词标签。对同一个词打上多种不同的标签而采用同一个词向量,将降低词性标注的效果。

通常解决这一问题是对词向量进行聚类,以多个向量来表示同一个词。

四、机器翻译

    有关机器翻译这一任务的研究已延续数十年。与词性标注,语法解析任务不同,机器翻译模型的性能依然不够强。当前流行的方法是应用深度学习实现高性能的机器翻译。这一任务依然任重道远。学术界,工业界都相当关注

五、语义表示

目标是将字,词,句,文章的语义表示在合适的向量空间中,以此为基础提高各项任务中模型的性能。随着机器学习的发展,语义表示已成为自然语言处理的一大核心。尤其最近深度学习很火,这一领域也是火得不行。

六、序列标注任务

    序列标注任务是NLP里非常基础和重要的任务,例如分词、NER等都属于序列标注任务,包括一些预测span的阅读理解任务也可归于此列。

分词通常是中文自然语言处理的第一步(随着深度学习模型表征能力越来越强,慢慢证明,分词未必是必要的);NER是非常重要和基础的信息抽取任务,在非常多的场景中都需要用到,例如聊天机器人中的槽位抽取、文本结构化过程中的实体抽取等等。

 

七、文本分类

文本分类是一个不难理解的概念,即通过计算机对输入文本进行分类,例如判断“你真是个帅哥啊”这句话是褒义还是贬义。文本分类的应用场景很多,例如情感分类、机器人中的意图识别等。

听上去,分类问题似乎是个不难解决的问题,实际上文本分类有它的难度。当类别非常多或者类别与类别之间差异很小时,文本分类就开始变得困难;再者,有时需要考虑额外特征才能分类正确,例如常常需要根据说话者语气,才能判断“你真是个帅哥啊”这句话是讽刺还是真心的赞美。

 

早期有一些基于传统机器学习的文本分类,例如基于某种词语特征的的贝叶斯模型,SVM分类器等。随着深度学习的发展,LSTM+softmax/CNN+softmax模型变成了一种非常流行的文本分类架构,基于此Fasttext、textCNN等便捷高效的开源文本分类工具也开始流行。此外,结合Attention等技巧与概念能够一定程度的提高模型的效果。文本分类还有另外一种模式,即通过将文本向量化,再通过聚类获得类别,NLTK等开源NLP工具都有便捷的Doc2vec API。如果觉得效果不好,可以试试BERT的【CLS】向量。此外,还可以增加TF-IDF模块,构建更有表达能力的DocVec。

八、 信息提取任务

  信息提取(IE)的目标是将文本信息转化为结构化信息,起初用于定位自然语言文档中的特定信息。广泛的看,信息提取其实是一个非常宽泛的概念,从文本提出感兴趣的内容就可以称为信息提取。在NLP中常常用实体抽取、关系抽取以及事件抽取等手段进行信息抽取。实体抽取是序列标记问题,上面已经介绍过,关系抽取以及事件抽取则通常转化为分类的任务。关系抽取常常需要先确认subject以及object。所以,关系抽取任务常常伴随着实体抽取的要求。

文本摘要自动抽取(自动摘要,标题生成)是文本信息抽取的主要任务之一,也是自然语言处理 NLP(Nature Language Process)领域的主要研究方向,它是指利用计算机自动从文本中抽取重要信息,形成摘要的方式表达原文。根据对信息的抽取方式的不同,可将文本自动摘要抽取技术分为两大类:抽取式(extractive)文本摘要生成方式和理解式(abstractive)文本摘要生成方式。抽取式文本摘要生成方法统计文本中各个句子的权重,根据权值进行排序选取重要的句子作为文本摘要,是本次调研的着力点。

早期,信息提取多使用正则和传统的机器学习方法。随着深度学习的快速发展,信息提取技术也开始迅速发展。实体抽取与关系抽取从Pipline的方式进化到end-to-end的方式。使用的特征抽取器也逐步进化,从LSTM/CNN到transformer。需要特别提出的是,BERT在信息抽取方面表现出色,基于BERT和阅读理解任务来做信息抽取,是一种非常别致的方式。

九、场景任务

   此外,NLP还有一些复杂的应用场景,他们可能是多种NLP技术的应用和综合,例如聊天机器人、知识图谱、文本搜索以及文本推荐系统等。

1. 搜索是NLP技术最早得到大规模应用的技术,例如百度搜索、知乎话题搜索以及各大互联网公司的query搜索技术,都涉及到语义匹配或文本分类技术。此外,大型的搜索引擎,知识图谱的搭建是必须的。

2. 推荐系统在一定层面来说是跟搜索场景相反的。搜索是基于用户的意图,在文本库中寻找匹配项;推荐则相反,通常基于积累的用户信息,给用户推荐可能感兴趣的内容。推荐系统常常涉及用户画像、标签定义等过程,需要一定程度的依赖NLP技术。

3. 聊天机器人是目前NLP技术应用最多的场景,基于NLP技术构建一个能够替代客服、销售、办公文员是这一任务的终极目标。目前,聊天机器人已经以各种形态出现在人们面前,有站在银行门口迎接顾客的迎宾机器人,有放在卧室床头的智能音箱,有呆在各个APP首页的助手机器人等等。在聊天机器人中,运用了文本分类、语义匹配、对话管理、实体识别等大量的NLP技术。要做好是一件难度大、超复杂的任务。

4. 知识图谱是AI时代一个非常重要基础设施,大规模结构化的知识网络的搭建,能够重塑很多的智能场景。