AI 算法工程师不但需要基础能力扎实,还要具备良好的工程落地能力,那在 NLP 工程师面试的时候你知道面试官会从哪些维度去考察你这两方面的能力吗?今天我就结合我的一些 NLP 面试和被面试经验来给你讲一讲。

工程上使用 Tensorflow 的更多,在实际面试的时候,你不仅需要知识储备足够广,更需要在某维能力上足够深。因为通常面试官也希望能发掘出你在某维能力上的突出和优势,俗称“亮点”。

接下来我会分别从广度和深度两方面举例说明,什么样的面试回答更好,好在哪里。

首先,从知识储备的广度来说,我以语义匹配都有哪些解决方案这个面试题为例,这题不只希望你能够给到当前的 SOTA 的算法思路和方案,更希望你解决这个问题的经验足够丰富,能够说清楚产品的不同阶段,不同条件该用什么算法。哪种算法能够得到什么效果,还能够结合算法风险、成本、效率等维度去区分方案。毕竟能服务于产品的算法才有价值。而不同的场景对算法的要求是不一样的。

下面的表格中列出了两种不同的回答:

一般的回答更好的回答
包括 MatchPyramid,Match-SRNN 以及结合 Bert 孪生网络来做的多类算法都可以支持语义匹配任务。匹配技术从发展上可以分为 3 个阶段:文本匹配、语义匹配、深层语义匹配。- 文本匹配:用字符串相似度算法来衡量的几类算法,包括 Levenshitein、Jaccard、 Cosine 等衡量距离的算法再结合 bag of words model 的文本编码技术,比如 TF-IDF、N-Gram 等。 - 语义匹配:以 DSSM、CDSSM等引入语言模型的语义匹配; - 深层语义匹配:以 Transformer 等更深层语义特征抽取的匹配模型。当然文本匹配还有不同的分类方法,比如 Pointwise、Pairwise、Listwise 等,或者按照匹配模型等方式,比如是基于表示的还是基于交互的。

可以对比看看,好的回答需要把技术分门别类,每类算法能解决什么问题,劣势是什么,如何做优化。面试官看中的是你解决问题的能力,这个问题肯定有很多不同的解决方案。所以你的回答更应该侧重于,怎么层次化的解决一类问题,怎么去演进技术。其次从某维能力的深度来讲,比如 Bert 相比于 word2vec 有哪些优势?

一般的回答更好的回答
Bert 是深度模型,有更好的文本特征表征能力,而 word2vec 是很早期的语言模型。本质区别有两点,一是表达方式不同,二是特征表达能力不同。- 表达方式:word2vec 是简单分布式表达,Bert 是结合上下文的表达;word2vec 表达的词向量都是静态的,而 Bert 以及 ELMo、XLNet 都是动态表达,其每个词的词向量是根据句子的上下文推断得出来的。区别是什么?很多多义词,word2vec 就没法很好的区分出不同的含义。- 特征表达能力:Attention 机制,WordPiece 编码方式,以及 Position Embedding 等都比 word2vec 有更强的特征表达能力。

讲清楚每个维度的背景和优缺点,上面我讲的这些问题和回答都是抛砖引玉,面试官不一定对所有的算法都了如指掌,所以如果你把实际项目作为背景,突出自己的广度和深度,有效的组织语言做一些举例,把问题讲透,往往能够得到面试官的认可。讲完怎么回答基础能力问题之后,我们再来看看面试时会考察哪些 NLP 工程能力,该怎么准备。

首先,你要清楚不同行业 NLP 岗位的要求是不同的,比如在医疗行业更注重工程算法的稳定性和准确性,可能更关注长文本的 NLP 能力。在政务行业更关注 NLP 的鲁棒性,怎么按时交付不被客户投诉;而在语音对话类行业更关注短文本。

不同行业的工程能力要求不同,那我该怎么去准备面试呢?

其实,NLP 岗位的核心要求都是一致的,总的来说, AI 工程能力的核心是保证 AI 技术在交付的整个过程都能够达到客户的预期。而在整个过程中的不同开发阶段,对岗位的要求会有不同的侧重。我们把整个过程进一步细化为 5 个阶段来看:

如何搭建一个行业客服机器人?

分析一下每个阶段的侧重点,在第一个需求阶段,你要先根据客户或者产品需求明确目标。比如说怎么明确 AI 能力的架构和北极星指标。

来看一个行业客服能力的例子,在面试中,你可能会被这么提问:如何根据行业特点设计一个客服架构?客服衡量的指标是什么?

这一题需要你有对话系统的项目经验,知道对话系统该如何设计,能分析行业特点找出一种合适的方案。在下面的表格里,列出了两种不同的回答:

