话不多说,我就直接上题了!
岗位名称:
科大讯飞NLP方向AI算法工程师
问题1:jieba分词的原理: jieba分词是一种中文文本分词工具,主要是基于词频和词典匹配。核心原理包含以下几点:
·基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
·采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
·对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。
问题2:word2vec的原理,怎么训练的?: word2vec是一种用于将词语表示为向量的模型,它的核心思想是通过预测上下文或目标词来学习词向量。word2vec模型有两种训练方法:CBOW(Continuous Bag-of-Words)和Skip-gram。CBOW模型的训练过程是,给定一个窗口大小,在一个句子中,将目标词的上下文作为输入,预测目标词本身。模型的输入是上下文词向量的累加,通过一个浅层神经网络进行训练,最终得到词向量。Skip-gram模型的训练过程是,给定一个目标词,在一个句子中,将目标词作为输入,预测它的上下文。模型通过一个浅层神经网络进行训练,最终得到词向量。在训练word2vec模型时,可以使用大规模的语料库进行迭代训练。训练过程中使用梯度下降等优化算法来更新模型的参数,使得模型能够更好地预测上下文或目标词。
问题3:ChatGPT是怎么训练出来的: ChatGPT是由OpenAI开发的大型语言模型,基于GPT-3.5架构。ChatGPT的训练过程可以分为两个主要阶段:预训练和微调。在预训练阶段,使用了大规模的文本数据集来训练模型。这个数据集包含了从互联网上抓取的各种文本,例如网页、书籍、维基百科等等。预训练的目标是让模型学习语言的各种模式和结构,以及推断单词和句子之间的关系。为了实现这一点,预训练使用了一个自监督学习的方法。这意味着模型在训练时没有明确的监督信号,而是通过自动生成任务来进行学习。例如,模型可能被要求预测一个句子中被遮挡的单词是什么,或者预测给定上下文的下一个单词是什么。预训练完成后,模型就可以理解和生成文本,但它还没有具体的知识或任务特定的指导。为了使ChatGPT更适合对话任务,需要进行微调。在微调阶段,使用人工编写的对话数据集来对模型进行有监督的训练。这些对话数据集通常由人类操作员与模型进行交互生成,以创建逼真的对话场景。这些操作员会扮演用户和模型之间的角色,向模型提问并提供回答。模型通过与这些对话进行比较,并根据预期输出进行调整,逐渐改善其回答的质量和流畅度。微调的目的是根据特定的任务和应用场景来调整模型,使其更符合实际需求。这个阶段需要大量的迭代和调试,以改进模型的性能和适应性。总的来说,ChatGPT的训练过程包括预训练和微调两个阶段,通过大规模的文本数据预训练模型,然后使用人工编写的对话数据集进行微调,使其适应对话任务并提供准确、连贯的回答。
问题4:BERT模型简述: BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型。与传统的语言模型只使用左侧或右侧的上下文信息不同,BERT模型采用了双向编码器,同时利用了左侧和右侧的上下文信息。BERT模型的预训练阶段采用了两个任务:掩码语言建模(Masked Language Model,MLM)和下一句预测(Next Sentence Prediction,NSP)。MLM任务类似于ChatGPT的预训练过程中的任务,随机掩盖输入文本中的一些词,要求模型预测这些被掩盖的词。NSP任务是要求模型判断两个句子是否是连续的。BERT模型通过预训练来学习通用的语言表示,然后可以在各种下游任务上进行微调。在微调阶段,可以将BERT模型用于文本分类、命名实体识别、问答等多种自然语言处理任务,通过微调模型的参数,使其适应特定任务的需求。
问题5:PyTorch中的train和eval模块: 在PyTorch中,train和eval模块通常用于模型的训练和评估。train模块主要用于模型的训练过程。在训练过程中,train模块会迭代地将训练数据输入到模型中,计算模型的损失(通常使用损失函数来度量模型的预测结果与真实标签之间的差异),然后使用反向传播算法更新模型的参数,以减小损失函数的值。训练过程还包括设置优化器、学习率调度器等,以便对模型进行参数优化。eval模块主要用于模型的评估过程。在评估过程中,eval模块会使用验证集或测试集的数据对训练好的模型进行评估。评估过程通常包括将测试数据输入模型中进行推理,然后根据评价指标(如准确率、召回率、F1分数等)来评估模型的性能。
问题6:样Python中字典的结构及实现方式: 在Python中,字典(Dictionary)是一种可变的数据结构,用于存储键-值对(key-value pairs)。字典中的键是唯一的,而值可以重复。字典的实现方式是哈希表(Hash Table),也称为散列表。Python的字典通过哈希表实现,具有快速的查找和插入操作。当需要访问字典中的值时,根据键经过哈希函数计算得到索引,然后通过索引在内部数组中快速定位到对应的值。哈希表是一种根据键直接访问值的数据结构,通过将键映射到哈希函数生成的索引位置来实现高效的键值查找。哈希函数将键转换成一个固定大小的整数,该整数用作哈希表的索引。
问题7: 有一组无序数组,如何取前10个最大的数:**如果给定一组无序数组,可以采用以下步骤来取前10个最大的数:将无序数组进行排序,可以选择快速排序、堆排序或其他适合的排序算法。排序的时间复杂度为O(nlogn),其中n是数组的长度。对排序后的数组,从末尾开始取前10个元素,即为前10个最大的数。举例来说,假设有一个名为nums的无序数组,可以使用Python的内置函数sorted()进行排序,并使用切片操作获取前10个最大的数:sorted_nums = sorted(nums, reverse=True)top_10 = sorted_nums[:10]
岗位名称:小米AIGC大模型岗位
问题1、讲一下transformer的原理
transformer的主要组成部分包括自注意力机制和位置编码。·
自注意力机制(Self-Attention):它允许模型在输入序列中的不同位置之间建立关联。通过计算每个位置与其他所有位置的相关性得分,模型可以学习到输入序列中各个部分之间的依赖关系。
位置编码(Positional Encoding):Transformer通过将位置信息编码到输入向量中,使得模型能够区分不同位置的词语或标记。这样,模型能够利用位置信息更好地理解输入序列。
多头注意力机制(Multi-Head Attention):为了增强模型对不同表示空间的关注,Transformer引入了多个注意力头,允许模型并行地关注不同的表示子空间,从而提高了模型的表征能力。
前馈神经网络(Feed-Forward Neural Network):每个注意力模块之后都连接着一个前馈神经网络,它通过应用全连接层和激活函数来对特征进行变换和组合。
通过这些组件的组合和堆叠,Transformer模型能够捕捉长距离依赖关系,同时避免了传统循环神经网络中的序列依赖问题,使其在处理长序列时表现更好。
问题2、讲一下微调方法p-tuning v2的原理
P-Tuning V2在P-Tuning V1的基础上进行了下述改进:
在每一层都加入了Prompts tokens作为输入,而不是仅仅加在输入层,这与Prefix Tuning的做法相同。这样得到了更多可学习的参数,且更深层结构中的Prompt能给模型预测带来更直接的影响。
去掉了重参数化的编码器。在 P-tuning v2 中,作者发现重参数化的改进很小,尤其是对于较小的模型,同时还会影响模型的表现。
针对不同任务采用不同的提示长度。提示长度在提示优化方法的超参数搜索中起着核心作用。在实验中,我们发现不同的理解任务通常用不同的提示长度来实现其最佳性能,这与Prefix-Tuning中的发现一致,不同的文本生成任务可能有不同的最佳提示长度。
可选的多任务学习。先在多任务的Prompt上进行预训练,然后再适配下游任务。一方面,连续提示的随机惯性给优化带来了困难,这可以通过更多的训练数据或与任务相关的无监督预训练来缓解;另一方面,连续提示是跨任务和数据集的特定任务知识的完美载体。
问题3、什么是bilstm-crf
BiLSTM-CRF是一种用于序列标注任务的神经网络模型,结合了双向长短期记忆网络(BiLSTM)和条件随机场(CRF)。
双向长短期记忆网络(BiLSTM):BiLSTM是一种循环神经网络变种,能够有效地捕捉输入序列中的长期依赖关系。通过同时考虑输入序列的正向和反向信息,BiLSTM可以更好地理解整个序列的语境。
条件随机场(CRF):CRF是一种概率图模型,常用于序列标注任务。它能够对序列中的标记进行全局建模,利用标记之间的依赖关系来提高标注的一致性和准确性。
BiLSTM-CRF模型首先利用BiLSTM对输入序列进行特征提取,然后将提取的特征作为CRF模型的输入,利用CRF模型对序列进行标注。通过结合BiLSTM和CRF,BiLSTM-CRF模型能够更好地处理序列标注任务,同时充分利用上下文信息和标记之间的依赖关系。
问题4、代码题:给整数数组和target,找数组当中和为目标值的两个整数返回下标。
使用一个字典来存储遍历过的数字及其下标,通过查找字典来判断是否存在与当前数字配对的数字,从而实现寻找和为目标值的两个数的功能。
岗位名称:百度算法工程师
问题1:讲一下lora的原理
Lora方法指的是在大型语言模型上对指定参数增加额外的低秩矩阵,也就是在原始PLM旁边增加一个旁路,做一个降维再升维的操作。并在模型训练过程中,固定PLM的参数,只训练降维矩阵A与升维矩阵B。而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。用随机高斯分布初始化A,用0矩阵初始化B。
问题2:讲一下GBDT的原理
GBDT(Gradient Boosting Decision Tree)是一种集成学习方法,它通过迭代训练决策树,每一次迭代都试图修正前一次迭代的错误。具体而言,GBDT通过拟合残差(目标值与当前模型的预测之差)来逐步改进模型。在每一轮迭代中,新的决策树被训练以捕捉残差中的模式。最终,所有树的预测被组合起来形成最终的预测模型。
问题3:翻译任务一般用什么架构
翻译任务主要使用的是seq2seq架构,目前主流的翻译架构是基于Transformer模型的,它采用自注意力机制(self-attention)来捕捉输入序列中不同位置的关联信息,并通过编码器-解码器结构来实现翻译。
问题4:encoder-only,decoder-only, encoder-decoder的区别
Encoder-only:只有编码器,用于将输入序列编码成固定维度的表示,常用于特征提取。
Decoder-only:只有解码器,用于从固定维度的表示生成输出序列,通常在生成式任务中使用。
Encoder-decoder:同时包含编码器和解码器,用于序列到序列的任务,如机器翻译。编码器将输入序列编码成上下文信息,解码器使用该信息生成输出序列。
问题5:讲一下transformer的结构
Transformer模型由编码器和解码器组成,其核心是自注意力机制。每个编码器和解码器均由多个相同的层叠加而成,每一层包含自注意力子层和全连接前馈网络子层。输入序列通过多头自注意力机制进行处理,然后通过前馈网络。每个子层后都有残差连接和层标准化。编码器和解码器之间通过编码器-解码器注意力连接。
问题6:见一下Flash Attention的原理
Flash Attention从attention计算的GPU memory的read和write方面入手来提高attention计算的效率。其主要思想是通过切块(tiling)技术,来减少GPU HBM和GPU SRAM之间的数据读写操作。
问题7:fp32和fp16的区别,混合精度的原理
fp32:32位浮点数,占用4字节,提供高精度的数值表示。
fp16:16位浮点数,占用2字节,提供相对较低的数值表示精度,但在许多情况下仍足够。
混合精度指的是在模型训练中同时使用fp16和fp32,以在计算中提高效率。通常,模型参数使用fp16表示,而梯度和累积值使用fp32表示。这样可以减少内存占用和计算开销,加速训练过程。
问题8:Beam search的原理
Beam search是一种在序列生成任务中选择最优输出序列的搜索算法。在每一步,它保留概率最高的k个候选,然后根据下一个词的预测继续扩展这些候选。这个过程一直进行到生成完整序列为止。Beam search允许在搜索空间中进行局部剪枝,以平衡搜索的广度和深度,提高生成的序列的质量。
大厂面试题我这边已经整理好了,有需要的小伙伴可以扫描下方进行免费领取
