【ZH奶酪の面经】搜狐-产品技术部-自然语言处理工程师

本文地址:http://www.cnblogs.com/CheeseZH/p/5231413.html

面试时间:2016年3月1日 14:00-15:07

面试形式:电话面试

面试数量:两轮面试;

面试官:一位NLP面试官,一位code面试官;

第一轮面试:NLP相关

1.简单介绍自己

2.从简历中挑选两个最典型的项目

(1)事件抽取

简单介绍事件抽取;

Q:事件的定义?

A:这个也是国内所做项目涉及的概念,一种结构化知识的方法。

N元模型》Hybrid HMMs(这个Hyrbid HMMs是我自己改进的)

Q:Hybrid HMMs与HMM有何区别?

A:如实回答。

 (2)医疗社区用户生成数据分析

简单介绍工作内容;

Q:对NB,KNN,DT,SVM各种模型的理解?

A:介绍对NB的理解,先验概率,条件概率,联合概率,后验概率。。。

Q:NB有哪些不足?

A:没答上来。(面试官:条件独立性假设导致的不足)

Q:如何用SVM做多分类?

A:1 vs. rest

Q:一共多少类?具体如何做的?

A:10类,十个svm

Q:这样会导致什么问题?

A:数据不均衡

Q:如何解决?

A:欠采样,从其余9类中抽部分数据

Q:还有一种方式?

A:1 vs 1

Q:对,这种方式比第一种方式要好

Q:如何对SVM优化?

A:SMO

Q:讲讲SMO原理?

A:线性问题》拉格朗日对偶化》拉格朗日因子向量》每次选择2个进行拉格朗日因子进行优化,把大问题分解为小问题;

Q:介绍项目中的几种表示方式?

A:如实回答。

Q:实验结果怎么样?

A:几种模型中SVM最好,几种知识表示方式取决于数据量,数据量少的情况下term-based最好,领域词典次之,lda-based最差。

Q:有没有尝试几种模型的组合?加权重;几种知识表示方式的组合?连接;

A:没有。

Q:给一批新闻语料,想办法把他们按地域分类(北京,上海,深圳)

A:从中提取名词,人物,地点,根据这些特征进行分类

Q:如何获取地点知识库?

A:半结构化知识,结构化知识,非结构化知识。

百度百科,新闻,社交网络(面试官提示:采用地图API获取地点信息

Q:假设你追n个女孩子,追到概率为p,如果被拒绝,信心下降,之后追到女孩子的概率下降为p = λ*p,问成功追到一个女孩子的期望是多少?

A:不会。

Q:介绍科研成果

A:如实回答。

6.向面试官提问

(1)团队规模?

计划扩展到20人,目前有7人。

(2)具体工作?

主要负责搜狐新闻的推荐、分类、质量评估等;

(3)入职培训?

入职有集体培训,组内每周五有讨论;

 

第二轮面试:编程

使用熟悉的语言,编程实现链表的插入,删除和查找;

听到题目的时候有点蒙,对于这道题目的印象还停留在学习C语言的时候(09年)。

【下边的代码是我面试时候写的,存在很多不足,都加了相应注释,正确版本也不难,可以参考我以前写的《二叉树的一些操作》。】

关于语言,从Python和C中选择了C,涉及到指针的时候,还是使用C更舒服。

【完成功能的过程中遇到一些坎坷,不过面试官最后的评价:编码风格,命名以及缩进都不错。】

 1 typedef struct{
 2     int val;
 3     Node * next;
 4 } Node;//很久没有使用C自定义结构体,有些不熟练
 5 
 6 Node* insert(Node *head, int val) {//【面】插入返回值应为bool,而非链表指针Node *
 7     //【面】如何从尾部插入?【我】一直next,知道next为空。【面】改进?【我】循环链表,尾部指向头部(错误)【面】增加一个tail结点
 8     Node *tmp = (Node *)malloc(sizeof(Node));
 9     tmp->val = val;
10     tmp->next = head->next;//【面】为什么把head改成head->next?【我】取决于第一个元素是否有值。
11     head->next = tmp;
12     return head;
13 }
14 
15 bool deleteNode(Node *head, int val) {
16     
17     if (head->next == NULL) return false;
18     
19     Node *tmp = head;
20     while (tmp->next != NULL) {
21         if (tmp->next->val == val) {
22             Node *tmp_del = tmp->next;
23             tmp->next = tmp_del->next;
24             free(tmp_del);    
25             return true;
26         }
27         tmp->next = tmp->next->next;
28     }
29     return false;
30 }
31 
32 
33 bool findNode(Node *head, int val) {//【面】这个findNode应该返回Node *,而不是bool
34     
35     if (head->next == NULL) return false;
36     
37     Node *tmp = head;
38     while (tmp->next != NULL) {
39         if (tmp->next->val == vall) {
40             return true;
41         }
42         tmp->next = tmp->next->next;
43     }
44     return false;
45 }

 

你可能感兴趣的:(【ZH奶酪の面经】搜狐-产品技术部-自然语言处理工程师)