一般的回答更好的回答
客服对话系统包括自然语言理解、知识图谱等各种能力。其中自然语言理解需要包含 NLU、对话意图识别、槽位抽取等。每个能力可以选用当前业界最常用的方法,比如选用 Bert 模型来识别对话意图等。这里的客服架构只包含对话理解部分。首先结合行业特点分析对话是任务型对话,还是问答型对话。问答型对话是知识问答还是检索问答。假定客服场景主要是检索问答,这里以检索问答来设计。技术架构包含:NLU、DM、NLG、KG等。- NLU:NLU 需要结合行业词典增强分词,序列标注等 NLU 能力。而检索问答需要设计检索匹配框架,粗召回模型+规则召回+词典召回+精排序模型等。这里的技术选型如有需要可以再展开。 - DM:需要设计寻参、追问等多轮对话状态树,管理多轮场景。- NLG:需要设置相应的兜底客服回复,引导“人工回复”等话术。- KG:KG 需要管理配置行业知识库,因为是检索问答,主要是问答对。因为客服系统是 ToB 型交付,服务于小企业等场景。客服知识库也是需要优化的,所以针对客户而言需要做客服运营,包括做线上未知问题挖掘和相似问题学习等,通过增强知识库来提升客服能力。

所谓 "Garbage in, garbage out",对于 AI 能力而言,上限往往是由数据的质量决定的。面试官可能问的一个问题是:数据的质量该如何保障呢?

一般的回答更好的回答
按照需求场景进行数据收集、数据清洗,确保数据标注的质量,针对标注数据做抽查。首先明确数据收集的场景,是众包还是爬取。以众包为例,需要明确数据分布、数据标注规范、标注质量验证等。- 数据分布:确保众包的人群和 AI 能力真实使用场景一致,是老师、学生、小孩还是其他特定用户(这里根据 AI 的实用性来评估)。- 标注规范:标注需要明确边界,确保每个标注项没有交叉,同时需要考虑的是单人标注还是三人标注等。- 数据质量:抽查是一种简单的验证方式,还可以通过数据的相关性来衡量,比如 Person 相关性系数来保证标注人员的打分质量,还需要验证数据分布是否平衡。

第 3 个开发阶段需要进行模型的多种实验、评测和调优。这一阶段面试官一般重点考察你的调优经验,如何选型不同的算法和策略来提升模型的准确和召回。这里以检索问答为例,一个面试的具体问题是:如何提升匹配能力?

一般的回答更好的回答
根据训练集和测试集的表现来优化模型,保障模型不过拟合不欠拟合。以匹配检索能力来说,采用 SOTA 模型来优化匹配准确率。匹配场景分为召回和相关性计算:- 召回:召回包括关键词召回、粗召回算法。粗召回算法通常利用多种无监督的高效率算法来进行,包括 BM25,TF-IDF 等。粗召回是否可以采用向量检索的方式来提升召回算法的能力,需要做实验来验证。- 相关性:相关性匹配通常是采用孪生网络模型来匹配两两句子的相关性,模型包括表示层、特征层、匹配层。表示层的 Embedding 可以结合行业数据重新训练,从而有更好的表现。特征层可以结合场景(短文本、长文本、表情符号等)进行相应的归一化或者特征设计。

好的回答应从工程角度对算法架构进行切分,对每个模块的技术选型讲出自己合理的思考。

在第 4 个部署阶段,你要考虑的是离线模型或在线模型的部署。同时也需要考虑是否跨平台等多种场景,还有并发、GPU并行计算等。这些知识和技术点已经较为成熟,可以自行查找。

第 5 个上线阶段,重点考察的是你怎么用技术手段去保障线上 AI 的效果,怎样持续的提升 AI 能力?一个具体的面试问题是:如何评测 AI 能力在用户侧的表现?如何确保用户的满意度?

一般的回答更好的回答
需要结合线上真实数据进行归纳分析,找出 badcase 并进行模型调优。如果要评估线上用户真实的表现,首先需要系统有一个很好的反馈机制,用户能够直接反馈出能力的缺陷;其次是利用线上用户 Log 来进行分析。需要建立线上指标体系,借助大数据分析统计工具来分析数据,并形成报表和实时指标监控,以及新模型的 AB 测试验证等。

好的回答应该阐述线上数据的价值,以及用合理的技术手段来挖掘数据,优化 AI 的能力。在上线阶段,你需要有大数据的相关经验,比如怎么用 Spark 等大数据框架进行海量数据的挖掘与分析,怎么利用 Plato 等图计算框架做图挖掘。结合线上数据去做归纳分析,进行算法的调优和迭代。

我在这篇文章里面总结了 NLP 能力考察的两个主要维度:基础能力和工程能力。

基础能力包括:理论基础和编码能力两个方面,在这个方面面试官注重:从回答里考察面试者的知识广度和某维能力的深度。

接下来重点针对工程能力,结合了具体的面试问题展开说明了在5个阶段中面试官可能的考察方向。

以上。

Last modification:August 17th, 2021 at 11:46 am
如果觉得我的文章对你有用,请随意赞赏