NLP 算法工程师的学习、成长和实战经验
向AI转型的程序员都关注了这个号????????????
大数据挖掘DT机器学习 公众号: datayx
我们本次分享主要分为六个小节,分别为:
1.NLP解决什么问题;
其中前两个小节主要大概讲述一下NLP这个学科它解决了什么问题,以及它算法发展的简要的历史,这样可以让大家对它先有一个整体上的认识;中间两节介绍一下在问答系统和对话系统中NLP的作用和典型的模型;最后两节说一下现在创业公司NLP算法工程师的工作职责和一些面试的注意事项。
一:NLP解决什么问题?
NLP是一个交叉性的学科,它和计算机科学,人工智能,计算语言学这三门都有交叉,是一门对综合要求比较高的学科。它的主要目标是解决计算机和人类(自然)语言的交互问题,随着近年来UCG内容的越来越多,NLP在很大程度上需要解决无结构化的语料怎么让机器更好的理解。因此NLP学习起来也有些难度,主要难点为:
●语言本身复杂:大家想象一下语言本身有多复杂,比如我们在学习外语的时候都有各种各样的语法规则,就可以知道让计算机去理解人类的自然语言是多么复杂的一件事情。
所以人跟人之间的正常交流都需要很多语言本身之外的东西,可以想像让计算机来完成这件事情难度是非常大的。
NLP解决的五个基本问题,这五个是李航老师在北大的AI公开课上提出来的,分别为:
-
分类问题:分类问题大家平时表容易见到,比如文本分类,情感分析目的是把一段文本打上一个或多个标签。
综述上面所讲的五个基本问题,结合这张图来看一下它的应用实例。
这张图从上到下总共有四个任务,是用Stanford CoreNLP来标识的。
●第一个任务是词性标注,所谓的词性标注,它是一个典型的序列任务,把一段文本中的每一个词的词性标注上,如名词,动词,副词。
生活中NLP都能够应用在哪些方面?以搜索引擎为例,在使用搜索引擎的过程中肯定有遇到出错词这样的纠错算法,这就是NLP的一个应用,还有文本分词以及搜索词改写,所谓的搜索词改写就是我们输入的词,系统会给我们做泛化,把同义词也进行检索,扩大了搜索结果。还有意图识别,比如在电商中搜索一件商品,比如苹果,是指你想要买手机还是水果,意图的识别率会影响到它的一个转化率。结果排序是更重要的,所有的网页质量都有一套排序算法,排序算法中很多都会涉及到NLP算法,尤其是文本分析相关的技术。最后还有搜索推荐,比如你在网站上搜索一个词的时候,下面有一块会提示出大家还在搜的词,你可能还想搜索的词语,这都是根据文本相似度的理解去做的。
二:NLP算法发展简史
NLP算法对于语言的理解分为三个层次,分别为:
●语法,是指我怎样说是符合语法规则的,类比程序上没有编译错误。
从上面的图片中我们可以看出来目前NLP处在语义的阶段中,至于语用属于刚刚起步的状态。
从图片上可以看到NLP从被提出到现在基本上经历了三个阶段,
●第一个阶段是基于规则的NLP
从上面这张图中可以很明显的看出深度学习在NLP领域的发展趋势。
三:问答系统和对话系统先来解释一下三个概念:
从图上大家可以看到,检索式问答系统的系统架构主要分为离线和在线两大块。离线把问答索引,序列匹配模型和排序模型建好,在线服务收到用户的问题,把问题中的关键词从索引库中把相关的索引拿出来,然后根据生产好的 Matching 和 Ranking 模型去做 Rerank ,挑选最好的答案给用户展示。这样就是检索式问答系统的典型是实现方式。
从图中大家可以看到检索式问答系统的实现方案,主要分为四种方案:
1.很经典,很传统的实现方式,根据需要统计TF-IDF,应用一些比较简单的向量空间模型或BM25来计算匹配度。
上图展示了四种模型:
四:任务型对话系统背后的算法
这里有两张图是有两个实例,一个是单轮对话,一个是多轮对话。左边的单轮对话是创建日程,右边的多轮对话是订咖啡,大家可以感受一下两者的不同。
图中列出了任务型对话系统的典型系统架构。从左往右,收到用户消息后,依次处理为:
现在总结一下任务型对话系统的算法,分别为:
五:创业公司NLP工程师的工作职责在助理来也的算法团队中,NLP工程师需要工程和算法都涉及,例如数据预处理这是最基本的要求;根据业务需求调研并做算法选型;复现论文模型,评估效果,持续优化;开发模型的在线serving模块,满足性能高要求;处理流程及通用工具SAAS化,保证经验的复用。
六:NLP算法工程师面试注意事项
图中的第一点在于积累,平时工作中需要多多实战。第二点和第三点可以结合来看,因为我遇到很多面试者,自己简历中的项目一知半解,疑问道细节就回答的磕磕绊绊,这样肯定是很难达到面试要求的。对于第四点,文本分类是比较经典的,大部分求职者简历里面都会提到,但是它的原理和细节处你是否真的掌握了,我上图也列出了一些针对文本分类可能会问到的问题,大家可以自检一下。针对这些问题我们也可以做些准备,原理方面的需要自己实践印象会比较深刻;细节方面要自己梳理清楚,每做完一个项目要清楚自己的实验效果在该领域处于什么等级。对于一个任务,如果你不仅知道自己是怎么做的,还了解其他的实现方法,更了解方法之间的区别,懂得做横向比较,在面试过程中肯定可以给面试官留下深刻的印象。
Q&A:
Q1: NLP工程师如何考虑在场景中要不要使用机器学习模型?
要不要使用机器学习模型,是由业务需求决定的。当业务刚启动的时候,没有标注数据,是没有办法使用模型的。这个时候用一些规则的方法把系统搭建起来,不断地积累语料,当积累到一定程度,也有人帮你做标注,那些规则不太能满足需求的时候,就可以考虑使用了。
Q2: 句向量现在一般怎么实现?
现在还没有一个非常好的模型或者方法可以保证句向量在所有的场景下都可以保持一个很好的表示效果。第一种可以根据句子中的每一个词的向量去做一些平均、加权运算,从而等到它的句向量,但是这种方法的效果一般都不是很理想。第二种方法是使用其他模型,把句子中的关键词的权重加重,非关键词的权重降低,从而得到句向量。第三种方法是根据语料和实现的任务设计一个神经网络抽取句向量,这也是目前效果最好的一种方法。第四种方法是将一个领域语料中得到的句向量迁移到其他领域使用,这种方法目前在实践中,但是具体的效果是和场景相关的。
Q3: NLP工程师面试常见的题目是什么?
这个问题很难有一个明确的答案,一般还是根据简历来提问的。所以要非常熟悉自己简历上的项目。
Q4: NLP在文本自动生成方面的研究进展?
今年上半年在有一篇100多页的综述文章,专门盘点了NLP方向以前和当前比较好的技术方法,大家可以自己搜索阅读一下。
Q5: 请问命名实体识别中,除了NLTK中的工具包,还有别的工具包或者方法么?
NLTK中的工具对中文的支持不是很好,斯坦福的CALL NLP是支持中文的,但是它是在新闻语料上训练出来的,不一定合适你的。你可以自己用自己的语料训练一份,或者在Github上找用双向LSTM+CRF结构训练出来的NER模型。
Q6:请问NLP工程师需要对深度学习,机器学习的算法有深入的了解吗?能够调用这些方法吗?
其实调用这些包的话,是解决不了问题的,因为有时你会遇到模型效果很差,但是别人用这个模型效果比较好,那为什么你用就不行了呢,这个时候就要求你对模型的原理有一定了解,你要分析出可能存在的问题,可能是因为你数据域处理的不够回,可能是你参数调的不够合适,如果你不了解,只是当作黑盒来用,你是很难分析到具体的case的。
Q7:自然语言处理任务在应用深度学习模型时,在线serving是怎么做的?
因为我们用到的是TensorFlow框架,所以我们的serving也是Tensor serving那一套框架去做的,有时候我们离线训练完模型以后,要把模式文件导出来,然后用Tensor serving和TF serving去加载这个模型,然后用基于C++和PC这套框架去扛线上的流量。
Q8:请问现在做意图识别,除了人工标注,有什么深度学习的方法可以实现自动标注么?
自动实现标注的方法一直都有,但是准确标注一直是一个疑问,现在我们意图识别模型,表示用双向LSTM+Tensor这样的结构,模型本身学习能力已经很强,所以很多时候决定意图识别准确率就是你虚拟豫章标注的准确性,所以如果你用自动标准,会使质量得不到保证,从而模型效果大打折扣,所以你需求去权衡。
Q9:LSTM严格上说应该不是马尔可夫过程,马氏决策严格依赖前一部分过程,而LSTM过程是对所有前面的状态进行编码,进而预测输出。
LSTM和马尔科夫过程确实不是同一回事,就我刚才说的NLP要解决的五个基本问题大部分都可以归类到这五个问题上,但并不是所有的问题都能归类上去,而且LSTM和马尔科夫过程也不是同一个层次上的概念,而LSTM是LIN的一个变种,而LIN是对任一层次上的序列进行建模的,它是一个技术上的实现,而马尔科夫过程是比较抽象的一个概念,一个是技术上的,一个是数学上比较抽象的概念,并没有划等号的必要性。
Q10:请问生成式的问答系统,怎么避免对同一个问题的回答千篇一律的情况?
这说的是应该是sequence to sequence框架的问题,sequence to sequence的框架本身就存在这样的问题,因为那些通用的回复在豫章出现的频率会比较高,针对这个问题,有好几篇论文是专门来解决这个问题的,比如说其中一个思路就是重新定义损失函数,把那些预测会出现高频率的回复做乘法,这样它会倾向于增加回复的多样性。然后另外一个思路就是增加一些鲜艳的知识进去,所谓鲜艳的知识就是根据我对话的语料,把用户上一句话的主题词抽取出来,然后在用decoding的时候,用一些方法把主题词融入到我的解码过程当中,这样相当于把鲜艳的知识加进去以后,就会在主题词附近做解码,这样就一定程度上会避免回复出现千篇一律的情况,或者跟我想要表达的意思差别很大。
搜索公众号添加: datayx
不断更新资源
深度学习、机器学习、数据分析、python
长按图片,识别二维码,点关注