全部產品
Search
文件中心

OpenSearch:CTR預估模型

更新時間:Nov 30, 2024

CTR模型介紹

點擊率(click-through rate, CTR)預估是搜尋平台的核心任務之一。它所解決的問題是:給定一個user和一個query,以及與該query所匹配的doc,預測這些doc曝光之後獲得點擊的機率。這個機率值可以用於排序指令碼中,用來提升搜尋效果,提升ctr等業務指標。

優勢/情境

為了更好的滿足使用者多情境、多樣化的搜尋排序業務需求,OpenSearch推出了CTR模型功能,可以實現個人化、千人千面的搜尋排序效果。

建立並訓練模型

  1. 建立行業模板,之後進入OpenSearch控制台頁面,左側導覽列選擇:搜尋演算法中心>排序配置>CTR預估模型,然後點擊建立按鈕:

image

  1. 建立CTR預估模型,填寫模型名稱,設定訓練欄位:

02

  • 映射訓練欄位:(目前商品ID,和商品標題是必選項,其他欄位設定的越多,模型效果越好)

03

  1. 模型建立完成後,在CTR預估模型列表頁,找到剛建立的模型,在右側操作欄中點擊“訓練模型”

04

  1. 開始訓練後,可在CTR預估模型詳情頁,可查看模型訓練進度:

05

  1. 訓練完成後,若模型狀態會變為可用狀態,即可進行使用(若模型狀態為不可用,請根據資料校正完整度等級升級條件進行調整,滿足要求後,第二天再訓練即可,若還有問題,可以提工單聯絡技術同學):

image

說明

定時訓練周期建議設定為每天。

搜尋測試

  1. 建立一個cava類型的業務排序策略:

image

  • 填寫策略名稱稱,應用範圍選取業務排序,類型選擇cava指令碼:

image

  • 點擊添加檔案,將cava指令碼樣本貼到指令碼代碼中,點擊編譯,如提示編譯成功,點擊儲存發布後即可進行

    搜尋測試

image

image

cava指令碼樣本如下:

package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.algo.AlgoModel;

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return true;
    }

    double score(OpsScoreParams params) {
        double score = 0;
        return score;
    }
};

class IntelligenceAlgorithmScorer {
    AlgoModel _algoModel;

    boolean init(OpsScorerInitParams params) {
      //注意tf_checkpoint 為固定參數
        _algoModel = AlgoModel.create(params, "tf_checkpoint","ctr", "這裡換成你的ctr模型名稱"); 
        return true;
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        double modelScore = _algoModel.evaluate(params);
        doc.trace("ctrModelScore: ", modelScore);
        
        double score = modelScore + 700;
        return score;
    }
};

  1. 進行搜尋測試:

image

注意

  • second_rank_type 、second_rank_name 、raw_query 是必要參數,搜尋請求時必須配置;

  • 如果行為資料以及查詢時都上傳了user_id 參數,模型的打分效果會更好;

CTR模型詳情頁說明

基本資料

可查看模型的建立時間狀態最後訓練開始時間以及最新版本狀態

image

配置資訊

訓練欄位:點擊“映射訓練欄位”後,彈出映射訓練欄位選框,可以修改或刪除模型訓練欄位,修改訓練欄位後需重新訓練模型才會生效:

image

定時訓練:預設開啟並每天訓練一次,也可以編輯定時任務,自訂訓練周期

image

資料校正

資料完整度狀態包含可用資料異常

完整度報告顯示當前應用的完整度等級,具體完整度等級可見:

資料完整度

介紹

晉陞條件

l0

表示資料完全不可用,缺少必要的核心欄位,資料量太少,後續的資料處理不能繼續進行

l0-->l1:

  • 應用表資料量大於1000

  • 最近一天搜尋pv大於10000

  • 最近一天獨立query數大於1000(只按raw_query統計)

l1

表示資料的核心欄位已經具備,滿足最基本的允入準則,但行為資料仍存在欄位缺失和資料量不足的問題,部分不依賴行為資料的最佳化可以進行,全面的最佳化還需要繼續解決行為資料的問題

l1-->l2:

  • 最近一天ipv數大於1000

  • 有上報曝光行為事件且數量大於ipv數量,行為資料bhv_type欄位非空

  • 最近一天搜尋uv大於1000(按搜尋請求的user_id統計)

  • 最近一天90%以上的行為資料rn欄位非空

  • 最近一天90%以上的行為資料item_id欄位非空

  • 最近一天90%以上的行為資料bhv_time欄位非空

  • 最近一天90%以上的行為資料item_id欄位有效(能與應用表的item關聯上)

  • 最近一天60%以上的行為資料rn欄位有效(能與搜尋日誌request_id關聯上)

  • 最近一天60%以上的行為資料bhv_time欄位有效(時間戳記格式正確)

  • 最近一天60%以上的行為資料bhv_time是當天的(代表上報無延遲)

l2

表示資料品質滿足要求,後續的最佳化可以正常進行,但資料量較小,對最佳化的最終效果存在一定影響

l2-->l3:

  • 最近一天搜尋pv大於1000000

  • 最近一天搜尋uv大於100000

  • 最近一天獨立query數大於100000

  • 最近一天ipv數大於100000

  • 有上報曝光行為事件且數量大於ipv數量

  • 最近一天90%以上的行為資料rn欄位有效(能與搜尋日誌request_id關聯上)

  • 最近一天90%以上的行為資料bhv_time欄位有效(時間戳記格式正確)

  • 最近一天90%以上的行為資料bhv_time是當天的(代表上報無延遲)

l3

表示資料品質和資料量達到合理的水平,具備了正常最佳化的前提條件

l3-->l4:

  • 最近一天搜尋pv大於10000000

  • 最近一天搜尋uv大於1000000

  • 最近一天獨立query數大於1000000

  • 最近一天ipv數大於1000000

l4

表示資料規模較大,資料量充足,達到千萬級,資料完整度水平較高

l4-->l5:

  • 最近一天搜尋pv大於100000000

  • 最近一天搜尋uv大於10000000

  • 最近一天獨立query數大於10000000

  • 最近一天ipv數大於10000000

l5

表示資料規模很大,資料量很充足,達到億級以上,具備深度最佳化的條件

說明
  • ipv表示每次搜尋的點擊率,即bhv_type=click;

  • 有上報曝光行為事件且數量大於ipv數量,表示bhv_type=expose的數量大於bhv_type=click的數量(補充:使用者有點擊某商品,說明該商品一定有曝光,此處該條行為資料需要上傳2次,即bhv_type=click和bhv_type=expose都需要上傳)

注意事項

  • 現階段僅支援CTR模型在Cava外掛程式中使用;

  • 現階段僅支援獨享叢集規格的執行個體建立CTR模型;

  • 每個執行個體最多支援3個CTR模型;

  • 訓練欄位越多,模型訓練效果越好;

  • 訓練晉陞條件中的raw_query是搜尋請求時需要攜帶的參數,並且要求是獨立的、有召回結果的、非重複的查詢詞,具體用法可參考Java SDK 搜尋Demo

  • 相關API/SDK參考:演算法周邊