要计算用户或物品之间的相似度,最常见的方法是分析交互模式或基于特征的表示。 对于用户相似度,这通常意味着比较用户与物品的交互方式(例如,评分、点击、购买)。 对于物品相似度,这涉及比较用户与物品的交互方式或分析其固有属性。 核心思想是根据共享行为或特征来量化两个用户或物品的对齐程度。
一种广泛使用的方法是余弦相似度,它测量表示用户偏好或物品属性的向量之间的角度。 例如,在用户-物品评分矩阵中,每个用户都表示为他们对物品的评分的向量。 余弦相似度计算两个用户的评分向量的对齐程度,忽略评分尺度的差异。 假设用户 A 对电影的评分是 [5, 3, 0],用户 B 的评分是 [4, 2, 1],其中 0 表示未评分。 通过将缺失值视为零并测量向量之间的角度的余弦来计算相似度。 对于物品,同样的逻辑适用:如果许多用户对两部电影的评分相似,它们的向量将紧密对齐。 诸如皮尔逊相关性之类的其他距离度量可调整用户特定的偏差(例如,对所有事物评分都较高的用户),而Jaccard 相似度对于二元数据(例如,已购买/未购买)很有用。
另一种方法涉及矩阵分解或基于嵌入的方法。 诸如奇异值分解 (SVD) 或神经嵌入(例如,物品的 Word2Vec)之类的技术会将高维交互数据减少为捕获潜在模式的密集向量。 例如,推荐系统中的协同过滤模型将用户-物品矩阵分解为用户和物品嵌入。 然后使用这些较低维的向量计算相似度。 对于基于文本的物品(例如,文章),来自 BERT 等模型的嵌入可以表示语义内容,并且嵌入之间的余弦相似度可以衡量基于内容的相似度。 混合方法结合了交互数据和物品特征(例如,类型、标签)来计算相似度,从而提高了稀疏数据集的鲁棒性。
实际考虑因素包括处理稀疏数据和可伸缩性。 例如,在使用稀疏评分的用户-用户相似度中,皮尔逊相关性可能会忽略未评分的物品,而余弦相似度会将缺失值视为零,这会扭曲结果。 诸如 SciKit-Learn 或 NumPy 之类的库为相似度计算提供了有效的实现。 对于大型数据集,诸如 FAISS 或 ANNOY 之类的近似最近邻 (ANN) 算法通过牺牲精确性来优化速度。 开发人员还应预处理数据(例如,归一化、处理缺失值)并根据特定领域的具体目标(例如,A/B 测试中的推荐准确性)验证相似度指标。