常见的面试问题————NLP篇(持续更新)

  1. Word2Vec 的原理,使用的技巧? https://mp.weixin.qq.com/s/lerKdFXkhqQaaVl4BGgblA
  2. Word2Vec 的多层 softmax 是怎么实现的,思路是怎样的,损失函数变化 nlp中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert - 知乎
  3. Word2vec的损失函数 10.2. 近似训练 — 《动手学深度学习》 文档 (当简历上没什么项目和实习的时候,面试官就喜欢问Word2vec,非常的无聊)
  4. 为什么基于 skip-gram 的 word2vec 在低频词汇相比 cbow 更有效?为什么会好?word2vec模型cbow与skip-gram的比较
  5. Word2Vec 怎么将得到的词向量变成句子向量,以及怎么衡量得到词向量的好坏Word2Vec 怎么将得到的词向量变成句子向量,以及怎么衡量得到词向量的好坏_Matrix_cc的博客-CSDN博客
  6. Word2vec为什么会有用?word2vec本质是把相似的词或者上下文相近的词映射到几乎是同一个点,所以语义相近的词的weight是接近的,那样做下游任务比随机初始化的词向量要好
  7. word2vec的缺点是什么?1、结构太简单,无法更好地学习句法知识和语义知识。2、没办法解决OOV 。3、没法解决词语顺序的问题。4、没法解决一词多义的问题
  8. 层次softmax为什么要以词频构建二叉树 Word Embedding的hierarchical softmax为什么要选择依靠词频建立二叉树? - 知乎
  9. 负采样的是如何带权采样的,为什么负采样权重开 3/4 次幂?为什么Word2Vec训练中, 需要对负采样权重开3/4次幂? - 知乎
  10. 负采样的负样本和层次softmax的负样本有什么不一样?负采样的负样本的个数是固定的,层次softmax的负样本是不均衡的,词频高的词里根节点接近,采样到的负样本就比较少,低频词采样的负样本就比较多。
  11.  fasttext 、word2vec、glove、elmo、bert、GPT、xlnet 的区别,fasttext相比于 word2vec 有什么优势,它是怎么做分类的
  12.  textcnn 原理,为什么选择用2,3,4不同尺寸的卷积核
  13. BiLSTM+Attention 是怎么分类的 深度学习算法原理——Attention-Based BiLSTM_null的专栏-CSDN博客
  14. Transformer的结构,multi-head Attention 的作用  Ps. pytorch手动实现一下multi-head  
    import torch
    import torch.nn as nn
    
    class MultiHeadAttention(nn.Module):
        def __init__(self, d_model, num_heads):
            super(MultiHeadAttention, self).__init__()
            assert d_model % num_heads == 0
            
            self.d_model = d_model
            self.num_heads = num_heads
            self.head_dim = d_model // num_heads
            
            # 定义线性变换层,用于将d_model维度映射到num_heads * head_dim
            self.q_linear = nn.Linear(d_model, d_model)
            self.k_linear = nn.Linear(d_model, d_model)
            self.v_linear = nn.Linear(d_model, d_model)
            
            # 输出层,将num_heads * head_dim映射回d_model
            self.out_linear = nn.Linear(d_model, d_model)
            
            self.dropout = nn.Dropout(0.1)
    
        def forward(self, query, key, value, mask=None):
            """
            Args:
                query: (batch_size, query_len, d_model)
                key: (batch_size, key_len, d_model)
                value: (batch_size, value_len, d_model)
                mask: 可选,用于遮盖padding部分或后续序列的位置 (batch_size, query_len, key_len)
            """
            batch_size = query.size(0)
            
            # 线性变换
            q = self.q_linear(query)  # (batch_size, query_len, d_model)
            k = self.k_linear(key)    # (batch_size, key_len, d_model)
            v = self.v_linear(value)  # (batch_size, value_len, d_model)
            
            # 将d_model分割成num_heads个头
            q = q.view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)  # (batch_size, num_heads, query_len, head_dim)
            k = k.view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)  # (batch_size, num_heads, key_len, head_dim)
            v = v.view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)  # (batch_size, num_heads, value_len, head_dim)
            
            # 计算注意力得分
            scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.head_dim)  # (batch_size, num_heads, query_len, key_len)
            
            # 应用mask
            if mask is not None:
                scores = scores.masked_fill(mask == 0, float('-inf'))
            
            # 计算注意力权重
            attn_weights = torch.softmax(scores, dim=-1)
            attn_weights = self.dropout(attn_weights)
            
            # 加权求和得到输出
            context = torch.matmul(attn_weights, v)  # (batch_size, num_heads, query_len, head_dim)
            
            # 合并多头并进行线性变换
            context = context.transpose(1, 2).contiguous().view(batch_size, -1, self.d_model)  # (batch_size, query_len, d_model)
            output = self.out_linear(context)  # (batch_size, query_len, d_model)
            
            return output, attn_weights
    
    # 示例使用
    mha = MultiHeadAttention(d_model=512, num_heads=8)
    query = torch.randn(10, 32, 512)  # 假设输入
    key = value = query  # 为了简化示例,假设query、key、value相同
    output, attn = mha(query, key, value)
    print(output.shape)  # 应输出 (10, 32, 512)
    Transformer中Multi-head Attention的作用_Matrix_cc的博客-CSDN博客 decode部分的query来自decode,而key和value来自encode部分【NLP】Transformer详解
  15. Transformer的位置编码和bert的位置编码的区别,为什么要加位置编码?Transformer的位置编码是人为定义,bert是自己学习的,像word Embedding一样在训练中学习到它的词序信息。因为传统LSTM的模型自带词序信息,而Transformer不带词序信息,所以需要加上位置编码。
  16. Transformer里self-attention 中词向量不乘 QKV 参数矩阵,会有什么问题?

    Self-Attention 的核心是用文本中的其它词来增强目标词的语义表示,从而更好的利用上下文的信息。self-attention 中,sequence 中的每个词都会和 sequence 中的每个词做点积去计算相似度,也包括这个词本身。如果不乘 QKV 参数矩阵,那这个词对应的 q,k,v 就是完全一样的。在相同量级的情况下,qi 与 ki 点积的值会是最大的(可以从 “两数和相同的情况下,两数相等对应的积最大” 类比过来)。那在 softmax 后的加权平均中,该词本身所占的比重将会是最大的,使得其他词的比重很少,无法有效利用上下文信息来增强当前词的语义表示。而乘以 QKV 参数矩阵,会使得每个词的 q,k,v 都不一样,能很大程度上减轻上述的影响。

  17. Transformer的残差作用 :减少梯度消失和梯度爆炸的问题,同时能解决退化问题。退化问题是指:当网络隐藏层变多时,网络的准确度达到饱和然后急剧退化,而且这个退化不是由于过拟合引起的。
  18. Transformer 怎么解决长文本问题?
  19. Transformer是postnorm还是prenorm?pre norm就是在残差前norm,x+F(Norm(x)),这样残差的效果更强,训练计算量更低,但是会削弱模型深度带来的增益。post norm就是正常bert用的,在残差后面加,Norm(x+F(x)),深度带来的效果更明显,但是计算量会更大,目前post norm认为更适合
  20. Transformer里使用的是LN还是BN    Ps. LN的原理,pytorch手动实现一下
  21. Transformer为什么要用LN,而不是BN transformer 为什么使用 layer normalization,而不是其他的归一化方法? - 知乎
  22. Transformer 模型中 dropout 主要用在哪里?在每一Multi-Head Attention之后,Add&Norm之前进行dropout,以及add(token embedding,positional encoding)之后进行dropout
  23. self-attention里为什么要除以根号d? 为了降低 Q*K 的数值,防止它落入到 softmax 函数的饱和区间。因为 softmax 函数的饱和区梯度几乎为 0,容易发生梯度消失。
  24. Transformer为什么表现的比LSTM和CNN好?为什么transformer比RNN和LSTM更好?_None_Pan的博客-CSDN博客_transformer比lstm好吗
  25. BERT为什么表现好 一起读论文 | 为什么BERT会在许多NLP任务中表现得很好?_语言智能技术笔记簿-CSDN博客 1、预训练数据较大和使用两种预训练的方式2、使用的模型结构较LSTM和CNN较好 3、模型层数深 
  26. BERT的三个embedding为什么可以想加?答案
  27. BERT的缺点:1、无法解决长文本问题  2、输入噪声 [MASK],造成预训练 - 精调两阶段之间的差异  3、生成任务表现不佳:预训练过程和生成过程的不一致,导致在生成任务上效果不佳  4、位置编码使用绝对编码 后BERT时代:15个预训练模型对比分析与关键点探索(附链接) | 机器之心
  28. Bert里的mask机制?是随机 mask 语料中 15% 的 token,其中80% 的单词用 [MASK] token 来代替,10% 单词用任意的词来进行代替,10% 单词不变。
  29. BERT为什么要保持10% 单词不变,10%的单词用任意的词代替?
  30. bert里的mask和word2vec里的CBOW的区别

    相同点:CBOW 的核心思想是,给定上下文,根据它的上文 context-before 和下文 context-after 去预测 input word。Bert 本质上也是如此。

    不同点:首先,在 CBOW 中,每个单词会称为 input word,而 Bert 中只有 15% 的词会称为 input word。其次,对于数据输入部分,CBOW 中的输入数据只有待预测单词的上下文,而 Bert 的输入是带有 [MASK]  token 的 “完整” 句子,也就是说 Bert 在输入端将待预测的 input word 用 [MASK] token 代替了。

    另外,通过 CBOW 模型训练后,每个单词的 word embedding 是唯一的,因此并不能很好的处理一词多异的问题;而 Bert 模型得到的 word embedding (token embedding)融合了上下文信息,就算是同一个单词,在不同的上下文环境下,得到的 word embedding 是不一样的。

  31. BERT为什么用字粒度而不是用词粒度?因为在做MLM预训练任务时,最后预测单词是用softmax进行预测。使用字粒度的话,总字数大概在2w左右,而使用词粒度的话,则有十几万个词,在训练时显存会爆炸。

  32. BERT不同层针对NLP的什么任务? POS、成分分析、DEPS、Entities、SRL、COREF、关系分类,从上到下,越往下这个任务越需要偏向高层语义的知识才能解决好。POS 词性标注是简单任务,偏向表层特征,关系分类则是纯语义的任务,不理解语义便无法很好的解决任务,从上到下逐渐趋向语义任务。张俊林:BERT和Transformer到底学到了什么 | AI ProCon 2019 - 云+社区 - 腾讯云

  33. HMM 和 CRF 的原理和区别,其中维特比算法的复杂度  区别:

    1.HMM 是生成模型,CRF 是判别模型

    2.HMM 是概率有向图,CRF 是概率无向图

    3.HMM 求解过程可能是局部最优,CRF 可以全局最优 

    4.HMM是做的马尔科夫假设,而CRF是马尔科夫性,因为马尔科夫性是是保证或者判断概率图是否为概率无向图的条件                                                             、

  34. HMM原理:三个问题:1、概率计算问题:前向—后向算法  给定模型 λ=(A,B,π) 和观测序列 Q={q1,q2,...,qT},计算模型 λ 下观测到序列 Q 出现的概率 P (Q|λ);2、学习问题:Baum-Welch 算法 (状态未知) 已知观测序列 Q={q1,q2,...,qT},估计模型 λ=(A,B,π) 的参数,使得在该模型下观测序列 P (Q|λ) 最大  3、预测问题:Viterbi 算法 给定模型 λ=(A,B,π) 和观测序列 Q={q1,q2,...,qT},求给定观测序列条件概率 P (I|Q,λ) 最大的状态序列 I。

  35. CRF原理:https://applenob.github.io/machine_learning/CRF/

  36. BiLSTM+CRF模型中,CRF层的作用?1、CRF 层可以为最后预测的标签添加一些约束来保证预测的标签是合法的。在训练数据训练过程中,这些约束可以通过 CRF 层自动学习到的。2、CRF 中有转移特征,即它会考虑输出标签之间的顺序性,也会学习一些约束规则 BiLSTM-CRF中CRF层的作用 - 程序员大本营

  37. Albert里的SOP为什么会有效?

    ALBERT 认为,NSP (下一个句子预测) 将话题预测和连贯预测混为一谈。作为参考,NSP 使用了两个句子 —— 正样本匹配是第二个句子来自同一个文档,负样本匹配是第二个句子来自另一个文档。相比之下,ALBERT 的作者认为句子间的连贯是真正需要关注的任务 / 损失,而不是主题预测,因此 SOP 是这样做的:

    使用了两个句子,都来自同一个文档。正样本测试用例是这两句话的顺序是正确的。负样本是两个句子的顺序颠倒。
     

  38. bert 里 add&norm 是什么以及作用
  39. local attention 和 global attention 的区别:一文看懂 Attention(本质原理+3大优点+5大类型) - 产品经理的人工智能学习库
  40. Attention的理解和它的优缺点:Attention即从大量的信息中选择出少量的重要信息,并聚焦到这些重要信息上,忽略大多不重要的信息。权重越大越聚焦于其对应的 Value 值上,即权重代表了信息的重要性,而 Value 是其对应的信息。   优点:

    参数少

    模型复杂度跟 CNNRNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。

    速度快

    Attention 解决了 RNN 不能并行计算的问题。Attention 机制每一步计算不依赖于上一步的计算结果,因此可以和 CNN 一样并行处理。

    效果好

    在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。

    缺点:没法捕捉位置信息,即没法学习序列中的顺序关系。这点可以通过加入位置信息,如通过位置向量来改善
  41. Bahdanau 和 Luong 两种 Attention 机制的区别:一文看懂 Bahdanau 和 Luong 两种 Attention 机制的区别 - 知乎
  42. graph embedding 的原理
  43. TF-IDF 的原理  TF-IDF原理及使用_一路风景-CSDN博客_tfidf
  44. n-gram原理及有哪些平滑处理 自然语言处理NLP中的N-gram模型_songbinxu的博客-CSDN博客_n-gram
  45. 解决OOV的方法: NLP 研究主流目前如何处理 out of vocabulary words? 
  46. 词向量的降维
  47. nlp 分词技术有哪些,如何分的
  48. nlp有哪些数据增强的方法 自然语言处理中一些常用的数据增强的方式_Matrix_cc的博客-CSDN博客
  49. 文本预处理的方法有哪些
  50. 大模型相关面试  https://zhuanlan.zhihu.com/p/643560888
  51. 大模型教程 大模型教程 
  52. Prompt系列调参原理 PEFT | Prompt系列高效调参原理解析
  53. chatGLM、LLAMA原理
  54. 序列太长为什么是问题,对应的解决方案是什么?
  55. Agent听说过? CoT听说过? SFT数据配比,DPO原理,PPO原理,后续有哪些改进
  56. GPT模型是怎么解决 decoder串行训练效率低下的问题
  57. GPT模型的损失函数是什么,跟SFT过程有差异吗,具体的前向过程是什么样的
  58. page attention、flash attention原理
  59. LoRA原理、QLoRA原理,两者区别
  60. pre-norm、post-norm改善了什么问题
  61. dpo、ppo原理
  62. dpo 怎么解决分布漂移的问题,ppo优势函数如何计算
  63. moe专家网络怎么解决不均衡的问题
回答: NLP算法工程师面试题主要涉及到三个方面的内容:麦田怪圈、L1正则化和优化函数。麦田怪圈是指通过某种未知力量将农作物压平形成的几何图案,存在人为说、自然形成说和磁场说等多种解释。 L1正则化是一种稀疏规则算子,指向量中各元素绝对值之和,通常用作L0正则项的最优凸近似。 优化函数是一种数学方法,用于解决机器学习算法中存在的优化问题,通常通过迭代的方式逼近最优解。优化函数的基本框架包括定义待优化参数、损失函数、学习率和参数更新框架等。 在NLP算法工程师面试中,可能还会涉及到生成式模型、梯度下降法等内容。生成式模型是指通过对联合分布进行建模,生成采样数据并选择最优概率的label作为结果。生成式模型的优点是能够生成新的样本数据,但缺点是没有判别边界。 梯度下降法是一种优化算法,通过计算损失函数关于当前参数的梯度,根据历史梯度计算一阶动量和二阶动量,然后根据下降梯度更新参数。123 #### 引用[.reference_title] - *1* *2* *3* [NLP 算法工程师面试问答-BasicAlgorithm](https://blog.csdn.net/suli77/article/details/129208430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值