概述

此文档为了更好的理解自然语言处理(natural language processing),自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。接下来会讨论一些NLP在国内外的发展状况和实际应用的一些例子,了解当前最前沿的NLP应用并掌握一定的NLP技术是接下来自己需要做的。

NLP简述

NLP是研究人与人交际中以及在人与计算机交际中的语言问题的一门学科。NLP主要有五个主要任务:分类、匹配、翻译、结构化预测、与序贯决策过程。NLP中的绝大多数问题皆可归入其中的一个,如下表所示。在这些任务中,单词、词组、语句、段落甚至文档通常被看作标记(字符串)序列而采取相似的处理,尽管它们的复杂度并不相同。事实上,语句是 NLP 中最常用的处理单元。

任务 描述 应用
分类 给每个string指定一个标签 文本分类、情感分析
匹配 匹配两个strings 信息检索、问答系统
翻译 翻译某种语言 机器翻译、自动语音识别
结构化预测 将每个string映射为一种结构 命名实体识别、中文分词、词性标注、句法分析
有序决策过程 对一个动态的过程做出反应 多伦对话系统

应用简介

文本分类:用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。

情感分析:又称意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。

信息检索:信息按一定的方式进行加工、整理、组织并存储起来,再根据信息用户特定的需要将相关信息准确的查找出来的过程。

问答系统:用准确、简洁的自然语言回答用户用自然语言提出的问题。

机器翻译:是利用计算机将一种自然语言(源语言)转换为另一种自然语言(目标语言)的过程,除了传统的文本翻译之外,还有比较特殊的手语翻译和唇语翻译。

自动语音识别:一种将人的语音转换为文本的技术。

命名实体识别:是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。

中文分词:指的是将一个汉字序列切分成一个个单独的词。

词性标注:利用语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术。

句法分析:依存句法分析接口可自动分析文本中的依存句法结构信息,利用句子中词与词之间的依存关系来表示词语的句法结构信息(如“主谓”、“动宾”、“定中”等结构关系),并用树状结构来表示整句的结构(如“主谓宾”、“定状补”等)。

多伦对话系统:(封闭域)多轮对话是一种,在人机对话中,初步明确用户意图之后,获取必要信息以最终得到明确用户指令的方式。

国内外NLP的应用

由于NLP领域在工业界内还属于探索状态,下表只是罗列了一下了解到的行业内较为优异的公司从事的领域和相关产品

公司 关注点 产品
谷歌 机器翻译、知识图谱(智能化搜索引擎) 谷歌翻译、谷歌浏览器
微软 机器翻译、对话平台、中国文化、阅读理解 微软翻译、小娜、小冰、微软对联
IBM 对话平台运用在医疗、金融、物联网 沃森
百度 机器翻译、知识图谱、对话平台 度秘、百度检索、小度机器人
阿里 智能导购(技术快速的跟业务对接) 优酷、YunOS、蚂蚁金服、资讯搜索
腾讯 社交、内容、游戏 腾讯觅影、微信、qq

NLP技术支持

接下来研究的重点在于文本分类和情感分析方向,百度,bosonnlp,阿里(收费),腾讯(收费)等公司都提供了优秀的api接口。下面是关于两方面的简单应用。

百度API

文本分类

对文章按照内容类型进行自动分类,首批支持娱乐、体育、科技等26个主流内容类型,为文章聚类、文本内容分析等应用提供基础技术支持。 目前支持的一级粗粒度分类类目如下:1、国际 2、体育 3、娱乐 4、社会 5、财经 6、时事 7、科技 8、情感 9、汽车 10、教育 11、时尚 12、游戏 13、军事 14、旅游 15、美食 16、文化 17、健康养生 18、搞笑 19、家居 20、动漫 21、宠物 22、母婴育儿 23、星座运势 24、历史 25、音乐 26、综合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from aip import AipNlp
APP_ID = '15438079'
API_KEY = 'rwAgYHnVN0bGkuksdvk7piio'
SECRET_KEY = 'PAw4ffLotYoUMKcOS57oF2WrOtCjWTRC'
client = AipNlp(APP_ID,API_KEY, SECRET_KEY)
title = '欧洲冠军杯足球赛'
content = "欧洲冠军联赛是欧洲足球协会联盟主办的年度足球比赛,代表欧洲俱乐部足球最高荣誉和水平,被认为是全世界最高素质、最具影响力以及最高水平的俱乐部赛事,亦是世界上奖金最高的足球赛事和体育赛事之一。"
client.topic(title, content)

##结果展示
{'log_id': 6074973177044352305,
'item': {'lv2_tag_list': [{'score': 0.915631, 'tag': '足球'},
{'score': 0.803507, 'tag': '国际足球'},
{'score': 0.77813, 'tag': '英超'}],
'lv1_tag_list': [{'score': 0.830915, 'tag': '体育'}]}}

情感倾向分析

对包含主观观点信息的文本进行情感极性类别(积极、消极、中性)的判断,并给出相应的置信度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from aip import AipNlp
APP_ID = '15438079'
API_KEY = 'rwAgYHnVN0bGkuksdvk7piio'
SECRET_KEY = 'PAw4ffLotYoUMKcOS57oF2WrOtCjWTRC'
client = AipNlp(APP_ID,API_KEY, SECRET_KEY)
text = "苹果是一家伟大的公司"
client.sentimentClassify(text)

