青藤云安全(2月26日) 机器学习算法实习岗
微信视频面试,15分钟。主要问了下简历上做阿里云比赛的经历,后未联系,预计已挂。
主要存在的问题:
1)做的东西太简单太基础,不够看,导致面试官其实没啥可问的;
2)对自己做的项目不够清楚,模型怎么融合的说不上来;(xgboost,np.hstack)
3)在项目中遇到了什么问题,怎么解决的,收获了什么;(star模式)
4)缺乏深度学习、BERT等相关的了解;
5)没有论文阅读、代码复现的经验,工作中需要;
6)没有考六级;
7)说话逻辑性不好,断断续续的,(少说,“额,然后”,“就,那个”这种词)
返回目录
陌陌一面(3月3日)自然语言处理实习岗
acmcoder平台面试,1小时,主要是现场做了一道题,还有就是问了下阿里云比赛那个项目,一面过了。
主要存在的问题:
1)现场做题的能力还得加强,虽然题目简单,但思路比较乱。
流程大概就是,面试官让我实现个split,然后我直接str.split()写出来了,
然后她让我不要用现成的方法,直接代码实现一下,然后我就写了个for循环,然后切分字符串,这儿写对了,
然后她让封装成函数,然后传入一个待切分次数的参数,然后这儿实现也简单,也对了,
再之后她说还有两个问题,一是分隔符长度可能不是1,二是如果字符串最后几个字符刚好是分隔符,切分结果的最后面还要有个空字符串。
到这儿的时候,我当时感觉好像要调整代码结构,然后思路就有点乱了,写了一段好像不对,没写出来。
def my_split(str, s, times):
s_len = len(s)
temp = ''
result = []
left = 0
for i in range(len(str)):
if (len(result) == times):
result.append(str[i:])
break
if str[i:(i+s_len)] != s:
temp += str[i]
else:
i += s_len
result.append(temp)
temp = ''
continue
if (i == len(str) - 1):
result.append(temp)
return result
print(my_split("abc,ef,ee,aaa,", ',e', 2))
def my_split(str, s, times=-1):
s_len = len(s) # 待切字符长度
str = str + s # 拼接一下
temp = ''
result = [] # 待返回
left = 0
next = 0
for i in range(len(str)):
if i < next:
continue
# 指定times参数
if (times != -1 and len(result) == times):
result.append(str[i:-(s_len)])
break
if str[i:(i+s_len)] != s:
temp += str[i]
else:
next = i + s_len
result.append(temp)
temp = ''
continue
if (i == len(str) - 1):
result.append(temp)
return result
print(my_split("abc,ef,ee,aaa,", ",e"))
后面回想的话,其实题目很简单,只是现场编程有点紧张,没法深入思考,思路有点乱,没写对。
面试官倒是态度很好,一直指引着我完善这个代码。
2)后面半小时在问项目,主要就问了阿里云比赛那个。
因为上次面试的经验,我专门看了下BERT,CNN,之类的东西。
面试的时候也算是用到了吧。
3)大概问了以下问题:
问:做ngram用的啥模型?面试官说,因为ngram只算是提取特征这块,我说,xgboost,决策树应该是,
问:有多少的数据量?
我说具体数字不太记得了,反正是很多,当时跑一个模型训练要三四个小时,
(单个文本长度10万左右,训练集文本数约1.3万,测试集约1.2万)
问:既然有这么多数据量,而且ngram这种特征工程的方法现在业界基本也不用,除了这个之外你还有没有试过一些其他的深度学习之类的方法?
我说,我主要做的是ngram,tf-idf,word2vec这块,其他队友有做textcnn,lstm之类的
问:那你对CNN之类这些有没有了解,你们有没有交流?
我说,有了解,CNN做出来的效果和ngram差不多,
问:CNN和ngram的效果差不多可以理解,其实都是提取特征,(我:CNN里有很多filter),对,那既然效果差不多,为啥不直接用CNN,还要用ngram?
我说,额,当时我主要是负责这块的,做的ngram,tf-idf,最后几个模型最后做的融合,(她:也就是各种模型都融合了一下是吧),对(捂脸。。。)
我说,虽然原理上差不多,不过提取的特征还是不一样的,所以融合之后效果提升了,
问:像这类问题之前我们也做过,如果是说,某些api出现没有什么问题,但api形成一个特定序列的话,就会是病毒,你怎么考虑?
答:序列问题,RNN?
问:那么对最新的技术有没有了解,BERT啥的,(我当然说有了解了,毕竟上次面完专门学了下)
问:那么你觉得这些技术对比之前的方法有什么优势?
我说,BERT里最重要的就是Transformer里的注意力机制,像ngram之类的,输出的向量,其实是把词都同等看待的,注意力机制的话,词的权重是不同的。
面试官:ngram的词频不同也是不同的权重,不是这个原因,是因为BERT里加了序列信息,(我:长程依赖?)不只是长程依赖,还有xxx(这儿忘了说啥了)
(其实序列信息我也知道,BERT里集合了RNN,CNN等的优点,当时不知道为啥,就是没说到点子上,可能是还不熟悉)
问:你觉得为什么要用这些预训练模型?
我说,主要是比较方便,做实际任务的时候,可能没有那么多的数据量去训练这些参数,用预训练模型的话,可以节省工作量,不用再从头训练,只需要做一些微调既可。
问:看你用到了交叉熵,做分类任务的时候通常用交叉熵作为损失函数,解释下是怎么做的?如果是二分类,softmax,0/1,结果分别为1/4, 3/4,交叉熵是多少?
我这答得比较含糊,说之前没拿交叉熵做过损失函数,,,
(其实不对,这个比赛评测的指标就是交叉熵。。。xgboost里的评测参数设的也是mlogloss,
主要是因为搞错了交叉熵和相对熵的概念(数学之美书里有个错误),其实我当时算测试集与训练集分布差异用的是相对熵,简历上写错了,
还有就是当时其实算测试集,是通过全0,全1提交,然后得到的分布,这个也没说)
还说了一些问题,也不记得了。
4)经验教训就是,一定要录音,不然忘了的话,总结都不知道咋总结,
5)还有就是要问一下人家对我的面试评价,以便于自己回顾,然后学习提高,
6)感觉这次自己说话逻辑比上次清楚多了,
7)和HR约时间,面试之间应该要留些时间间隔,以便及时整理完善面试经验,总结提升。
返回目录
(这回录了音)
首先上来还是一样,先自我介绍了一下。然后介绍了下项目经历。
(此处略)
问:为什么想到要用ngram方法
问:ngram用的多少gram
问:有没有看过原始数据,序列会不会特别长,重复很多
问:textcnn和ngram比较哪个好
问:word2vec在这个任务里主要是用来做什么
问:你是直接把这两个向量concat到一起吗(ngram和Word2vec的)
问:说一下xgboost的原理
问:xgboost里加入采样主要是为了解决什么问题
问:xgboost里会有一些正则,L1,L2,有没有了解过它的作用
问:xgboost的优缺点(缺点没答上来,可能是参数比较多,不好调?)
问:xgboost和cnn具体到case上,有没有看过模型结果上的对比(这个真没有做过)
问:能写下互信息的公式吗(不会写,应该是 I(x,y) = p(x, y)log(p(x, y) / (p(x)p(y))) )
问:或者你描述一下它是干什么的
(二面时这些问题大部分都回答地比较好,所以只列举下问题,不记录回答内容了)
编程的话,给了几个case的真实值,预测值,让写代码计算下准确率,召回率。(很庆幸我居然记得这两个公式,所以这个题很容易就写对了)
def read_data():
pred = ['B', 'A', 'B', 'A', 'A', 'B']
real = ['A', 'A', 'B', 'B', 'A', 'A']
return pred, real
def compute(pred, real, true_flag):
TP = 0
FP = 0
FN = 0
if (len(pred) != len(real)):
return -1
for i in range(len(pred)):
T = (pred[i] == true_flag)
P = (pred[i] == real[i])
if (T and P): TP = TP + 1
if (not T and not P): FN = FN + 1
if (not T and P): FP = FP + 1
p = TP / (TP + FP)
r = TP / (TP + FN)
return p, r
pred, real = read_data()
print(compute(pred, real, 'B'))
我问了下,到第几轮了,说后面至少还有一次技术面,
然后是,问了下建议,
说我的项目经历和工作是比较相关的,文本处理的一些工作,
希望把用到的模型原理再加强一下,因为工作中没有人能告诉用什么样的方法,这就得基于自己对于模型的理解,
这些是在学校里要加强的,工作之后会更得心应手一些。
(两次技术面的面试官都是小姐姐,但通知面试的HR却是男的,有点意外)
自我感觉,两次面试比较顺利的原因是:
1)找实习难在做出这一决定,找实习的过程倒并不是很难。虽然算法岗校招竞争惨烈,但实习的门槛相对来说并不高。
2)学历加分。这段时间在拉勾网上只点投了几个大小公司,投出了十来份简历,就得到了很好的反馈,要么是看到HR转发了简历,要么就是收到了面试邀请。
简历的通过率比较高,我觉得这还是得归功于北邮硕士这一头衔的学历加分,个人能力还是有很大的不足,这是目前要认真看待的事实。
3)比赛经历加分。虽然只是一个新人赛,但组队做比赛的过程中,讨论了很多,学到了很多,对模型、问题理解地较深入,在面试的过程中不至于翻车。
4)善于总结的好习惯。因为经常写博客(学习笔记之类),写FP(学习计划+总结),有总结的习惯。在面试的过程中,每面完一场之后有总结反思,所以感觉一次比一次更轻松了。
返回目录
给定一个矩阵里面只包含0和1两种数字,给出每个单元距离最近的0的距离,上下左右都算作相邻,相邻的距离为1
示例1
输入:
[[0,0,0],
[0,1,0],
[0,0,0]]
输出:
[[0,0,0],
[0,1,0],
[0,0,0]]
示例2
输入:
[[0,0,0],
[0,1,0],
[1,1,1]]
输出:
[[0,0,0],
[0,1,0],
[1,2,1]]
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
两道题都是常规题,不过当时写得都比较乱,没写对。BFS的题,我大一都会写,现在反而写不对了,郁闷了一个下午。
后面还问了下,文本分类还有哪些方法,为什么要用朴素贝叶斯?
当时说了,用朴素贝叶斯是因为简单,在大文本上处理速度快。
还可以用决策树(问:不是和ngram差不多吗,大文本上怎么会用这么慢的方法),还有LDA主题模型等
(后记:长文本的话,应该考虑预训练模型,速度会快)
然后就结束了,这一场面试表现极差。
复盘分析,主要原因如下:
1)下午面试状态不好。当时刚刚睡醒,头脑昏沉,思路不清晰,边界条件啥的想不清楚。此外还忘了录音。还有就是之前陌陌开的是语音,字节开的视频,视频写代码有点紧张。
2)长期没做过OJ题,手太生。从去年复试完之后就没有再碰过OJ,今年找实习也是临时起意,没有做足准备。还有就是以前刷题用C++,没用python做过,临时写题,还遇到了语言层面的问题。
3)简历项目上准备地不够。第一个比赛的项目,准备地比较充分,后面的项目因为比较简单,觉得面试不太会关注,没有认真思考过,结果回答问题时很懵。
教训:
1)一般面试都会让现场写道题,这次面试居然挂在了简单的算法题上,看来以后平时每周要做点题,到面试前更是要好好刷一下。
2)以后面试尽量改到早上,下午实在是状态不行。临场发挥都发挥不出来。
3)但凡是简历上列出的项目都要好好准备,做足回答各种问题的准备。
返回目录
评价:学校这些课程都是好课,理论的学好,工作中需要去读博客什么的,理论的没学好看不明白,不能学过的都不记得。
编程题目大概就是一个读入一百万份文本,然后做简繁转换。(问题忘了保存了)
word_dic1 = {} # 繁体简体对照表
with open("word_dict.txt", encoding="utf-8") as f:
content = f.readlines()
for line in content:
words = line.split("——")
if len(words[0]) > 1:
w = words[0].split("/")
for i in w:
word_dic1[i] = words[1]
else:
word_dic1[words[0]] = words[1]
for file_path in file_list:
# 替换
with open(file_path, "r") as f:
content = f.readlines()
str_list = []
str = ""
for i in range(len(content)):
for j in range(len(content[i])):
if content[i][j] in word_dic1:
temp = word_dic1[content[i][j]]
str += temp
else:
str += content[i][j]
str_list.append(str + "\n")
str = ""
# 写入文件
with open("out_" + file_path, "w") as f:
for str in str_list:
f.writeline(str)
问:线上的话,这个代码怎么优化?
我说,可以用散列表解决一下查找简繁转换表这块。
面试官说,散列表并没有优化啥,主要耗时操作在IO上,这个字符串处理是不是有问题?
我说,我这儿全部写一遍确实有问题,应该是只修改需要做简繁转换的字符,做写操作。
总体评价:
1)编码能力还可以,但是读题目不够仔细,还有代码细节小问题比较多。
2)看了前面几轮的面试评价。简历上的术语不要太多,这些术语无非就是想说明做了很多东西,但写的很多都是面试官感兴趣的、想问的。
能写在简历上的就得是确定会的,问不倒的。如果问了之后回答不清楚,反而成为减分项。
自我总结:
1)没想到会问课程的东西,一来可能学得也马虎,二来面试前没有复习一下,有些问题回答得不清楚;
2)现场编程细节还是注意不够,暴露出来潜在的习惯问题。
两方面的习惯问题,一是平时写代码经常简单地随便写完大体,然后再调试细节,没有在写代码的过程中关注细节问题,等于给自己挖坑。
二是经常题目看个大概有思路就开始写了,对题目中的细节关注不够,没有提前把需求里的点理清楚,也是在给自己挖坑。
返回目录
将门创投(3月17日) 自然语言处理实习岗
20分钟,微信电话。给了口头offer,已拒。技术战略部,部门主管面试。
问了下,是否在北京,最快何时能到岗,一周能实习多久,还有薪资要求,以及对于他们的业务需求有没有兴趣之类的。
还有就是给我介绍了下他们公司,以及介绍了下他们的初创团队,业务需求之类。并约时间周内和他们CTO聊一下。
(主要考虑到他们公司没有专职的NLP工程师可以带我,当天下午拒绝了)
这周开始在BOSS直聘以及拉勾网上海投简历。
返回目录
睿企科技(3月18日)自然语言处理实习岗
1个小时,笔试。题目比较简单,不过时间有点紧。
1)元组与列表的区别。
2)写一个动物类(Animal),初始化函数输入名称(name),类型为字符串,再写一个狗类(Dog)继承动物类,初始化函数输入名称(name)和颜色(color)。
3)DataFrame:
import string
import random
import numpy as np
import pandas as pd
name = set()
while len(name) < 100:
name.add(''.join(random.choice(string.ascii_lowercase) for _ in range(5)))
name = list(name)
df_score = pd.DataFrame({'name': name, 'score': np.random.randint(80, 100, 100)})
df_score.head()
classes = ['A', 'B', 'C']
df_class = pd.DataFrame({'name': name, 'class': [random.choice(classes) for _ in range(100)]})
df_class = df_class.sample(frac=1).reset_index(drop=True)
df_class.head()
4)训练集、验证集和测试集的区别是什么,为什么需要验证集?
5)介绍你使用的深度学习框架(如 TensorFlow、PyTorch)。
6)介绍卷积运算的过程,比如输入一个 3通道,尺寸为 (5, 5) 的图像,如果要输出 6 通道,尺寸为 (3, 3),卷积层的参数应该如何设置?
假设输出矩阵 A 的尺寸为 (6, 3, 3),它的第一个数字A[0, 0, 0] 是如何计算出来的。
7)排好序的数组,从中找到相加等于target数字的两个数的所有可能
比如,输入
数组:[2, 3, 4, 7, 10, 12]
Target数:14
输出: [(2, 12), (4, 10)]
def get_all_combs(array, target)
8)编写正则表达式,匹配身份证号码、电话号码、手机号码或银行卡号,要求写出两个或以上的表达式。
9)输入一个变形数组,及某个数字,输出这个数字在变形数组中的位置
def find_num(array, num) 要求算法复杂度为 log(n)
变形的方法是将一个排好序的数组某个位置之前的数放到数组末尾,比如
原始数组为:
2 3 6 9 10 12 24 34
得到以下变形数组(将2 3 6放在了数组末尾):
9 10 12 24 34 2 3 6
比如,输入24和变形数组,输出 3
说明:
不需要写变形的code,输入已经是一个变形的数组了
不知道具体将多少个数放在了数组的末尾
返回目录
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
解释:数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示柱子的高度,蓝色部分代表水,这个例子可以接 6 个单位的雨水。
9)Explain how to view (soft-margin) SVM as a penalization method (i.e.,explain the objective SVM as a Loss+Regularization term)
10)Explain the principle of the stochastic gradient descent algorithm. What is the benefit of using stochastic gradient descent (instead of gradient descent)?
11)What is overfitting? How to prevent overfitting (in both traditional method and deeplearning)?
12)Explain what are the gradient vanishing/explosion problems in RNN? (we need the underlying mathematical reason)
13)Consider the image captioning problem. Given a picture as the input, your algorithm should output a sentence describing the picture.
(a)Describe a neural network structure that can do this. (if you use well known CNN or RNN structures, you don’t need to go into the details. Just say how to use them (what the input, what is the output).)
(b)Describing the training process (what is the training data? what is the objective?)
©Describe the test process (In the testing phase, give a picture as the input, how your algorithm output a sentence describing the picture.)
(d)Suppose we want to have a parameter to determine the diversity of the output sentence (on one extreme, the output is almost a deterministic sentence, and on the other extreme, the output is almost a random sequence) This can be done by adding a temperature parameter to the softmax function. How would you do it? (there may be more than one reasonable answers.)
返回目录
感易智能(3月19日)自然语言处理实习岗
电话面试,30分钟。未通过。
面试过程:
1)自我介绍
2)介绍下参加的比赛
3)比较下ngram和tf-idf
4)为什么ngram更适合这个场景
5)还用过别的方法吗
6)最后集成用了哪些模型
7)比较过不同方法的差异吗,为什么集成后效果会提升
8)解释一下方法之间的差异
9)说一下CNN和全连接层的差别,是如何把参数变少的
10)为什么这样做可行,这种简化是满足了什么条件
11)说一下平移不变性,subsampling
12)说一下word2vec的原理
13)词向量是怎么学出来的
14)还记得训练过程中的小trick吗,层次softmax,nagative sampling,(没回答好)
15)了解NLP一些任务,比如问答,阅读理解之类的
16)了解最新的技术吗
17)能说一下Transformer
18)可以介绍下多头注意力机制,怎么实现的(没回答好)
19)attention的权重是怎么训练出来的(没回答好)
返回目录
千芯科技(3月19日) 深度学习/人工智能实习生
我看JD里有NLP相关的就投了,没想到是一个sb公司。
约好的面试时间,迟到了半小时(因为他们时间安排不合理,上一个还没面完)。
面试居然是多面一,好几个人面,甚至HR都在。
一上来就问CV的东西,我还以为自己投错了岗位。
我说我是做NLP的,另一个人问我更喜欢NLP还是ASR。
还问我一般用啥模型,我说了几个,人说这不都是机器学习的吗,(内心os:机器学习的方法就不能用来做NLP了?)
问我用没用过最新的技术,我说去年预训练模型BERT很火,我用BERT跑过MRPC,
问我roBERTa知道不,我说没用过roBERTa,人说那你还说自己是做NLP的,roBERTa都不知道。(内心os:一个BERT变种,这都能奚落人?)
然后没人再问问题,HR说面试结束了,让我退群。
(迟到半小时,面试十分钟,还不尊重人,真是一个sb公司)
返回目录
微播易(3月20日) NLP算法实习生
笔试,1小时,做了一道简单的编程题,tf-idf, 生成文档的向量表示。代码如下。
content = None # 文本列表
with open("./segmented.txt", encoding="utf-8") as f:
content = f.readlines()
content[:5]
['\ufeff好 了 我 要 放大 招 了 我们 班 的 美女 们 看 压轴 的 哦 有没有 小 啊\n',
'小 舞王\n',
'现在 的 小朋友 都 这么 6 的 吗\n',
'不断 给 你们 带新 的 作品 新 的 造型 我 是 咖啡师 因为 有 你们 在 我 才能 一直 坚持下去 点 赞点 赞\n',
'老 胳膊 老 腿 了 不 接受批评 哦\n']
content[0] = content[0][1:-1]
for i in range(1, len(content)):
content[i] = content[i][:-1]
content[:5]
['好 了 我 要 放大 招 了 我们 班 的 美女 们 看 压轴 的 哦 有没有 小 啊',
'小 舞王',
'现在 的 小朋友 都 这么 6 的 吗',
'不断 给 你们 带新 的 作品 新 的 造型 我 是 咖啡师 因为 有 你们 在 我 才能 一直 坚持下去 点 赞点 赞',
'老 胳膊 老 腿 了 不 接受批评 哦']
n = len(content)
n
4570
docCount = {}
tf = []
content_lst = []
for i in range(len(content)):
word_lst = content[i].split(' ')
content_lst.append(word_lst)
tfCount = {}
for word in word_lst:
if word != ' ':
if word not in tfCount:
tfCount[word] = 1
if word not in docCount:
docCount[word] = 1
else:
docCount[word] += 1
else:
tfCount[word] += 1
tf.append(tfCount)
tf[0]
{'好': 1,
'了': 2,
'我': 1,
'要': 1,
'放大': 1,
'招': 1,
'我们': 1,
'班': 1,
'的': 2,
'美女': 1,
'们': 1,
'看': 1,
'压轴': 1,
'哦': 1,
'有没有': 1,
'小': 1,
'啊': 1}
dic_cnt = len(docCount)
dic_cnt
8927
import math
vect = [] # 向量表示,用tf-idf值
for i in range(len(content_lst)):
word_lst = content_lst[i]
tf_idf = [0] * dic_cnt
cnt = 0
for word in docCount:
if word in word_lst:
idf = math.log(n / docCount[word], 2)
tf_idf[cnt] = tf[i][word] * idf
cnt += 1
vect.append(tf_idf)
print(docCount['了'], tf[0]['了'], len(vect))
print(math.log(n / docCount['了'], 2))
916 2 4570
2.3187746618484883
print(vect[0][:30], len(vect[0]))
[4.723350222308707, 4.637549323696977, 2.3015529213199013, 5.203782139558557, 12.157978449945432, 9.573015949224276, 5.543268605830224, 9.157978449945434, 3.0902199053087824, 8.350623527887828, 6.514122260170708, 5.403090947781964, 12.157978449945432, 5.968153891065415, 7.29999745481786, 3.340994826690051, 5.180698526445516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 8927
print(vect[1][:30], len(vect[1]))
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.340994826690051, 0, 11.157978449945432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 8927
返回目录
东方棱镜(3月20日) 算法实习岗
约好了面试时间,然后被放鸽子,联系不上HR了。。。。
返回目录
微播易(3月20日) NLP算法实习岗
电话面试,30分钟。
1)讲下做文本分类的项目
2)准确率怎么定义,准确率高意味着什么,召回率高意味着什么(没答好)
3)如何衡量两个分类器的好坏(没答好)
4)用混淆矩阵的作用是什么
5)如何把混淆严重的两类分开(没答好,应该是特征工程这块)
6)对NLP哪个细分领域有比较深入的研究
7)对工程,还是科研更有兴趣
8)介绍了下他们有深度学习/多模态方面的业务需求
返回目录
交叉科技(3月20日)算法实习岗
迟到了半小时,因为HR把这事给忘了。CEO面试,微信电话面试半小时。(感觉会给offer)
主要是看简历问了些问题,基本这些问题之前面试都问过了,所以回答地挺好的。
其他问题的话,包括LDA,word2vec,bert的原理之类的,也有所准备,回答的也蛮好的。
然后介绍了下他们在做一个根据新闻事件预测股票涨跌的需求,然后问了下有没有兴趣,目前有几个offer,一周能实习几天之类的问题。
返回目录
微播易(3月23日)NLP算法实习岗
电话沟通,10分钟左右。后来没联系,感觉应该没通过,微播易两轮面试都答得不好。
算法负责人是北邮的一个学长,问的问题也偏基础,没有答好,挺遗憾的。
1)对深度学习有哪些了解
2)做文本分类有用过其他的方法
3)朴素贝叶斯效果不好,有没有什么改进思路
4)textcnn有做过吗
5)cnn的输入输出是什么
6)对pytorch,TensorFlow有哪些了解
7)对实习有哪些期望
8)一周可以实习几天
返回目录
有鱼科技(3月23日)算法实习岗
电话面试,20分钟左右。已挂。
1)问了下个人情况
2)讲一下项目
3)讲一下tf-idf
4)讲一下word2vec的负采样
5)文本分类有没有试过其他方法
6)问了下数据结构的问题,最长递增子序列(动态规划)、快速排序(以及计算复杂度)(这块没回答好,不熟)
返回目录
鲸航科技(3月23日)语音识别算法实习岗
视频面试。半个多小时。然后给了口头offer
1)面试主要讲了下项目
2)问了准确率,回归率,分类与回归的区别,分类方法等各种基础问题
3)然后就是,面试官介绍了下他们公司的业务啥的
4)然后问有没有兴趣做语音识别语言模型这块
5)这个是北邮校友的公司,感觉对北邮人很开放,所以聊的挺愉快的,希望我能去
返回目录
返回目录
问题包括:
0)为什么研一就出来实习等个人问题
1)对图像这方面感不感兴趣
2)讲一下xgboost,还有就是向量表示方法
3)xgboost和GBDT的差别
4)讲一下随机森林以及它的优点
5)讲一下后向传播算法
6)python你常用的库有哪些
7)python2和python3的区别(除了语法上有些区别之外,其他不清楚)
8)word2vec了解多少,讲一下
9)讲一下CNN和RNN的区别,以及优缺点,使用上有什么区别
10)平衡二叉树相比于普通树有哪些优点
11)监督学习和非监督学习的区别
12)讲一下自监督学习(这块不清楚,我问是不是和强化学习差不多,然后我讲了下强化学习的)
13)其他问题,忘记录音了,不记得了
编程题目如下:
1)一个循环有序数组,比如[4, 5, 6, 7, 8, 1, 2, 3],找出数组中的最大值
def compute(lst):
i = len(lst) // 2
if len(lst) < 1:
return -1
if lst[i] > lst[i+1]:
return lst[i]
else:
first = compute(lst[:i])
return first if first != -1 else compute(lst[i+1:])
2)跳步计算,查了下,是一道LeetCode原题
比如[2, 3, 1, 1, 4],每个位置是可以跳的最大值,问最少可以跳几步到最后一个位置。示例的答案是2
def compute2(lst2):
temp_lst = [] # 保存状态信息
steps = [] # 保存最终步数信息
if len(lst2) == 0:
return
temp_lst.append([lst2[0], 0, 0])
while len(temp_lst) > 0:
# 取数据
data, index, step = temp_lst[0]
temp_lst.pop(0)
# print(data, index, step)
# 添加最终步数
if index == len(lst2) - 1:
steps.append(step)
continue
for i in range(1, data+1):
if index+i < len(lst2):
temp_lst.append([lst2[index+i], index+i, step+1])
# print("add", lst2[index+i], "index", index+i, "step", step+1)
# print(steps)
min_step = -1
for j in steps:
if j < min_step or min_step == -1:
min_step = j
return min_step
返回目录
交叉科技(3月24日)自然语言处理实习岗
20分钟,部门经理+同事面。
拿我之前的笔试题简单问了下。因为之前CEO已经面试通过了,所以这轮比较水。
面完后次日HR发了offer。
返回目录
云日未来(3月24日)自然语言处理实习岗
1小时,钉钉视频面,面试过程挺不友好的。
一上来,自我介绍完,我说我讲下我的项目吧,人说,不用,你就说下你会啥吧。(当时就感觉挺尴尬的)
然后整个过程问了很多问题,简历上的,还有python,SVM,BERT,word2vec等等,问得都很细节,一些问题我也答不上来。
面试过程中,面试官自顾自地接听同事电话,完全无视我的存在,感觉不太尊重求职者。
不过确实问的很多问题也是我的知识盲点,所以也算是一次不错的面试经历,学到了很多,虽然过程不太舒服。
返回目录
求职过程中,最遗憾的是面陌陌。JD和经历很对口,几轮面试,面试官都很好,可惜最终因为自己的基础不够扎实,没能通过。
最气恼的是面字节跳动。自己状态不好,简单的图算法题都没写对,浪费了大厂面试机会。
最终还是从拿到的小公司offer中选择了一个自认为最好的,也算是一个月的求职有了一个还不错的结果。
总而言之,自身实力硬伤很多。专业知识还是学的不够扎实,知识面也不够广。
尤其比较遗憾的是,面试前的寒假,没有能够好好刷刷LeetCode,结果面试出的很多题都是LeetCode原题。
而且面试前期不知道有百面机器学习这本书,面试后期才发现。如果早一点看的话,很多机器学习相关的问题都可以回答地比较好。
返回目录