# 对比算法说明 本系统实验模块支持三种偏好学习/排序方法的对比。 **论文「实验评估 / 基线方法」扩写(与 IV 节结构对齐)见:** [`实验评估_IV节_基线与方法.md`](./实验评估_IV节_基线与方法.md) ## 1. 基线方法(Baseline) - **配置**: `config/config_baseline.yaml`,`stage3.use_contrastive: false`,不启用 `use_preference_weighted` - **原理**: 使用融合用户向量(LLM 意图向量 + 反馈向量的加权和)与模式嵌入的**余弦相似度**直接作为排序分数,无对比学习、无特征级偏好加权。 - **适用**: 作为基准,衡量“仅语义相似度”的排序效果。 ## 2. 对比学习方法(Contrastive) - **配置**: `config/config_contrastive.yaml`,`stage3.use_contrastive: true` - **原理**: 在基线融合向量的基础上,使用 **Triplet Loss / Cosine Triplet Loss** 训练 `PreferenceEncoder`,将模式嵌入投影到与用户偏好更一致的空间,用学习到的模型对模式打分并排序。 - **适用**: 利用“喜欢/不喜欢”反馈学习更细粒度的偏好表示,提升排序区分度。 ## 3. 偏好加权方法(Preference-Weighted,2025 风格) - **配置**: `config/config_preference_weighted.yaml`,`stage3.use_preference_weighted: true`,`stage3.use_contrastive: false` - **原理**: 在**与基线相同的相似度分数**基础上,引入**特征级偏好权重**,对每个模式计算 `score_final = score_similarity × preference_weight`。 其中 `preference_weight = 1 + (n_liked - n_disliked) / |pattern| × 0.5`,并裁剪到 `[0.5, 1.5]`。 即:模式中包含越多用户“喜欢”的特征、越少“不喜欢”的特征,权重越大,从而在**不训练新模型**的前提下,将语义相似度与显式偏好(liked/disliked 特征)进行**自适应融合**。 - **参考文献(2025)**: **"Personalized region of interest recommendation through adaptive fusion of multi-dimensional user preferences"** Journal of Big Data (2025). 该工作从多维度(时空、社交、类别等)建模用户偏好,并通过**自适应融合**得到个性化推荐。本实现将“多维偏好”简化为**语义相似度 + 特征级偏好(liked/disliked POI 类型)**的融合,与上述 2025 年“自适应融合多维用户偏好”的思路一致,适用于共现模式排序场景。 ## 如何运行三路对比 ```bash # 在项目根目录(或 memory 目录,保证能 import controller/experiment)下执行 python -m experiment.runner \ --baseline-config config/config_baseline.yaml \ --contrastive-config config/config_contrastive.yaml \ --preference-weighted-config config/config_preference_weighted.yaml \ --liked-features Restaurant Cafe \ --disliked-features Bank \ --top-k 5 \ --rounds 10 \ --output-dir results \ --sampling-strategy mixed ``` - 不传 `--preference-weighted-config` 时,仅运行基线 vs 对比学习(与原有行为一致)。 - 传入 `--preference-weighted-config` 后,会多跑一轮“偏好加权”实验,并输出 `metrics_preference_weighted.json`、`accuracy_preference_weighted.json`,并在终端和绘图中加入第三组曲线。 ## 绘图时包含第三种方法 ```bash python -m experiment.plotter \ --baseline results/metrics_baseline.json \ --contrastive results/metrics_contrastive.json \ --preference-weighted results/metrics_preference_weighted.json \ --output results/learning_curve_three.png # 绘制所有指标(含第三种方法) python -m experiment.plotter \ --baseline results/metrics_baseline.json \ --contrastive results/metrics_contrastive.json \ --preference-weighted results/metrics_preference_weighted.json \ --output results/all_metrics_three.png \ --all-metrics ``` ## 小结 | 方法 | 相似度计算 | 是否训练模型 | 特征级偏好 | 可引用方向 | |----------------|----------------|-------------|------------|----------------------| | Baseline | 余弦相似度 | 否 | 否 | 传统向量检索 | | Contrastive | 学习后的编码器 | 是(Triplet)| 隐式 | 对比学习偏好表示 | | Preference-Weighted | 余弦相似度 × 权重 | 否 | 是(liked/disliked) | 2025 自适应融合多维偏好 | 第三种算法为满足“增加 2025/2026 年对比算法”的要求,采用 2025 年“自适应融合多维用户偏好”的推荐思路,在共现模式排序中实现**语义相似度与特征级偏好的融合**,便于与基线、对比学习一起做三路实验与绘图。