搜索研发工程师需要掌握的一些技能

文章目录

  • 基础
    • 语言
    • 数据结构与算法
  • 工程方面
  • 搜索相关
    • 搜索主要模块
    • 电商搜索流程
    • 分词相关
    • 搜索召回
    • 相似度算法
    • 相关词推荐
    • 排序相关
    • 国美搜索
    • 搜索算法工程师需要掌握的技能

基础

语言

  1. 大部分公司用的是Solr、ElasticSearch,都是基于Java实现的,因此熟悉掌握Java语言并灵活使用很重要
  2. 360公司他们的分词、搜索引擎都是基于C、C++去写,因此C、C++也很重要,但是我工作当中主要用Java,其实我也忘了差不多了
  3. 其实Python也很重要,Python提供了很多优秀的库可以解决很多应用场景,读写Excel、Word文档如果用Java库去调太麻烦了,还有Python提供了很多机器学习库,当然我是做工程更多这方面很多也不懂

数据结构与算法

  1. 我觉得所有软件的底层都是数据结构,掌握数据结构尤其重要,例如你用mysql底层用的B+树、用Hbase底层也是B+树、HashMap底层是红黑树、定时任务底层是优先队列、Lucene底层用FST、跳跃表,其实到了汇编指令用栈协助计算等等,这些都离不开数据结构,当然面试肯定也会被问到,去年面国美、京东被问写二叉树等前序遍历代码、两个链表去重,最近面试Boss直聘、京东到家被问到BitMap、BitSet、链表、FST、跳跃表
  2. 基础的算法基础也很重要,额,反正面试肯定会被问到,最近面了网易就被问到如何用DFS构建一个迷宫,再用BFS去解迷宫,Boss直聘被问到LCS原理时间复杂度去年面滴滴问到二分查找,之前去360企业安全实习被问到快速排序

工程方面

  1. 应用框架:SpringBoot
  2. RPC框架:Dubbo、Thrift
  3. 缓存:SSDB、Redis、Guava Cache、EvCache、Caffeine等
  4. 数据库:Hbase、Mongodb、Mysql
  5. 搜索相关:Lucene、Solr、ElasticSearch
  6. 实时计算:Flink
  7. 监控相关:Cat、Prometheus
  8. 其他的后续遇到再补充,我现在也还是小白上面的很多还没时间去学

搜索相关

搜索主要模块

在这里插入图片描述

电商搜索流程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

分词相关

  1. 分词
  2. 新词发现
  3. 词权重计算
  4. 核心词识别
  5. 同义词
  6. 紧密度分析
  7. 意图识别
  8. 改写
  9. 纠错

搜索召回

  1. TFIDF
  2. BM25

相似度算法

  1. 欧几里得距离
  2. 曼哈顿距离
  3. 余弦相似度
  4. accard相似度

相关词推荐

Fpgrow:你可以理解为统计词的共现次数,只是fpgrowth统计起来效率更高
word2vec:word2vec是语义层面的相关
在这里插入图片描述

排序相关

  1. Learning To Rank(LTR): pointwise 、 pairwise 、 listwis

国美搜索

1.分词:基于词典和机器学习相结合的,其中机器学习部分用的CFR,条件随机场来做的分词
2.搜索分词用的是最大后向匹配,用最大后向匹配主要是考虑人的正常输入习惯,比如玻璃水杯,要是前向最大切分就是玻璃水 杯,后向就是玻璃 水杯

索引分词
全切分:最小正向切分又叫全切分
分类预测:fasttext + 分词命名实体识别 + 型号词库结合的

精排
pointwise:就是看成ctr(点击率预估)来给出每个商品点击的概率值,按照概率值的大小对候选的商品排序

pairwise 更关注同一搜索词下面不同商品的是否和搜索词相关,样本构造起来比pointwise麻烦

召回:bm25
关键词提取:tfidf、textrank
意图识别
对query做分类预测,预测商品所在分类

搜索算法工程师需要掌握的技能

