日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用EasyRec構建推薦模型

EasyRec可以幫助您快速構建推薦模型。本文以讀取MaxCompute表數據為例,介紹如何使用EasyRec進行模型訓練、配置任務例行化及部署模型。

前提條件

背景信息

EasyRec算法庫是阿里云PAI的推薦算法工具,包含DeepFM、DIN、MultiTower及DSSM等經典推薦排序和召回算法,可以幫助您在PAI平臺上快速訓練推薦算法模型、驗證模型效果及部署。EasyRec算法庫已經在信息推送、游戲、直播及競價廣告商等客戶的生產環境中部署,能夠大幅提升模型訓練效率。EasyRec算法庫的DataConfig配置和FeatureConfig配置要求如下:

  • DataConfig配置

    • input_fields

      EasyRec支持讀取MaxCompute數據或HDFS數據,MaxCompute表中的每一列或CSV文件中的某一列,都需要與data_config中的一個input_fields對應,且字段順序一致。input_fields的字段詳情如下表所示。

      字段

      描述

      示例

      input_name

      便于在feature_configsdata_config.label_fields中引用。

      input_fields: {
          input_name: "label"
          input_type: FLOAT
          default_val:""
        }

      input_type

      輸入類型,默認值為STRING。

      default_val

      數據為空時的默認填充值,通常設置為空字符串。根據input_type不同取值,default_val配置示例如下:

      • input_type為INT類型時,如果使用填充值6,則default_val配置為"6"

      • input_type為FLOAT類型時,如果使用填充值0.5,則default_val配置為"0.5"

      說明
      • input_fields的字段順序必須與MaxCompute表中的字段順序一致。

      • input_fields與CSV文件中的字段順序必須一致(CSV文件無Header)。

      • input_fields中的input_type字段必須與MaxCompute表或CSV文件對應列的類型一致,或是可以轉換的類型。例如:

        • MaxCompute表中STRING類型的“64”,可以轉換為INT類型的64

        • MaxCompute表中STRING類型的“abc”,不能轉換為INT類型。

    • input_type

      默認為CSVInput。如果在MaxCompute上,則使用OdpsInputV2。

    • separator

      使用CSV格式的輸入時,需要指定separator作為列之間的分隔符。默認使用半角逗號(,)分隔。您也可以使用二進制分隔符,例如'\001''\002'

    • label_fields

      Label相關的列名,根據算法需要可以設置多個,例如多目標算法。該列名必須在data_config中存在。

    • prefetch_size

      Data Prefetch,以Batch為單位,默認值為32。設置prefetch_size可以提高數據加載的速度,防止數據瓶頸。

    • shuffle

      設置該參數,可以對訓練數據進行Shuffle,以獲得更好的訓練結果。

    • shuffle_buffer_size

      Shuffle Queue的大小,表示每次Shuffle的數據量。該參數取值越大,訓練效果越好。建議在訓練前進行一次充分的Shuffle。

  • FeatureConfig配置

    常用特征主要包括:

    • IdFeature(離散值特征/ID類特征)

      例如user_iditem_idcategory_idage星座均屬于IdFeature。

    • RawFeature(連續值類特征)

      RawFeature類特征可以在Designer中先進行離散化(例如等頻、等距或自動離散化),變成IdFeature。也可以直接在feature_configs中配置離散化區間。

    • TagFeature(多值特征/標簽類特征)

      TagFeature類特征格式通常為“XX|XX|XX”。例如,文章標簽特征為“娛樂|搞笑|熱門”,其中豎杠(“|”)為分隔符。

    • SequenceFeature(行為序列類特征)

      SequenceFeature類特征格式通常為“XX|XX|XX”。例如,用戶行為序列特征為"item_id1|item_id2|item_id3",其中豎杠(“|”)為分隔符。該特征通常在DIN算法或BST算法中使用。

    • ComboFeature(組合特征)

      對輸入的離散值進行組合

    各特征的共用字段及特有字段如下。

    表 1. 各特征的共用字段

    字段

    描述

    input_names

    輸入的字段。根據實際需要,可以設置1個或多個字段。

    feature_name

    特征名稱。如果未設置該字段,則默認為input_names[0]

    shared_names

    其它輸入的數據列。僅適用于只有一個input_names的特征,不適用于有多個input_names的特征(例如ComboFeature)。

    表 2. 各特征的特有字段

    特征

    字段

    描述

    示例

    IdFeature

    embedding_dim

    Embedding Dimension。

    feature_configs {
      input_names: "uid"
      feature_type: IdFeature
      embedding_dim: 64
      hash_bucket_size: 100000
    }
    重要

    不能同時指定hash_bucket_sizenum_bucketsvocab_listvocab_file,只能指定其中之一。

    hash_bucket_size

    Hash Bucket的大小,取值策略如下:

    • 對于user_id等規模比較大的特征,Hash沖突影響比較小,可以將hash_bucket_size設置為number_user_ids/ratioratio通常為10~100。

    • 對于星座等規模比較小的特征,Hash沖突影響比較大,可以將hash_bucket_size設置為number_xingzuo_ids*ratioratio通常為5~10。

    num_buckets

    Buckets Number。僅當輸入為INT類型時,可以使用該參數。

    vocab_list

    指定詞表,適合取值比較少,可以枚舉的特征。例如星期、月份或星座。

    vocab_file

    使用文件指定詞表,用于指定比較大的詞表。

    RawFeature

    boundaries

    分桶的值,通過一個數組進行設置。

    feature_configs {
      input_names: "ctr"
      feature_type: RawFeature
      boundaries: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
      embedding_dim: 8
    }

    embedding_dim

    如果設置了分桶,則需要配置Embedding Dimension。

    TagFeature

    separator

    分割符,默認為豎杠(“|”)。

    feature_configs {
      input_names: "article_tag"
      feature_type: TagFeature
      embedding_dim: 16
      hash_bucket_size: 1000
    }

    hash_bucket_size

    Hash分桶大小,配置策略與IdFeature類似。

    num_buckets

    輸入為整數時(例如6|20|32),可以配置該參數為其中的最大值。

    embedding_dim

    Embedding Dimension,與IdFeature中的該參數類似。

    SequenceFeature

    embedding_dim

    Embedding Dimension。

    feature_configs {
       input_names: "play_sequence"
       feature_type: SequenceFeature
       embedding_dim: 64
       hash_bucket_size: 100000
    }

    hash_bucket_size

    配置策略同IdFeature中的該參數。

    ComboFeature

    input_names

    需要組合的特征名,數量大于或等于2,來自data_config.input_fields.input_name

    feature_configs {
            input_names: ["age", "sex"]
            feature_type: ComboFeature
            embedding_dim: 16
            hash_bucket_size: 1000
         }

    embedding_dim

    Embedding Dimension,類似IdFeature中的該參數。

    hash_bucket_size

    Hash Bucket的大小 。

