-
推荐算法在近些年发展非常迅速[1],受到各行各业的关注,尤其是电商行业,十分依赖于推荐算法的应用,以此来提升目标用户的粘性和体验。随着信息量的增长,推荐算法也成为应对信息过载的主要手段,可以有效帮助用户从海量数据中筛选出目标项目,并且预测接下来有可能交互的对象。
早期的推荐算法是根据用户或物品间的相似性达到推荐的目的[2],但算法效果并不理想。实际上,用户的交互行为在大多数情况下是动态的,且会随着时间的推移而不断改变。因此,如何对用户的行为进行单独建模并挖掘其潜在兴趣成为推荐算法的研究热点。序列推荐是一种能够根据用户的历史行为来动态捕捉用户行为特征的重要推荐算法,通过输入一个用户交互序列来预测用户下一步的行为。传统序列推荐算法在训练模型时会遵循监督学习范式,通过引入一个或多个负样本,使用贝叶斯个性化排名(Bayesian personalized ranking, BPR)损失函数[3]来优化算法。但监督学习会将注意力重点放在样本标注与训练数据之间的关系对结果产生的影响上,比较依赖数据标注的准确性[4]。而且在对用户交互序列建模时也很容易受到噪声数据的影响,使得模型非常脆弱,无法做到精准推荐。
针对上述问题,本文提出一种基于对比学习与傅里叶变换的自注意力序列推荐算法CSFTRec,通过训练方法的转变与噪声数据的消除提高算法性能。首先,通过傅里叶变换在序列数据进入编码器(Encoder)之前过滤噪声。同时,引入两种数据增强方式处理序列数据,将原始序列与增强序列同时作为自注意力层的输入。最后,通过改进的对比损失函数计算损失值。在8个公开数据集上的实验证明,本文算法相比于目前的主流推荐算法,能有效提高推荐结果的准确性。
-
在Amazon、Yelp、MovieLens、Gowalla上选取8个数据集进行实验,其中Amazon选择BaBy、Beauty、Movies、Toys、Food这5个不同种类生成的子数据集,均采用5-core版本。Yelp由于数据量过大,选取2018年之后的数据。MovieLens选择1M版本。表1给出每个数据集交互序列、交互项、稀疏性的相关信息。
DataSet Sequences Items Sparsity/% Baby 19445 7011 99.91 Beauty 22363 12068 99.94 Movies and TV 2088620 186349 99.99 Toys and Games 1342911 283394 99.99 Grocery and Gourmet Food 14684 8687 99.90 Yelp-2018 104072 54034 99.92 ML-1M 6040 3704 95.58 Gowalla 76894 304440 99.77 -
由于CSFTRec的损失函数是在BPR的基础上进一步进行推导得出的,所以采用Top-K推荐的召回命中率(hit ratio, HR)和归一化累积增益(normalized discounted cummulative gain, NDCG)作为模型评价指标[32]:
式中,
$I\left( \cdot \right)$ 是一个判别函数,会根据是否满足条件返回0和1。指标HR和NDCG越大,代表推荐结果越准确,算法效果越好。 -
为了探明对比学习任务下的推荐算法和基于傅里叶变换的噪声过滤是否具有成效,现将实验分为3组。第一组选取SASRec、FMLP-Rec以及没有过滤模块的CSFTRec+作为基准模型,主要用于探究过滤器模块对模型的具体影响,其中FMLP-Rec是在SASRec上添加了自学习过滤器。第二组选择BPRMF、POP、ComiRec[33]、FPMC[34]、GRU4Rec[35]作为基准模型。第三组选择SASRec、BERT4Rec[36]、TISASRec[37]为基准模型,这3个模型是以自注意力机制为核心的推荐算法,BERT4Rec和TISASRec是在SASRec的基础上进行了一定的改进,其中BERT4Rec引入了双向Transformer编码器,TISASRec引入了对于序列时间间隔的编码。上述实验全部基于Python3.8以及Pytorch1.8.1框架进行实现,运行环境为RTX 3090(24 GB)、15核AMD EPYC 7543 32-Core Processor以及80 GB内存。模型均使用Adam优化器,学习率统一设置为1×10−4,每个模型均不进行预训练。
-
表2为过滤器模块对算法的影响,可见FMLP-Rec和CSFTRec相较于基础模型在增加过滤器模块后性能方面有所提升,即使去除过滤器模块,对比学习下的联合训练任务在大部分情况下也要表现的更好。此外,表3为4个模型的时间性能对比,在增加过滤器模块后,必然会增加迭代时间,但CSFTRec的迭代速度要快于普通SASRec和FMLP-Rec,这是由于新的对比学习损失加快了整体损失的计算,而单纯的BPR损失要花费更多的时间。
DataSets Methods Metric HR@5 HR@10 NDCG@5 NDCG@10 Yelp SASRec 0.368 5 0.498 2 0.259 9 0.301 8 FMLP-Rec 0.360 7 0.493 9 0.253 4 0.296 4 CSFTRec+ 0.378 0 0.515 0 0.263 2 0.307 5 CSFTRec 0.382 4 0.521 1 0.268 0 0.312 8 MovieLens SASRec 0.702 0 0.805 0 0.550 2 0.583 8 FMLP-Rec 0.713 9 0.809 8 0.562 0 0.593 1 CSFTRec+ 0.703 8 0.798 3 0.553 5 0.584 4 CSFTRec 0.715 4 0.812 9 0.566 8 0.598 6 Food SASRec 0.385 5 0.474 2 0.287 6 0.316 4 FMLP-Rec 0.396 3 0.483 7 0.300 4 0.328 7 CSFTRec+ 0.404 9 0.489 9 0.310 7 0.338 3 CSFTRec 0.401 7 0.479 9 0.309 1 0.335 1 Gowalla SASRec 0.617 4 0.738 5 0.477 1 0.516 3 FMLP-Rec 0.618 2 0.737 2 0.478 4 0.517 0 CSFTRec+ 0.642 3 0.749 8 0.500 3 0.535 2 CSFTRec 0.669 8 0.776 3 0.524 1 0.558 8 Movies SASRec 0.694 9 0.781 6 0.572 9 0.601 2 FMLP-Rec 0.691 0 0.775 9 0.571 3 0.598 9 CSFTRec+ 0.707 6 0.786 9 0.595 4 0.621 2 CSFTRec 0.704 8 0.793 1 0.595 5 0.620 3 算法 数据集 Gowalla Yelp2018 ML-1M SASRec 188 41 40 FMLP-Rec 240 53 52 CSFTRec 120 34 26 CSFTRec+ 90 23 20 基于表4和表5的结果,可以得出非序列推荐算法性能明显要更差一些,这表明序列推荐算法在对比学习任务的Encoder选择中应该有比较高的优先级。其次,SASRec、TISASRec、BERT4Rec这3个模型在每个数据集上的表现均强于传统的RNN架构算法和基于马尔科夫链的推荐算法,这是由于自注意力机制的编码器具有更多的参数,可以更好的捕获序列特征。CSFTRec在大部分情况下要表现出更强的性能,且训练过程中投入的数据越多,CSFTRec的性能提升越高,这是由于对比学习过程中使用了数据增强,虽然所有模型在同样的数据集上进行训练,但CSFTRec实际上要比监督学习任务的训练数据更多。
DataSets Methods Metric HR@5 HR@10 NDCG@5 NDCG@10 Baby POP 0.204 6 0.314 4 0.131 9 0.167 1 BPRMF 0.229 1 0.339 8 0.151 2 0.186 8 FPMC 0.260 6 0.371 4 0.181 2 0.216 8 ComiRec 0.267 9 0.388 5 0.180 0 0.218 9 GRU4Rec 0.291 9 0.415 8 0.197 9 0.237 9 CSFTRec 0.300 8 0.422 2 0.208 7 0.244 3 Beauty POP 0.173 5 0.290 0 0.114 1 0.151 6 BPRMF 0.363 6 0.464 9 0.264 3 0.2971 FPMC 0.344 8 0.428 6 0.264 8 0.291 6 ComiRec 0.367 5 0.479 0 0.264 6 0.300 8 GRU4Rec 0.326 8 0.438 3 0.234 2 0.270 1 CSFTRec 0.376 2 0.469 7 0.290 1 0.320 4 Food POP 0.206 5 0.334 7 0.130 1 0.171 3 BPRMF 0.354 7 0.460 9 0.248 4 0.282 9 FPMC 0.359 1 0.438 1 0.279 6 0.305 1 ComiRec 0.366 3 0.474 4 0.259 6 0.294 7 GRU4Rec 0.362 6 0.472 4 0.257 8 0.293 3 CSFTRec 0.401 7 0.479 9 0.309 1 0.335 1 Toys POP 0.338 5 0.408 3 0.276 6 0.299 1 BPRMF 0.376 0 0.460 1 0.281 9 0.309 2 FPMC 0.405 1 0.491 0 0.315 1 0.342 9 ComiRec 0.437 6 0.527 7 0.338 0 0.367 2 GRU4Rec 0.395 8 0.513 3 0.284 9 0.323 0 CSFTRec 0.445 9 0.575 1 0.325 2 0.367 0 Movies POP 0.635 3 0.757 1 0.500 7 0.540 2 BPRMF 0.456 0 0.563 1 0.373 9 0.452 3 FPMC 0.630 0 0.746 1 0.498 3 0.536 0 ComiRec 0.661 3 0.770 4 0.524 1 0.559 5 GRU4Rec 0.601 3 0.734 5 0.451 5 0.494 7 CSFTRec 0.704 8 0.793 1 0.595 5 0.620 3 DataSets Methods Metric HR@5 HR@10 NDCG@5 NDCG@10 Baby SASRec 0.290 8 0.409 9 0.202 9 0.241 3 FMLP-Rec 0.282 8 0.393 1 0.196 6 0.232 1 CSFTRec+ 0.297 1 0.417 9 0.205 3 0.247 7 CSFTRec 0.300 8 0.422 2 0.208 7 0.244 3 Beauty SASRec 0.367 3 0.460 1 0.277 6 0.307 5 FMLP-Rec 0.371 1 0.464 4 0.281 0 0.311 0 CSFTRec+ 0.368 3 0.459 2 0.280 1 0.309 8 CSFTRec 0.376 2 0.469 7 0.290 1 0.320 4 Food SASRec 0.385 5 0.474 2 0.287 6 0.316 4 FMLP-Rec 0.390 2 0.482 0 0.293 6 0.322 5 CSFTRec+ 0.389 2 0.477 4 0.293 8 0.322 3 CSFTRec 0.401 7 0.479 9 0.309 1 0.335 1 Toys SASRec 0.368 3 0.450 5 0.290 4 0.316 9 FMLP-Rec 0.406 2 0.488 8 0.320 6 0.347 3 CSFTRec+ 0.419 3 0.510 2 0.323 3 0.352 8 CSFTRec 0.445 9 0.575 1 0.325 2 0.367 0 Movies SASRec 0.694 9 0.781 6 0.572 9 0.601 2 FMLP-Rec 0.708 4 0.785 6 0.580 6 0.609 4 CSFTRec+ 0.701 1 0.790 8 0.578 1 0.607 2 CSFTRec 0.704 8 0.793 1 0.595 5 0.620 3 此外,图2为CSFTRec与InfoNCE的训练结果比较,明显可见InfoNCE的效果不如引入了Context-Context损失的联合训练任务,且CSFTRec有着更快的收敛速度,这要归功于序列进入Encoder之前的噪声过滤,使得自注意力机制能够更快的学习到序列特征,而不会过多的关注那些无意义的干扰。
-
为了使CSFTRec的性能进一步提升,探究了不同的超参数对CSFTRec产生的影响。在无监督学习任务中,数据增强的方式是否合理会直接影响到模型的最终效果,因此将本文所提到的两种数据增强方式单独应用到CSFTRec中,将其在5个数据集上的表现与使用随机数据增强的CSFTRec进行对比。如图3所示,可以明显看出掩盖方式在每个数据集上的表现都要强于置换,这是由于掩盖会使自注意力机制去重点学习序列数据当中未被掩盖部分的序列特征,多次的随机掩盖,会使序列的每一个子序列特征可以被充分学习到,所以会有一个较好的性能表现。但从另一个方面来看,使用了混合数据增强方式的CSFTRec表现却又不输于掩盖,也就是说置换并没有拉低CSFTRec的性能,反而使其在大多数数据集上的表现要比随机掩盖更强,这也证明了使用两种数据增强方式混合处理数据的可行性。
此外,在Food和Toys两个数据集上研究了BatchSize和负样本个数对模型的影响。图4为不同的BatchSize对CSFTRec的影响,可以看到CSFTRec更受益于较大的BatchSize,这是由于在Context-Context损失中,较大的训练Batch会提高多个序列共享一个目标的概率,从而使得CSFTRec有更好的表现。在图5中,随着负样本个数的增加,两个数据集上的表现大不相同。在小数据集上,只保留一个负样本可以最大化模型性能,但在大数据集上,模型却又受益于更多的负样本,这是由于联合训练任务在数据较少时更依赖于Context-Context损失,在数据较多时,才会逐渐从对比损失中获得训练增益。
总体而言,在对比学习任务中,不论是数据增强方式还是BatchSize和负样本个数均会对模型有较明显的影响,如果选择了合理的参数配置,就可以保证模型逐渐收敛并获得一个较好的模型表现。
Sequence Recommendation Based on Contrast Learning and Fourier Transform
doi: 10.12178/1001-0548.2022164
- Received Date: 2022-05-31
- Accepted Date: 2023-02-01
- Rev Recd Date: 2022-09-21
- Available Online: 2023-09-06
- Publish Date: 2023-07-07
-
Key words:
- contrastive learning /
- recommender algorithm /
- sequential recommendation /
- self-attention mechanism
Abstract: This paper proposes a sequence recommendation algorithm based on self-attention mechanism and Fourier transform, named CSFTRec. By filtering the noise in the original data, this algorithm maximizes the feature capturing ability of the self-attention mechanism on the sequence data. According to the characteristics of contrast learning, a new contrast loss is introduced on the basis of Bayesian personalized ranking for joint training, which can shorten the distance between different similar sequences. Experiments on eight public data sets show that CSFTRec converges faster and improves the recommendation accuracy by 3% to 5%, which indicates that CSFTRec is more suitable for processing sequence data.
Citation: | ZHANG Shaodong, YANG Xingyao, YU Jiong, LI Ziyang, LIU Yansong. Sequence Recommendation Based on Contrast Learning and Fourier Transform[J]. Journal of University of Electronic Science and Technology of China, 2023, 52(4): 610-619. doi: 10.12178/1001-0548.2022164 |