背景:985本,保研985硕
方向:微服务与软件架构
岗位:搜索算法工程师
因为第一次在网上面试,没有注意是在牛客上面试,一直在等HR电话,等到面试时间过了3分钟查看邮箱才发现是牛客。登上去发现HR已经在等待了
第一部分 自我介绍与项目
我: HR不好意思,我才发现是在牛客上面试
HR: 这样啊,没事没事,你先介绍一下自己吧
我: 介绍了本科学校、保研情况,导师方向,深度学习相关项目经历
HR: 我看你在参加一个竞赛,那你给我讲讲你这个竞赛吧
我:我们这个比赛是疫情期间网民情绪识别的一个比赛,数据集包含网民的微博内容、微博附图链接和微博视频链接。标签分为-1,0,1三个值,分别代表消极、中立、积极的情绪。要求在测试集上进行预测。
HR: 你讲讲你们怎么做的吧
我: 我在这个比赛里主要是负责数据预处理的工作,因为NLP方面我不是特别熟悉,model的baseline基本是我队友搭建的,我们目前是使用Bert和XLnet进行训练和集成。
HR: 数据预处理有哪些工作
我:主要是参考一些论文,对微博中一些颜文字、表情进行处理,转化为特定的标识符。把他当做一个词进行识别
HR: 不同的表情处理成相同的标识符?
我: 是处理成不同的标识符,因为不同表情代表的情绪含义不一样。
HR: 图片和视频你们怎么用的
我: 我们也考虑过把图片和视频趴下来进行二次处理,后面觉得第一这样效率太低,第二,用户在发微博的时候,图片和视频一定是有情绪引导性的,所以我们也是把图片和视频的链接当做一个标识符来处理。同时,因为图片和视频的数量很多,所以我们把图片和视频超过一定阈值的url做one-hot映射,变成一个新的维度。
HR: 还有哪些工作
我:因为我们在检测错误样本的时候,发现错误样本里面有很大比例是人工标注的问题,比如一个显然是-1的样本被标记为了0。所以我们是剔除了置信度大于0.75的错误样本。
然后做了一个bagging,剔除之后一共有9w个样本,我们有放回采样8w个样本,采样了10个数据集。每个数据集训练之后做一个融合。我们不断把效果最好的模型的错误样本进行剔除,然后重新采样。
HR: 你这个逻辑有点不对啊,你先训练,训练完了之后,去跑一遍结果,把结果不好的剔除掉,那你如何确定你剔除的样本是模型学习错误的还是人工标记错误的。
我:emm,这个我们人工检查了一些错误样本,里面置信度较高的大部分都是人工标记错误的样本,所以就这样做了,可能没有理论支持,是一个实验的心态。
HR: ok,先继续,效果有提升吗
我:效果是有一定提升的,从0.72->0.729
第二部分 算法与编程题
HR:我们一面还是考一下基础,来做两道算法吧,先出个简单的。
- 一个有序递增数组,从中间某个点发生了旋转,要你判断某个值是否在这个数组中。比如[7,8,9,1,2,3],让你查5在不在里面。
我的思路:最简单的思路就是从头到尾查一遍嘛,复杂度为o(n)。优化的话,我在想可不可以借鉴二分查找。(想了一会儿,感觉不能一直想,开始边说边想)。我们先进行二分查找,如果查找到就返回,没有查找到有两种情况,一,我们在左边的数组里,二,我们在右边的数组里。我们需要在另外一个数组再进行一次二分查找。如何判断是不是在前半段还是后半段。然后我说了一个逻辑,面试官说有点乱,你写代码吧。结果写一般发现细节有点问题,面试官说那你写个二分查找。写了十分钟,边界值没处理好。
我:我现在边界值有点问题,我在想怎么处理
面试官:你大体思路是对的,可能你二分查找写得不是很多。然后指出了我的错误。
我:那您最开始那个问题该怎么解决?
面试官:介绍了一下算法流程。ok,那面试时间也差不多了,就到这吧。
上面面试题的解答
感想
准备的还是不够充分,因为是自学机器学习知识,在家复习了两周左右就开始投简历了,算法题也没怎么刷,还是应该多花一段时间准备。不过投了简历有动力,复习起来可能有更有压力和目标吧。我比较佛系,没有特别想去的公司,所以这个凉了也还是可以接受的,至少敲了个警钟。