【AI算法岗面试八股面经【超全整理】——NLP】

AI算法岗面试八股面经【超全整理】

  • 概率论【AI算法岗面试八股面经【超全整理】——概率论】
  • 信息论【AI算法岗面试八股面经【超全整理】——信息论】
  • 机器学习【AI算法岗面试八股面经【超全整理】——机器学习】
  • 深度学习【AI算法岗面试八股面经【超全整理】——深度学习】
  • NLP【AI算法岗面试八股面经【超全整理】——NLP】
  • CV

目录

    • 1、RNN
    • 2、LSTM
    • 3、Transformer
    • 4、Word2Vec
    • 5、BERT
    • 6、GPT
    • 7、CLIP
    • 8、BPE(Byte Pair Encoder)字节对编码

1、RNN

优点:

  • 参数共享。 RNN在每个时间步都使用相同的参数,因此在训练和预测时具有较小的计算负担;
  • 灵活性。 RNN可以处理各种长度的序列输入,并且可以用于不同的任务,如语言模型、时间序列预测等

缺点:

  • 梯度消失或爆炸。 RNN在处理长期依赖关系时容易出现梯度消失或爆炸的问题,导致难以捕捉远距离的依赖关系;
  • 短期记忆限制。 RNN的短期记忆相对较弱,难以有效地记住较长的历史信息

2、LSTM

优点:

  • 长期依赖关系。 LSTM通过门控机制 (遗忘门、输入门、输出门) 有效地解决了长期依赖问题,能够更好地捕捉长距离的序列依赖关系;
  • 记忆单元。 LSTM引入了记忆单元,可以保留和更新信息,有助于记住长序列中的重要信息;
  • 防止梯度消失。 LSTM通过门控机制可以更有效地控制梯度的流动,减少了梯度消失或爆炸的问题

3、Transformer

一种基于自注意力机制的序列到序列(Sequence-to-Sequence)模型,用于处理NLP任务,解决长依赖问题和并行计算效率的平衡。相比于RNN模型Transformer使用全局的自注意力机制,使模型可以同时关注输入序列的所有位置,更好地捕捉长距离依赖关系。Transformer引入多头注意力机制提高了模型的表达能力。Transformer两个关键组件组成:Encoder和Decoder。编码器将输入序列编码为一系列上下文相关的表示,解码器用这些表示生成目标序列。

  • 编码器,输入序列经过多头自注意力层和前馈神经网络层处理。自注意力层输入序列的每个位置都与其他位置进行注意力计算,以获取位置之间的相关性。使得模型能够在不同位置之间建立上下文关联,能够处理长距离的依赖关系。
  • 解码器,除自注意力层和前馈神经网络层,还包含一个编码器-解码器注意力层。交叉注意力层将编码器中的信息与解码器的当前位置关联,在生成目标序列时获得更好的上下文信息。
  • Transformer端到端训练,最大化目标序列的条件概率来进行模型优化。训练中使用掩码注意力(Masked Attention)确保解码器只能看到当前位置之前输入,避免信息泄露。

Transformer优点:

  • 能处理长距离依赖问题,适用于处理包含长序列的任务。
  • 并行计算效率好,使得模型在GPU上能够进行高效训练和推理。
  • 具有较好的表示能力和泛化能力,在多个NLP任务上取得了优异的性能。