數據集

本文使用天池平臺上的淘寶點擊數據,詳情請參見數據集

步驟一:創建工作流

  1. 進入數據開發頁面。

    登錄DataWorks控制臺,切換至目標地域后,單擊左側導航欄的數據建模與開發 > 數據開發,在下拉框中選擇對應工作空間后單擊進入數據開發

  2. 數據開發頁面,鼠標懸停至新建圖標,單擊新建業務流程

  3. 新建業務流程對話框中,輸入業務名稱描述

  4. 單擊新建

  5. 在業務流程頁面,創建PAI Designer節點。

    1. 單擊新建節點,拖拽算法 > PAI Designer至右側畫布。

    2. 新建節點頁面的名稱文本框中,輸入prepare_train_data,其他參數使用默認值。

    3. 單擊確認

  6. 在業務流程頁面,創建MaxCompute SQL節點。

    1. 拖拽MaxCompute > ODPS SQL至右側畫布。

    2. 新建節點頁面的名稱文本框,輸入EasyRec_train,其他參數使用默認值。

    3. 單擊確認

  7. 在業務流程頁面,創建Shell節點。

    1. 拖拽通用 > Shell至右側畫布。

    2. 新建節點頁面的名稱文本框,輸入deploy,其他參數使用默認值。

    3. 單擊確認

