|
@@ -39,17 +39,23 @@ public class PAIModelV1 {
|
|
|
}
|
|
|
|
|
|
private static final String[] sparseStrFeatures = {
|
|
|
- "brand", "region", "city", "cate1", "cate2", "user_cid_click_list", "user_cid_conver_list", "user_vid_return_tags_2h", "user_vid_return_tags_1d", "user_vid_return_tags_3d", "user_vid_return_tags_7d", "user_vid_return_tags_14d"
|
|
|
+ "brand", "region", "city", "cate1", "cate2", "user_cid_click_list", "user_cid_conver_list",
|
|
|
+ "user_vid_return_tags_2h", "user_vid_return_tags_1d", "user_vid_return_tags_3d", "user_vid_return_tags_7d",
|
|
|
+ "user_vid_return_tags_14d", "root_source_scene", "root_source_channel", "title_split"
|
|
|
};
|
|
|
|
|
|
private static final String[] sparseLongFeatures = {
|
|
|
- "vid"
|
|
|
+ "vid", "apptype", "hour", "hour_quarter", "is_first_layer"
|
|
|
};
|
|
|
|
|
|
private static final String[] sparseAdLongFeatures = {
|
|
|
"cid", "adid", "adverid"
|
|
|
};
|
|
|
|
|
|
+ private static final String[] sparseAdStrFeatures = {
|
|
|
+ "profession"
|
|
|
+ };
|
|
|
+
|
|
|
private final String[] userFeatures = {
|
|
|
"viewAll", "clickAll", "converAll", "incomeAll", "ctr_all", "ctcvr_all", "cvr_all", "ecpm_all"
|
|
|
};
|
|
@@ -123,6 +129,12 @@ public class PAIModelV1 {
|
|
|
request.addFeed(feature, TFDataType.DT_INT64, new long[]{1}, new long[]{v});
|
|
|
}
|
|
|
|
|
|
+ for (String feature : sparseLongFeatures) {
|
|
|
+ String key = feature.replace("_x_", "*").replace("_view", "(view)");
|
|
|
+ long v = NumberUtils.toLong(sceneFeatureMap.getOrDefault(key, "0"), 0);
|
|
|
+ request.addFeed(feature, TFDataType.DT_INT64, new long[]{1}, new long[]{v});
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
for (String feature : userFeatures) {
|
|
|
String key = feature.replace("_x_", "*").replace("_view", "(view)");
|
|
@@ -131,6 +143,7 @@ public class PAIModelV1 {
|
|
|
}
|
|
|
Map<String, double[]> doubleFeed = new HashMap<>();
|
|
|
Map<String, long[]> longFeed = new HashMap<>();
|
|
|
+ Map<String, String[]> strFeed = new HashMap<>();
|
|
|
for (int i = 0; i < items.size(); i++) {
|
|
|
for (String feature : itemFeatures) {
|
|
|
String key = feature.replace("_x_", "*").replace("_view", "(view)");
|
|
@@ -153,6 +166,17 @@ public class PAIModelV1 {
|
|
|
long v = NumberUtils.toLong(items.get(i).getFeatureMap().getOrDefault(key, "0"), 0L);
|
|
|
longs[i] = v;
|
|
|
}
|
|
|
+
|
|
|
+ for (String feature : sparseAdStrFeatures) {
|
|
|
+ String key = feature.replace("_x_", "*").replace("_view", "(view)");
|
|
|
+ String[] strs = strFeed.computeIfAbsent(feature, k -> new String[items.size()]);
|
|
|
+ if (MapUtils.isEmpty(items.get(i).getFeatureMap())) {
|
|
|
+ strs[i] = "";
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String v = items.get(i).getFeatureMap().getOrDefault(key, "");
|
|
|
+ strs[i] = v;
|
|
|
+ }
|
|
|
}
|
|
|
for (Map.Entry<String, double[]> entry : doubleFeed.entrySet()) {
|
|
|
request.addFeed(entry.getKey(), TFDataType.DT_DOUBLE, new long[]{items.size()}, entry.getValue());
|
|
@@ -161,6 +185,10 @@ public class PAIModelV1 {
|
|
|
for (Map.Entry<String, long[]> entry : longFeed.entrySet()) {
|
|
|
request.addFeed(entry.getKey(), TFDataType.DT_INT64, new long[]{items.size()}, entry.getValue());
|
|
|
}
|
|
|
+
|
|
|
+ for (Map.Entry<String, String[]> entry : strFeed.entrySet()) {
|
|
|
+ request.addFeed(entry.getKey(), TFDataType.DT_STRING, new long[]{items.size()}, entry.getValue());
|
|
|
+ }
|
|
|
request.addFetch("probs");
|
|
|
TFResponse response = client.predict(request);
|
|
|
List<Float> result = response.getFloatVals("probs");
|