瀏覽代碼

外部引流特征

jch 3 周之前
父節點
當前提交
2b8699b3b7

+ 2 - 1
src/main/scala/com/aliyun/odps/spark/examples/myUtils/ConvertV2.java

@@ -38,6 +38,7 @@ public class ConvertV2 {
 
         // context feature
         FeatureTransformV2.getContextFeature(currentMs, appType, hotSencetype, featMap);
+        FeatureTransformV2.getCreativeBaseFeature("e1", creativeInfo, featMap);
 
         // head video feature
         FeatureTransformV2.getVideoBaseFeature("h", currentMs, headInfo, featMap);
@@ -59,7 +60,7 @@ public class ConvertV2 {
 
         // head&rank cross feature
         FeatureTransformV2.getHeadRankVideoCrossFeature(headInfo, rankInfo, featMap);
-        FeatureTransformV2.getCreativeFeature("e1", creativeInfo, rankInfo, featMap);
+        FeatureTransformV2.getCreativeCrossFeature("e1", creativeInfo, rankInfo, featMap);
 
         // user profile & rank cross
         FeatureTransformV2.getProfileVideoCrossFeature(currentMs, userProfile, rankInfo, historyVideoMap, featMap);

+ 17 - 1
src/main/scala/com/aliyun/odps/spark/examples/myUtils/FeatureTransformV2.java

@@ -1,5 +1,6 @@
 package com.aliyun.odps.spark.examples.myUtils;
 
+import com.tzld.piaoquan.recommend.similarity.word2vec.Segment;
 import examples.utils.SimilarityUtils;
 
 import java.util.*;
@@ -246,7 +247,7 @@ public class FeatureTransformV2 {
         getTwoVideoCrossFeature("hr_sim", videoSimAttrs, headInfo, rankInfo, featMap);
     }
 
-    public static void getCreativeFeature(String prefix, Map<String, String> creativeInfo, Map<String, String> rankInfo, Map<String, Double> featMap) {
+    public static void getCreativeBaseFeature(String prefix, Map<String, String> creativeInfo, Map<String, Double> featMap) {
         if (null == creativeInfo || creativeInfo.isEmpty()) {
             return;
         }
@@ -257,6 +258,21 @@ public class FeatureTransformV2 {
                 featMap.put(key, 1.0);
             }
         }
+        if (creativeInfo.containsKey("name")) {
+            String name = creativeInfo.get("name");
+            if (null != name && !name.isEmpty()) {
+                List<String> words = Segment.getWords(name);
+                for (String word : words) {
+                    if (null != word && word.length() > 1) {
+                        String key = String.format("%s@name@%s", prefix, word);
+                        featMap.put(key, 1.0);
+                    }
+                }
+            }
+        }
+    }
+
+    public static void getCreativeCrossFeature(String prefix, Map<String, String> creativeInfo, Map<String, String> rankInfo, Map<String, Double> featMap) {
         getTwoVideoCrossFeature(prefix, creativeSimAttrs, creativeInfo, rankInfo, featMap);
     }