1. 什么是NLP
自然语言处理是人工智能的一个子领域,自然语言处理是研究人与人交互中以及在人与计算机交互中的语言问题的一门学科。人工智能应用的领域主要有:数据挖掘、推荐算法、智能搜索、广告推荐、自然语言处理、计算机视觉、自动驾驶等等。
2.NLP主要研究方向
- 信息抽取:从给定文本中抽取重要的信息,比如时间、地点、任务、事件、原因、结果、数字、日期、货币、专有名词等等。通俗来说,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。
- 文本生成:机器像人一样使用自然语言处理进行表达和写作。依据输入的不同,文本生成技术包括书籍到文本生成和文本到文本生成。数据到文本生成是指包含键值对的数据转化为自然语言文本;文本到文本生成对输入文本进行转换和处理从而产生新的文本。
- 问答系统:对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体连接、关系识别、形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳答案。
- 对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。
- 文本挖掘:包括文本聚类、分类、情感分析以及对挖掘信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习。
- 语音识别和生成:语音识别是将输入计算机的语音符号识别转换成书面语表示。语音生成又称为文语转换、语音合成,它是将书面文本自动转换为对应的语音表征。
- 信息过滤:通过计算机系统自动识别和过滤符合特定条件的文档信息。通常指网络有害信息的自动识别和过滤,主要用于信息安全和防护,网络内容管理等。
- 舆情分析:是指收集和处理海量信息,自动化地对网络舆情进行分析,以实现及时应对网络舆情的目的。
- 信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。
- 机器翻译 :把输入的源语言文本通过自动翻译获得另外一种语言的文本。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。
3. NLP算法工程师,需要实实在在掌握的技能
- 正则表达式。除了简单的文本匹配场景外,各种文档结构化、信息抽取的冷启动,基本都是靠这个。因为在实际业务下,不可能马上就能获取高质量的标注数据,更别说各种sota模型训练了,所以你可能掌握各种正则表达式,无疑一马平川之大效果,比如xx前面不存在xx字符且后面存在xx字符,或者xx字符出现几次且后面必须出现xx字符的场景。(来自知乎:其实我一直想做一个根据人类语言自动提供正则表达式推荐的模型,调研了一阵子发现难度很大,从另一个角度也说明要写好正则表达式也非常难的)
- 常用句法分析工具。这个一般主要会在关键短语抽取、信息抽取使用。由于缺少标注数据,不能使用sota模型,又因为单独使用正则表达式毕竟不能覆盖各种case,因此有时候需要与句法分析工具结合,配合对简单语法的使用,例如主谓结构、动宾结构、补语结构等等,找出我们所需的信息单元。不过从头训练一个句法工具通常来不及满足业务方的上线期限,因此通常会使用一些已有工具如哈工大的LTP,虽然有些问题,但是大多数情况下够用。
- 性能优化的意识。这里并不特指某个性能优化的方法,而是在日常写代码的时候,要有这个意识,例如如何优化循环的效率、能够并行化操作的地方尽量并行化,模型读取数据的时候如何优化读取的效率,模型部署上线inference的时候是否满足业务的性能要求,如果不满足,能够找到性能优化的位置,例如模型设计的时候是否设计了冗余的层数、是否使用了过于复杂的模型,部署的时候是否使用一些高效的部署方式(如tensorflow-serving)、是否可以使用TensorRT优化部分op,是否可以针对部署平台上的硬件环境重新编译tensorflow。这些都需要在实际的工程中从坑里爬出来,哈哈。
- linux。这个技能也是刚需,但是并不需要你对linux的操作精通到什么程度,但至少懂得常用的操作命令,例如监控服务器的状态、防火墙策略的配置、docker的简单操作、常用数据库的操作(mysql、postgresql等)、压缩解压命令、ftp/sftp命令、chmod命令、vi、cat、ps等等。除了上述技能外,默认大家对NLP领域的技术都是符合条件的,所以就没额外说明。如果你对基础的统计机器学习、RNN、transformer、bert等不太了解的话,那实在是说不过去的。上述技能针对的是需要落地需求的算法工程,但如果你是专门做算法研究,对落地没有要求的,那就可以忽略上面的东西,此时你需要的就是拼论文、拼比赛、拼研究组、拼导师、拼学长学姐。。。
|