1、位置编码
单词在句子中的位置以及排列顺序是十分重要的,引入词序信息有助于理解语义。循环神经网络本身就是一种顺序结构,天生就包含了词在序列中的位置信息。当抛弃循环神经网络结构,完全采用Attention,这些词序信息就会丢失,模型就没有办法知道每个词在句子中的相对和绝对的位置信息。因此有必要把词序信号加到词向量上帮助模型学习这些信息,位置编码(Positional Encoding)就是用来解决这种问题的方法。
给定一个长度为n的输入序列,让t表示词在序列中的位置, P t ⃗ ∈ R d \vec{P_t} \in R^d Pt Rd表示t位置对应的向量,d是向量的维度, f : N → R d f:N\to R^d f:NRd是生成位置向量 P t ⃗ \vec{P_t} Pt 的函数,定义如下:
P t ⃗ ( i ) = f ( t ) ( i ) : = { s i n ( w k ⋅ t ) if i=2k c o s ( w k ⋅ t ) if i=2k+1 \vec{P_t}^{(i)}=f(t)^{(i)}:=\begin{cases} sin(w_k\cdot t)& \text{if i=2k}\\cos(w_k\cdot t)& \text{if i=2k+1} \end{cases} Pt (i)=f(t)(i):={sin(wkt)cos(wkt)if i=2kif i=2k+1
其中,频率 w k w_k wk定义如下:
w k = 1 1000 0 2 k d w_k=\frac{1}{10000^{\frac{2k}{d}}} wk=10000d2k1
在Transformer中,位置编码是通过加法的方式结合到词向量中的。
2、多头自注意力
Transformer的多头注意力看上去是借鉴了CNN中同一卷积层内使用多个卷积核的思想,原文中使用 8 个“scaled dot-product attention”,在同一“multi-head attention”层中,输入均为“KQV”,同时进行注意力的计算,彼此之前参数不共享,最终将结果拼接起来,这样可以允许模型在不同的表示子空间里学习到相关的信息。即希望每个注意力头只关注最终输出序列中一个子空间,互相独立。核心思想在于抽取到更加丰富的特征信息。
3、Q、K、V

  • Q代表query查询,后续会和每一个k进行匹配,找到最相似的k
  • K代表key关键字,后续会被每一个q匹配
  • V代表value值,代表从输入中提到的信息

注意力机制的核心为:
Q = X W Q Q=XW^Q Q=XWQ K = X W K K=XW^K K=XWK V = X W V V=XW^V V=XWV A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
每一个key,都对应一个value;计算query和key的匹配程度就是计算两者相关性,相关性越大,代表key对应value的权重也就越大。
d k d_k dk是K的维度,除以一个根号d因为Q和K相乘之后的数值可能会相差很大,除以根号d可以平衡数据。利于模型收敛。

4、预测与推理阶段都使用mask原因

  • 训练阶段:训练时计算loss,是用当前decoder输入所有单词对应位置的输出 y 1 , y 2 , y 3 , ⋯ , y t y_1,y_2,y_3,\cdots,y_t y1,y2,y3,,yt与真实的翻译结果ground truth去分别算cross entropy loss,然后把t个loss加起来,如果使用self-attention,那么 y 1 y_1 y1这个输出里包含了 x 1 x_1 x1右侧单词信息(包含要预测下一个单词 x 2 x_2 x2的信息),用到了未来信息,属于信息泄露。
  • 预测阶段:预测阶段要保持重复单词预测结果是一样的,这样不仅合理,而且可以增量更新(预测时会选择性忽略重复的预测词,只摘取最新预测的单词拼接到输入序列中),如果关掉dropout,那么当预测序列是 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3时的输出结果,应该是和预测序列是 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3的前3个位置结果是一样的(增量更新);同时与训练时的模型架构保持一致,前向传播的方式是一致的。

5、嵌入向量和位置向量用为什么add而不用concat

  • 在d维token嵌入向量上concat一个d维的位置向量,变成了2d维的向量,最终要得到d维的输出,需要*(2d,d)的矩阵。等价于:先对token嵌入向量做变换,然后再加上位置嵌入,并且concat会增加网络的计算量。
  • 相同的token在句子中不同位置语义应该是不一样的,token向量应该有差异,add可以在向量的各个维度上表现出差异,而concat会导致向量前面部分一样,只有后面部分不同。

6、为什么在进行Softmax之前需要对Attention进行scaled(为什么除以 d k \sqrt{d_k} dk )

  • 这取决于softmax函数的特性,如果softmax内计算的数数量级太大,会输出近似one-hot编码的形式,导致梯度消失的问题,所以需要scale。
  • 那么至于为什么需要用维度开根号,假设向量q,k满足各分量独立同分布,均值为0,方差为1,那么qk点积均值为0,方差为dk,从统计学计算,若果让qk点积的方差控制在1,需要将其除以dk的平方根,是的softmax更加平滑

4、Word2Vec

Word2Vec有两种主要的模型:CBOW和Skip-gram。这两种模型都是基于神经网络的模型,它们通过学习文本数据中的上下文信息来得到单词的向量表示。

  • CBOW。 全称是Continuous bag of words(连续词袋模型),通过context word(背景词)来预测Target word(目标词)。在每个窗口内它不考虑词序信息,它是直接把上下文的词向量相加,自然就损失了词序信息。
  • Skip-gram。 与CBOW相反,Skip-gram模型的输入是一个词汇,输出则是该词汇的上下文。(Skip-gram 出来的准确率比cbow 高)
    在这里插入图片描述

5、BERT

BERT模型由多层Transformer编码器堆叠而成,通过预训练任务来学习语言的深层表示。这些预训练任务包括:
(1)遮蔽语言模型(Masked Language Model,MLM)(类似于完形填空)。在MLM任务中,模型被训练来预测输入句子中被遮蔽的词;
(2)下一句预测(Next Sentence Prediction,NSP)。在NSP任务中,模型需要判断两个句子是否是连续的文本序列。

6、GPT

1、GPT-1:
Pretrain+finetune
在预训练阶段,给定tokens的语料: U = u 1 , ⋯ , u t U=u_1,\cdots,u_t U=u1,,ut,目标函数为最大化似然函数:
L 1 ( U ) = ∑ i l o g ( P ( u i ∣ u i − k , ⋯ , u i − 1 ; θ ) L_1(U)=\sum_i{log(P(u_i|u_{i-k},\cdots,u_{i-1};\theta)} L1(U)=ilog(P(uiuik,,ui1;θ)
其中, k k k是文本上下文窗口的大小

  • 12层的transformer,每个transformer块有12个头
  • 词编码的长度为768
  • Batchsize为64

2、GPT-2:
Zero-shot
GPT-2去掉了fine-tuning层:不再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。GPT2依然沿用GPT1单向transformer的模式,只不过使用了更大的网络参数,和更大的数据集。
GPT-2试图通过“上下文学习In Context Learning”的方式来实现这一点,使用预训练语言模型的文本输入作为任务规范的一种形式:模型以自然语言指令和/或几个任务演示为条件,然后预期仅通过预测接下来会发生什么来完成更多的任务实例。
GPT-2的核心思想概括为:任何有监督任务都是语言模型的一个子集,当模型的容量非常大且数据量足够丰富时,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务。

  • 滑动窗口大小增加为1024
  • 将Transformer堆叠层数增加到48层,隐层的维度增至1600,参数量达15亿
  • Batchsize的大小增加为512

3、GPT-3:
稀疏自注意力,(locally banded sparse attention,局部带状稀疏注意力)

  • Dense Attention(传统 Self Attention):每个token之间两两计算Attention
  • Sparse Attention:每个token只与其他token的一个子集计算Attention
    网络容量的提升:
  • GPT-3采用了96层的多头transformer,头的个数为96
  • 词向量的长度是12888
  • 上下文滑动窗口的窗口大小提升至2048个token
    具体来说,sparse Attention除了相对距离不超过k,以及相对距离为k,2k,3k,…的token,其他所有token的注意力都设为0。
    在这里插入图片描述

4、GPT和BERT区别:

  • GPT用的是transformer中去掉中间Encoder-Decoder Attention的Decoder,(其实也可以等价地说,用到的是Encoder层,只是将Multi-Head Attention换成了Masked Multi-Head Attention),即:Masked Self Attention,是单向语言模型,即给定前几个词预测下一个词,更适合自然语言生成的任务;
  • 而BERT使用的是transformer的Encoder,即:Self Attention,是双向的语言模型,即给定周围上下文的词预测中间被mask的词,更适合自然语言理解的任务。

7、CLIP

使用对比学习,让模型学习文本-图像对的匹配关系,在同时输入文本和图像对的情况下,只有对角线上的位置才是真值。
为了实现这一目标,CLIP使用了一个多模态编码器,它由两个自编码器组成:图像编码器可以是基于卷积神经网络(CNN)或者VIT的模型;文本编码器则是一个基于Transformer的模型。作者通过一个线性投影将每个编码器的表示映射到多模态嵌入空间。通过联合训练图像编码器和文本编码器来最大化批次中的N个真实对的图像和文本嵌入的余弦相似度,同时最小化 N 2 − N N^2-N N2N个错误对的余弦相似度。

8、BPE(Byte Pair Encoder)字节对编码

1、构建词表:

  • 确定词表大小,即subword的最大个数V;
  • 在每个单词最后添加一个,并且统计每个单词出现的频率;
  • 将所有单词拆分为单个字符,构建出初始的词表,此时词表的subword就是字符;
  • 挑出频次最高的字符对,比如说t和h组成的th,将新字符加入词表,然后将预料中所有该字符对融合(merge),即所有t和h都变为th。新字符依然可以参与后续的merge,优点类似哈夫曼树,BPE实际上就是一种贪心算法;
  • 重复3、4的操作,直到词表中单词数量达到预设的阈值V或者下一个字符对的频数为1;

2、BPE编码:

  • 将词表中的单词按长度大小,从长到短排序;
  • 对于语料中的每个单词,遍历排序好的词表,判断词表中的单词/子词(subword)是否是该字符串的子串,如果匹配上了,则输出当前子词,并继续遍历单词剩下的字符串;
  • 如果遍历完词表,单词中仍然后子字符串没有被匹配,那我们将其替换为一个特殊的子词,比如< unk >

3、BPE解码:
将所有的输出子词拼在一起,直到碰到结尾为。
例如:[“moun”, “tain”, “high”, “the”] 解码后:[“mountain”, “highthe”]

4、优缺点:

  • 优点: BPE算法是介于字符和单词粒度之间的一种以subword为粒度的分词算法。1)能够解决OOV问题(无法很好的处理未知或罕见的词汇);2)减少词汇表大小;3)具有一定的泛化能力;
  • 缺点: 是基于统计的分词算法,对语料依赖性很强,如果语料规模很小,则效果一般不佳。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430496.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教师管理系统小程序+ssm论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterrise JavaBeans&#xff09;的全面支持&#xff0c;java servlet AI&#xff0c;JS&#xff08;java server ages&…

Unity 热更新(HybridCLR+Addressable)-创建Addressable资源

三、创建Addressable资源 创建三个文件夹&#xff0c;放Addressable资源&#xff0c;里面对应放程序集&#xff0c;预制体以及场景 拖拽到Addressable Groups对应组中 其中文件名太长&#xff0c;带着路径&#xff0c;可以简化名字 创建一个脚本&#xff0c;对于这个脚本进行一…

vue3自定义hooks

引言 Vue3引入了组合式API&#xff0c;使得代码逻辑更自由、灵活。其中自定义Hooks能让我们将客服用的逻辑抽离成一个独立的函数&#xff0c;以实现在多个组件中复用的目的。可以简单理解成封装成一个模块&#xff0c;以方便其他地方调用。 实现 自定义hooks useDog impor…

杰发科技——Eclipse环境安装

文件已传到网盘&#xff1a; 1. 安装文件准备 2. 安装Make 默认路径&#xff1a;C:\Program Files (x86)\GnuWin32\bin\ 不复制的话会报错 Error: Program "make" not found in PATH 3. 安装工具链 默认路径&#xff1a;C:\Program Files (x86)\Arm GNU Toolchain…

闯关leetcode——69. Sqrt(x)

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/sqrtx/description/ 内容 Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well. You mu…

计算机毕业设计之:基于微信小程序的中药材科普系统(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

模拟实现(优先级队列)priority_queue:优先级队列、仿函数、 反向迭代器等的介绍

文章目录 前言一、优先级队列二、仿函数三、 反向迭代器总结 前言 模拟实现&#xff08;优先级队列&#xff09;priority_queue&#xff1a;优先级队列、仿函数、 反向迭代器等的介绍 一、优先级队列 优先级队列本质是一个堆&#xff0c;使用vector容器进一步改进进行实现&am…

vue使用PDF.JS踩的坑--部署到服务器上显示pdf.mjs viewer.mjs找不到资源

之前项目使用的pdf.js 是2.15.349版本&#xff0c;最近换了一个4.6.82的版本&#xff0c;在本地上浏览文件运行的好好的&#xff0c;但是发布到服务器&#xff08;IIS&#xff09;上打不开文件&#xff0c;控制台提示找不到pdf.mjs viewer.mjs。 之前使用的2.15.349pdf和viewer…

mock虚拟接口技术

一、什么是mock mock指的就是使用mock创建出来的一个虚拟的接口 二、对于测试人员而言&#xff0c;我们为什么要使用mock 当我们进行接口测试时&#xff0c;如果对应的接口还没有开发好&#xff0c;但是我们又需要用到这个接口响应的信息&#xff0c;这个时候我们就可以使用…

邮件发送高级功能详解:HTML格式、附件添加与SSL/TLS加密连接

目录 一、邮件HTML格式设置 1.1 HTML邮件的优势 1.2 HTML邮件的编写 二、添加附件 2.1 附件的重要性 2.2 添加附件的代码示例 2.3 注意事项 三、使用SSL/TLS加密连接 3.1 SSL/TLS加密的重要性 3.2 SSL/TLS加密的工作原理 3.3 在邮件发送中启用SSL/TLS 3.3.1 邮件客…

智能算法躲避拥堵,高德企业用车上线“动态选路服务”为出行提效

近日&#xff0c;高德企业用车正式上线了一项全新服务——“动态选路服务”&#xff0c;旨在基于智能算法&#xff0c;动态规避突发拥堵路线&#xff0c;为企业用车用户提供更便捷、智能的出行方案。 以技术着眼细节&#xff0c;高德企业用车在帮助企业用车用户节约出行时间和…

飞睿智能实时雷达活体探测传感器模块,智能家居静止检测实时感知人员有无

随着科技的飞速发展&#xff0c;我们的生活正在经历着未有的创新。在这个创新的浪潮中&#xff0c;实时雷达活体探测传感器模块的技术正逐渐崭露头角&#xff0c;以其独特的优势为我们的生活带来安全与便捷。今天&#xff0c;我们就来详细探讨一下这项技术&#xff0c;看看它是…

TCL25届校招测评笔试TAS人才测评题库:高分攻略真题分析

&#x1f31f; 职场新人必看&#xff1a;TCL校招测评全解析 &#x1f31f; 亲爱的小伙伴们&#xff0c;你是否正准备踏入职场&#xff0c;或是对即将到来的校招感到既兴奋又紧张&#xff1f;今天&#xff0c;我将带你深入了解TCL校招中的TAS人才测评&#xff0c;让你在面试前做…

MyBatis - 动态SQL

前言 我们在某网站填写个人信息时&#xff0c;时常会遇到可以选填的空&#xff08;即可填&#xff0c;可不填&#xff09;&#xff0c;由于之前讲过的Java中的SQL语句都是固定的&#xff0c;且我们不可能对所有情况都写出与之对应的插入语句&#xff08;太过繁琐&#xff09;&…

最新简洁大方的自动发卡网站源码/鲸发卡v11.61系统源码/修复版

源码简介&#xff1a; 最新简洁大方的自动发卡网站源码&#xff0c;它就是鲸发卡v11.61系统源码&#xff0c;它是修复版。 说到鲸发卡系统&#xff0c;鲸发卡系统在发卡圈很多人都知道的&#xff0c;它是市面最好发卡系统之一&#xff0c;操作起来简单得很&#xff0c;界面也…

03-Docker下载加速

03-Docker下载加速 docker下载加速 方式1&#xff1a;使用 网易数帆、阿里云等容器镜像仓库进行下载。 网易数帆官网&#xff1a;https://sf.163.com/ 例如&#xff0c;下载网易数帆镜像中的mysql。&#xff08;网易数帆的地址为 hub.c.163.com&#xff0c;网易数帆对dockerh…

Protobuf:基本概念与使用流程

Protobuf&#xff1a;基本概念与使用流程 基本概念Linux 安装使用流程.proto文件编译使用 运行机制 基本概念 在进行网络编程时&#xff0c;经常需要进行数据传输&#xff0c;只有双方主机都保证数据格式的一致性&#xff0c;才能保证数据被正常解析。这个过程称为序列化与反序…

Android平台Unity3D下如何同时播放多路RTMP|RTSP流?

技术背景 好多开发者&#xff0c;提到希望在Unity的Android头显终端&#xff0c;播放2路以上RTMP或RTSP流&#xff0c;在设备性能一般的情况下&#xff0c;对Unity下的RTMP|RTSP播放器提出了更高的要求。实际上&#xff0c;我们在前几年发布Unity下直播播放模块的时候&#xf…

CTFHub技能树-SQL注入-Cookie注入

使用bp发现cookie的注入点 id1&#xff0c;发现为数字型 首先使用联合查询 id 1 order by 2 id 1 order by 3发现2的时候有回显&#xff0c;而3的时候无回显 Cookie: id-1 union select database(),user() 后面开始库->表->列->数据 Cookie: id-1 union select 1…

Gin中间件

Gin框架允许开发者在处理请求的过程中&#xff0c;加入用户自己的钩子&#xff08;Hook&#xff09;函数。这个钩子函数就叫中间件&#xff0c;中间件适合处理一些公共的业务逻辑&#xff0c;比如登录认证、权限校验、数据分页、记录日志、耗时统计等。 定义中间件 Gin中的中…