问题起源
多样性问题,最早诞生于信息检索任务当中,因为在信息检索的过程中,可能输入的查询会存在多种意思。比如搜索java,可能会有不同类型的结果。它可以是一种编程语言、可以是咖啡也可以指爪哇岛。再比如两三年前我想在京东买一箱苹果,但是在搜索苹果之后出来的全是手机以及配件。面对这种检索词有歧义的情况多样性的结果列表能够较快的了解用户的真正目的。随着推荐系统的发展多样性也成为对推荐系统的重要评价指标之一。中多样行的提升一方面可以提升冷门项目特别是长尾项目的曝光率,另一方面也可以挖掘兴趣广泛用户的潜在兴趣点。
建模与度量
Individual Diversity:
多样性的度量与建模一共有两种层面,第一种层面上的多样性是指个体的多样性,这是在衡量当前列表中物品的新颖程度,即该类型的物品,在之前的推荐列表中出现的次数较少。
1.Alpha-nDCG:
在保证新颖性的同时保证多样性。
Query-Topics Dictionary(每个query中所包含的topic):
{"85.1", "85.2", "85.3", "85.4", "85.5", "85.6"};
Doc-Topics Dictionary(每个文档中所包含的topic):
docDict["a"] = {"85.2", "85.4"};
docDict["b"] = {"85.2"};
docDict["c"] = {"85.2"};
docDict["d"] = {};
docDict["e"] = {"85.1", "85.6"};
docDict["f"] = {"85.1"};
docDict["g"] = {"85.3"};
docDict["h"] = {"85.1"};
docDict["i"] = {};
docDict["j"] = {};
Ranking Query-Doc Dictionary(关于某个query的文档排序)
{"a", "e", "g", "b", "f", "c", "h", "i", "j", "d"};
增益的计算方式:
新颖性:当前的话题之前出现过的次数ri,k-1
多样性:当前项目中是否包含query中的话题J(dk,i)
例子:
当前输入的query为{1,2,3,4,5}
当前的ranking dict为{ a,b,c }
docdict: a{1,2}
b{3,6,7}
c{3,4,5}
alpha-dcg:
a: ((1-α)0+(1-α)0)/log2(1+1);
b: ((1-α)0+0+0)/log2(1+2);
c: ((1-α)1+(1-α)0+(1-α)0)/log2(1+3);
ideal-dcg:
c: ((1-α)0+(1-α)0+(1-α)0)/log2(1+1);
a: ((1-α)0+(1-α)0)/log2(1+2);
b: ((1-α)1+0+0)/log2(1+3);
idcg的产生方式:
先选取序为0的样本,以此计算每个样本当前的增益,选取使当前位置增益最大的样本放在第一位。再从剩下的序中选取序为1的样本以此类推。
0: a:((1-α)0+(1-α)0)
b:((1-α)0+0+0)
c:((1-α)0+(1-α)0+(1-α)0)
whoisbest = "c";
bestvalue = (1-α)0+(1-α)0+(1-α)0);
doc_candidates.erase("c");
nDCG = DCG/iDCG
参考论文:novelty and diversity in information retrieval evaluation
链接:https://dl.acm.org/doi/10.1145/1390334.1390446
参考代码:alpha-ndcg-cpp
链接:https://github.com/Pabfigueira/alpha-NDCG-cpp/blob/master/alpha_nDCG.cpp
2.ILS(Intra List Similarity):根据推荐列表内文档对的相似程度来度量
对一个存在n个样本的列表而言有C(n,2) 一共n(n-1)/2个pair。
simi为第i项属性的相似程度,wi为各属性的权重
参考论文:Improving recommendation diversity
链接:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.8.5232&rep=rep1&type=pdf
参考论文:When Diversity Is Needed... But Not Expected!
链接:https://hal.inria.fr/hal-00931805/document
因相似度的评价方式而异,不同的评价方式可能会呈现出不同的结果。其中特征的各种距离也常被用来评价相似度。
参考论文:Improving recommendation lists through topic diversification
链接:https://dl.acm.org/doi/10.1145/1060745.1060754
Aggregate Diversity:
而第二种层面的多样性算法是指,总体的多样性或者说是系统层面上的多样性。这个层面上的多样性可以看作是对个体的列表进行汇总而得到的一个结果,如果所有人的列表中包含的内容都是相似的那么系统多样性就较差,这种评价更加照顾在长尾中的物品。
值得注意的是:虽然总体多样性是个体多样性汇总得到的结果,但是个体多样性的提升和总体多样性的提升并不是同步的,比如只从5个类里选热门的东西进行推荐,这样的个体多样性评价是很高的,但是总体多样性的评价却比较低。
对总体多样性的评价方式而言主要有三种方式。首先是绝对长尾数值的评价方法,该方法利用在推荐系统中低于某个流行度排名的物品所被推荐的频次对物品的流行度进行评估。频次越高说明多样性越好,另一种对应的方式是,相对长尾数值的评价方法,该方法利用在推荐系统中低于某个流行度排名的物品在推荐系统中所占的比例,来评价,同理所占比例越高则证明多样性就越好。
另一种方法是基于基尼系数的评价,该方法是把用在经济学领域的洛伦兹曲线用在了对推荐系统多样性的评价方式上,对物品所被推荐对频率在横轴上进行一个升序的排列,纵轴表示物品被推荐的概率分布,导数代表概率密度,曲线的弯曲程度越大说明后半段导数就越大,相对热门的物品被推荐的就过多。当曲线变成直线时,就说明每个位置上的物品被推荐出去的 可能性是相同的,这时在多样性的评价上是最好的。