|
@@ -43,7 +43,7 @@ public class RankServiceImpl implements RankService {
|
|
|
|
|
|
|
|
// 素材模态:多维质量加权
|
|
// 素材模态:多维质量加权
|
|
|
if (modality == Modality.MATERIAL) {
|
|
if (modality == Modality.MATERIAL) {
|
|
|
- return rankMaterial(simNorm, sim, lowerBound, passesThreshold, signals.getQuality(), params);
|
|
|
|
|
|
|
+ return rankMaterial(simNorm, sim, lowerBound, passesThreshold, signals, params);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// VIDEO / ARTICLE 模态:ROV 公式
|
|
// VIDEO / ARTICLE 模态:ROV 公式
|
|
@@ -51,8 +51,16 @@ public class RankServiceImpl implements RankService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private ScoreBreakdown rankMaterial(double simNorm, double sim, double lowerBound,
|
|
private ScoreBreakdown rankMaterial(double simNorm, double sim, double lowerBound,
|
|
|
- boolean passesThreshold, QualitySignal qs, RankingParams params) {
|
|
|
|
|
|
|
+ boolean passesThreshold, RecallSignalsVO signals, RankingParams params) {
|
|
|
double alpha = params.getAlpha();
|
|
double alpha = params.getAlpha();
|
|
|
|
|
+ QualitySignal qs = signals.getQuality();
|
|
|
|
|
+
|
|
|
|
|
+ // boost 仅作用于相关性分,质量分不加 boost
|
|
|
|
|
+ Double codeBoost = params.getBoostsByCode() != null
|
|
|
|
|
+ ? params.getBoostsByCode().getOrDefault(signals.getProvenance() != null
|
|
|
|
|
+ ? signals.getProvenance().getConfigCode() : null, params.getDeconstructBoost())
|
|
|
|
|
+ : params.getDeconstructBoost();
|
|
|
|
|
+ if (codeBoost == null) codeBoost = params.getDeconstructBoost();
|
|
|
|
|
|
|
|
// WP2: 质量缺失策略
|
|
// WP2: 质量缺失策略
|
|
|
if (qs == null || !qs.isHasData()) {
|
|
if (qs == null || !qs.isHasData()) {
|
|
@@ -65,12 +73,12 @@ public class RankServiceImpl implements RankService {
|
|
|
+ params.getWViral() * params.getPriorViral()
|
|
+ params.getWViral() * params.getPriorViral()
|
|
|
+ params.getWRoi() * params.getPriorRoi()) / qualTotalW;
|
|
+ params.getWRoi() * params.getPriorRoi()) / qualTotalW;
|
|
|
double conf = 0.3;
|
|
double conf = 0.3;
|
|
|
- double composite = conf * (alpha * simNorm + (1 - alpha) * priorQuality);
|
|
|
|
|
- return ScoreBreakdown.of(composite, simNorm, 0, 1, lowerBound, passesThreshold);
|
|
|
|
|
|
|
+ double composite = conf * (alpha * codeBoost * simNorm + (1 - alpha) * priorQuality);
|
|
|
|
|
+ return ScoreBreakdown.of(composite, simNorm, 0, codeBoost, lowerBound, passesThreshold);
|
|
|
}
|
|
}
|
|
|
// group(默认):无质量数据,仅依赖相关性
|
|
// group(默认):无质量数据,仅依赖相关性
|
|
|
- double composite = alpha * simNorm;
|
|
|
|
|
- ScoreBreakdown b = ScoreBreakdown.of(composite, simNorm, 0, 1, lowerBound, passesThreshold);
|
|
|
|
|
|
|
+ double composite = alpha * codeBoost * simNorm;
|
|
|
|
|
+ ScoreBreakdown b = ScoreBreakdown.of(composite, simNorm, 0, codeBoost, lowerBound, passesThreshold);
|
|
|
b.setQualityMissing(true);
|
|
b.setQualityMissing(true);
|
|
|
return b;
|
|
return b;
|
|
|
}
|
|
}
|
|
@@ -82,8 +90,8 @@ public class RankServiceImpl implements RankService {
|
|
|
if (qualTotalW <= 0) qualTotalW = 1;
|
|
if (qualTotalW <= 0) qualTotalW = 1;
|
|
|
double qualityScore = (params.getWCtr() * ctr + params.getWViral() * viral
|
|
double qualityScore = (params.getWCtr() * ctr + params.getWViral() * viral
|
|
|
+ params.getWRoi() * roi) / qualTotalW;
|
|
+ params.getWRoi() * roi) / qualTotalW;
|
|
|
- double composite = alpha * simNorm + (1 - alpha) * qualityScore;
|
|
|
|
|
- return ScoreBreakdown.of(composite, simNorm, 0, 1, lowerBound, passesThreshold);
|
|
|
|
|
|
|
+ double composite = alpha * codeBoost * simNorm + (1 - alpha) * qualityScore;
|
|
|
|
|
+ return ScoreBreakdown.of(composite, simNorm, 0, codeBoost, lowerBound, passesThreshold);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private ScoreBreakdown rankVideoArticle(double simNorm, double sim, double lowerBound,
|
|
private ScoreBreakdown rankVideoArticle(double simNorm, double sim, double lowerBound,
|
|
@@ -101,12 +109,8 @@ public class RankServiceImpl implements RankService {
|
|
|
boolean hasRov = rov != null && Double.isFinite(rov);
|
|
boolean hasRov = rov != null && Double.isFinite(rov);
|
|
|
|
|
|
|
|
if (!hasRov) {
|
|
if (!hasRov) {
|
|
|
- if (modality == Modality.VIDEO) {
|
|
|
|
|
- double composite = codeBoost * params.getAlpha() * simNorm;
|
|
|
|
|
- return ScoreBreakdown.of(composite, simNorm, 0, codeBoost, lowerBound, passesThreshold);
|
|
|
|
|
- }
|
|
|
|
|
- double composite = simNorm;
|
|
|
|
|
- return ScoreBreakdown.of(composite, simNorm, 0, 1, lowerBound, passesThreshold);
|
|
|
|
|
|
|
+ double composite = codeBoost * params.getAlpha() * simNorm;
|
|
|
|
|
+ return ScoreBreakdown.of(composite, simNorm, 0, codeBoost, lowerBound, passesThreshold);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
double rovDenom = params.getRovClipHigh() - params.getRovClipLow();
|
|
double rovDenom = params.getRovClipHigh() - params.getRovClipLow();
|