节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。
今天整理我们社群一个同学面试 NLP 算法方向的面试题,分享给大家,希望对后续找工作的有所帮助。喜欢记得点赞、收藏、关注。更多技术交流&面经学习,可以加入我们。
1. 自我介绍
在自我介绍环节,我清晰地阐述了个人基本信息、教育背景、工作经历和技能特长,展示了自信和沟通能力。
2. 技术问题回答
2.1 介绍一下 rouge,bleu,他们两个之间有什么区别?
在机器翻译任务中,BLEU 和 ROUGE 是两个常用的评价指标:
-
BLEU(Bilingual Evaluation Understudy): BLEU是一种用于评估机器翻译结果质量的指标。它主要侧重于衡量机器翻译输出与参考翻译之间的相似程度,着重于句子的准确性和精确匹配。BLEU通过计算N-gram(连续N个词)的匹配程度,来评估机器翻译的精确率(Precision)。
-
ROUGE(Recall-Oriented Understudy for Gisting Evaluation): ROUGE是一种用于评估文本摘要(或其他自然语言处理任务)质量的指标。与BLEU不同,ROUGE主要关注机器生成的摘要中是否捕捉到了参考摘要的信息,着重于涵盖参考摘要的内容和信息的完整性。ROUGE通过计算N-gram的共现情况,来评估机器生成的摘要的召回率(Recall)。
-
区别:
-
BLEU侧重于衡量翻译的准确性和精确匹配程度,更偏向于Precision;
-
ROUGE侧重于衡量摘要的信息完整性和涵盖程度,更偏向于Recall。
这两个指标在不同的任务和应用场景中都有其重要性,因此在评估自然语言处理模型时,经常会同时使用它们来综合考虑模型的表现。
2.2 介绍一下 常见大模型结构(llama2,glm)?
-
BART (bi Encoder+casual Decoder,类bert的方法预训练)
-
T5 (Encoder+Decoder,text2text预训练)
-
GPT(Decoder主打zero-shot)
-
GLM (mask的输入部分是双向注意力,在生成预测的是单向注意力)
2.3 介绍一下 ptuning,lora tune?
2.4 为什么transformer有长度限制(太长了性能下降)?
transformer论文中提出了一种基于自注意力机制(self-attention)的新型神经网络结构,它可以处理序列到序列(sequence-to-sequence)的任务,如机器翻译、文本摘要、语音识别等。transformer模型由编码器(encoder)和解码器(decoder)组成,编码器将输入序列映射为一组隐藏向量,解码器根据这些向量生成输出序列。
transformer模型的一个限制是,它的自注意力机制需要计算输入序列中每个token与其他所有token之间的相关性,这个计算的时间和空间复杂度都是输入序列长度的平方。因此,当输入序列过长时,transformer模型会消耗过多的计算资源和存储空间,导致效率降低和性能下降。
3. Leetcode 题
具体题意记不清了,但是类似 【215. 数组中的第K个最大元素】
- 题目内容
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入: [3,2,1,5,6,4], k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4
-
提示:
-
1 <= k <= nums.length <= 105
-
-104 <= nums[i] <= 104
-
题目解答
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
nums_len = len(nums)
# 1.构建大顶堆
for i in range(math.floor(nums_len/2),-1,-1):
# 从第一个非叶子结点从下至上,从右至左调整结构
self.adjustHeap(nums,i,nums_len)
# 2.调整堆结构+交换堆顶元素与末尾元素
for i in range(nums_len-1,nums_len-1-k,-1):
# 将堆顶元素与末尾元素进行交换
self.swap(nums,0,i)
# 重新对堆进行调整
self.adjustHeap(nums,0,i)
return nums[-k]
def adjustHeap(self,nums,i,nums_len):
'''
功能:交调整大顶堆(仅是调整过程,建立在大顶堆已构建的基础上)
@param nums List 数组
@param i int 索引1
@param nums_len int 长度
@retusn
'''
left = 2*i+1 # i 的 左节点
right = 2*i+2 # i 的 右节点
largest = i # 用于标记当前最大的节点值得索引,先取出当前元素i
# 比较 左节点 和 当前节点 的值
if left < nums_len and nums[left] > nums[largest]:
largest = left
# 比较 左节点 和 当前节点 的值
if right<nums_len and nums[right]>nums[largest]:
largest = right
# 将 当前节点 和 最大节点 交换,然后重新构建 堆
if largest!=i:
self.swap(nums,i,largest)
self.adjustHeap(nums,largest,nums_len)
def swap(self,nums,a,b):
'''
功能:交换元素
@param nums List 数组
@param a int 索引1
@param b int 索引2
@retusn
'''
nums[a],nums[b] = nums[b],nums[a]
技术交流群
前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
我们建了算法岗技术与面试交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。
方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:技术交流
用通俗易懂方式讲解系列
- 用通俗易懂的方式讲解:自然语言处理初学者指南(附1000页的PPT讲解)
- 用通俗易懂的方式讲解:1.6万字全面掌握 BERT
- 用通俗易懂的方式讲解:NLP 这样学习才是正确路线
- 用通俗易懂的方式讲解:28张图全解深度学习知识!
- 用通俗易懂的方式讲解:不用再找了,这就是 NLP 方向最全面试题库
- 用通俗易懂的方式讲解:实体关系抽取入门教程
- 用通俗易懂的方式讲解:灵魂 20 问帮你彻底搞定Transformer
- 用通俗易懂的方式讲解:图解 Transformer 架构
- 用通俗易懂的方式讲解:大模型算法面经指南(附答案)
- 用通俗易懂的方式讲解:十分钟部署清华 ChatGLM-6B,实测效果超预期
- 用通俗易懂的方式讲解:内容讲解+代码案例,轻松掌握大模型应用框架 LangChain
- 用通俗易懂的方式讲解:如何用大语言模型构建一个知识问答系统
- 用通俗易懂的方式讲解:最全的大模型 RAG 技术概览
- 用通俗易懂的方式讲解:利用 LangChain 和 Neo4j 向量索引,构建一个RAG应用程序
- 用通俗易懂的方式讲解:使用 Neo4j 和 LangChain 集成非结构化知识图增强 QA
- 用通俗易懂的方式讲解:面了 5 家知名企业的NLP算法岗(大模型方向),被考倒了。。。。。
- 用通俗易懂的方式讲解:NLP 算法实习岗,对我后续找工作太重要了!。
- 用通俗易懂的方式讲解:理想汽车大模型算法工程师面试,被问的瑟瑟发抖。。。。
- 用通俗易懂的方式讲解:基于 Langchain-Chatchat,我搭建了一个本地知识库问答系统
- 用通俗易懂的方式讲解:面试字节大模型算法岗(实习)
- 用通俗易懂的方式讲解:大模型算法岗(含实习)最走心的总结
- 用通俗易懂的方式讲解:大模型微调方法汇总