Procházet zdrojové kódy

视频增加表现--code-review

luojunhui před 5 dny
rodič
revize
621a87b5b8

+ 18 - 14
core/src/main/java/com/tzld/videoVector/service/rank/RankServiceImpl.java

@@ -43,7 +43,7 @@ public class RankServiceImpl implements RankService {
 
         // 素材模态:多维质量加权
         if (modality == Modality.MATERIAL) {
-            return rankMaterial(simNorm, sim, lowerBound, passesThreshold, signals.getQuality(), params);
+            return rankMaterial(simNorm, sim, lowerBound, passesThreshold, signals, params);
         }
 
         // VIDEO / ARTICLE 模态:ROV 公式
@@ -51,8 +51,16 @@ public class RankServiceImpl implements RankService {
     }
 
     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();
+        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: 质量缺失策略
         if (qs == null || !qs.isHasData()) {
@@ -65,12 +73,12 @@ public class RankServiceImpl implements RankService {
                         + params.getWViral() * params.getPriorViral()
                         + params.getWRoi() * params.getPriorRoi()) / qualTotalW;
                 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(默认):无质量数据,仅依赖相关性
-            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);
             return b;
         }
@@ -82,8 +90,8 @@ public class RankServiceImpl implements RankService {
         if (qualTotalW <= 0) qualTotalW = 1;
         double qualityScore = (params.getWCtr() * ctr + params.getWViral() * viral
                 + 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,
@@ -101,12 +109,8 @@ public class RankServiceImpl implements RankService {
         boolean hasRov = rov != null && Double.isFinite(rov);
 
         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();