首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
蝶恋纷飞
武汉大学 数据分析师
发布于北京
关注
已关注
取消关注
@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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
05-16 10:37
已编辑
同济大学 ARM工程师
我动了谁的蛋糕?资本你赢了
之前给加上一个人脸识别。需要有登录,注册,还要调用百度 api,还要一天内弄完 把程序员当成月入 3000 的小丑吗,你放家门口通马桶的工人电话,问一下他疏通一次马桶低于 400 干不干全网最受欢迎的嵌入式面经面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3000+订阅还会涨价,提前订阅提前享受,持续更新中。原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
弦五Strings:
第二个我可以
ai做完cv
点赞
评论
收藏
分享
05-14 18:00
已编辑
门头沟学院 前端工程师
感谢牛爱网,已经见家长了!!
(前情:不是吧家人们,真的有人在牛客谈上了❓ )--------------------------------好久没上牛客了,今天@LOLO姐突然给我发信息问候我,我都恍惚了~哈哈哈哈给大家汇报一下我的恋爱进展:五一见家长啦!!!我们今年3月份就是恋爱三周年,她带我回了她老家湖南,她爸妈对我都特别好,临走的时候还给我发了10001的红包,说这是万里挑一😭回来的路上,我都想哭了,感觉自己好幸福!也有点紧张,可能明年就要结婚也说不定😂(到时候结婚,随机抽几个牛友寄喜糖!!)其实我过往的感情经历都不是很好,遇见她以后我才知道被爱是什么感觉。我们确定关系的时候是个冬天,我去找她,她看到我双手冻得...
wuwuwuoow:
接好孕
520告白墙
点赞
评论
收藏
分享
03-20 23:26
南京邮电大学 C++
改简历求助
各位牛友,简历被挂麻了,面试也是面一个挂一个,请牛友们给点建议,听劝的#校招我听劝# #听劝,我这个简历该怎么改?#
校招我听劝
听劝,我这个简历该怎么改?
点赞
评论
收藏
分享
05-16 11:16
已编辑
东华理工大学 Java
大家也有遇到过这样的公司吗
#牛客创作赏金赛# #牛客激励计划# #避雷公司#
牛客737698141号:
盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
牛客创作赏金赛
牛客激励计划
点赞
评论
收藏
分享
05-15 18:25
门头沟学院 golang
拼劲全力也无法战胜
腾讯 华为 字节跳动 美团 百度 网易 小米 阿里 淘天 京东 虾皮 快手 拼多多 小红书 oppo vivo 美的 格力 TCL 滴滴 b站等等等众多大中小厂球球大家给我个发offer!!!
找工作的破防时刻
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
Java后端开发需要理解和背的八股文整理
3.0W
2
...
“我想了想,你去哪我都想和你在一起”
2.6W
3
...
💌【520限时活动公告】牛爱网高甜营业!你的恋爱通关秘籍已送达~
1.9W
4
...
记录一下这两个月面试以来遇到的手撕题
1.3W
5
...
5月16日早上莫名被美团捞起来了
1.1W
6
...
在华为od干的要猝死了
1.0W
7
...
离开这座伤心的城市💔
8350
8
...
想要上岸大厂先学会拥抱AI
7243
9
...
双非上岸字节,我做对了什么?
5737
10
...
双非大一 微派网络后端一面
5116
创作者周榜
更多
正在热议
更多
#
牛油的搬砖plog
#
30887次浏览
154人参与
#
大学最后一个寒假,我想……
#
31791次浏览
327人参与
#
一人一个landing小技巧
#
26002次浏览
488人参与
#
国企还是互联网,你怎么选?
#
133990次浏览
986人参与
#
bilibili求职进展汇总
#
58923次浏览
580人参与
#
你们公司哪个部门最累?
#
8107次浏览
38人参与
#
我在牛爱网找对象
#
181106次浏览
1383人参与
#
这些公司卡简历很严格
#
27564次浏览
132人参与
#
520告白墙
#
25325次浏览
397人参与
#
经纬恒润求职进展汇总
#
116872次浏览
1025人参与
#
找工作的破防时刻
#
29083次浏览
435人参与
#
面试被问第一学历差时该怎么回答
#
123645次浏览
772人参与
#
你觉得技术面多长时间合理?
#
92899次浏览
668人参与
#
为什么那么多公司毁约
#
164089次浏览
1233人参与
#
运营每日一题
#
68067次浏览
659人参与
#
查收我的offer竞争力报告
#
177397次浏览
1086人参与
#
正在实习的你,有转正机会吗?
#
372207次浏览
2875人参与
#
腾讯音乐求职进展汇总
#
86659次浏览
487人参与
#
我发现一个规律
#
3875次浏览
34人参与
#
实习学不到东西怎么办?
#
204639次浏览
2115人参与
牛客网
牛客企业服务