以下内容摘选自知乎
说说我对搜索算法工程师能力要求的理解。这个能力要求,与求职者应聘面试时的能力要求可能不一样。毕竟,“面试造火箭,入职拧螺丝”是很常见的。
搜索算法的掌握,分两个方面,一个是掌握的深度,另一个是掌握的范围。
深度可以分几个等级:

  1. 只知道名字,或完全没听过;
  2. 大概知道原理并未使用过;或调包使用过,但具体原理不太清楚,没做过优化;
  3. 在实际项目中,深度使用过,有丰富的调优经验;对算法理论有充分的理解,可以推导公式等。
    搜索算法的范围其实非常广。在整个搜索系统中,与算法最强相关的,我理解是查询理解/query分析和排序。
  4. 查询理解
    主要是NLU相关的技术,包括:分词、新词发现、词权重计算、核心词识别、改写、同义词、紧密度分析、意图识别、纠错等。这里面多数都依赖机器学习算法,也有少量是依赖词典、规则。
  5. 召回
    从倒排索引中,召回相关的网页。包括相关性计算,在相关性基础上的粗排序。 相关性计算,至少知道tf-idf,bm25及各种变种等,知道每种算法的优劣。
  6. 排序
    使用机器学习模型对召回结果做精细化的排序,Learning To Rank(LTR)。这是搜索系统中最关键的算法,几乎决定了最终的排序效果。常见的算法包括LambdaMart, RankNet, LambdaRank等,至少知道PointWise, PairWise, ListWise等几种算法的分类。深入使用过其中某几个算法。
    在排序中,还涉及语义匹配和点击调权等算法,使用过DSSM, DBN等常规的算法。
    除了上述3个,其它的像倒排索引构建、网页搜索中的爬虫、网页分析、摘要计算等,也会涉及一些算法。
    我个人感受,搜索算法工程师是对经验要求特别高的一个岗位。不太像有些搞机器学习的岗位,知道几个机器学习模型,一直在调优这几个模型来改善效果就行。搜索的效果是由非常多的因素共同影响决定的,整个系统比较庞大。
    从普通的搜索算法工程师角度,一般不太可能对上述所有算法都非常熟悉,所以如果能对某一两个模块的算法非常熟悉,或者说经验很丰富,个人觉得已经不错了。如果是对这些都很熟悉,那就是算法的总负责人之类的了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink入门看完这篇文章就够了

文章目录第一章:概述第一节:什么是Flink?第二节:Flink特点?第三节:Flink应用场景?第四节:Flink核心组成第五节:Flink处理模型:流处理和批处理第六节&#xff…

word小结

域代码/域结果显示设置 word选项---->>高级------>>显示域代码而非域值将样式传给其它文件使用 首先启动Word打开包含这些样式的一个文件,然后选择“工具”---->“模板和加载项”。在弹出的对话框中单击“管理器”按钮。在弹出的“管理器”对话框中&…

线程属性总结

今天面试那哥们问起线程属性,me竟然就说出了一个,囧 学习:http://blog.csdn.net/zsf8701/article/details/7842392 http://blog.csdn.net/jxhnuaa/article/details/3254299 http://blog.sina.com.cn/s/blog_9bd573450101hgdr.html int pthre…

百度2015校园招聘软件开发笔试题及答案

简单题(本题共30分) 请简述Tcp-ip的3次握手以及4次挥手过程?并解释为何关闭连接需要4次挥手(10分) 详细答案参见TCP/IP协议三次握手与四次握手流程解析 TCP三次握手、四次挥手过程如下: 通常情况下,一个正常的TCP连接&#xf…

linux ps 命令使用

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。 linux上进程有5种状态 ps命令使…

UML序列图总结

序列图主要用于展示对象之间交互的顺序。 序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活…

UML用例图总结

用例图主要用来描述 用户、需求、系统功能单元 之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。 【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。 用例图所包含的元素如下: 1. 参与者(Actor) 表示与您的应用程序或…

