Просмотр исходного кода

Merge branch 'refs/heads/dev-xym-cold-dnn' into pre-master

# Conflicts:
#	ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy688.java
xueyiming 23 часов назад
Родитель
Сommit
cb139a1601

+ 4 - 6
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/helper/DnnCidDataHelper.java

@@ -47,22 +47,19 @@ public class DnnCidDataHelper {
     // 服务启动时初始化数据
     @PostConstruct
     public void init() {
-        log.info("开始初始化CID数据...");
         updateCidSet();
-        log.info("CID数据初始化完成,共{}条记录", cidSet.size());
     }
 
     // 每10分钟更新一次数据
     @Scheduled(fixedRate = 10 * 60 * 1000)
     public void scheduledUpdate() {
-        log.info("开始定时更新CID数据...");
         updateCidSet();
-        log.info("CID数据定时更新完成,共{}条记录", cidSet.size());
     }
 
     // 更新CID集合的方法
     private synchronized void updateCidSet() {
         try {
+            log.info("开始初始化CID数据...");
             String modelVersion = readCsvPathFromOss();
             if (StringUtils.isEmpty(modelVersion)) {
                 log.error("modelVersion 获取为空");
@@ -108,10 +105,11 @@ public class DnnCidDataHelper {
                 }
                 log.info("成功读取CSV文件,共{}行数据", newCidSet.size());
             } else {
-                log.warn("指定文件夹下没有找到CSV文件!");
+                log.error("指定文件夹下没有找到CSV文件!");
             }
             // 使用volatile保证可见性,一次性替换整个集合
             cidSet = Collections.unmodifiableSet(newCidSet);
+            log.info("CID数据初始化完成,共{}条记录", cidSet.size());
         } catch (Exception e) {
             log.error("更新CID数据失败", e);
             // 发生异常时保持原数据不变
@@ -129,7 +127,7 @@ public class DnnCidDataHelper {
                 return null;
             }
             // 获取配置文件内容
-            OSSObject ossObject = ossClient.getObject(BUCKET_NAME, "fengzhoutian/pai_model_trained_cids/model_version.json");
+            OSSObject ossObject = ossClient.getObject(BUCKET_NAME, modelVersionPath);
             try (BufferedReader reader = new BufferedReader(new InputStreamReader(
                     ossObject.getObjectContent(), StandardCharsets.UTF_8))) {
                 // 读取整个文件内容

+ 5 - 12
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy688.java

@@ -260,24 +260,17 @@ public class RankStrategyBy688 extends RankStrategyBasic {
         // getScorerPipeline
         List<AdRankItem> result = ScorerUtils.getScorerPipeline(ScorerUtils.PAI_SCORE_CONF_20250214).scoring(sceneFeatureMap, userFeatureMap, adRankItems);
         long time5 = System.currentTimeMillis();
-        // calibrate score for negative sampling
+        // calibrate score for negative sampling or cold start
         for (AdRankItem item : result) {
             double originalScore = item.getLrScore();
-            double calibratedScore;
-            log.info("cidSet={}", DnnCidDataHelper.getCidSet());
-            if (CollectionUtils.isNotEmpty(DnnCidDataHelper.getCidSet()) && !DnnCidDataHelper.getCidSet().contains(item.getAdId())) {
+            double calibratedScore = originalScore / (originalScore + (1 - originalScore) / negSampleRate);
+            // 该创意尚未在模型中训练,打分不可靠
+            if (!DnnCidDataHelper.getCidSet().contains(item.getAdId())) {
                 Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(String.valueOf(item.getAdId()), new HashMap<>());
                 Map<String, String> b3Feature = cidFeature.getOrDefault("alg_cid_feature_cid_action", new HashMap<>());
                 double view = Double.parseDouble(b3Feature.getOrDefault("ad_view_14d", "0"));
                 double conver = Double.parseDouble(b3Feature.getOrDefault("ad_conversion_14d", "0"));
-                log.info("not cid view={}, conver={}, cid={}", view, conver, item.getAdId());
-                if (view <= 0) {
-                    calibratedScore = 0.0;
-                } else {
-                    calibratedScore = conver / view;
-                }
-            } else {
-                calibratedScore = originalScore / (originalScore + (1 - originalScore) / negSampleRate);
+                calibratedScore = NumUtil.divSmoothV2(conver, view, CTCVR_SMOOTH_BETA_FACTOR);
             }
             item.setLrScore(calibratedScore);
             item.getScoreMap().put("originCtcvrScore", originalScore);