NLP是什么?

进入研究生这半年来,一直在接触NLP和知识图谱相关的知识,对于一个NLP任务或者项目来说,其实是有着比较通用或者严格的流程的,所谓的模型其实知识系统中的一部分,paper中的研究大多是在已有数据集上进行的模型的评估,但是在应用中,在一个NLP项目中,需要做的是有一个大致的流程(pipline)的,结合我自己的一点理解,做一个小小的总结。

1.NLP是什么

NLP里细分领域和技术实在太多,根据NLP的终极目标,大致可以分为自然语言理解(NLU)和自然语言生成(NLG)两种。NLU侧重于如何理解文本,包括文本分类、命名实体识别、指代消歧、句法分析、机器阅读理解等;NLG则侧重于理解文本后如何生成自然文本,包括自动摘要、机器翻译、问答系统、对话机器人等。两者间不存在有明显的界限,如机器阅读理解实际属于问答系统的一个子领域。

大致来说,NLP可以分为以下几个领域:

  • 【文本检索】:多用于大规模数据的检索,典型的应用有搜索引擎。
  • 【机器翻译】:跨语种翻译,该领域目前已较为成熟。目前谷歌翻译已用上机翻技术。
  • 【文本分类/情感分析】:本质上就是个分类问题。目前也较为成熟,难点在于多标签分类(即一个文本对应多个标签,把这些标签全部找到)以及细粒度分类(二极情感分类精度很高,即好中差三类,而五级情感分类精度仍然较低,即好、较好、中、较差、差)。
  • 【信息抽取】:从不规则文本中抽取想要的信息,包括命名实体识别、关系抽取、事件抽取等。应用极广。
  • 【序列标注】:给文本中的每一个字/词打上相应的标签。是大多数NLP底层技术的核心,如分词、词性标注、关键词抽取、命名实体识别、语义角色标注等等。曾是HMM、CRF的天下,近年来逐步稳定为BiLSTM-CRF体系。
  • 【文本摘要】:从给定的文本中,聚焦到最核心的部分,自动生成摘要。
  • 【问答系统】:接受用户以自然语言表达的问题,并返回以自然语言表达的回答。常见形式为检索式抽取式生成式三种。近年来交互式也逐渐受到关注。典型应用有智能客服。
  • 【对话系统】:与问答系统有许多相通之处,区别在于问答系统旨在直接给出精准回答,回答是否口语化不在主要考虑范围内;而对话系统旨在以口语化的自然语言对话的方式解决用户问题。对话系统目前分闲聊式和任务导向型。前者主要应用有siri、小冰等;后者主要应用有车载聊天机器人。(对话系统和问答系统应该是最接近NLP终极目标的领域)。
  • 【知识图谱】:从规则或不规则的文本中提取结构化的信息,并以可视化的形式将实体间以何种方式联系表现出来。图谱本身不具有应用意义,建立在图谱基础上的知识检索、知识推理、知识发现才是知识图谱的研究方向。
  • 【文本聚类】:一个古老的领域,但现在仍未研究透彻。从大规模文本数据中自动发现规律。核心在于如何表示文本以及如何度量文本之间的距离。

所涉及的基本技术有:

  • 分词:基本算是所有NLP任务中最底层的技术。不论解决什么问题,分词永远是第一步
  • 词性标注:判断文本中的词的词性(名词、动词、形容词等等),一般作为额外特征使用
  • 句法分析:分为句法结构分析依存句法分析两种
  • 词干提取:从单词各种前缀后缀变化、时态变化等变化中还原词干,常见于英文文本处理
  • 命名实体识别:识别并抽取文本中的实体,一般采用BIO形式
  • 指代消歧:文本中的代词,如“他”“这个”等,还原成其所指实体
  • 关键词抽取:提取文本中的关键词,用以表征文本或下游应用
  • 词向量与词嵌入:把单词映射到低维空间中,并保持单词间相互关系不变。是NLP深度学习技术的基础
  • 文本生成:给定特定的文本输入,生成所需要的文本,主要应用于文本摘要、对话系统、机器翻译、问答系统等领域
  • ……

通常研究者会聚焦其中一个或者几个方向,但是如果要做一个小小的NLP项目,还是要对NLP的基本概念和基本思路有个简单的了解,这样在每一个步骤既可以使用现有的轮子,也知道从哪些方面改进模块,例如从分词、清洗文本、标准化、特征提取、建模等等每一步都可以优化,使得项目的完成度更好。

2.什么是语言模型(LM)

首先我想记录一下最近在b站贪心学院课上学习到的一个词–语言模型(Language Model),这个做NLP相关的都不会陌生,我一直理解的语言模型就是解决某个NLP问题的模型,但是通过进一步理解,其实语言模型更好的解释是简语言模型就是用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率。可以参考这个:语言模型及其实现。举个例子,在机器翻译的任务中,可以将其分为两部分,如下图所示(图片来自贪心学院):