Linux网络编程常见面试题

概述 TCP和UDP是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。 TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。UDP:用户…

linux动态库查找路径以及依赖关系梳理

编译时与运行时库的路径 linux下,编译时与运行时库的搜索路径是不同的 运行时动态库的路径搜索顺序 LD_PRELOAD环境变量,一般用于hack 编译目标代码时指定的动态库搜索路径(指的是用 -wl,rpath 或-R选项而不是-L),readelf -d命令可以查看编…

eclipse--android开发环境搭建教程

引言 在windows安装Android的开发环境不简单也说不上算复杂,但由于国内无法正常访问google给android开发环境搭建带来不小的麻烦。现将本人搭建过程记录如下,希望会对投身android开发的小伙伴有所帮助。 android开发环境部署过程 安装JDK环境 下载安装…

eclipse--python开发环境搭建

pydev插件介绍 PyDev is a Python IDE for Eclipse pydev官方网站:http://www.pydev.org/ 在Eclipse中安装pydev插件 启动Eclipse, 点击Help->Install New Software… 在弹出的对话框中,点Add 按钮。 Name中填:Pydev, Location中填http://pydev.or…

Win7虚拟无线AP以及Android手机抓包

设备要求 Windows7操作系统装有无线网卡的笔记本或台式机无线网卡必须支持“承载网络” 查看无线网卡是否支持“承载” 方法一: 开始菜单→所有程序→附件→命令提示符→右键“以管理员权限运行”; 键入命令“netsh wlan show drivers”,查看“支持承载网络”这一项,如果是…

CMD命令之BAT脚本路径信息

CD命令解疑 cd是chdir的缩写,命令详解参见cd /? 可以看到/d参数的解释如下: 使用 /D命令行开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。 通常我们在xp系统中打开cmd窗口时,会显示 C:\Documents and Se…

【ubuntu 22.04】安装vscode并配置正常访问应用商店

注意:要去vscode官网下载deb安装包,在软件商店下载的版本不支持输入中文 在ubuntu下用火狐浏览器无法访问vscode官网,此时可以手动进行DNS解析,打开DNS在线查询工具,解析以下主机地址(复制最后一个IP地址&a…

卷积与傅立叶变换

一、卷积 1、一维的卷积 连续: 在泛函分析中,卷积是通过两个函数f(x)f(x)和g(x)g(x)生成第三个函数的一种算子,它代表的意义是:两个函数中的一个(我取g(x)g(x),可以任意取)函数,把g(x)g(x)经过翻转平移,…

OpenCV-Python bindings是如何生成的(2)

OpenCV-Python bindings生成流程 通过上篇文章和opencv python模块中的CMakeLists.txt文件,可以了解到opencv-python bindings生成的整个流程: 生成headers.txt文件 将每个模块的头文件添加到list中,通过一些关键词过滤掉一些不需要扩展的头文件&#x…

tcp状态机-三次握手-四次挥手以及常见面试题

TCP状态机介绍 在网络协议栈中,目前只有TCP提供了一种面向连接的可靠性数据传输。而可靠性,无非就是保证,我发给你的,你一定要收到。确保中间的通信过程中,不会丢失数据和乱序。在TCP保证可靠性数据传输的实现来看&am…

CentOS7开发环境搭建(1)

文章目录BIOS开启VT支持U盘安装系统(2019-03-11)CentOS DNS配置CentOS网络配置配置静态IP克隆虚拟机网卡名称变更 CentOS6.5时间配置安装VMWare-tools用户管理 (2019-03-15 7.6.1810)给一般账号 root 权限Samba服务配置安装必备软件获取本机公网ipyum源和第三方库源管理配置本地…

NS2相关学习——创建Xgraph的输出文件

经过前面学习代码的编写,这一部分,我们要学会如何进行分析,一个很直观的方式就是将结果图形化表示出来。 ns-allinone包的一部分是“xgraph”,一个绘图程序,可用于创建模拟结果的图形表示。 在本节中,将向…