百度NLP电面总结(数据挖掘)

来源:互联网 发布:cs1.6武器数据修改 编辑:程序博客网 时间:2024/04/28 09:41

编程基础

C++

  • const
  • 虚函数:虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。

Python

  • 常用的数据结构及应用场景(list,dict,tuple)

统计知识

给定一个分类器p,它有0.5的概率输出1,0.5的概率输出0。

  • Q1:如何生成一个分类器使该分类器输出1的概率为0.25,输出0的概率为0.75? Ans:连续进行两次分类,两次结果均为1则输出1,其余情况(10,01,00)均输出0。

  • Q2:如何生成一个分类器使该分类器输出1的概率为0.3,输出0的概率为0.7?Tip:小明正在做一道选择题,问题只有A、B和C三个选项,通过抛一个硬币来使选择3个选项的概率相同。小明只需抛连续抛两次硬币,结果正正为A,正负为B,负正为C,负负则重新抛硬币。 Ans:连续进行4次分类(2^4=16 > 10),结果前3种情况则输出1,结果接下来7种情况则输出0,其余情况重新进行分类。

工程应用问题

  • Q1:给定一个1T的单词文件,文件中每一行为一个单词,单词无序且有重复,当前有5台计算机。请问如何高效地利用5台计算机完成文件词频统计工作?Ans(有问题的):将1T文件切分为5份,分配给5台计算机。每台计算机进行词频统计工作,输出一个结果为{单词:频数}的字典结果文件。将5台计算机生成的5个结果文件合并。

  • Q2:每台计算机需要计算200G左右的文件,内存无法存放200G内容,那么如何统计这些文件的词频? Ans(不是最优):首先将文件排序,然后遍历利用list存储结果即可。(不能用字典,因为200G统计出来的结果会很大,没有那么大的内存存放字典。由于经过排序操作,遍历存储并不会使结果丢失,所以用list存储结果即可,每当一个list即将占满内存,则将其写入文件,然后清空list继续存储结果。)

  • Q3:如何将1T的文件均匀地分配给5台机器,且每台机器统计完词频生成的文件只需要拼接起来即可(即每台机器统计的单词不出现在其他机器中)Ans1(不是很好):对1T文件中的单词进行抽样,获得其概率分布,遍历文件,然后根据首字母的概率均匀分配至5台计算机,如a到e的概率均为0.04, 0.04*5=0.2,则将所有以a-e的单词放入第1台计算机,若z的概率为0.2,则把所有以z开头的单词放入第5台计算机。缺点:不具有可扩展性,如果有100台计算机,那么可能就需要2个字母计算了,则程序就要改变。还有可能出现2台机器中有相同的单词。 Ans2(不是最优):遍历文件,对于每一个单词,获得单词中各字母的ASCII码值,然后将ASCII值之和取余。则每台机器中的单词必定是不一样。

总结

百度NLP部门电面考的基础很多,但是关于机器学习、数据挖掘方面的知识一个都没有问,坑爹啊!!!亏我准备了好久关于机器学习方面(特别是SVM,随机森林和AdaBoost)的东西!!!所以即使是投递机器学习、数据挖掘和自然语言处理相关的岗位,关于编程基础(C/C++)和算法还是得准备。

0 0