【RS】OneRec快手-生成式推荐模型
note
本文提出了一种名为 OneRec 的统一生成式推荐框架,旨在替代传统的多阶段排序策略,通过一个端到端的生成模型直接生成推荐结果。OneRec 的主要贡献包括:
编码器-解码器结构:采用稀疏混合专家(MoE)架构扩展模型容量,提升对用户兴趣的建模能力。
会话式生成方法:与传统的逐点预测不同,OneRec 提出会话式生成方法,生成整个推荐列表,更好地捕捉上下文信息。
迭代偏好对齐模块:结合直接偏好优化(DPO),通过奖励模型(RM)生成偏好数据,优化生成结果。
实验表明,OneRec 在大规模工业数据集上显著优于传统方法,并在快手平台的在线 A/B 测试中实现了 1.6% 的观看时间提升。
文章目录
- note
- 一、相关背景
- Q: 这篇论文试图解决什么问题?
- Q: 有哪些相关研究?
- 二、OneRec模型
- 输入处理—多模态表征量化
- T5结构和Session粒度生成
- 1.编码器-解码器结构与模型扩展
- 2.会话式生成方法
- 3.迭代偏好对齐模块与直接偏好优化(DPO)
- 小结
- 三、实验部分
- 1. 离线性能比较实验
- 2. 消融实验
- 3. 在线 A/B 测试实验
- 4. 预测动态分析
- 四、未来方向
- 1. 多目标优化
- 2. 用户冷启动问题
- 3. 生成结果的多样性
- 4. 实时反馈机制
- 5. 模型可解释性
- 6. 跨领域推荐
- 7. 模型压缩与优化
- 8. 用户隐私保护
- Reference
一、相关背景
快手OneRec结合Scaling Law+DPO实现端到端推荐
快手3月份发表了一篇生成式推荐系统工作,将原来的召回->粗排->精排,替换成了端到端的生成式推荐。在模型的构建上,引入了MoE、DPO等LLM中经典有效的方法。
论文标题:OneRec: Unifying Retrieve and Rank with Generative Recommender and Preference Alignment
地址:https://arxiv.org/pdf/2502.18965
Q: 这篇论文试图解决什么问题?
A: 这篇论文试图解决现代推荐系统中传统多阶段排序策略(cascade ranking strategy)的局限性问题。具体而言,它旨在通过一个统一的生成式模型来替代现有的级联学习框架,以实现更高效、更准确的推荐结果。主要关注点包括:
- 多阶段排序的局限性:
- 现代推荐系统通常采用多阶段排序策略,包括召回(recall)、粗排(pre-ranking)和精排(ranking)三个阶段。每个阶段独立运作,前一阶段的性能上限限制了后续阶段的性能,从而限制了整个系统的性能。
- 传统的生成式模型在推荐系统中仅作为召回阶段的选择器,其推荐准确性尚未达到多阶段排序系统的水平。
- 生成式推荐系统的潜力:
- 最近,生成式检索推荐系统(Generative Retrieval-based recommendation systems, GRs)作为一种新兴范式,通过自回归方式直接生成候选视频,显示出巨大的潜力。然而,这些生成式模型目前仅在召回阶段发挥作用,未能充分发挥其潜力。
- 用户偏好对齐问题:
- 在自然语言处理(NLP)中,偏好学习通常依赖于人类明确标注的偏好数据。然而,在推荐系统中,用户与项目的交互数据稀疏,难以直接获得明确的偏好数据。因此,如何在推荐系统中有效地进行偏好学习是一个独特的挑战。
- 上下文信息的重要性:
- 传统的逐点预测方法(point-wise prediction)在生成推荐结果时,难以平衡连贯性和多样性。而会话式生成方法(session-wise generation)可以更好地捕捉用户在会话中的兴趣动态,生成更连贯、多样化的推荐列表。
综上所述,论文提出了一种名为 OneRec 的统一生成式推荐框架,旨在克服传统多阶段排序的局限性,通过会话式生成方法和偏好对齐策略,显著提升推荐系统的性能。
Q: 有哪些相关研究?
A: 这篇论文涉及了多个相关研究领域,主要包括生成式推荐系统、偏好对齐、特征工程、模型架构等方面。以下是详细的相关研究内容:
生成式推荐系统
- GENRE:首次采用Transformer架构进行实体检索,基于上下文条件以自回归方式生成实体名称。
- DSI:提出为文档分配结构化语义ID的概念,并训练编码器-解码器模型进行生成式文档检索。
- TIGER:引入生成式项目检索模型的公式,为推荐系统中的生成式检索奠定了基础。
- Recforest:利用层次化的k-means聚类对项目文本嵌入进行处理,以获得聚类索引作为语义ID。
- EAGER:探索将语义和协同信息整合到标记化过程中,以提升推荐效果。
偏好对齐
- RLHF:在大型语言模型(LLM)的后训练阶段,通过强化学习技术引导奖励模型来对齐人类价值观,但存在不稳定和低效的问题。
- DPO:提出直接偏好优化(DPO),通过偏好数据直接优化,避免了RLHF的不足。此外,还有多种DPO的变体,如IPO、cDPO、rDPO等,它们在不同方面对DPO进行了改进或扩展。
特征工程
- 多模态嵌入:使用多模态嵌入来描述视频,这些嵌入与真实的用户-项目行为分布对齐,以更准确地表示项目。
- 语义ID编码:采用残差量化(RQVAE)等技术将多模态嵌入编码为语义ID,但存在“沙漏现象”(hourglass phenomenon),即代码分布不平衡的问题。
模型架构
- MoE(Mixture-of-Experts):在Transformer架构中,MoE通过稀疏激活机制扩展模型容量,同时保持计算效率。例如,Deepseek MoE提出了一种新的MoE架构,旨在提高专家的特化程度。
- Transformer架构:广泛应用于自然语言处理任务,通过多头自注意力机制和前馈网络层来处理序列数据。在推荐系统中,Transformer架构也被用于建模用户的历史交互行为。
这些相关研究为OneRec的提出提供了理论基础和技术支持,使其能够在生成式推荐和偏好对齐方面取得显著进展。
二、OneRec模型
概括:构建一个Encoder-Decoder模型,Encoder输入用户的历史正向行为序列(使用多模态表征+离散化生成Token序列),Decoder生成一个session内的推荐item。这个Encoder-Decoder模型采用了MoE进行高效的参数量扩展。模型进行了2个阶段的训练,第一阶段采用基础的item预测任务,第二阶段采用DPO进行偏好对齐。
输入处理—多模态表征量化
OneRec模型的核心是根据用户带有正反馈行为的历史观看序列,生成下一个session的推荐item,这篇文章的场景对应的item是短视频。文中将短视频的多模态表征,通过量化的方式离散化成token序列,作为模型输入。
具体的离散化方法使用了QARM: Quantitative Alignment Multi-Modal Recommendation at Kuaishou(2024)这篇文章中的思路(如下图中间Quantitative Code部分)。设定了多级的codebook,每一级codebook对前一级的表征残差进行聚类,第一级就是多模态表征本身。聚类算法采用Balanced K-means,保证每个类簇包含的item数量相同。
文中采用了3级Codebook,对应每个视频被映射成3个token。将用户历史行为序列的每个短视频的3个token平铺到一个序列,每个短视频之间的token使用[SEP]进行分割,构成最终的输入token序列。
T5结构和Session粒度生成
OneRec整体模型结构类似T5,由一个Transformer Encoder和Transformer Decoder组成。将上述token序列输入到多层Transformer Encoder中,生成每个位置的编码结果。
在Decoder部分,采用Self-Attention+Cross-Attention的结构进行建模。其中Cross-Attention和Encoder每个位置输出的表征进行attention计算,融合Encoder表征信息。在Decoder部分,采用了MoE的结构,实现在单样本计算量增加较少的情况下提升模型参数空间,这也是目前LLM中常用的模型参数scaling up方法。
和之前生成模型中Next Item Prediction任务不同的是,OneRec采用了Session维度的预测,即每条样本需要预测一个Session内的item。由于在推荐阶段就是session粒度推荐的,这样建模能让模型更好的获取到一个session内的上下文信息。此外,由于前面将每个短视频映射成了多级token,这一步也会预测多级token。假设一个session需要预测N个item,有K层级的token,那么Decoder就需要预测N*K个token。每个item的token之间使用[BOS]特殊符号进行分割。
论文提出了一种名为 OneRec 的统一生成式推荐框架,通过以下三个关键方法来解决传统多阶段排序策略的局限性问题:
1.编码器-解码器结构与模型扩展
- 模型架构:OneRec 采用编码器-解码器结构,编码器对用户的历史行为序列进行编码,解码器逐步解码出用户可能感兴趣的视频。
- 模型扩展:借鉴大规模语言模型的扩展规律,OneRec 使用稀疏混合专家(Mixture-of-Experts, MoE)架构来扩展模型容量,而不会成比例增加计算量。具体来说,通过在解码器中引入MoE层,每个前馈网络(Feed-Forward Network, FNN)被替换为多个专家网络,并通过稀疏门控机制选择部分专家进行计算。这种设计在保持计算效率的同时,显著提升了模型对用户兴趣的建模能力。
2.会话式生成方法
- 传统方法的局限性:传统的逐点预测方法(point-wise prediction)在生成推荐结果时,需要手工策略来确保生成结果的连贯性和多样性,这限制了模型的性能。
- 会话式生成:OneRec 提出会话式生成方法(session-wise generation),将用户的一次请求视为一个会话,目标是生成一个高质量的视频列表,而不是逐个生成下一个视频。这种方法允许模型自主学习最优的会话结构,通过提供偏好数据来训练模型,从而更好地捕捉用户在会话中的兴趣动态。
- 高质量会话的定义:为了训练会话式生成模型,论文定义了高质量会话的标准,例如用户实际观看的视频数量、观看时长以及用户与视频的交互行为(如点赞、收藏、分享等)。这些标准确保模型从真实的用户行为模式中学习,从而生成更符合用户兴趣的推荐列表。
3.迭代偏好对齐模块与直接偏好优化(DPO)
- 偏好对齐的挑战:在推荐系统中,用户与项目的交互数据稀疏,难以直接获得明确的偏好数据。因此,传统的偏好学习方法(如NLP中的DPO)难以直接应用于推荐系统。
- 奖励模型(Reward Model, RM):为了解决这一问题,论文设计了一个奖励模型(RM),该模型根据用户的行为和生成的会话来评估用户的偏好。RM通过自注意力机制融合会话中不同项目的信息,并通过多目标预测来估计用户对会话的偏好。
- 迭代偏好对齐(Iterative Preference Alignment, IPA):基于预训练的RM和当前的OneRec模型,通过beam search生成多个响应,并根据RM的评分选择最佳和最差的响应,构建偏好对。然后,使用这些偏好对进行DPO训练,以优化模型的生成结果。这种迭代过程允许模型不断自我改进,逐步提高生成结果的质量。
为了进一步让生成式推荐的效果更符合用户需求,同时也引入观看时长等监督指标,OneRec进一步采用LLM中的DPO思路进行偏好对齐(IPA)。DPO的核心思路是构建不同偏好好坏的样本pair对,要求模型对于其中满足偏好的样本的打分序高于不满足偏好的样本打分序。
首先需要训练一个奖励模型,用来评估每条session序列是否满足用户偏好。这里使用推荐系统的关注目标,如观看时长、点击率等作为目标,训练一个预测模型作为奖励模型。奖励模型可以给出一个session序列的观看时长等指标的预测结果。模型结构主要采用self-attention。
接下来,通过beamsearch的方式,为一个用户生成多个session推荐序列,并使用奖励模型进行打分。从中选出打分最高的和打分最差的,作为pair对,并使用DPO进行训练。基于DPO在上一步训练好的模型上进一步训练,得到最终的模型。
小结
总结:通过上述三个关键方法,OneRec 实现了从传统多阶段排序到统一生成式模型的转变,显著提升了推荐系统的性能。具体来说:
- 编码器-解码器结构与MoE扩展:提高了模型对用户兴趣的建模能力,同时保持了计算效率。
- 会话式生成方法:更好地捕捉了用户在会话中的兴趣动态,生成更连贯、多样化的推荐列表。
- 迭代偏好对齐与DPO:通过奖励模型和偏好对齐,优化了生成结果的质量,使其更符合用户的偏好。
这些方法的结合使得OneRec在大规模工业数据集上取得了显著的性能提升,并在实际应用中实现了可观的业务增长。
三、实验部分
Q: 论文做了哪些实验?
A: 论文中进行了以下几类实验来验证 OneRec 的性能和有效性:
1. 离线性能比较实验
实验目的:比较 OneRec 与传统的逐点方法、列表方法以及偏好对齐方法在推荐性能上的差异。
实验设置:
数据集:使用大规模工业数据集。
基线方法:包括 SASRec、BERT4Rec、FDSA 和 TIGER 等逐点方法,以及 DPO 及其变体(如 IPO、cDPO、rDPO、CPO、simPO 和 S-DPO)。
评估指标:使用观看时间(swt)、观看概率(vtr)、关注概率(wtr)和点赞概率(ltr)等指标来评估模型性能。
实验结果:
OneRec 在会话观看时间(swt)和点赞概率(ltr)等关键指标上显著优于传统的逐点方法和 TIGER 等生成式方法。
仅使用 1% 的 DPO 训练数据,OneRec-1B+IPA 在最大 swt 和最大 ltr 上分别比基础 OneRec-1B 提高了 4.04% 和 5.43%。
OneRec 提出的 IPA 策略在偏好对齐方面优于现有的 DPO 变体。
2. 消融实验
实验目的:验证 OneRec 中各个模块的有效性,特别是 DPO 样本比例和模型规模对性能的影响。
实验设置:
DPO 样本比例消融实验:改变 DPO 训练中的样本比例(从 1% 到 5%),观察模型性能的变化。
模型规模消融实验:评估不同模型规模(从 0.05B 到 1B 参数)对 OneRec 性能的影响。
实验结果:
DPO 样本比例消融实验:发现 1% 的 DPO 样本比例已经能够带来显著的性能提升,而进一步增加样本比例对性能的提升有限,但计算成本显著增加。
模型规模消融实验:随着模型规模的增加,OneRec 的性能持续提升,表明模型扩展对于提升推荐性能是有效的。
3. 在线 A/B 测试实验
实验目的:评估 OneRec 在实际工业场景中的在线性能。
实验设置:
平台:在快手(Kuaishou)的短视频推荐平台进行 A/B 测试。
流量分配:使用 1% 的主流量进行实验。
基线系统:与当前的多阶段推荐系统进行比较。
评估指标:使用总观看时间和平均观看时长来衡量用户对推荐结果的接受程度。
实验结果:
OneRec 在总观看时间上实现了 1.68% 的提升,在平均观看时长上实现了 6.56% 的提升,表明 OneRec 能够提供更优质的推荐结果,并为平台带来显著的业务增长。
4. 预测动态分析
实验目的:分析 OneRec 在不同层的预测分布,以验证偏好对齐策略的效果。
实验设置:
可视化方法:对每个层的语义 ID 的 softmax 输出进行可视化,标记出具有最高奖励值的项目的语义 ID。
实验结果:
OneRec+IPA 在预测分布上显示出显著的置信度变化,表明偏好对齐策略有效地促使基础模型生成更符合用户偏好的结果。
第一层的预测分布显示出更高的不确定性(熵为 6.00),而后续层的分布逐渐集中(第二层平均熵为 3.71,第三层熵为 0.048),这归因于自回归解码机制,后续层受益于累积的上下文信息,从而约束了决策空间。
通过这些实验,论文全面验证了 OneRec 在离线和在线环境中的性能,以及各个模块对模型性能的贡献。
四、未来方向
Q: 有什么可以进一步探索的点?
A: 尽管 OneRec 在生成式推荐系统方面取得了显著的进展,但仍有一些可以进一步探索和改进的方向:
1. 多目标优化
问题:当前的 OneRec 主要关注观看时间(swt)和交互指标(如点赞概率 ltr),但在实际应用中,推荐系统可能需要同时优化多个目标,例如用户留存率、新用户获取、内容多样性等。
探索方向:
多目标优化框架:设计一个能够同时优化多个目标的框架,例如通过多任务学习(Multi-Task Learning, MTL)或强化学习(Reinforcement Learning, RL)来平衡不同目标之间的关系。
动态权重调整:根据不同的业务需求和用户行为动态调整各个目标的权重,以实现更灵活的推荐策略。
2. 用户冷启动问题
问题:对于新用户或历史行为数据较少的用户,OneRec 的性能可能会受到限制,因为模型难以从有限的数据中准确建模用户兴趣。
探索方向:
冷启动策略:探索有效的冷启动策略,例如利用用户的基本属性(如年龄、性别、地理位置等)或引入外部知识图谱来辅助建模。
零样本学习:研究零样本学习(Zero-Shot Learning, ZSL)或少样本学习(Few-Shot Learning, FSL)技术,以提高模型对新用户的适应能力。
3. 生成结果的多样性
问题:虽然 OneRec 在会话式生成中考虑了上下文信息,但在某些情况下,生成的推荐结果可能仍然缺乏多样性。
探索方向:
多样性增强技术:引入多样性增强技术,如通过正则化方法、引入噪声或使用不同的解码策略(如 Top-K Sampling、Nucleus Sampling)来增加生成结果的多样性。
多模态信息融合:进一步融合多模态信息(如文本、图像、音频等),以更全面地捕捉用户兴趣,从而生成更多样化的推荐结果。
4. 实时反馈机制
问题:在实际应用中,用户的兴趣可能会快速变化,而 OneRec 的当前实现可能无法及时捕捉这些变化。
探索方向:
实时反馈学习:设计实时反馈机制,使模型能够根据用户的即时反馈(如点击、停留时间、滑动行为等)快速调整推荐结果。
在线学习算法:研究在线学习算法,如增量学习(Incremental Learning)或持续学习(Continual Learning),以提高模型对用户兴趣变化的适应能力。
5. 模型可解释性
问题:OneRec 作为一个复杂的生成式模型,其推荐结果的可解释性可能有限,这在某些应用场景中是一个重要的问题。
探索方向:
可解释性技术:引入可解释性技术,如特征重要性分析、注意力机制可视化或生成式对抗网络(GANs)中的解释性方法,以提高模型的透明度。
用户反馈解释:设计机制让用户能够理解推荐结果的依据,并通过用户反馈进一步优化模型的可解释性。
6. 跨领域推荐
问题:OneRec 目前主要应用于短视频推荐,但在其他领域(如电商、音乐、新闻等)的应用潜力尚未充分挖掘。
探索方向:
跨领域适应性:研究 OneRec 在不同领域的适应性,探索如何调整模型架构和训练策略以适应不同领域的特点。
领域迁移学习:利用迁移学习技术,将在一个领域学到的知识迁移到其他领域,以提高模型的泛化能力。
7. 模型压缩与优化
问题:尽管 MoE 架构提高了模型的计算效率,但随着模型规模的进一步扩大,模型的存储和计算成本仍然是一个挑战。
探索方向:
模型压缩技术:研究模型压缩技术,如量化(Quantization)、剪枝(Pruning)和知识蒸馏(Knowledge Distillation),以进一步降低模型的存储和计算需求。
高效推理算法:开发高效的推理算法,如稀疏激活机制的优化和并行计算技术,以提高模型的在线推理速度。
8. 用户隐私保护
问题:在处理用户数据时,保护用户隐私是一个重要的问题,尤其是在模型需要大量用户行为数据进行训练的情况下。
探索方向:
隐私保护技术:引入隐私保护技术,如差分隐私(Differential Privacy)或同态加密(Homomorphic Encryption),以确保用户数据的安全性和隐私性。
联邦学习:研究联邦学习(Federated Learning)技术,使模型能够在不直接访问用户数据的情况下进行训练,从而保护用户隐私。
Reference
[1] https://arxiv.org/pdf/2502.18965
[2] QARM: Quantitative Alignment Multi-Modal Recommendation at Kuaishou(2024)
相关文章:
【RS】OneRec快手-生成式推荐模型
note 本文提出了一种名为 OneRec 的统一生成式推荐框架,旨在替代传统的多阶段排序策略,通过一个端到端的生成模型直接生成推荐结果。OneRec 的主要贡献包括: 编码器-解码器结构:采用稀疏混合专家(MoE)架构…...
DQN 玩 2048 实战|第一期!搭建游戏环境(附 PyGame 可视化源码)
视频讲解: DQN 玩 2048 实战|第一期!搭建游戏环境(附 PyGame 可视化源码) 代码仓库:GitHub - LitchiCheng/DRL-learning: 深度强化学习 2048游戏介绍,引用维基百科 《2048》在44的网格上进行。…...
练习题:87
目录 Python题目 题目 题目分析 代码实现 代码解释 列表推导式部分: 变量赋值和输出: 运行思路 结束语 Python题目 题目 使用列表推导式生成一个包含 1 到 100 中所有偶数的列表。 题目分析 本题要求使用 Python 的列表推导式生成一个包含 …...
二叉树的层序遍历(102)
102. 二叉树的层序遍历 - 力扣(LeetCode) 解法: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …...
NVMe集群:加速数据处理
随着大数据和云计算的快速发展,企业面临着前所未有的数据处理挑战。传统的存储技术和架构已经难以满足现代应用对高性能和低延迟的需求。在这种背景下,NVMe(Non-Volatile Memory Express)集群应运而生,它以其卓越的性能…...
JUC并发编程:共享模型之管程
一、共享带来的问题 (1)Java的体现 两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? (2)问题分析 以上的结果可能是正数、负数、零。为什么呢…...
Java构造方法详解:从入门到实战
目录 一、什么是构造方法? 二、构造方法的作用 三、构造方法分类与使用 1. 默认构造方法 2. 有参构造方法 3. 构造方法重载 四、注意事项(避坑指南) 五、经典面试题解析 六、实战应用场景 七、总结 一、什么是构造方法? …...
Uniapp 字体加载问题(文件本地存储)
项目场景: 在最近公司开发一款小程序,但是小程序的文字需要用艺术字,就是那种不能用切图绕开的那种! 问题描述 我们在使用uni.loadfontface Api请求数据字体文件的时候总是会报错,就是那种网上也找不到解决方法的那种…...
HTML 新手入门:从零基础到搭建第一个静态页面(一)
开启 HTML 学习之旅 在互联网的广袤世界中,网页是我们与信息交互的主要窗口。而 HTML,作为构建网页的基石,就像是搭建房屋的砖块,是网页开发中不可或缺的基础。无论你是对网页开发充满好奇的小白,还是渴望系统学习前端…...
使用multiprocessing实现进程间共享内存
在 Python 中,可以使用多种方法来实现几个进程之间的通信。 简单消息传递:使用 multiprocessing.Queue 或 multiprocessing.Pipe。 共享简单数据:使用 multiprocessing.Value 或 multiprocessing.Array。 共享复杂数据:使用 multiprocessing.Manager。 进程间信号控制:使用…...
在IDEA中连接达梦数据库:详细配置指南
达梦数据库(DM Database)作为国产关系型数据库的代表,广泛应用于企业级系统开发。本文将详细介绍如何在IntelliJ IDEA中配置并连接达梦数据库,助力开发者高效完成数据库开发工作。 准备工作 1. 下载达梦JDBC驱动 访问达梦官方资…...
docker无法正常拉取镜像问题的解决
目录 1.前言 2.解决方案 1.前言 安装docker后拉取镜像,遇见了如下问题: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded whil…...
如何在保持安全/合规的同时更快地构建应用程序:DevOps 指南
随着敏捷思维方式的兴起,开发和 DevOps 团队都面临着持续的压力,他们需要以迭代方式缩短发布周期并加快部署速度,以满足不断增长的客户期望。随着这种对速度的追求越来越强烈,维护安全性和合规性标准的复杂性也随之增加。 当今 D…...
SQL Server查询优化
最常用,最有效的数据库优化方式 查询语句层面 避免全表扫描 使用索引:确保查询条件中的字段有索引。例如,查询语句 SELECT * FROM users WHERE age > 20,若 age 字段有索引,数据库会利用索引快速定位符合条件的记…...
iOS底层原理系列04-并发编程
在移动应用开发中,流畅的用户体验至关重要,而并发编程是实现这一目标的关键技术。本文将深入探讨iOS平台上的并发编程和多线程架构,帮助你构建高性能、响应迅速的应用程序。 1. iOS线程调度机制 1.1 线程本质和iOS线程调度机制 线程是操作…...
企业数字化转型数据治理解决方案(119页PPT)(文末有下载方式)
资料解读:企业数字化转型数据治理解决方案 详细资料请看本解读文章的最后内容。 在当今数字化时代,数据已经成为企业最宝贵的资产之一。然而,随着数据量的激增和数据来源的多样化,如何有效管理和利用这些数据成为了企业面临的一…...
git报错:“fatal:refusing to merge unrelated histories“
新建仓库,克隆本地项目到新仓库,首次同步本地已提交的代码到远程时,报错:"fatal:refusing to merge unrelated histories" 。 报错意思是:致命的:拒绝合并无关的历史。 一、问题背景ÿ…...
Jmeter下载及环境配置
Jmeter下载及环境配置 java环境变量配置配置jdk环境变量检查是否配置成功JMeter下载 java环境变量配置 访问地址: https://www.oracle.com/cn/java/technologies/downloads/ 注意:需要自己注册账号 下载完成,解压后的目录为: …...
K8S学习之基础二十四:k8s的持久化存储之pv和pvc
K8S的存储之pv和pvc 在 Kubernetes (k8s) 中,持久化存储是通过 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来实现的。PVC 是用户对存储资源的请求,而 PV 是集群中的实际存储资源。PVC 和 PV 的关系类似于 Pod 和 Node 的关系。 Persisten…...
1.5、Java构造方法重载
构造方法重载的实现 (1)定义多个构造方法 class Person {private String name;private int age;// 无参构造方法public Person() {this.name "Unknown";this.age 0;}// 带一个参数的构造方法public Person(String name) {this.name name;…...
领域驱动设计(DDD)技术分享:从三层架构到DDD的进化之旅
一、开篇话:我们为什么要聊DDD? 如果你像我一样有着Java开发背景,那Spring的三层架构可能是你的老朋友了。Controller-Service-DAO这种模式简直就像我们编程的"家常便饭"。但是,随着业务越来越复杂,你是否也…...
LeetCode - #227 基于 Swift 实现基本计算器
摘要 在这篇文章中,我们将实现一个基于 Swift 语言的基本计算器。该计算器能够解析和计算包含 、-、* 和 / 的数学表达式,并且遵循运算符的优先级规则。整数除法仅保留整数部分,不能使用 eval() 这样的内置解析方法。 描述 给你一个字符串表…...
Elasticsearch Java High Level Client [7.17] 使用
es 的 HighLevelClient存在es源代码的引用,结合springboot使用时,会存在es版本的冲突,这里记录下解决冲突和使用方式(es已经不建议使用这个了)。 注意es服务端的版本需要与client的版本对齐,否则返回数据可…...
[多线程]基于环形队列(RingQueue)的生产者-消费者模型的实现
标题:[多线程]基于环形队列(RingQueue)的生产者-消费者模型 水墨不写bug 一、模型实现 接下来我们要实现一个基于环形队列(RingQueue)的生产者-消费者模型。该模型使用信号量和互斥锁来保证生产者和消费者之间的同步与…...
HAL库STM32常用外设—— CAN通信(一)
文章目录 一、CAN是什么?1.1 CAN应用场景1.2 CAN通信优势 二、CAN基础知识介绍2.1 CAN总线结构2.2 CAN总线特点2.2.1 CAN总线的数据传输特点2.2.2 位时序和波特率 2.3 CAN位时序和波特率2.3 CAN物理层2.3.1 CAN 物理层特性2.3.2 CAN 收发器芯片介绍 2.4 CAN协议层2.…...
分页查询的实现
目录 前言 一.问题描述 二.后端实现步骤 2.1配置PageHelper插件 ①导入依赖 ②在application.yml配置文件中添加相关配置 2.2编写一个入门的程序,体验分页过程 2.3定义一个vo,用来收集分页后的所有信息 2.4修改serviceImpl层的代码 2.5动态设…...
Sourcetree——使用.gitignore忽略文件或者文件夹
一、为何需要文件忽略机制? 1.1 为什么要会略? 对于开发者而言,明智地选择忽略某些文件类型,能带来三大核心优势: 仓库纯净性:避免二进制文件、编译产物等污染代码库 安全防护:防止敏感信息&…...
Thinkphp的belongsToMany(多对多) 和 hasManyThrough(远程一对多)的区别是什么?
虽然 belongsToMany(多对多) 和 hasManyThrough(远程一对多) 都会使用 JOIN 查询,但它们的核心区别在于 关联关系的本质不同,具体如下: 1️⃣ belongsToMany(多对多) &a…...
DataWhale 大语言模型 - 大模型技术基础
本课程围绕中国人民大学高瓴人工智能学院赵鑫教授团队出品的《大语言模型》书籍展开,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的核心技术。并且,课程…...
Docker+Flask 实战:打造高并发微服务架构
DockerFlask 实战:打造高并发微服务架构 今天我们要深入探讨一个非常热门且实用的主题:基于 Docker 部署 Python Flask 应用。Docker 作为当下最流行的容器化技术,已经广泛应用于各种开发和部署场景,尤其是在微服务架构中。而 Fl…...
前端跨域如何调试,以及相关概念梳理【环境变量 本地代理 正向代理 反向代理 OPTIONS请求 CDN 等】
跨域报错 一 前端日常开发时,项目的部署地址和接口请求的地址一般是同源的,不会跨域。 例如项目的测试环境部署在https://my-dev.BeatingWorldLine.com/xxx, 测试环境的访问接口域名也要相同来保证不跨域https://my-dev.BeatingWorldLine.com/api/xxx, …...
【区块链】以太坊
学习视频源链接: https://www.bilibili.com/video/BV1Vt411X7JF/ 本文是根据肖老师的视频进行的笔记记录 bitcoin 1.0 区块链 以太坊 2.0区块链 以太坊 设置了 memory hard mining puzzle ,这造成了asic resistance, 后续 proof of work &a…...
MCU的工作原理:嵌入式系统的控制核心
MCU的工作原理可以概括为以下几个步骤: 1. 初始化 上电后,MCU从Flash存储器中加载程序代码,并初始化外设和寄存器。 2. 任务执行 根据程序逻辑,MCU执行数据处理、外设控制和通信等任务。通过中断系统实时响应外部事件。 3. 低…...
离线服务器ollama新增qwen2:0.5b模型
离线服务器ollama新增qwen2:0.5b模型 Dify集成ollama前面已经介绍过离线服务器CentOS使用的docker安装的ollama,其中在ollama中已经安装了deepseek-r1:1.5b。目前的需求是需要再安装一个qwen2:0.5b的模型,那么如何安装呢? 1.首先在有网的服…...
Ubuntu20.04安装运行DynaSLAM
目录 一、安装Anaconda 二、相关依赖库安装 1、boost安装 2、Eigen 3安装 3、opencv安装 4、Pangolin安装 三、配置Mask_RCNN环境 四、DynaSLAM编译 五、DynaSLAM运行 一、安装Anaconda 打开以下链接: Index of / 下载和自己系统匹配的安装包。这里下…...
Apache Shiro反序列化漏洞深度剖析:从原理到利用
引言 在Web安全的世界里,反序列化漏洞一直是最危险的漏洞类型之一。今天,我们将深入探讨Apache Shiro框架中的两个著名反序列化漏洞.通过通俗易懂的解释和详细的实例,帮助你理解这类漏洞的本质和危害。 Shiro框架与"记住我"功能简…...
Android UI 组件系列(二):Button 进阶用法
引言 在上一篇博客中,我们介绍了 Button 的基本用法和常见属性,掌握了 Button 的基础知识。然而,在实际开发中,Button 远不止于简单的点击功能,它还可以支持不同的变体、丰富的自定义样式,以及更灵活的状态…...
CentOS-7安装Docker(更新时间:2025-03-12)
CentOS-7安装Docker 该文章记录在CentOS 7上安装Docker的过程和步骤,以及在安装过程中遇到的困难和解决方案。 目录 CentOS-7安装Docker一、环境准备二、安装Docker1.验证服务器是否接入互联网2. 检查CentOS内核版本3.使用root权限登录CentOS。确保yum包更新到最新…...
网络空间安全(31)安全巡检
一、定义与目的 定义: 安全巡检是指由专业人员或特定部门负责,对各类设施、设备、环境等进行全面或重点检查,及时发现潜在的安全隐患或问题。 目的: 预防事故发生:通过定期的安全巡检,及时发现并解决潜在的…...
Kubernetes学习笔记-移除Nacos迁移至K8s
项目服务的配置管理和服务注册发现由原先的Nacos全面迁移到Kubernetes上。 一、移除Nacos 移除Nacos组件依赖。 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <…...
Docker 构建 nginx-redis-alpine 项目详解
Docker 构建 nginx-redis-alpine 项目详解 一、课程概述 嘿,朋友们!今天咱们要深入探索一个超级实用的项目 ——nginx-redis-alpine!这个项目可不简单,它包含了好多重要的知识点,像文件目录结构、核心文件的作用及配…...
【教学类-43-26】20240312 数独4宫格的所有可能(图片版 576套样式,空1格-空8格,每套65534张*576小图=3千万张小图)
背景需求: 之前做了三宫格所有可能图片 510小图*12套6120图,所以3分钟就生成了 【教学类-43-25】20240311 数独3宫格的所有可能(图片版 12套样式,空1格-空8格,每套510张,共6120小图)-CSDN博客…...
ChromeOS 134 版本更新
ChromeOS 134 版本更新 一、ChromeOS 134 更新内容 1. ChromeOS 自助终端(Kiosk)模式支持隔离 Web 应用(Isolated Web Apps) 从 ChromeOS 134 开始,自助终端(Kiosk)模式支持 隔离 Web 应用&a…...
Redis面试篇
目录 Redis面试篇 1.什么是Redis?作用是什么? 2.什么是缓存穿透、缓存击穿、缓存雪崩 2.1缓存穿透 2.2缓存击穿 2.3缓存雪崩 3.redis如何持久化 1. RDB(快照存储) 2. AOF(追加日志) 4.Redis 的过…...
C#中通过Response.Headers设置自定义参数
一、基础设置方法 1. 直接添加自定义头 // ASP.NET Core方案 Response.Headers.Append("X-API-Version", "2.3.1"); Response.Headers.Append("Custom-Auth-Token", Guid.NewGuid().ToString());• 底层原理:通过IHeaderDictionary…...
C++标准模板库学习--函数模板返回值参数类型
template<typename T1, typename T2> 2 T1 max (T1 a, T2 b) 3 { 4 return b < a ? a : b; 5 } 6 ... 7 auto m ::max(4, 7.2); // OK, 不过返回类型与第一个参数类型一样 如何解决模板的返回类型 法一,使用decltype进行类型推断,在编译时…...
BUG修复 | 一次钉钉工作台应用远程调试实战(开发者工具)
#1 ℹ️背景故事 最近用户反馈,钉钉工作台的应用无法正常使用,卡在自动登录页面。 天,这是运行10年的老程序😱,我当时真是吓得不轻。这老古董完全不记得怎么改了😂。 #2 🐞开启远程调试 钉钉…...
[目标检测] 训练之前要做什么
背景:训练一个Yolo8模型,在训练之前,数据集的处理是影响效果的关键因素。 Step1 定义规则 什么是人/车,比如人的话可能是站着的人,如果是骑电动车/自行车就不算是人。 Step2 收集数据集 1. 自己标注。如果是自己标…...
一窥DeepSeek开源EPLB项目:揭开技术背后的面纱
摘要 在DeepSeek开源DualPipe项目的同一天,EPLB项目也正式对外公开。EPLB(Enhanced Pipeline Balancing)并非一蹴而就的奇迹,而是经过长时间的研发与优化。该项目旨在通过改进管道平衡机制,提升系统的稳定性和效率。本…...
达梦数据库中插入导出图片的方法与应用
达梦数据库中插入导出图片的方法与应用 在数据库的实际应用场景中,图片存储是一项常见且重要的需求。以电商平台为例,商品展示图片是吸引消费者的关键元素;而在社交软件里,用户头像更是个人形象的直观体现。针对达梦数据库&#…...