昨天就发布了,看的人挺多,自己看了一下发现直接放整理有点莫名其妙,先把招聘条件整体图片放上来吧,会持续更新。
这是小米对自然语言处理工程师的4个要求:
-
计算机或数学相关专业,硕士及以上学历
-
熟悉自然语言处理领域基础理论和常用方法
-
基础理论
- 自然语言理解(NLU):NLU 是要理解给定文本的含义,文本内每个单词的特性与结构需要被理解。在理解结构的基础上,NLU 要理解自然语言中的以下几个歧义性:
- 词法歧义性:单词有多重含义
- 句法歧义性:语句有多重解析树
- 语义歧义性:句子有多重含义
- 回指歧义性(Anaphoric Ambiguity):之前提到的短语或单词在后面句子中有不同的含义。
- 自然语言生成(NLG):NLG 是从结构化数据中以可读地方式自动生成文本的过程,难以处理是自然语言生成的主要问题。自然语言生成可被分为三个阶段:
- 文本规划:完成结构化数据中基础内容的规划。
- 语句规划:从结构化数据中组合语句,来表达信息流。
- 实现:产生语法通顺的语句来表达文本。
- 聊天机器人:能通过聊天 app、聊天窗口或语音唤醒 app 进行交流的计算机程序。
- 特点:成本低、高效且持续工作
- 图灵测试:如果一个人(代号C)使用测试对象皆理解的语言去询问两个他不能看见的对象任意一串问题。对象为:一个是正常思维的人(代号B)、一个是机器(代号A)。如果经过若干询问以后,C不能得出实质的区别来分辨A与B的不同,则此机器A通过图灵测试。
- 有限状态自动机(finite-state automaton,简称FSA):正则表达式是描述有限状态自动机的一种方法,有限状态自动机是计算工作的理论基础。
- baa+!的FSA和匹配的状态转移表
- FSA的五个参数
- Q:N种状态q0,q1…,qn的有限集合
- Σ:有限的输入符号字母表
- q0:初始状态
- F:终极状态的集合,F∈Q
- δ(q, i):状态之间的转移函数或转移矩阵。给定一个状态q∈Q和一个输入符号i∈Σ,δ(q, i)返回一个新的状态q‘∈Q,因此,δ(q, i)是从Q×Σ到Q的一个关系。
- baa+!的FSA和匹配的状态转移表
- 非确定的有限自动机(non-deterministicFSA或NFS
- 和FSA的唯一区别:自返圈在状态2,难以判断是沿着自返圈回到2还是继续往前进入状态3
- 对比图:
- 解决方法
- 回退:每当我们走到这样的选择点时,我们可以做一个记号(marker),记录下在输入中的什么位置以及自动机处于什么状态。当确认我们确实是做了错误的选择时,可以退回去并试探其他的路径。
- 前瞻:我们可以在输入中向前看,以帮助判定应该选择哪一条路径。
- 并行:每当我们走到选择点时,我们可以并行的查找每一条不同的路径。
- 有限状态转录机(finite-state transducer,FST)
- 语素(morpheme)通常被定义为语言中负荷意义的最小单位。
- 双层形态学
- 词汇层:表示组成该词的与树之间的简单毗连关系。
- 表层:表示该词实际拼写的最终情况。
- 功能:这种用来进行两个层之间的映射的自动机称为有限状态转录机,转录机实现两个符号集合之间的映射有限状态转录机通过有限自动机来实现这种转录。它比有限自动机(FSA)具有更多的功能(把有限状态转录机应用于形态表示和剖
- 作为识别器
- 作为生成器
- 作为翻译器
- 作为关联器
- 例子:
- 自然语言理解(NLU):NLU 是要理解给定文本的含义,文本内每个单词的特性与结构需要被理解。在理解结构的基础上,NLU 要理解自然语言中的以下几个歧义性:
-
常用方法
- 基于规则
- 基于深度学习
- 神经网络
- 词性标记
- 词语切分
- 实体命名识别
- 目的提取
- 循环神经网络
- 机器翻译
- 问答系统
- 图像描述
- 递归神经网络
- 句子解析
- 情感分析
- 释义检测
- 关系分类
- 物体识别
- 卷积神经网络
- 句子/文本分类
- 关心提取和分类
- 垃圾邮件检测
- 搜索词条的归类
- 语义关系提取
- 神经网络
-
NLP步骤
- 先放图
- 中文解释:
- 语句分割 - 在给定文本中辨识语句边界,即一个语句的结束和另一个语句的开始。语句通常以标点符号「.」结束。
- 标记化 - 辨识不同的词、数字及其他标点符号。
- 词干提取 - 将一个词还原为词干。
- 词性标注 - 标出语句中每一个词的词性,比如名词或副词。
- 语法分析 - 将给定文本的部分按类划分。
- 命名实体识别 - 找出给定文本中的人物、地点、时间等。
- 指代消解 - 根据一个语
- 句的前句和后句界定该句中给定词之间的关系。
- 先放图
-
在以下多个NLP领域有深入研究:分词、语义分析、词性分析、意图识别、知识图谱、文本内容理解、对话管理等
-
熟练掌握Java、Python、scala等语言中的至少一种,有Tensorflow、Spark、Hive等实际工作经验
-
Java
- 基础语法
- 前端
- 数据库
- 正则表达式
-
Spark
- 介绍:Apache Spark™是用于大规模数据处理的统一分析引擎,它是一个实现快速通用的集群计算平台,由加州大学伯克利分校AMP实验室 开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的MapReduce计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。spark的一个主要特点是能够在内存中进行计算,及时依赖磁盘进行复杂的运算,Spark依然比MapReduce更加高效。
- Spark的四大特性
- 高效性:运行速度提高了100倍
- 易用性:支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。
- 通用性:Spark提供了统一的解决方案,可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。
- 兼容性:Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。
- 组件结构
- 结构图:
- 结构:
- SparkCore:将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
- SparkSQL:Spark Sql 是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持多种数据源,包含Hive表,parquest以及JSON等内容。
- SparkStreaming:是Spark提供的实时数据进行流式计算的组件。
- MLlib:提供常用机器学习算法的实现库。
- GraphX:提供一个分布式图计算框架,能高效进行图计算。
- BlinkDB:用于在海量数据上进行交互式SQL的近似查询引擎。
- Tachyon:以内存为中心高容错的的分布式文件系统。
- 结构图:
- 用途
- 数据科学应用
- 数据处理应用
- 下载:http://spark.apache.org/downloads.html
- python shell:
- bin/pyspark
- 运行:在 Python 中,你可以把应用写成 Python 脚本,但是需要使用 Spark 自带的 bin/spark-submit 脚本来运行。spark-submit 脚本会帮我们引入 Python 程序的 Spark 依赖。 - bin/spark-submit my_script.py
- 弹性分布式数据集(Resilient Distributed Dataset,简称 RDD) - Spark 中的 RDD 就是一个不可变的分布式对象集合。每个 RDD 都被分为多个分区,这些分区运行在集群中的不同节点上。RDD 可以包含 Python、Java、Scala 中任意类型的对象,甚至可以包含用户自定义的对象。
- 支持的操作:Spark 对待转化操作和行动操作的方式很不一样,因此理解你正在进行的操作的类型是很重要的。如果对于一个特定的函数是属于转化操作还是行动操作感到困惑,你可以看看它的返回值类型:转化操作返回的是 RDD,而行动操作返回的是其他的数据类型。
- 转化操作:返回一个新的RDD
- 行动操作:向驱动器程序返回结果或把结果写入外部系统,会触发实际的计算。
- 创建RDD
- 读取外部数据集(更常用)
- 在驱动器程序中对一个集合进行并行化
- 支持的操作:Spark 对待转化操作和行动操作的方式很不一样,因此理解你正在进行的操作的类型是很重要的。如果对于一个特定的函数是属于转化操作还是行动操作感到困惑,你可以看看它的返回值类型:转化操作返回的是 RDD,而行动操作返回的是其他的数据类型。
- Spark的键值对操作
- Spark 为包含键值对类型的 RDD 提供了一些专有的操作。这些 RDD 被称为 pair RDD,它可以使用所有标准RDD上的转化函数
- Spark数据处理
- Spark支持的常见格式
- 文本文件
- JOSN
- CSV
- SequenceFile - SequenceFile 是由没有相对关系结构的键值对文件组成的常用 Hadoop 格式。SequenceFile 文件有同步标记,Spark可以用它来定位到文件中的某个点,然后再与记录的边界对齐。这可以让 Spark 使用多个节点高效地并行读取 SequenceFile 文件。SequenceFile 也是 Hadoop MapReduce 作业中常用的输入输出格式,所以如果你在使用一个已有的 Hadoop 系统,数据很有可能是以 SequenceFile 的格式供你使用的。
- Protocol buffers
- 对象文件
- Spark支持的常见格式
-
-
扎实的编程能力,熟悉计算机的基础理论,对数据结构和算法设计有深刻的理解
-