import torch
from transformers import BertModel, BertTokenizer
# 这里我们调用bert-base模型,同时模型的词典经过小写处理
model_name = 'bert-base-uncased'
# 读取模型对应的tokenizer
tokenizer = BertTokenizer.from_pretrained(model_name)
# 载入模型
model = BertModel.from_pretrained(model_name)
# 输入文本
input_text = "Here is some text to encode"
# 通过tokenizer把文本变成 token_id
input_ids = tokenizer.encode(input_text, add_special_tokens=True)
# input_ids: [101, 2182, 2003, 2070, 3793, 2000, 4372, 16044, 102]
input_ids = torch.tensor([input_ids])
# 获得BERT模型最后一个隐层结果
# 对文本的每一个token生成768维的向量,如果是二分类任务,我们接下来
# 就可以把第一个token也就是[CLS]的768维向量,接一个linear层,预测出分类的logits,或者根据标签进行训练。
with torch.no_grad():
last_hidden_states = model(input_ids)[0] # Models outputs are now tuples
""" tensor([[[-0.0549, 0.1053, -0.1065, ..., -0.3550, 0.0686, 0.6506],
[-0.5759, -0.3650, -0.1383, ..., -0.6782, 0.2092, -0.1639],
[-0.1641, -0.5597, 0.0150, ..., -0.1603, -0.1346, 0.6216],
...,
[ 0.2448, 0.1254, 0.1587, ..., -0.2749, -0.1163, 0.8809],
[ 0.0481, 0.4950, -0.2827, ..., -0.6097, -0.1212, 0.2527],
[ 0.9046, 0.2137, -0.5897, ..., 0.3040, -0.6172, -0.1950]]])
shape: (1, 9, 768)
"""
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect()
时。将触发三次握手。
第一次握手(SYN=1, seq=x):
客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。
发送完毕后,客户端进入 SYN_SEND
状态。
第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD
状态。
第三次握手(ACK=1,ACKnum=y+1)
客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
发送完毕后,客户端进入 ESTABLISHED
状态,当服务器端接收到这个包时,也进入 ESTABLISHED
状态,TCP 握手结束。
三次握手的过程的示意图如下:
TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close()
操作即可产生挥手操作。
第一次挥手(FIN=1,seq=x)
假设客户端想要关闭连接,客户端发送一个 FIN 标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。
发送完毕后,客户端进入 FIN_WAIT_1
状态。
第二次挥手(ACK=1,ACKnum=x+1)
服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。
发送完毕后,服务器端进入 CLOSE_WAIT
状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2
状态,等待服务器端关闭连接。
第三次挥手(FIN=1,seq=y)
服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。
发送完毕后,服务器端进入 LAST_ACK
状态,等待来自客户端的最后一个ACK。
第四次挥手(ACK=1,ACKnum=y+1)
客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT
状态,等待可能出现的要求重传的 ACK 包。
服务器端接收到这个确认包之后,关闭连接,进入 CLOSED
状态。
客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED
状态。
四次挥手的示意图如下:
随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。**随机森林的随机性体现在每颗树的训练样本是随机的,树中每个节点的分裂属性集合也是随机选择确定的。**有了这2个随机的保证,随机森林就不会产生过拟合的现象了。
随机森林是用一种随机的方式建立的一个森林,森林是由很多棵决策树组成的,每棵树所分配的训练样本是随机的,树中每个节点的分裂属性集合也是随机选择确定的。
简述xgboost的推导过程
lstm和rnn的区别
对nlp的理解是多少
手撕代码(1)反转链表 (2)快速排序 (3)用神经网络搭建一个LR
对pytorch和keras了解多少
二者都是集成学习算法,都是将多个弱学习器组合成强学习器的方法。
Bagging:从原始数据集中每一轮有放回地抽取训练集,训练得到k个弱学习器,将这k个弱学习器以投票的方式得到最终的分类结果。
Boosting:每一轮根据上一轮的分类结果动态调整每个样本在分类器中的权重,训练得到k个弱分类器,他们都有各自的权重,通过加权组合的方式得到最终的分类结果。
存在。我们可以使用无监督学习的某些指标或人为地去评估模型性能,以此来判断是否过拟合。
将原始数据集划分为k个子集,将其中一个子集作为验证集,其余k-1个子集作为训练集,如此训练和验证一轮称为一次交叉验证。交叉验证重复k次,每个子集都做一次验证集,得到k个模型,加权平均k个模型的结果作为评估整体模型的依据。
k越大,不一定效果越好,而且越大的k会加大训练时间;在选择k时,需要考虑最小化数据集之间的方差,比如对于2分类任务,采用2折交叉验证,即将原始数据集对半分,若此时训练集中都是A类别,验证集中都是B类别,则交叉验证效果会非常差。
准确率 = TP / (TP + FP),召回率 = TP / (TP + FN),其中TP表示将正例正确分类为正例的数量,FP表示将负例错误分类为正例的数量,FN表示将正例错误分类为负例的数量。
准确率可以理解为在所有分类为正例的样品中,分类正确的样本所占比例;召回率可以理解为在所有原始数据集中的正例样品中,正确挑出的正例样本的比例。
因此若增大阈值t,更多不确定(分类概率较小)的样本将会被分为负例,剩余确定(分类概率较大)的样本所占比例将会增大(或不变),即准确率会增大(或不变);若增大阈值t,则可能将部分不确定(分类概率较小)的正例样品误分类为负例,即召回率会减小(或不变)。
A.增加网络层数,总能减小训练集错误率
B.减小网络层数,总能减小测试集错误率
C.增加网络层数,可能增加测试集错误率
C。增加神经网络层数,确实可能提高模型的泛化性能,但不能绝对地说更深的网络能带来更小的错误率,还是要根据实际应用来判断,比如会导致过拟合等问题,因此只能选C。
L1范数:向量中各个元素绝对值之和
L2范数:向量中各个元素平方和的开二次方根
Lp范数:向量中各个元素绝对值的p次方和的开p次方根
输入数据本身存在nan值,或者梯度爆炸了(可以降低学习率、或者设置梯度的阈值)
减小图像尺寸即数据降维,缓解过拟合,保持一定程度的旋转和平移不变性。
sigmoid,relu,tanh,非线性化
防止过拟合。每次训练,都对每个神经网络单元,按一定概率临时丢弃。
很有可能是梯度消失了,它表示神经网络迭代更新时,有些权值不更新的现象。
改变激活函数,改变权值的初始化等。
可以扩充数据集,对数据重新采样,改变评价指标等。
神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在逐层传播过程中会逐渐衰减,导致无法对前面网络层的权重进行有效的调整。 残差网络中, 加入了short connections 为梯度带来了一个直接向前面层的传播通道,缓解了梯度的减小问题。
(1) 防止梯度消失 ( sigmoid的导数只有在0附近的时候有比较好的激活性,在正负饱和区的梯度都接近于0)
(2) ReLU的输出具有稀疏性
(3) ReLU函数简单计算速度快
空洞卷积也叫扩张卷积,在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(feature map)的大小保持不变。一个扩张率为2的3×3卷积核,感受野与5×5的卷积核相同,但参数数量仅为9个。
在卷积神经网络中,感受野 (receptive field)的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
模型复杂度过低,不能很好的拟合所有的数据
增加模型复杂度,如采用高阶模型(预测)或者引入更多特征(分类)等
Mobilenet(https://arxiv.org/abs/1704.04861)
Shufflenet(https://arxiv.org/abs/1707.01083)
Xception(https://arxiv.org/abs/1610.02357)
使用im2col的方法将划窗卷积转为两个大的矩阵相乘,见下图:
一般做法是将缺失的标签设置特殊标志,在计算梯度的时候忽略。
(1)Gaussian 满足mean=0,std=1的高斯分布x∼N(mean, )
(2)Xavier 满足x∼U(−a,+a)x∼U(−a,+a)的均匀分布, 其中 a = sqrt(3/n)
(3)MSRA 满足x∼N(0, )x∼N(0,)的高斯分布,其中σ = sqrt(2/n)
(4)Uniform 满足min=0,max=1的均匀分布。x∼U(min,max)x∼U(min,max)
等等
深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标是从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。目前在神经机器翻译(Neural Machine Translation)、图像理解(Image caption)等场景都有广泛应用。
MaxPooling能保证卷积神经网络在一定范围内平移特征能得到同样的激励,具有平移不变形。
所谓的权值共享就是说,用一个卷积核去卷积一张图,这张图每个位置是被同样数值的卷积核操作的,权重是一样的,也就是参数共享。
(1)模型蒸馏技术(https://arxiv.org/abs/1503.02531)
(2)利用AutoML进行网络结构的优化,可将网络计算复杂度作为约束条件之一,得到更优的结构。(https://arxiv.org/abs/1807.11626)
在反向传播算法计算每一层的误差项的时候,需要乘以本层激活函数的导数值,如果导数值接近于0,则多次乘积之后误差项会趋向于0,而参数的梯度值通过误差项计算,这会导致参数的梯度值接近于0,无法用梯度下降法来有效的更新参数的值。
改进激活函数,选用更不容易饱和的函数,如ReLU函数。
欧氏距离,交叉熵,对比损失,合页损失
30.对于多分类问题,为什么神经网络一般使用交叉熵而不用欧氏距离损失?
交叉熵在一般情况下更容易收敛到一个更好的解。
通道降维,保证卷积神经网络可以接受任何尺寸的输入数据
不能,每次迭代时目标函数不一样
使得迭代之后的值在上次值的邻域内,保证可以忽略泰勒展开中的二次及二次以上的项
利用之前迭代时的梯度值,减小震荡
用多个小卷积核串联可以有大卷积核同样的能力,而且参数更少,另外有更多次的激活函数作用,增强非线性
对输入图像用多个不同尺寸的卷积核、池化操作进行同时处理,然后将输出结果按照通道拼接起来
反卷积即转置卷积,正向传播时乘以卷积核的转置矩阵,反向传播时乘以卷积核矩阵
由卷积输出结果近似重构输入数据,上采样
在数据送入神经网络的某一层进行处理之前,对数据做归一化。按照训练样本的批量进行处理,先减掉这批样本的均值,然后除以标准差,然后进行缩放和平移。缩放和平移参数同训练得到。预测时使用训练时确定的这些值来计算
核函数将数据映射到更高维的空间后处理,但不用做这种显式映射,而是先对两个样本向量做内积,然后用核函数映射。这等价于先进行映射,然后再做内积。
过拟合指在训练集上表现的很好,但在测试集上表现很差,推广泛化能力差。产生过拟合的原因是训练样本的抽样误差,训练时拟合了这种误差。增加训练样本,尤其是样本的代表性;正则化
非线性,几乎处处可到,单调
梯度为0,Hessian矩阵不定的点,不是极值点
不收敛,收敛太慢,泛化能力差。调整网络结构,调整样本,调整学习率,调整参数初始化策略
多个二分类器组合。1对1方案,1对剩余方案,多类损失函数
层次聚类,k均值算法,DBSCAN算法,OPTICS算法,谱聚类
随机选择K个样本作为类中心,将样本随机划分成K个子集然后计算类中心
EM算法用于求解带有隐变量的最大似然估计问题。由于有隐变量的存在,无法直接用最大似然估计求得对数似然函数极大值的公式解。此时通过jensen不等式构造对数似然函数的下界函数,然后优化下界函数,再用估计出的参数值构造新的下界函数,反复迭代直至收敛到局部极小值点
一面50分钟
二面55分钟
一面50分钟
二面30分钟
劝退
一面75分钟
二面45分钟
三面hr
一面50分钟
二面30分钟
聊实习
一面60分钟
二面60分钟
三面60分钟
经理面
一面20分钟
二面60分钟
一面40分钟
分类模型(又称分类器,或诊断)将实例映射到特定类。ROC分析的是二元分类模型,也就是输出结果只有两种类别的模型,例如:(阳性/阴性) (有病/没病) (垃圾邮件/非垃圾邮件) (敌军/非敌军)。
当讯号侦测(或变量测量)的结果是连续值时,类与类的边界必须用阈值来界定。举例来说,用血压值来检测一个人是否有高血压,测出的血压值是连续的实数(从0~200都有可能),以收缩压140/舒张压90为阈值,阈值以上便诊断为有高血压,阈值未满者诊断为无高血压。二元分类模型的个案预测有四种结局:
真阳性(TP):诊断为有,实际上也有高血压。
伪阳性(FP):诊断为有,实际却没有高血压。
真阴性(TN):诊断为没有,实际上也没有高血压。
伪阴性(FN):诊断为没有,实际却有高血压。
这四种结局可以画成2 × 2的混淆矩阵
ROC空间
ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。
给定二元分类模型和它的阈值,就能从所有样本的(阳性/阴性)真实值和预测值计算出(X=FPR, Y=TPR) 座标点。
从 (0, 0) 到 (1,1) 的对角线将ROC空间划分为左上/右下两个区域,在这条线的以上的点代表了一个好的分类结果(胜过随机分类),而在这条线以下的点代表了差的分类结果(劣于随机分类)。
完美的预测是在左上角的点,在ROC空间座标 (0,1)点,X=0 代表着没有伪阳性,Y=1 代表着没有伪阴性(所有的阳性都是真阳性);也就是说,不管分类器输出结果是阳性或阴性,都是100%正确。一个随机的预测会得到位于从 (0, 0) 到 (1, 1) 对角线(也叫无识别率线)上的一个点;最直观的随机预测的例子就是抛硬币。
让我们来看在实际有100个阳性和100个阴性的案例时,四种预测方法(可能是四种分类器,或是同一分类器的四种阈值设定)的结果差异:
1。自我介绍
2。然后直接问了下研二实习导师同意了吗
3。然后让介绍项目,平安车险的一个比赛
4。对Y值聚类是什么思路具体介绍一下,kmeans了解吗,自己实现的吗,K值取多少怎么确定的,kmeans的特征?(这里其实没太懂,可能是问kmeans用的什么聚类?我说可能是密度聚类,调用的sklearn)
5。为什么想到用AUC做评价指标,AUC应该是做二分类的吧,讲一下AUC和ROC(前一天晚上准备看,结果忘了,路上太热了也没看)
6。说一下lightgbm吧,讲一下GBDT,和决策树的区别。
7。比赛的数据是怎么个方式,线上平台是怎么操作,用什么处理的数据,对数据进行过清洗吗。
8。我看你简历上写了深度学习,有做过什么项目吗。(讲了一个课程作业)
9。用了gensim的词向量模型,有一个score函数,说了一下这个函数是干嘛的,他说他印象中没这个东西。然后说了另外一个LSTM的模型,让我把整个数据处理、模型训练、测试、损失函数讲一下。我一开始一会让我讲LSTM,开始画LSTM的图,然后说这个当成个黑盒子就行,你讲一下整个流程。这个作业一共花的时间不到一周,所以有点忘了,也没写到简历里面,顺口说的,讲的不是很好,当时傻了说最后是一个sigmoid,他愣了一下,最后他说最后应该个是softmax吧,我说对对对。
10。然后问我用keras做的还是tf。然后问还有没有别的项目,没了,做一个算法题。
11。一个贼他妈简单的归并排序,提醒了我三次,说排序、nlogn的排序、归并排序你学过吗。(考研的时候学过)你写一写吧(我好像忘了)。面试官好像无语了,然后让我就写一个n方的吧。
12。最后问我有什么想问的,我说那边现在在做什么,实习生平时做什么。他又问了我有没有用c++写过大项目,因为那边目前有个项目要用c++。
13。然后问了我为啥转专业,我想了想是不是应该说我热爱编程,热爱数学,热爱计算机,还是算了,然后说本科工科很苦逼,深山老林发电厂,计算机钱多。面试官笑了笑,就完了。
上面就是我暂时能想到的一些点,也是自己在面试的过程中不断碰壁遇到的一些问题,然后整理下来的。对于基础知识这一块,可能会有很多同学问机器学习和深度学习之间如何权衡,其实我想说的是看你自己想找什么工作,我给自己的定位是深度学习与NLP,所以面试之前只看了SVM,然后在所有面试中也只有个别的面试官会问到机器学习的东西。怎么说呢,我的看法是,要学,要懂,但是次要,你只需要在整个面试过程中不断地展现自己在深度学习上的造诣,不给面试官留下时间去问机器学习就好。当然,如果你有足够的时间去准备,看看是最好的,毕竟你所有的准备都可能在面试中给自己增光添彩,按照自己的时间精力去分配就好。
这部分会按照面试时间的先后顺序大概说一下,先大体上说一下,拿到的offer有竹简智能-对话方向、阿里小蜜-对话方向、阿里新零售-NLP算法、滴滴AILab-对话方向、美团点评AI平台-对话方向、百度NLP部分-NLP算法、百度度秘事业部-对话方向、搜狗-机器翻译。跪了的有微信搜一搜看一看(面到了HR,现在还没给消息,暂时当他是跪了吧)、京东AILab-对话方向(跪的有点不知所措,虽然我也并不想去这里)。微软亚研(上周刚一面,就当是跪了吧,希望是一波毒奶)。怎么说呢,面的公司有点多,整个过程很累,但是由于offer的时间线原因,几个想要去的offer都是到最后才拿到,所以面了比较久。整体上感觉面试还算比较轻松,主要原因是找的实习大部分跟自己做的方向很match,所以整体上能够发挥出自己所学的东西,所以面试的结果也都还挺好的。下面就各自介绍一下:
一、2018.3.8 竹简智能 算法实习生
算法题:股票买卖获最大利润
一面:先简单介绍了一下Memory Network的相关知识,然后结合key-value MemNN模型介绍了一下自己做的基于KB知识库的问答系统,主要讲了以下其模型和工作原理。然后接下来聊了聊seq2seq模型,并主要介绍了一下attention机制,让写了下attention的公式,怎样计算得分和权重,说了下soft attention和hard attention的区别。然后聊了下tensorflow里面seq2seq的借口,吐了吐槽也介绍了自己实现的模型里面的一些细节和方法。
二面:主要针对我的京东实习和文本分类方面的问题进行提问,先问我都用过那些模型实现文本分类,当时卡克了只说出来了两个,尴尬==****(fasttext TextCNN RCNN HAN DMN EntityNetwork charCNN charRNN)。需要在总结一下各个模型的优缺点****。然后问了我觉得现在文本分类中还有哪些没有解决的问题,我想了会说样本不平衡问题(应该进行下采样来解决,他问我还有什么办法,我说这块没有尝试过只是在网上见到过一些介绍),和多类别分类问题(这里引入了知乎竞赛),多标签分类确实是一个很难的问题,面试官让我写损失函数,我当时由于紧张和时间久远也没有回答上来,算是整个面试过程中唯一回答的不好的问题吧。
三面:技术总监,到没有聊什么技术,拿着简历随便问了点项目和实习相关的东西,然后主要聊了公司的一些情况之类的,表达了对我很满意想让我留下来然后协调了一下实习时间之类的,算是发了口头offer。后面HR打电话问我的意向的时候拒了。
二、2018.3.13 阿里智能服务部–阿里小蜜 算法实习生
一面:面试官很亲和,上来主要是简历面,可以说是面面俱到,基本上简历上的东西都被问了个遍,而且还会眼神的考察一些基础知识,比如说介绍一下某些模型的细节、原理等等,稍微扩展了一下简历之外的东西看看知识的了解情况吧,比如说问了我句子相似度、传统方法做文本分类、SVM、word2vec等几个并没有出现在我简历中的知识点。然后也有几个开放性的问题,比如说我在京东的实习,如果让我采取方案的话我会使用什么方案,fasttext、CNN、RNN的优缺点各是什么等等,也都简单的聊了一下,感觉整体上来讲面试的效果还算可以,基本上问题的回答上来了。面试官也没有深究细节,点到为止。最后问了我关于实习地点在杭州是否可以,可是我还有别的选择吗==#
二面 2018.3.31 今天终于接到了二面的电话,记得是一个阳光明媚的中午_,面试大概持续了半个小时,先让我讲了一下attention的原理,接着讲了一下seq2seq的缺点,如何改进;如何实现再已知答案的情况下进行答案生成。然后问如何加速预测速度(其实这两个问题我也不是很清楚,只是很模糊的打了一下);接下来聊了一下京东的实习情况,为什么fasttext速度很快,然后问了下如果现在在做会采用什么样的方案;说一说RNN和LSTM的区别和原理;说一下自己的未来规划;感觉整个面试更偏向于理解,而不会是非在意细节,更不会具体到公式,但是还是会比较关注优模型化和性能方面。整体来讲,还不错??
三面 2018.4.7 一周后接到了三面电话,面试官应该很忙,毕竟清明节面试,而且感觉还有很多个人要面试的样子。面试大概持续了半个小时,上来让我讲一下最近做的对话系统的项目,我已开始说了一下模型的细节,面试官打断了我说相听一下具体的实现细节,不要讲论文的模型,然后我就把自己实现seq2seq时遇到的deepcopy和beam_search两个问题以及解决方案大概讲了一下,面试官到没有提什么问题,只是问了一下最后的真实效果,以及怎么评价之类的问题。然后就问了一下能不能去杭州实习,三面就结束了。
四面 2018.5.2 有过了快一个月才收到4面电话,直接是HR面,先是自我介绍,然后问了一下基本情况,发论文学习成绩之类的,然后问现在都有什么offer了,如何选择云云,20分钟左右让我等通知。
2018.5.3,今天有个小蜜部门的工程师加我微信,说我的面试通过了,口头发了offer,说后面会有后续的offer流程。
三、2018.3.30 阿里零售通 算法实习生
今天是阿里校招北邮行,貌似可以当场面试,所以就抱着试一试的心态去看看,本来想着去找智能服务部问一下自己简历的情况,结果智能服务部的人没去,却被零售通的人拉过去面试了一会。很轻松,负责人大概聊了一会就让我去二面,貌似是HR,也很随意,主要是他在讲他们部门,我基本上没说什么,然后他就说让他们部门总监给我三面,下午收到电话,面了50分钟左右。整体感觉上他们的算法部门应该是刚成立不久,挺缺人的,主要做推荐和物流这块,面试应该问题不大。但是我还是更想去智能服务部那边,毕竟方向更对口,所以跟他们说需要在考虑靠考虑。
4.3号又接到了零售通HR的电话,表示他们那边已经同意给我发offer,如果我也接受的话就把阿里小蜜的校招流程停掉转到他们那里去,在接受一轮交叉面试就可以了。我跟HR沟通了一下,说希望在考虑一下(因为我感觉阿里小蜜的人肯定会在清明节给我面试电话,所以想在等一下)。然后面试官就说那就等清明节结束之后让我给他一个回复。
2018.4.10 虽然小蜜那边的面试还没结束,offer也不一定能拿到,但一狠心还是把零售通的offer给拒了。
四、2018.3.15 滴滴AILab 自然语言处理实习生(对话方向)
整个面试过程只有一面,面试官把我接上来之后先让我介绍一下自己之前做过的一个项目,我就说了一下使用seq2seq实现对话系统的模型,接着讲了讲模型的缺点以及使用MMI的改进方案(这里自己当时没说好,感觉自己把自己绕进去了==),然后介绍完整个项目的细节之后,面试官提出了一个问题,说Attention机制的计算细节和公式是怎样的,然后我就介绍了一下公式的计算方法,然后说了一下改进的方案等。面试官就没有再问相关问题,感觉他好像也不是特别懂的样子,然后就说出一道算法题目做做吧。题目是有两个有序的集合,集合的每个元素都是一段范围,求其交集,例如集合{[4,8],[9,13]}和{[6,12]}的交集为{[6,8],[9,12]}。然后我就开始做,先写了个暴力解法,然后面试官让我想想有没有什么改进可以把时间复杂度改善。想了几分钟,说了一下自己的大致思路,其实并没有想到方案==不过交流的过程中得到一个很重要的信息就是这些范围是排序而且互相之间不会重合。所以这里也是给大家提个醒,一定要先把题目搞清楚再开始做题,不然很可能像我这样吧。然后搞清楚之后题目就很简单了,写一个循环就可以了,时间复杂度是O(N+M),然后就结束了,面试官让我问几个问题,然后又问了我关于实习时间的问题,就让我走了。整个面试时间持续了一个小时多一点,算法和编程差不多各占一半吧。
3.16号收到了offer,后来拒掉了
五、2018.3.16 腾讯搜一搜看一看 算法岗实习生
一面是个比较年轻的人,感觉挺厉害的,很关注算法效果、性能等方面,话语之间透露出一种刁刁的味道。上来看了看我的简历,让我讲一讲对话系统方面的工作。照常讲模型推公式,说完之后,面试官问了我关于MMI模型第一个改进目标函数中P(T)是如何计算的,我说每个词的联合概率分布乘积,当时他面露疑问,我还没反应过来是什么意思,到后面有说到这个问题才明白,原来他的意思是P(T)应该是单纯语言模型学习出来的结果,而按照我的说法,P(T)是在输入的基础上进行计算的,不得不说,面试官的水平很好,完全没接触过的东西竟然能一阵见血的指出我的纰漏,这个地方之前确实没怎么注意过,回来查了一下,计算P(T)的时候确实应该直接输入一个全零的初始化状态,这样才是一个语言模型学习到的概率。然后又接着问了文本分类的东西,我主要讲了一下TextCNN,TextRNN的模型,然后接下来讲了一下知乎竞赛的东西,感觉这块介绍的还算可以,然后又聊了下相关的一些问题。对了,这个面试官十分关注数据集的问题,比如我介绍到的movieQA数据集是一个什么形式,有多少QA对等等,还有知乎竞赛用到的数据集有大概多少个文本,数量是多大,但是平时有没有关注过这些问题,所以基本上没有答上来==接下来面试官出了一道K个有序链表的合并问题,手撕代码。
二面是个年纪比较大的程序员,整体感觉他不是很懂深度学习,机器学习应该是个高段位选手。主要问了我文本分类和论文方面的东西,到没有问出什么很有难度的问题。最后说让我讲一下底层优化方面的知识,我说是优化算法还是类似于tensorflow底层算法优化,他说前者,然后我就吧啦吧啦讲了一堆SGD,动量,AdaGrad,RMS,Adam之类的。然后问我会不会C++,我说不常用但是能读懂程序,他应该是想问我道算法题,但是他又不会java之类的??没搞懂,问了一句之后就说第一个面试官已经问完算法题了是吗,那我就不问了,然后就走了,说去找三面面试官,但是过了一会又说今天面试先结束,不知道是不是挂了还是大家已经下班了==
两面基本都是持续一个小时多一点,没有特别的压迫感和难度,基本都能答上来。但是我同学也是面的这个部门,说上来就给了5道算法题让做,然后全程面试官各种懂,问各种问题。我,也是一脸懵逼,同一个部门面试差别这么大的嘛,反正先等消息吧还是。
2018.3.21 二面,前两天收到了复试的通知,貌似是面试委员会面试,后面再有一个HR面试就结束了,然后开开心心去面试。到了之后发现短信和邮件中没有面试官联系方式(因为经过初面之后简历直接交给总部开始走校招流程,所以总部的电话也打不通,总之就是联系不上,也怪我一开始没有注意到联系方式这件事情了),连楼都进不去,无奈之下联系了初面的面试官,跟他说明了情况,最后又被他接到了一面的地方让我等一会他问一下情况,过了一会说要再加一轮技术面,我不知道具体的情况是什么,反正当时心态是崩了的,该参加的面试没参加还要临时再加一轮技术面试什么鬼。
然后面试官就来了,上来就让推导word2vec反向传播,讲实话我上周刚推完还给实验室的同学讲了一遍,奈何当时的情况下自己一紧张怎么推都感觉是错的,唉很尴尬,卡了很久最后算是勉强退了出来,不过面试官又让我写Embedding矩阵的梯度,这块之前也没在意过,只是知道更新当前单词对应的词向量即可,最后也没写上来其梯度公式,面试官让我回来再想想。然后开始问简历,他可能没接触过问答和对话系统,也没问我相关经历,一直针对文本分类这块再问,虽然也都算答上来了,但总感觉少点什么,一种说不上来的感觉。最后问我要是现在在做京东实习的工作我会怎么做,感觉也答得不是很好,然后问我FastText,CNN,RNN的区别,我感觉说的还不错,但是面试官好像还不是很满意==,最后送我出去的时候说还是要好好把基础打扎实。
等了很久吧,我一度以为已经挂了,结果4月18号收到了一次面试,貌似是因为之前提前批已经结束了,而我的面试流程也随之终止,所以一直拖到校招才又开始面。先电话面了一轮,很水,基本上就是问简历,然后第二天去HR面,这个过程自己表现得有点嚣张了貌似,具体不详说,反正估计是把HR惹到了,然后应该也是挂了~~
六、2018.3.20 美团点评 AI平台 算法实习生面试
一面面试官应该是搞后台开发的吧,深度学习一点不懂,上来就开始专业歧视,问我通信工程的会不会编程==,然后让我自己介绍,我说要讲模型的细节吗,他说不用,我看是讲了你也不懂吧,然后又说,你会数据结构吗,你们通信工程应该不学吧,你补这方面知识了吗?我++,你是猴子派来的逗比吧,然而我已经对他失望了,并不想理他。然后他貌似也不知道问什么了,开始看我的简历,又用电脑看我的专栏文章,说你对这个领域还挺了解的是吗,我说是啊,然后他就问我如果给你一个新的领域你该怎么上手,当时心里就想这个面试官真是没话找话,于是我啪啪啪又是一顿吹比。然后他竟然问,Redis你懂吗,让你学你怎么学,当时我就觉得聊不下去了。随便说了两句,然后他有看了看电脑我以为要出道编程题,结果他就直接走了,走了,了。
二面是部门老大,基本上不能算是面试吧,大概聊了一下,也没有算法题什么的,然后就互相问了几个问题,然后就结束了,面试官表达了想要我的意愿,说之后应该会有HR联系我之类的。这个人貌似挺厉害的,MSRA+Facebook的工作经历,今年刚回国开始成立美团的这个部门,直接给CEO汇报。
整个面试刨去等待应该不到40分钟吧,这可能是我面过的最水的一次面试了,可能是因为部门刚成立,二面人也说了,一切都是刚起步。回来之后就接到了offer,但是对这边并无好感,所以就拒了,后来那个leader又给我打电话表达了想让我过去的意愿,顺带diss了一下我面试的其他公司,虽然感觉他很有诚意,我去了之后应该也会被重视,但还是拒绝了,因为实习还是想找一个比较稳定成熟的部门多学点东西。
七、2018.4.17 百度自然语言处理部算法实习生
这个是在官网投的简历,到了那才发现自己好像投递错了,投成了校招==捞我简历的组是做query理解的,怎么说呢,整体感觉这个任务比较简单,基本用不上什么深度学习的技术,甚至面试过程中面试官一直在劝退我学深度学习,还是简单说一下面试过程吧。
一面,日常介绍了一下自己以前的工作,面试官更关注于文本分类这部分的工作,简单问了一下。然后就开始劝退了,说你是遇到什么任务都会使用深度学习模型吗,我说也用过机器学习的方法,