大家好,我是为人造的智能操碎了心的智能禅师。
本文是《NLP 可以很好玩》系列教程的第二篇,由作者 Adam Geitgey 授权在人工智能头条翻译发表。
Adam Geitgey 毕业于佐治亚理工学院,曾在团购网站 Groupon 担任软件工程师总监。目前是软件工程和机器学习顾问,课程作者,Linkedin Learning 合作讲师。
《NLP 可以很好玩》系列教程,用易于理解的案例,清晰通畅的方式,教会大家写出可以理解人类书面语言的程序。
第一篇《用 Python 构建 NLP Pipeline,从思路到具体代码,这篇文章一次性都讲到了》中(链接在文章末尾),我们使用 Python 构建了一个 NLP Pipeline,通过逻辑化的方式解析语法和结构,从而进行英语文本处理。
而今次则可以认识到,文本分类模型是如何轻松解决 NLP Pipeline 的短板,在不经过分析语法结构,仅仅通过对大量数据的相关性,实现快速、高准确度、低硬件需求的语义分析。
全文大约2000字。读完可能需要下面这首歌的时间
?
难题
先回顾一下 NLP Pipeline 的方式是怎么运作的:首先将文本分成句子,然后将句子分解为名词和动词,接着找出这些词之间的关系,依此类推。
这种方法非常合理,非常合乎逻辑。但同时也导致这种方式使用条件非常苛刻,需要厘清语法结构,对语法(grammar)有非常强的依赖性。
然而不幸的是,人类大部分时间都是非理性的,语言也并不符合语法结构,而且非常依赖使用场景,这也是为什么会有误解这种东西的存在。
很多脱离了使用场景的对话,别说机器,连人类自己都理解不来。通过 NLP Pipeline 的方式去解析,就显得有点欺负人了。
再举个例子。下图是 Adam 在国外的“58 + 点评”网站 Yelp 上,对一个公园的评价:
Adam 给了一个五星评价。通过这个五星评价,机器能判断出用户满意度是非常高的。
但如果没有星级评分呢?如果作者的评价中不出现明确的“满意”“不满意”的文字呢?比如作者说:这个公园,秋风送爽,风和日丽,鸟语花香。那么机器该如何从这条评价的字里行间,判断作者的心思呢?
这个时候,就可以将这种复杂的语言理解任务重新定义为一个简单的分类问题。
分类模型
我们先设置一个简单的线性分类器,用于接收单词。分类器的输入是评论的文本;输出是5个固定标签之一:“1星”,“2星”,“3星”,“4星”,以及“5星”。
要想分类器能够可靠地预测,那它就必须以某种方式,充分的理解整个文本的含义,从而做出判断。
训练文本分类模型
首先,我们收集大量(大量的意思是百万量级)类似地点(比如:公园,企业,地标,酒店…)的用户评论,按照评星分类,这样我们就能得出文本和评星之间的对应关系。是不是很简单?
但简单的东西,应用场景可是一点都不简单。比如你现在可以成立一家分析社交媒体趋势的公司,监测微博上跟品牌相关的评价内容,给品牌做用户满意度跟踪和预测,提前应对即将到来的负面信息。品牌就有了更加充足的时间去准备危机公关,听着都感觉很刺激。
甚至我们可以做一个触发开关,当评价走低的时候ÿ