序列推荐算法概述

序列模型

在推荐场景中,用户的兴趣是非常难以挖掘的,而用户与物品的交互序列中蕴含着丰富的信息,如何从序列中发掘用户的兴趣成为一个急需研究的方面。例如用户先购买了手机,随后可能会购买手机配件、例如手机膜、手机壳、耳机等。因此序列推荐模型成为研究的一个主要方面。之前的研究重点主要有两个方面

  1. Markov Chains (MCs):马尔可夫链的假设是,用户下一个购买的意图主要与前一个(first-order)或者前几个(higher-order)购买的物品有关。该类方法在稀疏数据集上表现较好[1]
  2. Recurrent Neural Networks (RNNs):循环神经网络的假设是,用户的下一个购买意图可能与时间间隔很远的购买物品有关。主要发掘长项依赖(long-term sequential dependencies)。但是这种方法可能会导致梯度消失。该类方法可能需要较为稠密的数据集。

当前主流的深度学习序列推荐模型有

  1. SasRec:Self-Attentive Sequential Recommendation 希望缓解上述两种方法各自的弊端。使用自注意力机制来发掘历史记录中的相关物品,既要“看到”的范围尽可能大,同时,真正使用的物品数量又尽可能少。
    在这里插入图片描述
  2. GRU4Rec:使用Gated Recurrent Units (GRU) 来对序列建模。
  3. Convolutional Sequence Embedding(Caser): 一种基于CNN的方法,将过去的L个物品的embedding矩阵看作一个“图像”,从广义的角度也属于high-order MCs。
  4. BERT4Rec

以上的序列推荐模型仅仅使用用户和物品的ID信息,主要区别在于对物品的ID序列如何建模,即序列编码器的区别。当然,上述模型后续也有一些变体,考虑到物品的其他属性信息。
但是序列推荐模型存在一些问题。

  1. 例如用户的交互记录中,不是所有的物品都对下一个交互物品存在作用,用户可能存在一些误点击或者点击后发现不喜欢的现象。对于该类问题,需要发掘出历史序列中与当前物品相关的物品,忽略不相关的物品。例如Attention-based方法,对不同的item分配不同的权重,或者是动态跳过一些物品,例如DyS4Rec[3],采用强化学习的手段,对交互记录中不相关的物品进行跳过,并使用LSTM进行建模。
  2. 序列推荐模型没有利用丰富的物品属性信息。该类方法比较成熟,主要将物品的其他特征进行embedding,并与ID特征进行交叉。例如Nova,将ID类型的特征单独取出,与物品的其他特征相分隔,避免了decode时带来的噪声[2]
    在这里插入图片描述
    。新的方法名简称例如SasRecF、GRU4RecF等等,可以参考伯乐框架的实现[4].
  3. 用户终身行为序列建模:可以关注上交的Weinan Zhang教授的研究方向。
  4. 缺少真实世界知识:这个方向主要与大模型进行结合,也是当前非常热门的一个研究领域。

参考内容

[1] He, Ruining, et al. “Translation-Based Recommendation.” Proceedings of the Eleventh ACM Conference on Recommender Systems, 2017, https://doi.org/10.1145/3109859.3109882.
[2] Liu, Chang, et al. “Non-Invasive Self-Attention for Side Information Fusion in Sequential Recommendation.” Proceedings of the AAAI Conference on Artificial Intelligence, Sept. 2022, pp. 4249–56, https://doi.org/10.1609/aaai.v35i5.16549.
[3] Cheng, Yu, et al. “Sequential recommendation via agent-based irrelevancy skipping.” Neural Networks (2025): 107134.
[4] https://recbole.io/docs/user_guide/model_intro.html#sequential-recommendation

本文是基于Datawhale推荐算法组队学习教程进行细化。https://github.com/datawhalechina/fun-rec

### 序列密码算法概述 序列密码算法是一种对称加密方法,其核心在于通过伪随机数生成器(PRNG)产生密钥流。这种密钥流随后与明文数据逐位进行按位异或运算来完成加密过程[^1]。 #### RC4算法的具体实现原理 RC4是一个典型的序列密码算法实例。它的主要特点包括支持可变长度的密钥以及面向字节的操作模式。该算法的核心组件是一张大小固定的置换表 \( S \),初始状态下按照特定的方式填充并经过一系列复杂的非线性变换以确保安全性。 在实际运行过程中,RC4分为两个阶段:初始化阶段和生成密钥流阶段。前者负责构建上述提到的\( S \)-box;后者则利用这个已经准备好的盒子不断提取新的字节作为当前时刻对应的密钥部分。 以下是简化版Python代码展示如何模拟这一机制: ```python def KSA(key): key_length = len(key) S = list(range(256)) j = 0 for i in range(256): j = (j + S[i] + key[i % key_length]) % 256 S[i], S[j] = S[j], S[i] return S def PRGA(S): i = j = 0 while True: i = (i + 1) % 256 j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] t = (S[i] + S[j]) % 256 yield S[t] def encrypt_rc4(plaintext, key): from itertools import zip_longest S = KSA([ord(c) for c in key]) keystream = PRGA(S) ciphertext = ''.join(chr(ord(p)^next(keystream)) for p in plaintext) return ciphertext # Example Usage key = 'SecretKey' message = 'HelloWorld' encrypted_message = encrypt_rc4(message, key) print(f'Encrypted Message: {encrypted_message}') ``` 此脚本定义了一个简单的函数用于演示基本概念,并不适用于生产环境下的高强度需求场景下应用。 对于更高级别的应用场景比如语音通信领域内的实时加解密任务,则可能需要引入额外的技术手段如混沌理论配合传统加密标准(AES)[^2]共同作用才能达到理想效果。 ### 结论 综上所述,序列密码因其高效性和较低资源消耗特性,在许多场合都扮演着重要角色。然而需要注意的是现代计算能力增长迅速使得某些古老设计面临挑战因此持续改进至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值