搜广推校招面经六十

soul推荐算法

一、word2vec原理

参考一篇文章入门Word2Vec

二、word2vec正负采样怎么做的、word2vec采用的loss和原理

见【搜广推校招面经四、搜广推校招面经五十二、搜广推校招面经五十七】

不太理解为啥问这么多word2vec,索性直接整理一遍。

三、多路召回融合方式

见【搜广推校招面经二十六】

多路召回(Multi-Recall)指的是在信息检索或推荐系统中,通过多种召回策略(例如基于内容的召回、基于协同过滤的召回等)获取候选集,然后将这些候选集进行融合,以提高整体的召回质量和准确性。融合的目标是将不同策略的优点结合起来,从而得到更高质量的最终推荐结果。

3.1. 加权融合(Weighted Fusion)

  • 加权融合方法是最常见的融合方式之一。在该方法中,为不同召回策略的候选集分配不同的权重,然后根据权重对各个召回结果进行加权平均,最后生成最终的候选集。
  • 公式:
    Final Rank ( i ) = ∑ j = 1 n w j ⋅ Rank j ( i ) \text{Final Rank}(i) = \sum_{j=1}^{n} w_j \cdot \text{Rank}_j(i) Final Rank(i)=j=1∑nwj⋅Rankj(i)
    其中:
    • w j w_j wj 是召回策略 j j j的权重。
    • Rank j ( i ) \text{Rank}_j(i) Rankj(i) 是策略 j j j 对候选项 i i i 的排名。
  • 优点: 简单有效,可以灵活调整各召回策略的权重。
  • 缺点: 需要手动调整权重,可能对不同场景不具有通用性。

3.2. 排序融合(Rank Fusion)

  • 排序融合方法将多个召回策略生成的候选集排序,并根据候选集的排序结果进行融合。常见的排序融合方法有 Borda Count 和 CombSUM 等。
    • Borda Count:为每个召回策略的候选集按顺序赋予分数,最后根据所有策略的排序分数合并得出最终的排序。
    • CombSUM:将多个召回策略生成的候选集的排名值相加,最后根据排名总和进行排序。
  • 优点: 不需要为每个召回策略设置权重,适应性强。
  • 缺点: 排名过程较为复杂,可能会引入排序上的噪声。

3. 基于模型的融合(Model-based Fusion)

  • 基于模型的融合方法通过训练一个模型来自动学习如何将多个召回策略的候选集进行合并。该模型通常使用机器学习算法(如逻辑回归、梯度提升树等)根据多个召回策略的结果预测最终的排序或评分。
  • 流程:
    1. 对每个召回策略生成候选集,并提取每个候选的特征。
    2. 使用机器学习算法训练一个融合模型,模型输入为各策略的候选集特征,输出为最终的排名或评分。
  • 优点: 自动化程度高,能够根据数据学习最优的融合策略。
  • 缺点: 训练过程需要大量数据和计算资源。

4. 覆盖度融合(Coverage Fusion)

  • 覆盖度融合方法通过比较不同召回策略的候选集,选取覆盖面更广的候选项,确保最终推荐的多样性和广度。通常在多个召回策略中选择不重复或较少重复的候选项,从而增加推荐的多样性。
  • 优点: 有助于提高候选集的多样性,减少过度集中在某一类别的情况。
  • 缺点: 可能会牺牲一些精确性,导致推荐的质量不如专注于某一召回策略时的效果。

5. 混合召回(Hybrid Recall)

  • 混合召回方法结合不同召回策略的优点,例如结合基于内容的召回与基于协同过滤的召回。在混合召回中,多个召回策略的结果可能会根据某种规则(例如共现规则、相似度阈值等)进行合并。
  • 优点: 可以通过结合多种召回策略来提高系统的推荐质量。
  • 缺点: 可能会导致召回结果过于复杂,增加计算复杂度。