左边的框框是翻译模型,右边的是语言模型了,可以将翻译模型得到的粗糙的或者不符合语法规则的翻译变得更为准确。这里的翻译模型是基于统计规则的,当然也可以基于概率图模型、深度学习等。那么语言模型是如何起作用的呢?它将翻译模型得到的翻译生成各种顺序的排列,然后每种排列都可以计算出它的这句话的概率,然后选出概率最大的那个排列将其作为最合适的翻译。语言模型就是算一句话符合语言规则的概率,其中语言模型可以用Uni-gram,Bi-gram,Tri-gram … n-gram等。如何计算概率呢?如图所示:

对应着Uni-gram,Bi-gram,Tri-gram,那又要问了,如何计算其中某一个具体的概率呢?一般从语料中计算,一般是计算这个词的频次除以总次词数,如果值很小取一个log,然后计算这个语句的概率。

但是对于这种模型来说,如果翻译的句子很长的话,生成的排列就会呈指数级上涨,这样对于时间复杂度是不可接受的,于是便提出了将两个模型合二为一的思路,使用贝叶斯定理,如图:

计算过程使用非常经典的维特比算法。

3.NLP项目的一般流程及基本技能

既然是NLP项目,那么我们的原始数据基本上都是文本数据,这里的文本有文章,或者网页爬取的文本数据等。那么在建模之前,需要对数据进行处理。一般来说,NLP项目的文本预处理有以下几个方面。

(1)分词(Segmentation)

常见的用来分词的工具有很多,Jieba、Hanlp、LTP等等,通常最简单的方法有前向最大匹配和后向最大匹配,但是这种方法有很多缺点或者不够准确,比如南京市长江大桥这种,分词的时候经常得不到很好或者说很准确的分词,因此研究者们就又想了一个方法,就是考虑分词的语义。

将一个句子生成所有可能的分割(存在词库中的),然后将各种分词后的结果使用模型计算一个概率,找出概率最大的也就是最符合语义的分词。但是生成所有可能的分割复杂度也太高了,于是和机器翻译类似,也是将两步合成一步,使用的算法也是维特比算法,如下图所示。

(2)数据清洗(Cleaning)

数据清洗一般包括清除爬取数据中无用的标签如html、i、tb等,特殊符号如引号、刀拉符等,停用词或者低频词如 的、啊、嗯等,以及大小写的转换。具体说一下停用词以及低频词的过滤,这个过程又叫Filting words。

英文中如their、the、an等也可以看成是停用词,但是也要符合自己的应用场景。

(3)数据归一化

对于中文来说,数据归一化其实用的不是很多,但是在英文中或者其他语言中有时候就很有必要了。例如在英文中对于相同意思但是不同的语态的词go,went,is,was等,应该系那个其归一化成为一个相同的表示,这对于后面的模型中也非常重要。还有如下图,这需要一些语言学家人为的制定一些规则。

一点收获

听了一点贪心的课感觉还是有一些值得思考的,比如要实现一个拼写纠错的小项目,这在很多搜索引擎、电商网站、输入法软件等都会用到,但是我们一般会想到啥方法呢,欧式距离、或者编辑距离是最直觉的想法,但是如果直接用编辑距离的方法,需要将用户的错误输入和词库中没个词进行比较,找出最小的距离,但是这样复杂度于词库中词的个数V有关,会降低复杂度。于是想到可以使用编辑距离直接生成然后去判断是否存在词库即可,一般判断是否在词库内可以做到复杂度为O(1)。但是还不够,因为用户输入一个错误的词会有很多的正确的可能,这如何找到最佳的呢?想到用概率的方法,即argmaxP(最佳的词|用户输入的词),这个概率也不好求解,用朴素贝叶斯转换一下就好求解了,因为对于一个正确的词,用户如何输错或偏向于那种输错可能是可以获得数据进行统计的,这样一个简单的模型就搭建好了。如图:

当然这只是一个很简单的模型,显现实中也许还要考虑用户偏好,键盘的位置等(这些都是我认为的),但是哪怕要做出一个很小的任务每一步其实都要很细致,时间复杂度和空间复杂度更是必须考虑的问题,以及数据如何获取,是否方便获取,数据量够不够,置信度高不高等等问题。

最后

其中维特比算法我觉得维特比(Viterbi)算法详解,维特比算法(Viterbi)及python实现样例这两篇博客都讲的很好,另外语言模型网上也有很多博客可以参考。准备把相关代码上传GitHub。之后准备再写几篇关于NLP相关的学习感想嘿嘿。

参考文献

知乎

kaggle 文本处理


  转载请注明: April NLP是什么?

 上一篇
Noisy Channel Model && How to estimate Language Model Noisy Channel Model && How to estimate Language Model
这是接着上一篇博客的,听了一点时间贪心的课其实觉得更多时候我们解决问题应该更专注于其背后的思想。如何考虑问题才是最重要的。 1.Noisy Channel Model先来看一张经典的Noisy Channel Model的模型图: 这张图
2020-02-26
下一篇 
js逆向小结 js逆向小结
这个寒假因为疫情的原因,在家宅了好久好久,再加上身体不太舒服,导致在家除了吃就是睡觉。这几天稍微好点了,但也不想干活,但是不能再这么躺下去了,加上之前接触过一些爬虫,所以对爬虫比较感兴趣,花了几天好好了解了一下爬虫。在此做一个小结,防止自己
2020-02-18
  目录