赞
踩
节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。
今天整理我们社群一个同学面试 NLP 算法方向的面试题,分享给大家,希望对后续找工作的有所帮助。喜欢记得点赞、收藏、关注。更多技术交流&面经学习,可以加入我们。
在自我介绍环节,我清晰地阐述了个人基本信息、教育背景、工作经历和技能特长,展示了自信和沟通能力。
在机器翻译任务中,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。
这两个指标在不同的任务和应用场景中都有其重要性,因此在评估自然语言处理模型时,经常会同时使用它们来综合考虑模型的表现。
BART (bi Encoder+casual Decoder,类bert的方法预训练)
T5 (Encoder+Decoder,text2text预训练)
GPT(Decoder主打zero-shot)
GLM (mask的输入部分是双向注意力,在生成预测的是单向注意力)
transformer论文中提出了一种基于自注意力机制(self-attention)的新型神经网络结构,它可以处理序列到序列(sequence-to-sequence)的任务,如机器翻译、文本摘要、语音识别等。transformer模型由编码器(encoder)和解码器(decoder)组成,编码器将输入序列映射为一组隐藏向量,解码器根据这些向量生成输出序列。
transformer模型的一个限制是,它的自注意力机制需要计算输入序列中每个token与其他所有token之间的相关性,这个计算的时间和空间复杂度都是输入序列长度的平方。因此,当输入序列过长时,transformer模型会消耗过多的计算资源和存储空间,导致效率降低和性能下降。
具体题意记不清了,但是类似 【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,备注:技术交流
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。