Case Study面经题解 - 搜索排序应用题 Query Understanding
搜索功能是很多科技公司产品的重要组成部分,比如电商公司的商品搜索、搜索引擎公司或广告平台公司的网页内容搜索等等,因此搜索方向的职业也是软件工程师和数据科学家最热门的职位之一。在这篇Techie面经文章中,我们和大家讨论一下搜索类问题中的一个重要模块:query understanding。我们会着重为大家介绍query understanding 领域相关重要的domain knowledge,帮大家梳理这一类问题在面试中需要注意的特有的分析角度。至于涉及到搭建 “数据分析/软件工程系统的整体框架”的面试问题,大家可以参考我们的前一篇Techie面经文章:资深面试官眼中的数据科学案例分析面试。
如果你希望系统提升编程算法知识和解题能力,或者在参加software engineer岗位面试之前得到个性化专业辅导,欢迎报名参加Techie备受好评的编程算法集训营课程。我会用58+课时的时间,结合120多道算法编程面试真题,为大家总结27类常考面试题型和变种题解法,以最高效的方式为大家搭建完整的算法编程知识体系,提高备考效率。如果你在编程算法面试备考过程中有任何问题,也欢迎扫描下方的二维码或者搜索 TonyCoding20 添加Techie教师团队微信, 期待和大家的沟通!
1. Overview of Query Understanding
如下图所示,用户在亚马逊网站输入一个query 查询 “robot cleaner”, 网站会查询并排序相关的关于 robot cleaner 的产品并呈现给用户。那么在这背后整个数据系统都完成了哪些具体的操作呢?首先要对 query 进行一系列的分析,包括分词、查询词纠错的改正、用户意图的识别等。在得到这些加工后的信息之后,系统会从商品列表里召回 (recall) 与用户意图相符合的商品。上面提到的这一系列 “结合用户行为对query做分析拆解,最后达到优化用户体验的过程” 就是query understanding。
在数据科学case study面试或者一些软件工程师岗位的项目面试中,面试官通常是从一个实际的应用场景出发,考察在不同的情况下如何对user query做分析和处理,比如:如何在数据预处理中解决拼写错误的问题、如何提升搜索查询的相关性等等。另外,query understanding 又经常与推荐系统、知识图谱(Knowledge Graph)联系紧密,因此它也经常在其他自然语言处理相关的case study面试中出现。比如从query的理解到检索再到推荐排序,作为信息处理的第一道环节,优化的 query understanding 实现可以给排序阶段提供更多的特征和信号。下面我们就通过一系列具体的面试题为大家来介绍这一领域的常考重点。
2. 常见考点解答
Q1. 如何定义 query understanding 问题的优化目标
一般来说召回 (recall) 和 相关性 (relevancy) 是主要的两个指标。当然我们在线上实验 AB testing 中会使用更多的metrics。在这里我们主要是讨论在针对 query 做了一些数据处理后,如何评估效果。召回 (recall) 是指在一个搜索页面,对于某个特定query,总共有多少个 items 被召回。相关性(relevancy) 则是衡量query 和返回的 item 之间的相关性的分数,例如 BM25(Best Matching 25) 用来计算文本相似度。理想情况下我们希望提升用户query的召回的数量同时也要保证和用户意图尽量相关。
Q2. 针对 query 需要做哪些预处理?
通常会对query做分词处理,比如 把“Techie面经文章” 切分成 “Techie” 和 “面经文章” 两个词。根据不同的需求,分词可以是基于 phrase 粒度 或者 token 粒度,通常来说我们要保证 query 分词的粒度和 item 侧构建的索引的分词粒度保持一致保证召回的效果。根据需要分词可以通过自定义的字典也可以利用分词的工具来完成。此外预处理还会去掉非文本类的字符比如表情,特殊符号,停用词的处理以及大小写的转换。这部分内容我们在Techie数据科学集训营的自然语言大项目里面做过细致的讨论,感兴趣的同学可以参考这里的项目介绍。
Q3 如何处理query中的拼写错误?
在query中出现拼写错误或者词组的搭配错误 比如 baskball -> basketball,在这种情况下一般要对 query 做改写转化为正确拼写的query。一种基于rule based 方式在query log 里面找到用户在同一个session 内 query pair (即邻近的query) ,查找到用户engagement 比较高的query作为target query candidate。然后基于对target query 和 拼写错误 query 的相似性分析 (比如edit distance) 来决定是否改写成target query。此外利用生成模型 seq2seq 的方法也可以使用在query 的改写上,特别是当预处理数据资料比较充分的前提下。
Q4 在AB实验需要分析哪些metric?
通常来说会分析 revenue 以及用户在session 内是否产生engagement 比如转化 、购买等,以及平均每天用户session 数量等。在实验开始前,我们一般需要通过AA test的方式比较搜索页面返回结果来确保query的扩展符合预期。
Q5 怎样去理解用户的意图?
在某些情况下,用户query 可能包含多个词组,除了非常明确的短语外(比如餐厅名称),用户的意图通常是模糊的或者有歧义的,针对这种情况我们需要对用户意图做分类。比如针对query “lionel messi 2022 qatar world cup postcard”,我们利用分类模型或者命名题识别的方法,识别 “lionel messi” 为运动员,“2022” 为时间年份, “qatar” 为地点 等等。我们的目标是识别用户查询商品的分类,然后再输出给下游的召回排序作为其中的特征,以此保证最后返回结果的相关性。根据不同的需求,实体识别的粒度也会有所区别,一般来讲会从粗粒度的标签开始然后随着数据的丰富,扩展到更细的标签类别。此外用户query的理解还涉及到同义词替换 (比如holiday -> vacation) ,以及上位词/下位词的挖掘来对query 做进一步的拓展。
以上就是关于搜索排序 Query Understanding 相关面试题的讨论,希望这篇文章能给大家带来一些启发,如果大家对文中讨论的内容有任何问题,欢迎扫描下方的二维码或者搜索 TonyCoding20 添加我的微信, 期待和大家的沟通!祝大家都能顺利通过面试,拿到理想的offer!