首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
a起个什么名字好
门头沟学院 Java
发布于湖北
关注
已关注
取消关注
@SweetBean:
算法岗常见面试题(七):语言模型
两种策略将预训练的语言表示应用到下游任务:基于特征 (feature-base):将训练出的表示作为feature用于任务。微调 (fine-funing):在预训练好的模型上加些针对任务的层,再对后几层进行精调。1 Word2vec (feature-base)理解 Word2Vec 之 Skip-Gram 模型word2vec原理推导与代码分析word2vec Parameter Learning Explained(5条消息) 图解Word2vec,读这一篇就够了(通俗易懂)_文晓武的博客-CSDN博客_word2vec流程1.1 说说word2vec ?语言离散表示的缺点:维度过高,数据稀疏,难以优化不包含语义,无法衡量词与词之间的关系word2vec是一种分布式表示。(为什么叫分布式表示:相比于one-hot只有一个维度是1,将词的表示集中在某个维度,分布式表示将词的信息分散到每个维度。)word2vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,通过一个嵌入空间使得语义上相似的单词在该空间中距离很近。基本流程:先基于训练数据构建一个神经网络,当模型训练好之后,用这个模型通过训练数据所学到的参数,如隐层的权重矩阵,作为词向量。模型的输出概率代表了词典中每个词有多大的概率跟input word同时出现。1.2 word2vec为什么通过单词预测可以学习到单词的embedding?无监督的学习方式,利用上下文语言环境学习词的嵌入表示。通过一个嵌入空间,使得语义上相似的单词再该空间内距离很近。1.3 两种原理/框架skip-gram和CBOW的训练目标都不是得到一个预测上下文词的模型,而是作为一种预训练任务,得到词向量。每个模型包含三个层:输入层、投影层、输出层。从上图中可以看出,初始的Word2vec方法中可以产生两种词向量,输入层到投影层之间的权重矩阵得到输入向量vwv_wvw,投影层到输出层之间的权重矩阵得到输出向量vw’v_w^’vw’。最终使用的词向量是输入向量vwv_wvw,而输出向量会在后期的模型优化过程中被省略。输入层是词的one-hot表示。预测使用softmax激活函数。损失函数是对数似然函数:E=−logp(wO∣wI)E=-logp(w_O|w_I)E=−logp(wO∣wI),wIw_IwI和wOw_OwO分别为输入单词和目标输出单词,p(wO∣wI)p(w_O|w_I)p(wO∣wI)对应了输出层的yOy_OyO,最小化EEE。损失函数是如何得到的?对于CBOW和skip-gram,训练目标为maxp(wO∣wI)maxp(w_O|w_I)maxp(wO∣wI),即使得目标输出的softmax的概率最大,对maxp(wO∣wI)maxp(w_O|w_I)maxp(wO∣wI)进一步推导得到:maxp(wO∣wI)=maxyj∗=maxlogyj∗=maxlog(euj∗∑j′∈Veuj′)=uj∗−log∑j′∈Veuj′:=−Emaxp(w_O|w_I)=maxy_{j*}=maxlogy_{j*}=maxlog(\frac{e^{u_{j*}}}{\sum_{j'\in V}e^{u_{j'}}})=u_{j*}-log\sum_{j'\in V}e^{u_{j'}}:=-Emaxp(wO∣wI)=maxyj∗=maxlogyj∗=maxlog(∑j′∈Veuj′euj∗)=uj∗−log∑j′∈Veuj′:=−E其中j∗j*j∗对应了目标单词的下标。1.3.1 skip-gram给定input word预测上下文。神经网络的模型图:输入层:一个单词的词向量。投影层:没有操作,直接将输入的词向量传向输出层。如果需要用300维的向量表示词向量,则隐层需要有300个节点,隐层矩阵为10000行,300列(10000为词汇数,300为隐层个数)。最终目标就是学习隐层的权重矩阵(10000x300)模型训练完毕,直接查询word对应的index所在行的向量,即为输入单词的词嵌入。如果两个词具有非常相似的上下文,那么他们的嵌入向量也会非常相似。输出层:每个单词都是相互独立的,没有顺序关系,共享权重矩阵。损失函数为对数似然函数:L=−∑w∈Clogp(Context(w)∣w)L=-\sum_{w\in C}logp(Context(w)|w)L=−∑w∈Clogp(Context(w)∣w)其中,p(Context(w)∣w)=∏u∈Context(w)p(u∣w)p(Context(w)|w)=\prod_{u\in Context(w)}p(u|w)p(Context(w)∣w)=∏u∈Context(w)p(u∣w)1.3.2 CBOW用中心词的C个上下文单词,预测中心词。输入层:上下文的词向量。投影层:每个上下文使用的权重矩阵是共享的,且该层不使用激活函数。投影层对输入进行向量相加求平均值的操作。输出层:输出最可能的w。可以看做一个对分类问题,最朴素的做法是softmax回归。损失函数为对数似然函数:L=−∑w∈Clogp(w∣Context(w))L=-\sum_{w\in C}logp(w|Context(w))L=−∑w∈Clogp(w∣Context(w))1.4 优化策略(超参数一面)(答出前两条即可)层次softmax(Hierarchical Softmax):时间复杂度从V降到logV (V为词表的大小)负采样:时间复杂度从V下降到NnegN_{neg}Nneg+1(NnegN_{neg}Nneg为负采样的样本个数)二次采样subsampling:对高频次单词进行抽样来减少训练样本的个数将常见的单词组合或者词组作为单个“words”来处理对优化目标采用负采样方法,这样每个训练样本的训练只会更新一小部分的模型权重,从而降低计算负担1.4.1 层次softmax从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,并从中找概率最大的值。层次softmax是计算softmax 的一种高效策略。基本思想:在求概率分布时,不对所有单词的概率求和来做归一化,而是用哈夫曼树来构建softmax,无需计算词表中所有单词的softmax并选择最大的作为输出,只需遍历树的深度个节点,即可找到softmax值最大的词作为输出。基本结构:根据词频,通过哈夫曼树构建词表,其中,叶子节点表示单词,叶子节点的个数为词表的大小V,非叶子节点用来求到达叶子节点的概率,非叶子节点的个数为V-1。从根节点到叶子节点只有一条路径,用这条路径上所有非叶子节点概率的乘积作为该单词是输出单词的概率。这样只用计算树深度个输出节点的概率就可以得到目标单词的概率。此外,高频词非常接近树根,所需要的计算次数将进一步减少。训练过程:将投影层输出的向量直接和哈夫曼树中的根节点相连。然后在非叶子节点上计算二分概率(sigmoid),这个概率是指从当前节点向左子树走还是右子树走的概率。具体而言,每个非叶子节点相当于一个神经元/感知机(一个sigmoid激活函数),任务是预测它在随机游走过程中应该向左走还是向右走。层次softmax算法去掉了原始word2vec模型的输出向量,取而代之的是,每个非叶子节点都包含一个输出向量vn(w,j)’v^’_{n(w,j)}vn(w,j)’,vn(w,j)’v^’_{n(w,j)}vn(w,j)’是一个可学习的参数,并在模型训练过程中不断调整。一个词被定义为输出单词的概率的计算公式vn(w,j)’v^’_{n(w,j)}vn(w,j)’反向传播过程中的更新计算公式以上的反向传播的计算过程同时适用于CBOW和skip-gram,区别在于,在应用于skip-gram时,需要对输出的上下文中的每个单词都重复这个更新过程。哈夫曼树是一种带权路径长度最短的二叉树,也称最优二叉树。哈夫曼树的构建针对的是带权的叶子节点,应用到word2vec中,权重就是词频。基于词表的哈夫曼树的构建:每次从集合中选出权值最小的两个节点,以这两个节点作为左右子树构建新的树,其中,权重较小的作为左子树,权重较大的作为右子树,两个节点相同时就将深度较小的作为左子树。根据词频构建,高词频的放在前面。于是每个叶子节点代表一个词,且每个词都可以表示为01的哈夫曼编码。多个二分类解决多分类问题SVM中的多分类是由二分类组成的,且使用的也是二叉树的结构。1.4.2 负采样为了解决每轮都有大量的输出向量需要更新的问题,我们选择只更新其中的一小部分样本。负样本:输出端期望预测为0的word,即非期望预测结果的word正样本:输出端期望预测为1的word,即为期望预测结果的word如,输入"so",期望输出上下文词"quick",则"quick"为正样本,除"quick"以外的所有词为负样本。基本思想:在输出向量中随机选择少量的负样本(比如5个)来更新权重,而不是对所有的词语都更新权重。正样本也需要更新权重。即,从原来的更新所有词的权重变为只更新少量负样本+正样本的权重。负样本数量的选择:对于小规模数据集,5~20个,大规模数据集,2~5个。如何选择负样本:采样过程中需要构建概率分布,也可以随机抽取,还可以根据经验定义一个良好的分布。某个词被选为负样本的概率和词频成正比。损失函数:上述公式同时适用于CBOW和skip-gram模型,其中,应用于skip-gram模型时,一次只对上下文中的一个单词计算这个等式。反向传播的过程中,只更新输出向量中正样本和负样本对应的权重参数。1.4.3 二次采样subsampling对于训练原始文本中遇到的每一个单词,他们都有一定的概率被删掉,删除的概率与单词的频率有关。2 FastText使用word2vec的结构训练,加上了ngram,ngram一方面可以增加信息,一方面避免OOV。2.1 N-gram(1条消息) 浅谈fastText中的N-gram特征_43v3rY0unG的博客-CSDN博客_fasttext ngramngram缓解了word2vec无序的问题,具体而言,fasttext将n-gram的词也当作文本中的词,在输入端体现处理,在计算隐层时,把n-gram的向量也加进去求和取平均。反向传播的过程中,模型会同时学到词的向量和n-gram的向量。哈希桶由于n-gram的量远大于原有的词,所以完全存下所有的n-gram并不现实。采用哈希桶的方式,把所有n-gram哈希到buckets个桶中,哈希到同一个桶的所有n-gram共享一个embedding vector。哈希的方式保证了查找效率O(1),桶的方式保证了内存消耗控制在O(buckets*dim)内。ngram的使用前提是数据稀疏,分为两种:用于分类(有监督的,需要设定label)用于词向量(cbow和skipgram)2-gram的形式:['I love', 'love deep', 'deep learning', 'learning as', 'as it', 'it can', 'can help', 'help me', 'me resolve', 'resolve some', 'some complicated', 'complicated problems', 'problems in', 'in 2018']缺点会使词汇量成指数级增长2.2 FastText是什么(超参数二面)面试官让我回顾NLP模型发展时,我提到了FastText,于是面试官问FastText是什么?使用word2vec的结构训练,加上了ngram,ngram一方面可以增加信息,缓解word2vec无序的问题,一方面避免OOV。3 ELMo (feature-base)ELMo(Embedding from language Model)是一个语言模型(根据前k个词预测第k个词),其核心结构为一个双向LSTM,目标函数是最大化正反两个方向的语言模型的最大似然。模型的输入为由word2vec或其他方式得到的token embedding,word2vec缺点每个词的特征向量只与自身相关,无法捕获上下文信息。每个单词的特征向量是唯一的,不能解决一词多义ELMo的核心要点使用大规模的无标签语料库训练双向LSTM语言模型将ELMo得到的特征向量送到下游任务中,得到任务相关的预测结果。应用到下游任务优势可以处理一词多义具有不同层次的表征能力。ELMo通过对多层LSTM的输出进行自适应加权的结构,使用其可以根据下游任务自适应调整ELMo的输出。具有强大的灵活性,可以和各种下游任务结合缺点速度较慢,对每个token编码,都要通过language model计算得出。4 GPT (fine-funing)可迁移到多种NLP任务的,基于Transformer的语言模型。模型的训练分两步:无监督的预训练目标函数是最大化似然函数。有监督的训练数据优点:循环神经网所捕获到的信息较少,而transformer可以捕获到更长范围的信息。计算速度比循环神经网络更快,易于并行化实验结果显示,Transformer的效果比ELMo和LSTM网络更好缺点:对于某些类型的任务需要对输入数据的结构作调整。
点赞 8
评论 3
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
01-21 17:26
江西工业贸易职业技术学院 Java
专科工作一年了,写一些想说的话,做个记录,也为我之前的学习画上句号!
本人24年大专生,24年毕业的那一年真的压力很大,专科加上无经验,从江西出来跑到广州深圳这边找工作,最开始的时候几个平台投了一千多份简历了,连一个技术岗的面试都没有。而且最开始的几个面试全都是那些培训机构,说是先培训三个月,然后包你就业,每个月从你工资里扣多少钱,培训费两万。和姐夫沟通,姐夫说这些不靠谱,我也不想啥都没干就负债2万,就这样找工作面试了三个多月。后面我感觉不行,想摆烂直接进厂工作得了,被姐夫拒绝了,他说如果我现在就进厂,厂里面干几年出来,之前的学习就都白费了。因为我到广州是蹭姐姐姐夫的租房,她们也是和同事合租,我睡沙发,我感觉我一直趴在家里吸血,虽然家里人都很好,没说过我什么,但...
我的求职思考
点赞
评论
收藏
分享
昨天 11:14
北京信息职业技术学院 Java
请问大家实习只写sql如何包装啊
一个七千人的企业,招聘名字是JAVA实习生,天天让写sql做报表(有点偏数据开发),代码都在内网,领导不给权限😂,请问诸位大佬这该如何包装,还是不包装了(听说有实习的简历面试要求更高)
不吃酸菜血肠:
往mysql的面经那边包装吧,慢sql调优这种,或者批量化脚本
点赞
评论
收藏
分享
01-16 15:24
黑龙江大学 后端工程师
27届年后找暑期实习,求佬们帮忙看看简历
不知道实习经历这么写对不对呀
点赞
评论
收藏
分享
01-19 18:53
已编辑
蚌埠坦克学院 Java
被mentor温暖到了
实习第三天了,讲讲感受吧,mentor每天都会喊我一起去食堂吃饭,会给我推荐哪家的好吃,吃完饭还会等我,经常没事,会来问我有没有问题,有问题随时来找他。看到我就一个电脑分屏比较困难,还帮我安排了一个新的显示器,可以看下面的图,到现在都没给我派什么任务,让我先熟悉。反正,心里暖暖的
咖啡馆守时的南瓜:
虽然但是 总有分开的那一天
点赞
评论
收藏
分享
01-23 11:09
南昌大学 算法工程师
HH 的项链
链接 恕我无能,这题不看提示真写不来啊~~~ 这题还是要用树状数组,(感觉线段树也行?没试过) 不过得稍微变实现的形式,我们把每个数据都看做1就行了,毕竟每个数据的种类只有1个嘛 但是,问题就在重复上,如果出现重复,那其中一个就必须为0才行,不然求和会不对 比如 1 2 3 4 5我们就转换为1 1 1 1 1 ,然后放进树状数组 但是1 2 3 4 2就不一样了,可能是1 0 1 1 1或是1 1 1 1 0,这两者放进树状数组得到的结果有什么区别呢 由于我们习惯性地从左向右遍历,我们发现,前者当查询区间为[left,5]时,用树状数组查询是正确的,后者则不行(除非从右往左) 因此,我们可以...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习产出如何包装?
9328
2
...
32岁程序员猝死,底薪3千要24h待岗
2904
3
...
【官方活动】牛客新春计划:给陌生人的一封信
2636
4
...
实习生怎么快速融入团队
2368
5
...
后端从0开始来得及吗
1399
6
...
27届实习全时间全方位大体指南
1350
7
...
20多岁最痛苦的年纪
1277
8
...
绷不住了,找了一个月实习嵌入式还找不到
1231
9
...
25届工作半年,想辞职了
1131
10
...
在咖啡店、家里、公司走廊哪里都可以来一场面试
1061
创作者周榜
更多
正在热议
更多
#
哪些公司开春招了?
#
12629次浏览
131人参与
#
牛客十周岁生日快乐
#
206727次浏览
1930人参与
#
上班以后,你还有哪些坚持的爱好?
#
8461次浏览
204人参与
#
你觉得什么岗位会被AI替代
#
34870次浏览
232人参与
#
你都在哪些场所面过试?
#
22552次浏览
299人参与
#
我和mentor的爱恨情仇
#
101664次浏览
922人参与
#
一人一个landing小技巧
#
143095次浏览
1498人参与
#
如果工作一直消耗情绪还要继续做吗
#
18089次浏览
83人参与
#
四大天坑是哪四家?
#
101581次浏览
235人参与
#
互联网公司评价
#
479705次浏览
4091人参与
#
机械人春招想让哪家公司来捞你?
#
377750次浏览
3127人参与
#
聊聊你的被动加班经历
#
4214次浏览
79人参与
#
在国企工作的人,躺平了吗?
#
392031次浏览
3951人参与
#
我的求职精神状态
#
422456次浏览
3075人参与
#
华为工作体验
#
289388次浏览
1376人参与
#
实习吐槽大会
#
404943次浏览
2168人参与
#
工作压力大怎么缓解
#
138828次浏览
1259人参与
#
找工作以来,你最看不惯__
#
17341次浏览
352人参与
#
你的mentor是什么样的人?
#
49270次浏览
705人参与
#
第一次找实习,我建议__
#
69289次浏览
841人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务