情感互联——互联网的大同世界之路
文章回顾了近几年NLP的发展历程,从项目实施的两个阶段中带我们梳理了NLP技术的应用演变。
第一个与大家分享的Case,基于NLP展开。分为3个部9 | 8 &分,分别是NLP的J l :发展、项目叙述、以及Lesson Learned。
讲述NLP的发展,是为了o W k X W O % j +更好地理解这门技术,为项目的展开做铺垫。Lesson Learned是笔者总结整个项目下来自己的收获。
笔者本身并非计算机课% ^ 3 H 6班,对理论知识的理解难免不深刻,以及可能会有偏差,请大家不吝指教。
目录:
- NLP的发展
- 项目阐述
- Lesson Learned
一、NLP的发展
1.1 NLP的定3 q y义
The field of study thal U 8 k v P j : t focuO U q v 3ses on thf 7 Z E 5 u e interactions between human lango E 2 D 4 + #uage and computers is called Natural Language Processing, or NLP f2 K G j !or short. It sits at the intersection of computer science, artificial intelligence, and coe M Vmputational linguistics ( Wikipeh 6 [dia)
总结一下维基百科对NLP的定义, NLP关注人类语言与电脑的交互。
使用语言,我们可以精确地描绘出大脑中的想O h ! ^ x法与事实,我们可以倾诉我们的情绪,Q [ { ) P与朋友沟通。
电脑底层的状态,只有两个,分别为0和1。
那么) u d O ! h m P,机器能不能懂人类语言呢?
1.2 NLP的发展历史
NLP的发展史,走过两个阶段。第一个阶段,由”鸟飞派“主导,第二个阶段,由”统计派“主导。
我们详细了解一下,这两个阶段区别,
阶段一,学术届对自然语言处理的理解为:要让机器完成翻译或者语音识别等只有人类才能做的事情,就必须先让计算机理解自然语言,而做到这一点f b ? | A , Q 6 -就必须让计算机拥有类似我们人类# P f V % 8 M [这样的职能。这样的方法论被称为“鸟飞派”,也就是看鸟怎样飞,就能模仿鸟造出飞机。
阶段二,今天,机器翻译已经做得不错,而且有上亿人使用过,NLP领域取G / X得如此成就的背后靠的都是数学,更准确地说,是靠统计。
阶段一到阶段二的转折时间点在1970年,推动技术路线转变的关键人物叫做弗里德里克. 贾里尼克和他领导的IBM华生实验室。(对IBM华生实验Y [ 3 e室感兴趣的朋友可以阅读吴军老师的《浪潮之巅》,书中有详细讲述。)
我们今天看到N 0 b k r的与NLP有关的应用,其背后都是基于统计学。那么,当前NLP都有哪些应用呢?4 h 9 g -
1.3 目前NLP的主要应用
当前NLP在知识图谱、智能问答、机器翻译等领域,都得到了广泛的使用。
二、[ w L X 1 I E y项目阐述
2.1 业务背景
说明:在项目阐| F k F Q述中,具体细节已经隐去。
客户是一家提供金融投融资数据库的科技公司。d # 9 : ;在其| J F I g的产品线中,* i g 6 6 0 J 4 b有一款产品叫做人物库,其中包括投资人库和创始人库。
- 创始人库供投资人查看,使用场景,当投资人考察是否要投资创业者,因此会关注创业者的学校(是否名校)、工作(大~ 8 R Q l G I !厂)、以及是否是连续创业r 4 ) ? %者、是否获得荣誉,如“30 under 30”。
- 投资人库供创业者查看,使用场景:当创业者需要投资人,会考察投资人的投资b / v v I )情况。因此会关注投资者的学校(是否名校)、工作(大厂)、投资案例、投资风格等. { N # S ; 0 #
我提供的服务,9 m + ~ 7 8便是为这两条产品线服务。因为本项目主要关注,相关人物的履历信息,因此该项目代号为「人E / [ 7 t # 4物履历信息抽取」。
需要抽取的人物履历信息,由5个部分组成:学校、工作、投资(案例)、创业经历、获取荣誉。
2.2 项目指标
项目指标包括算法指标与工程指标。
2.2.1 算法指标
算法层面,指标使用的是Recall和Precision。为了避免大家对这两个指标不太熟悉,我带大家一起回顾一下。
我们先来认识e 0 H s X O一下混淆矩阵(confusion matrix)。混淆矩阵就是分别统计分类模! | # = # .型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。矩阵中的每一行,代表的是预测的类别,每一列,{ & O 6代表的是真实的类别。
通过混淆矩阵,我们可以直观地看到系统是否混淆了两个类别。
我0 r 1 K R - e E q * )表 Positve。
- TN:当真实值为0,且预测值为0,即为TN(True Negative)
- FN:当真实值为1,而预测值为0,即为FN(False Negative)
- TP: 当真实值为1,且预测值为1,即为TP(True Positive)
- TN:当真实值为0,而预测值为1,即为FP(False Positive)
除了上面,我们还需要了解下面三个指标,分别6 J 7 } :为Recall、Precision、和F1。
- RG t q = U @ k $ecall(召回率)是说我们的Predicted Clas* s K ) P K Z j Us中,被预测R W m j s为1的这个iteX a D / em* V k B q ( f的数量,占比Actual Class中类别为1的item的数量。如果,我们完全不考虑其他的因素,_ o ? y 8我们可以将所有的itemb = G 4 t | 8 8 l都预测为1,那么我们的RecaZ B O c 3 { %ll就会很高,为1。但是在实际生产环境中,是不可以这样操作的。
- Prh A ~ % eecision(精准率)是说,我们预测的Class中,正确预测为1的item的数量,占比我们预测的所有为1item的数量。
- F1是两者的调和平均。
OkG E W ^及,为什么没有f1,或者说为什么不将f设置为72,因为如果recall 90,precin D wsion60,那么这种情况下,f1就是72嘛。
要回答上述问题,我们要从业务出发。需要记住,甚至背诵3遍。
为什么d / / % a @ - u [,A 0 # t q n制定指标的时候,一定要从业务出R g [发呢?
我们来举一个很极端的例子,如果一个模型能做f h !到recall90 precision90,是不是能说这个指标就很好了?
我Y / C * H 9 l h相信绝大多数场景下,这个模型表现都是十分优秀。请注意,我说的是绝大多数,那么哪些场景下不是呢?
比如说,癌症检测。
假设,你目前在紧密筹备一个“癌症检测”项目* j B K W L a ~。对于每一个被检测的对象,都有如下两个结果中的任意一个结果:
- 1 = 实在抱歉,你不幸患上了癌症。
- 0 = 恭喜你, G / c x / H 4你并没有换上癌症。
你同事告诉你了一个好消息,你们模型的 a A ; N O $在测试集X - ~ `上的准确率是99%。听起来很棒,但是你是一个严谨认真的AI PM,所以你决定亲自review一下测试集。
你的测试集都被专业的医学人士打上了8 r k ? N |标签。下面你测试7 b l Z U l 3 n N集的实际情况
- 一; V T ) c共有1,000,000(一E p v百万张医学影像图)
- 999,000医学影像图是良Y l J & e性(Acz O u L U B Qtual Negative)
- 1,000医学影像p w S | 1 G + /图是恶性(Actual Positive)
有了上述的数据,即我们模型验证的GroundTruth,接着,我们来看看这个模型的Predicted Result。既然,我们上面学了confusion matrix,那么我们回顾一下Confusion Matrix的两个特征,行代表PrC n Ledicted class,列代表Actual class。让我们看一下:
根( Y V B 0 S ^ D据所学,实际应用一下:
- TP(实际是Maligna X y ? Snt,预测是Malignant)
- FP(实际u K b Z是BenT 5 . | _ign,预测是Malignant)
- TN(实际是Benign,预测是Benign)
- FN(实际是M& U ! F高的。所以,尽管我们的precision只有9%,但是我们的召回有99%,这其实是一个很理想的模型表现。因为,患者有癌症,但是在检查时候被漏掉,这种情况,是任何人都不希望发生的。
可能这个时候,你会有一个疑问,这个recall和precision的重要性如何来确定呢?好问题,让我们来仔细看看。 首] l = % B H 8 o先,了解一下指标制定的原则:指标的制定取决于我们的商业目标,以及False Positive和False Negative带来的损失。
什么时候recall比precision重要
当FN会带来极大损失的g w i O h ) G g #时候,Recall= . s _ -会显得非常重要。比如,如果将恶心肿瘤预测为良性,这就是非常严重的后果。 这样的预测,会让病人无法得到应该的治疗,从而导致这位病人失去生命,并且这个过程是不可逆的!高的recall是我们希望尽量减少False Negative,尽管这样会z @ O带来更多的False Positive。但是通过一些后续的检查,我们是能够将这个FP排除的。
那什么时候precision比recall重要| = Y U f呢?
当FP会带来很大损失的时候,Precision就显得非常重要。比如在邮件检测里面。垃圾邮件是1,正常邮件是0,如果有很多FP的话,那么大量的正常邮件都会被存储到垃圾邮件。这样造成的后果是非常严重的。
到了这里,让我们来回过头去看看我们业务的recall 90 precision 60,我们会为什么这样制定?这还是得从业务背景谈起。在我和& f u # I Z团队分享,如何评估客户AI需求时候,一个很重要的步骤是,首先需要了解这个在没有机器的条件下,他们是如何做这件事的?他们做这件事的v h T } 7 w g判断标准?以及具- s m L C体的操作步骤。
只有在了解了这个的前提下 ,我们才可以根据这些domain knowledge来进行AI解决方案设计。提取人物履历信息这些工作是由客户的运营同学负责的,那么客户的运营同学之前是怎么做的呢?他们会阅读一篇文章,然后找出符合人物履历标准_ m e v 6 Z的信息] f 6 },做抽取,并进行二次加工。
注意哦,他们的重点是,需要做二次加j 9 ( L { j工,这里的二次加工指的是什么呢?就是将人物的一些履历信息进行整合。因此,其实对他们来说,召回不会最重要的,因为不断有新的语料(文F = a ] ; h X章)U . 3发布,他们总可以获取相关人物的信息,但是从一篇好几千字甚至上万字的文章中,准确定位人物履历有关的信息,就显得非常重要,可以提升效率。
是的,效率, 是我们制定我们算法指标的标准,提高召回,可以提高运营同学的效率。
下一个问题?为什么不将f1设置P ! 4 a ?为72呢?因为如果n l f y B s D我们recald d & Y $ Zl 90,但是pO = q 4 ] ] T p krecision 60,最后f1也是72,但是这是不符合业务场景需求的。
2.2.2 性能指标
以API的形式交付。对长度为1000字的文本,每秒查询率(QPS)$ X J为10,一次调用在95情况下响应时间(RT)为3秒。接口调用成功率为99%。
让我们拆解一下这个性能指标,首先说一下交付形式。
当前AI项目交付主要有两种,API和Docker,各自适用于不同的业务场景。
QPS(Query Per Second)每秒查询率是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特a ` U , 6 w w网上,作为o ^ 3域名系统服务器的机器的性能经常用每秒查询率来衡量。对应z : H ( C *fetches/sec,即美妙的响应请z d U X 6 Q z求数,也是最大吞吐能力。
RT响应时间是指系统对请求作e T b 3 r @出响应的时间。直观上看,这个指标与P ` P C v人对软件性能的主管感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间
2.3 项目实施
项目实施分为两个阶段,阶段一的尝试主要是使用规则,阶段二的尝试中,我们将策略从规则切换到了模型。从规则到模型的转换,影响因素比较多,有随着项目进展,项目组对项目难度的认识更加深刻的因素,也有数据集的积累更加丰富的原因。
2.3.1 阶段一:规则
在项目中的阶段一,我们的尝试,主要在于规则。首先,我( % w u g w n z L们来介绍一下,在机器学习里面,什么是规则。
那么我们第一v o q s 2 P S词,我们就将这句话扔掉。
打分词:当一句话中出现了打分词list中的词,我们就给这句话加1分。(因为词的权重不同,因此权重不一定都是1)
所以,为什么我们要这样设计呢?
我们首先来看看白名单,白名单中的典型词汇有:毕业于、深造、晋升等。大家可以b 0 + g -发现,这些词汇,有强烈的属性表现,表现一个人物的履历。因此,当出现了这些词汇之后,我们就默认将这句话抽取(extract)出来。
黑名单中的典型词汇有:死于,逝世、出席等。这些词,明显与人物履历毫无关系。
最后,我们来看一下这个打分词。在打分的设计逻辑上,我们使用了TF-IDF。同时,为了减少因为我们自己样本量少,而带来的负面影响,我们爬取了百度百科人物库,通过TF-IDF,筛选出了几百个和人物履历描述相关的词,并且人工对这些词进行了打分。我们通过匹配一句话中出现的打分词,来为一个句子打分。并且,我们可以通过调节句子得分的阈值,来调节我们命中人物履历的句子。
通过规则,我们发现,模型A b t的效果,在precision5 6 9不错,但是recall不够好。通过分析bad case,我们发现模型的泛p / ; m 3 ^ & # b化性能差。
分析Bad Case的思. Y Y _ 7路:
- 找出所有bad cases,看看哪些训练样本预测错了?
- 对每一个badcp m X q ) Tase分析找出原因
- 我们哪部分特征使得模型做了T t m x ! n { 0 1这个判断
- 这些bad cases是否有共性?
- 将bad cases进行分类,并统计不同类别的频数
这里顺便提一下,在我们分析bad case的时候,除了分析模型预测的错/ @ k K $ 7 F误之外,我们也会发现A m 5一些标注数据存在问题,在训练集中,有人为标记错的样本很正常,因为人也不能保证100%正确。我们需要注意的是,这种标记错误分为两4 + T类:
- 随机标记错误,比如因为走神、没看清给标错数据
- 系统性标记错误,标错数据的人,是真的将A以为是B,并且在整个标注流程中: h E R e 1 ,都将A以为是B
对于随机标注错误,只要整体的训练样本足够大,放着也没事。对于系统性标注错误,必须进行修正,因为分s ` + 7 w类器会学到w } = L q S错误的分类。
说明一下,关于Bad Case分析,吴恩达的课程都有讲,如果想对这一块知识,有进一步i K 分析,我们发现通过规则中最大的问题是,模型无法分清动名词。因此,导致precisiP b {on非常地低。
举2个例子:
A:小红投资的运动装公司西蓝花。
B:小红投资了运动装T { R K A公司西蓝花。
第一句表达的主旨意思是运动装C ) x e s * -公司,而第二句话表达的主旨是小红进行了投资,因此从最开始对需要抽取句子的定义上来说,我们应该抽取第二句。但是,因为是打分机制,AB两句都命中了“投资”,因此C $ Y r o . W,均被抽N j v p X B取。
从这里,就发现,我们的规则之路,基本上走到了尽头,打分的方式是永远无法将AB区分出来,于是,我们开始了我们下一段探索之旅。
2.3.2 阶段二:模型
在阶段一,我们讲到了规则的一个弊端,就是规则无法区分词性。
经过评估,我们还是打算使用模型来做,并且根据上一阶段的发现,做对应的优化,在这里,让我们介绍一下“Part-of-Speech TagG Z J 9 r g z K .需要接收有关文本序列的question,并且需要在序列中标记answer。可8 % n以使用 BERT学习两个标记 answer 开始和结尾的向量来训练 Q&A模型
- 在命名实体识别(q ^ m / ;NER),系统需要接收文本序列,标记文本中的各种类型的实体(人员、组织、日期等)可以用BERT将每个token的输出向量送到预测 NER 标签的分类层。
在part of speech 和Bert的加持下,我们模型的表现,达到了recall 90,precision 90。
暂且讲到w , ; R ` .这里吧~
三、Lesson Learned
其实从项目推进上,数据集管理上,策略分析上,感觉还有好多可以讲,可以写的,写下来又感觉写的太多了。N P 7 % / d 4之后,单开篇幅来! i m l Z 7 x P写吧
参考资料:
1. 语言本能
2. 数学之8 | ( M X o美
3.P O O G 智能时代
4. 2018年,NLP研究与应w A & t ! , )用进展到什么水平了?
5. https://en.wikipedia.org/wiki/Confusion_matrix#z 3 r M & i 5 3cite_note-Powers2011-2
6. https://lawtomated.com/accuracy-precision-recy p G ` D @ { #all-and-f1-scores-for-lawyers/
7. (https:. N g k q//R E jwww.cnblK 2 2ogs.. - 7 k Fcom/daT } v x P - ta2value/p/6220859.html)
8. (http://gitlinux.net/2019-03-11-bad-case-analysis/)
9. (hb | ~ 5 F L + ~ttps://blog.csdn.net/sinat_33761963/article/details/80559099)
10. (https://www.jianshu.com/p/d110d0c13063)
11. https://arxiv.org/pdf/1810.04805.pdf 《BERT: Pre-training of Bidirectional Transformers for Lan? [ ? % x & qguage Understanding: 8 ` * w o E》
本@ - 5 | E U o a文由 @一颗西兰花 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议