##结果展示
{'log_id': 9106725229255700145,
'text': '苹果是一家伟大的公司',
'items': [{'positive_prob': 0.727802, //表示属于积极类别的概率
'confidence': 0.395115, //表示分类的置信度
'negative_prob': 0.272198, //表示属于消极类别的概率
'sentiment': 2}]} //表示情感极性分类结果

百度API优势

  1. 永久免费。2018年5月11日,百度自然语言处理技术宣布对外永久免费,且不限调用量。
  2. 功能丰富。包括词法分析、依存句法分析、词向量表示、DNN语言模型、词义相似度、短文本相似度、评论观点抽取、情感倾向分析、文章标签、文章分类等。
  3. 接口易用。标准化接口封装,通过云计算调用可快速使用工具,降低开发人力成本。

bosonnlp

新闻分类

将新闻文本归类到预设的 14 个分类当中:0、体育 1、教育 2、财经 3、社会 4、娱乐 5、军事 6、国内 7、科技 8、互联网 9、房地产 10、国际 11、女人 12、汽车 13、游戏。

1
2
3
4
5
6
7
8
9
from bosonnlp import BosonNLP
import os
nlp = BosonNLP('HpikDzL0.32936.Hi3mJFXh1P1b')
nlp.classify(['俄否决安理会谴责叙军战机空袭阿勒颇平民',
'邓紫棋谈男友林宥嘉:我觉得我比他唱得好',
'Facebook收购印度初创公司'])

##结果展示
[5, 4, 8]

情感分析

其接口将文本的情感分为负面和非负面两类。本引擎用微博、新闻、汽车、餐饮等不同行业语料进行标注和机器学习,调用时请通过 URL 参数选择特定的模型,以获得最佳的情感判断准确率。

1
2
3
4
5
6
7
8
9
from bosonnlp import BosonNLP
import os
nlp = BosonNLP('HpikDzL0.32936.Hi3mJFXh1P1b')
s = ['苹果是一家垃圾公司', '美好的世界']
result = nlp.sentiment(s)
print(result)

##结果展示
[[0.01819305539338867, 0.9818069446066113], [0.92706110187413, 0.07293889812586994]]

bosonnlp的优势

BOSON实验室的优点在于对于某一个单文本或者多文本,他能够得出一个综合的分析结果

  1. 单文本分析:只输入一段文本,输出的分析结果包括词性分析、实体识别、依存文法、情感分析、新闻摘要、新闻分类、关键词提取、语义联系。
  2. 多文本分析:同时输入多段文本、新闻,输出的分析结果包括话题聚类、情感分析、词云图、词频图。

总结

NLP最新进展

文本分类通用规律

2018年7月,谷歌做了45万次不同类型的文本分类后,总结出一个对于文本分类和情感分析而言通用的“模型选择算法”。

文本分类的流程图

1
2
3
4
5
6
7
graph LR
搜集数据-->探索数据
探索数据-->选择模型
选择模型-->准备数据
准备数据-->构建训练和评估模型
构建训练和评估模型-->调优超参数
调优超参数-->部署模型

我们预处理数据的方式将取决于我们选择的模型。模型可以大致分为两类:使用单词排序信息的模型(序列模型),以及仅将文本视为单词的“bags”(sets)的模型(n-gram模型)。

  • 序列模型:卷积神经网络(CNN),递归神经网络(RNN)及其变体。

  • n-gram模型:逻辑回归(LR),支持向量机(SVM),梯度提升树等。

结论

在实验中,其观察到“样本数”(S)与“每个样本的单词数”(W)的比率与模型的性能具有相关性。

当该比率的值很小(<1500)时,以n-gram作为输入的小型多层感知机表现得更好,或者说至少与序列模型一样好。 MLP易于定义和理解,而且比序列模型花费的计算时间更少。(感觉如果数据量特别大的python这个工具也不一定能用)

当此比率的值很大(> = 1500)时,使用序列模型。

BERT

2018年10月,谷歌新发布的一种模型BERT(Bidirectional Encoder Representations from Transformers),在NLP业内引起巨大反响。BERT在机器阅读理解测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且还在11种不同NLP任务中创出最佳成绩。

具体做法:

  1. 采取新的预训练的目标函数:the “masked language model” (MLM) 对于mask随机输入一些单词(80%的时间真的用[MASK]取代被选中的词,10%的时间用一个随机词取代它,10%的时间保持不变),然后在预训练中对它们进行预测。这样做的好处是学习到的表征能够融合两个方向上的内容。
  2. 增加句子级别的任务:“next sentence prediction”。作者同时预训练了一个“next sentence prediction”任务。具体做法是随机替换一些句子,然后利用上一句进行此句是否为下一句的预测。

模型框架

BASE:L=12, H=768, A=12, Total Parameters=110M

LARGE:L=24, H=1024, A=16, Total Parameters=340M

这里的L为神经网络层数,H为隐藏向量参数,A为自注意力头数

结论

  • 在大数据中效果好,但如果模型经过足够的预训练,在小任务中大模型也能增长。
  • 计算成本相当高,作者动用了谷歌 Cloud AI 资源,用了 64 颗 TPU,算了 4 天,模型参数寻优的训练过程才收敛。