Swing算法工具

Swing 是阿里巴巴原创的一种新的match算法,不同于传统基于“点”的节点亲密度(proximity)计算方式,如:Common Neighbors, Adamic/Adar, Cosine Similarity, Jaccard Similarity, Wb-cosine, Rooted PageRank等,Swing会考虑网络结构信息,以高维的网络结构向二跳节点扩展,抗噪能力强,相比传统的CF准确性有大幅的提升。目前Swing i2i作为最重要的基础数据,广泛应用于手淘和PC众多的推荐场景中; 除此之外,swing还应用于集团天天动听和阿里妈妈广告业务中,并有显著提升。

Swing算法简介

Swing 是阿里巴巴原创的一种新的match算法,不同于传统基于“点”的节点亲密度(proximity)计算方式,如:Common Neighbors, Adamic/Adar, Cosine Similarity, Jaccard Similarity, Wb-cosine, Rooted PageRank等,Swing会考虑网络结构信息,以高维的网络结构向二跳节点扩展,抗噪能力强,相比传统的CF准确性有大幅的提升。

目前Swing i2i作为最重要的基础数据,广泛应用于手淘和PC众多的推荐场景中; 除此之外,swing还应用于集团天天动听和阿里妈妈广告业务中,并有显著提升。

样本准备

  1. 创建输入表

CREATE TABLE IF NOT EXISTS swing_test_input
(
  user_id   bigint,
  item_list string  --点击序列为必须字段,且至少提供item_id, timestamp和norm字段
)
lifecycle 7;

数据样例如下所示。点击序列由分号分割,每个点击商品由至少3个字段构成,即item_id, norm,timestamp.其中item_id需要在开头,timestamp遵循%Y%m%d%H%M%S的格式,如不需要可以用同一个timestamp填充。norm代表商品近期的热度(点击量),如不需要,可以统一用1填充。应按照点击时间顺序由远至今组织item_list。

备注:item_id 必须为数字类型

  1. 创建输出表

CREATE TABLE IF NOT EXISTS swing_test_result
(
    item_id   BIGINT COMMENT 'anchor物品ID',
    item_list STRING COMMENT '相似物品列表'
)
LIFECYCLE 7;

输出表分为两列:item_id和item_list,其中 item_list 形如item_id1,score1,coccur1,ori_score1;item_id2,score2,coccur2,ori_score2。其中,ori_score1是原始相似度分数;score1是最大值归一化之后的分数;coccur1是共现次数。

PAI命令行

pai -name swing_rec_ext 
    -project algo_public 
    -DinputTable='swing_test_input'
    -DoutputTable='swing_test_result'
    -DmaxClickPerUser='500'
    -DmaxUserPerItem='600'
    -Dtopk='100'
    -Dalpha1='5'
    -Dalpha2='1'
    -Dbeta='0.3'

算法参数

参数名称

参数描述

参数类型

inputTable

输入表:用户点击序列

inputPart

输入表的分区

outputTable

输出表:i2i索引

outputPart

输出表的分区

maxClickPerUser

每个用户的最长序列长度,如果超过该长度会对最近进行截断保留

整数,默认值为600

maxTimeSpan

认为两个商品存在邻居关系的最长点击间隔天数

整数,默认值为1

maxUserPerItem

每个商品使用多少个用户的点击序列来计算k近邻

整数,默认值为700

topk

每个trigger商品保留的k近邻数目

整数,默认值为200

alpha1

swing算法参数,见公式[1]

整数,默认值为5

beta

swing算法参数,见公式[1]

实数,默认值为0.3

alpha2

swing算法参数,见公式[1]

整数,默认值为1

pos_time

timestamp对应的字段编号,从0开始,在上述样例中为2

整数,默认值为2

pos_norm

商品热度所对应字段,从0开始,在上述样例中1

整数,默认值为1

公式[1]:

改进版Swing算法

改进版swing相似度计算算法