Pairwise 算法没有聚焦于精确的预测每个文档之间的相关度,这种算法主要关心两个文档之间的顺序,相比pointwise的算法更加接近于排序的概念。
在pairwise中,排序算法通常转化为对文档对的分类,分类的结果是哪个文章的相关度更好,学习的目标是减少错误分类的文档对,在完美的模型中,所有的文档对的顺序都被正确的分类。不同于pointwise算法的是,输入的特征是两个文章的特征,这两个文章不是独立的。
常见算法
1. Sortnet :基于神经网络的算法
通过训练数据学习到一个函数,使用神经网络的结构来学习。有对称性原则:
通过学习w和b 来优化损失函数。
损失函数如下:
2.RankNet 基于梯度下降的排序
在ranknet中,损失函数同样是由文章对定义的,通过定义得分函数 f来为x得分。目标概率Puv 通过得分的差值来定义:
通过交叉上损失函数来定义损失函数。
使用神经网络的模型来进行梯度下降,通常使用两层的神经网络。
3.FRank 通过fidelity loss 进行梯度下降
交叉熵损失函数中,f(x_u)-f(x_v) 总是比1大,损失没有最小值,会在学习过程中导致一些困难,为了解决这个问题,用了fidelity loss。
4.RankBoost
Rankboost 使用adaboost的对pairs进行分类。adaboost 使用对数损失函数,对若分类器的叠加得到强分类器。
具有较好的泛化能力。
5.ranking svm
使用hinge loss
6.GBRank
GBrank 使用GBDT 的方法来学习损失函数。
Pair wise 方法相比pointwise有优势,可以学习到一些顺序。但是pairwise也有缺点:
1.当有多个顺序的类别时,只知道good or bad,不知道好多少和差多少。
2.当文章较多时,会产生大量的pairs。
3.对噪声的label 非常敏感,一个错误的label,可能会导致分类结果中有较多的错误。
4.大多数没有考虑结果中文档对的顺序,文档对的顺序也没有在损失函数中体现。