6. 重排序(Re-ranking)

  • 重排序方法在多个召回策略生成候选集后,采用一个统一的模型对候选集进行重新排序。通常,重排序会引入额外的排序模型(如深度学习模型)来进一步提高最终候选集的精度。
  • 优点: 能进一步提高推荐结果的质量,尤其是在有多个召回来源的情况下。
  • 缺点: 增加了计算开销,训练重排序模型需要较长的时间和大量的数据。

7. 融合策略的组合(Meta-Learning Fusion)

  • 该方法结合了多种融合策略,如加权融合、排序融合、基于模型的融合等,形成一个元学习模型来学习最合适的融合策略。通常会根据任务和数据的特点选择最优的融合方式。
  • 优点: 高度灵活,能够自适应不同任务的需求。
  • 缺点: 需要大量的计算资源和数据来训练元学习模型。

四、5. 最长回文子串(力扣hot100_多维动态规划_中等)

  • 思路:做判断回文字串的任务,首先要知道一个算法叫Manacher算法,这个算法能在O(1)上判断子串是否为回文。
  • 如何判断为回文?
    • 暴力法:以每个字符i为中心,依次扩展hl,判断ti - hl == ti + hl
    • Manacher算法:通过添加一个if判断,将判断过程简化为O(1)
  • 代码:
python 复制代码
class Solution:
    def longestPalindrome(self, s: str) -> str:
        '''
        使用 Manacher模板,同时维护最大的halflen[i]对应的下标,最后返回最长回文子串的下标
        '''
        t = "#".join("^" + s + "$")
        half_len = [0]*(len(t)-2)  # half_len[i] 表示在 t 上的以 t[i] 为回文中心的最长回文子串的回文半径
        half_len[1] = 1

        box_m = 0  # 该回文子串的中心位置,二者的关系为 r=mid+half_len[mid]
        box_r = 0  # 表示当前右边界下标最大的回文子串的右边界下标+1, box_r=box_m+half_len[box_m]
        max_i = 0
        for i in range(2, len(half_len)):
            hl = 1
            if i < box_r:
                hl = min(half_len[box_m *2 -i],  box_r-i)
        
            while t[i-hl] == t[i+hl]:
                hl += 1
                box_m, box_r = i, i+hl
            half_len[i] =hl
            if hl > half_len[max_i]:
                max_i = i

        hl = half_len[max_i]
        return s[(max_i - hl) // 2: (max_i + hl) // 2 - 1]
相关推荐
u13013013 小时前
GitHub 热榜项目:周榜(2026-11-01)
人工智能·github
I Am a robert girl13 小时前
从 FlowAct-R2 拆解“会说话的数字人“:流式多模态参考与主动式 Agent 规划
python·数字人·多模态大模型·扩散transformer·流式生成·agent规划
lifallen13 小时前
ub-mode skill:软件工程原则
人工智能·学习·ai·软件工程·ai编程
Geek-Chow13 小时前
05.4 · DeepInfer 推理框架总览:源码结构、开源与未开源部分对照
人工智能
Flynn Liang13 小时前
Spring AI 多模态实战(下):文生图 + TTS 语音合成(含 2.0 流式音频分片)
人工智能·spring·文生图·音视频·语音合成·tts·springai
城南皮卡丘14 小时前
苹果果实成熟度检测数据集 4195张+YOLO格式
深度学习·yolo·目标检测·计算机视觉·数据集
长不大的杨瑞杰14 小时前
OpenCode v2 Custom Tools 实战:开发数据库、工单与发布工具
人工智能·typescript·开发工具·opencode·custom tools
羊仔AI探索14 小时前
离世仅仅半个月,张雪峰被蒸馏了
人工智能·aigc·蒸馏·张雪峰·skills
梯度下降者14 小时前
Python使用统计建模解决业务预测问题的常见操作步骤【教程】
python·可解释性·数据清洗·模型选择·业务预测
zhippt_101414 小时前
只剩截图没有源文件?图转PPT把图片还原成可编辑幻灯片
前端·人工智能·powerpoint