步驟二:訓練并部署模型

  1. 準備數據。

    您可以直接使用處理后的樣本表:訓練表為pai_online_project.easyrec_demo_taobao_train_data,評估表為pai_online_project.easyrec_demo_taobao_test_data,即省略PAI Designer節點,直接從MaxCompute SQL節點開始。

    您也可以按照以下流程準備數據。將天池平臺上淘寶點擊數據整合后的表為pai_online_project.easyrec_demo_taobao_ori_data,該數據集除大部分STRING類型的IdFeature類特征外,還有一列DOUBLE類型的Price特征(RawFeature類特征),需要使用Designer分箱組件進行特征工程,您可以為已創建的機器學習節點關聯如下Designer工作流(只能關聯與DataWorks在同一地域的Designer工作流),詳情請參見創建機器學習(PAI)節點image具體的實驗流程如下。

    序號

    描述

    讀入數據。

    分割出訓練數據。

    分割出評估數據。

    Shuffle過程。

    使用分箱組件,進行等頻離散。

    根據等頻離散的結果,對數據進行轉換。

    將訓練數據寫入表。

    將評估數據寫入表。

  2. 訓練并導出模型。

    在已創建的DataWorks的MaxCompute SQL節點中,執行如下命令,進行模型訓練。

    PAI -project algo_public -name easy_rec_ext 
        -Darn="acs:ram::XXXXX:role/AliyunODPSPAIDefaultRole" 
        -Dbuckets="oss://examplebucket/xxx/" 
        -Dcluster="{\"ps\":{\"count\":2,\"cpu\":1000,\"memory\":40000},\"worker\":{\"count\":8,\"cpu\":1000,\"memory\":40000}}" 
        -Dcmd="train" 
        -Dconfig="oss://examplebucket/xxx/multitower.config" 
        -DossHost="oss-cn-region_name-internal.aliyuncs.com" 
        -Dtrain_tables="odps://pai_online_project/tables/easyrec_demo_taobao_train_data" 
        -Deval_tables="odps://pai_online_project/tables/easyrec_demo_taobao_test_data"
        -Dmodel_dir="oss://examplebucket/xxx/"
        -Dwith_evaluator=1;

    命令中的參數如下所示,需要根據實際情況替換參數值。

    參數

    描述

    示例

    project

    工程名。EasyRec算法所在的project,默認為algo_public,通常不需要修改。僅特殊情況(EasyRec官方另行通知時)才需要修改。

    algo_public

    arn

    ARN的角色名稱。您可以登錄PAI控制臺,在開通和授權 > 全部云產品依賴頁面的Designer區域,單擊操作列下的查看授權信息,獲取arn。

    "acs:ram::XXXXX:role/AliyunODPSPAIDefaultRole"

    buckets

    用于指定算法將要讀取的OSS bucket。

    "oss://examplebucket/xxx/"

    cluster

    分布式運行任務信息,詳情請參見PAI-TF任務參數介紹中的cluster參數介紹。

    "{\"ps\":{\"count\":2,\"cpu\":1000,\"memory\":40000},\"worker\":{\"count\":8,\"cpu\":1000,\"memory\":40000}}"

    cmd

    需要配置為固定值train

    "train"

    config

    模型Config文件的OSS路徑,您可以參考此處的MultiTower模型Config文件(下載Config示例)。

    "oss://examplebucket/xxx/multitower.config"

    ossHost

    OSS Endpoint,地域和Endpoint對照表請參見公共云下OSS Region和Endpoint對照表

    oss-cn-region_name-internal.aliyuncs.com

    train_tables

    訓練表,多個訓練表之間使用半角逗號(,)分隔。

    "odps://pai_online_project/tables/easyrec_demo_taobao_train_data"

    eval_tables

    評估表,多個評估表之間使用半角逗號(,)分隔。

    "odps://pai_online_project/tables/easyrec_demo_taobao_test_data"

    model_dir

    模型目錄,將會覆蓋config配置的模型路徑,一般在周期性調度時使用。

    "oss://examplebucket/xxx/"

    with_evaluator

    是否在訓練時使用一個Worker進行評估。通常設置8個Worker,其中七個Worker進行訓練,一個Worker進行評估(計算測試集的AUC)。取值范圍如下:

    • 0:訓練時不使用Worker進行評估。

    • 1:訓練時使用一個Worker進行評估。

    1

    訓練完成后,系統會自動將模型導出至model_dir配置路徑下的/export/final/目錄。

  3. 部署模型(該步驟中的命令均在已創建的DataWorks的Shell節點中執行)。

    1. 執行如下命令編寫描述服務相關信息(模型存儲位置及資源規格等)的JSON文件,該文件的詳細參數請參見創建服務,如下僅給出編寫JSON文件的示例命令,需要您根據實際情況修改參數值。

      ymd=$1 #獲取例行化配置中設置的日期參數。
      cat << EOF > echo.json
      {
        "cloud": {
        	"computing": {
          	"instance_type": "ecs.c7.large"
            }
          },
       	"metadata": {
        	"instance": 1,
         	"name": "model_name" 
       },
       "model_path": "your_model_path",
       "processor": "tensorflow_cpu_1.12", 
      }
      EOF

      其中:model_path需要配置為上述步驟已生成的模型路徑;name配置為模型服務名稱,同地域內唯一。

    2. 部署模型。

      您可以根據實際部署情況,選擇創建服務或更新服務:

      • 如果首次部署服務,則可以使用如下命令,創建新服務。

        /home/admin/usertools/tools/eascmd -i <yourAccessId> -k <yourAccessKey> -e <OSS Endpoint> create <echo.json>

        參數

        描述

        示例

        <yourAccessId>

        阿里云賬號的AccessKey ID。

        <yourAccessKey>

        阿里云賬號的AccessKey Secret。

        <OSS Endpoint>

        將模型部署至某地域,此參數為該地域對應的Endpoint,取值詳情請參見命令使用說明中地域與Endpoint的對應關系表。

        pai-eas.cn-shanghai.aliyuncs.com

        <echo.json>

        上一步中編寫的描述服務相關信息(模型存儲位置及資源規格等)的JSON文件名稱。

        echo.json

      • 如果存在已經部署的服務,則可以使用如下命令,更新服務。

        /home/admin/usertools/tools/eascmd -i <yourAccessId> -k <yourAccessKey> -e <Endpoint> modify <cn-beijing/model_name> -s echo.json

        參數

        描述

        示例

        <yourAccessId>

        阿里云賬號的AccessKey ID。

        <yourAccessKey>

        阿里云賬號的AccessKey Secret。

        <Endpoint>

        將模型部署至某地域,此參數為該地域對應的Endpoint,取值詳情請參見命令使用說明中地域與Endpoint的對應關系表。

        pai-eas.cn-shanghai.aliyuncs.com

        <cn-beijing/model_name>

        模型地址與OSS數據所在地域一致。該模型名稱指描述服務相關信息JSON文件中,name參數的取值。

        cn-beijing/model_name

        <echo.json>

        描述服務相關信息的JSON文件名稱。

        echo.json

