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

文章目录

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

基础

语言

  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…

管理实践-教练技术的应用

文章目录简介课程学习的工具总结深度倾听3R原则倾听地图:开放式提问层次提问和SMART提问框架BIA积极性反馈GROW模型简介 最近在参加管理培训课程,学习《教练式指导》一课,现将内容总结分享一下。 课程学习的工具总结 深度倾听3R原则 工具…

spark整合MySQL

spark整合MySQL <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency>import java.sql.{Connection, DriverManager, PreparedStatement} import org…

DataFrame不同风格比较

DataFrame不同风格比较 一&#xff0c;DSL风格语法 //加载数据 val rdd1sc.textFile("/person.txt").map(x>x.split(" ")) //定义一个样例类 case class Person(id:String,name:String,age:Int) //把rdd与样例类进行关联 val personRDDrdd1.map(x>…

sparkSQL操作hiveSQL

sparkSQL操作hiveSQL <dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.11</artifactId><version>2.3.3</version></dependency>import org.apache.spark.sql.SparkSession//todo:利用sparksql操作h…

sparksql加载mysql表中的数据

sparksql加载mysql表中的数据 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version> </dependency>import java.util.Propertiesimport org.apache.spark.SparkCon…

sparksql保存数据常见操作

sparksql保存数据操作 import org.apache.spark.SparkConf import org.apache.spark.sql.{DataFrame, SparkSession}//todo:sparksql可以把结果数据保存到不同的外部存储介质中 object SaveResult {def main(args: Array[String]): Unit {//1、创建SparkConf对象val sparkCon…

sparksql自定义函数

sparksql中自定义函数 import org.apache.spark.sql.api.java.UDF1 import org.apache.spark.sql.types.StringType import org.apache.spark.sql.{DataFrame, SparkSession}//TODO:自定义sparksql的UDF函数 一对一的关系 object SparkSQLFunction {def main(args: Array[S…

sparksql整合hive

sparksql整合hive 步骤 1、需要把hive安装目录下的配置文件hive-site.xml拷贝到每一个spark安装目录下对应的conf文件夹中2、需要一个连接mysql驱动的jar包拷贝到spark安装目录下对应的jars文件夹中3、可以使用spark-sql脚本 后期执行sql相关的任务 启动脚本 spark-sql \ --…

hive的一些常见内置函数

hive行转列 selectt1.base,concat_ws(|, collect_set(t1.name)) namefrom(selectname,concat(constellation, "," , blood_type) basefromperson_info) t1group byt1.base;hive列转行 select movie, category_name from movie_info lateral view explode(category)…

hive的一些调优参数

hive的一些调优参数 set hive.exec.dynamic.partition.modenonstrict; 使用动态分区 set hive.exec.max.dynamic.partitions100000;自动分区数最大值 set hive.exec.max.dynamic.partitions.pernode100000; set hive.hadoop.supports.splittable.combineinputformattrue;支持切…

hive的SerDe序列化

hive使用Serde进行行对象的序列与反序列化。最后实现把文件内容映射到 hive 表中的字段数据类型。 HDFS files –> InputFileFormat –> <key, value> –> Deserializer –> Row objectRow object –> Serializer –> <key, value> –> Outp…

窗口函数和hive优化简记

窗口函数&#xff1a; &#xff08;1&#xff09; OVER()&#xff1a;指定分析函数工作的数据窗口大小&#xff0c;这个数据窗口大小可能会随着行的变而变化。常用partition by 分区order by排序。 &#xff08;2&#xff09;CURRENT ROW&#xff1a;当前行 &#xff08;3&…

Kafka一些参数配置

Producer消息发送 producer.send(msg); // 用类似这样的方式去发送消息&#xff0c;就会把消息给你均匀的分布到各个分区上去 producer.send(key, msg); // 订单id&#xff0c;或者是用户id&#xff0c;他会根据这个key的hash值去分发到某个分区上去&#xff0c;他可以保证相同…

hive避免MR的情况

什么情况下Hive可以避免进行MapReduce hive 为了执行效率考虑&#xff0c;简单的查询&#xff0c;就是只是select&#xff0c;不带count,sum,group by这样的&#xff0c;都不走map/reduce&#xff0c;直接读取hdfs目录中的文件进行filter过滤。 sql select * from employee; …

flink常见算子的一些操作

常见Transformation操作 map和filter /*** 数据源&#xff1a;1 2 3 4 5.....源源不断过来* 通过map打印一下接受到数据* 通过filter过滤一下数据&#xff0c;我们只需要偶数*/ public class MapDemo {public static void main(String[] args) throws Exception {StreamExecut…

flink的watermark参考配置

需求描述&#xff1a;每隔5秒&#xff0c;计算最近10秒单词出现的次数。 TimeWindow实现 /*** 每隔5秒计算最近10秒单词出现的次数*/ public class TimeWindowWordCount {public static void main(String[] args) throws Exception{StreamExecutionEnvironment env StreamExe…

hbase常见处理方式

相关依赖 <dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>1.2.1</version></dependency><dependency><groupId>org.apache.hbase</gro…

flink连接kafka整合hbase,scala

解析kafka当中的json格式的数据&#xff0c;入hbase import java.util.Propertiesimport com.alibaba.fastjson.{JSON, JSONObject} import org.apache.flink.api.common.serialization.SimpleStringSchema import org.apache.flink.contrib.streaming.state.RocksDBStateBack…

sparkStreaming连接kafka整合hbase和redis

sparkStreaming消费kafka数据&#xff0c;并将数据保存到redis和hbase当中去&#xff0c;实现实时 import org.apache.hadoop.hbase.client.{Admin, Connection} import org.apache.hadoop.hbase.{HColumnDescriptor, HTableDescriptor, TableName} import org.apache.kafka.c…