步驟三:配置任務例行化

以天級別更新的模型為例,需要每天例行進行以下操作:

  1. 生成訓練和評估樣本表。

  2. 調用EasyRec進行訓練并導出模型。

  3. 將EasyRec導出后的模型部署到EAS

在DataWorks中創建的業務流程如下所示。業務流程您需要自行配置各節點的屬性及調度依賴等關系,此處僅以EasyRec_train節點為例,介紹如何配置節點屬性及調度依賴。

  1. 打開節點頁面。

    您可以通過以下任意一種方式打開EasyRec_train節點:

    • 雙擊EasyRec_train節點。

    • 右鍵單擊EasyRec_train,在快捷菜單中,單擊打開節點

  2. 在節點頁面,單擊頁面右側的調度配置

  3. 調度配置頁面的調度參數區域,配置時間參數,以區分不同天的任務。image

  4. 調度配置頁面的調度依賴區域,配置上下游節點,詳情請參見配置同周期調度依賴image

    說明

    如果節點無上游依賴,則使用工作空間根節點。

  5. 單擊Shell節點頁面上方的image圖標,保存配置。

  6. 在業務流程頁面,單擊上方的運行圖標,運行Shell節點。

Debug

運行EasyRec命令時,DataWorks會打印Logview。您可以通過Logview快速查看模型訓練效果或定位錯誤。

  1. 在瀏覽器中打開Logview(即下圖紅框中的鏈接)。Logview

  2. 在日志頁面的Job Details頁簽,雙擊ODPS Tasks實例。

  3. 在日志頁面的ODPS Tasks區域,單擊ODPS Tasks實例。

  4. 在Worker運行頁面,可以根據需要選擇查看對應的實例。

    image其中:

    • worker 0為訓練worker(worker 0、worker 2~worker 7均為訓練worker),單擊StdEarr列下的image圖標,即可查看訓練進程。訓練進程log_step_count_steps步,打印一次日志。

    • worker1為評估worker,單擊stderr列下的image圖標,即可查看模型在評估集上的指標。指標

后續步驟

您可以在EAS中查看已經部署的模型,并在線調用該服務,詳情請參見服務在線調試