带你读《2022技术人的百宝黑皮书》——基于特征全埋点的精排ODL实践总结(3) https://developer.aliyun.com/article/1246866?groupCode=taobaotech
event流程构建
首先对曝光/点击和全埋点特征TT流进行日志解析生成对应的event,在 PyPorsche 中,实时特征被称为 Event。
每个event表具有自己的schema和主键,注意event_ids为业务的唯一主键,index_fields中需填入后续会用于和其他表进行join操作的字段。
以下是将曝光的TT流解析并转换为对应event的代码片段:
tt_source = TTSource(TT(topic='dwd_ihome_lapp_content_expo_sample', access_id='', access_key=''), parser_clazz='com.alibaba.pyporsche.ihome.IhomeLappLogParser', schema=ihome_tt_schema)#schema tt_source = session.register_table(tt_source) ihomelapp_sink = session.register_table( EventSink(Event(event_name=EVENT_NAME_EXPO, event_ids=['pv_id', 'item_id'], index_fields=['pv_id', 'user_id', 'item_id']))) tt_source.insert(ihomelapp_sink)
在上面的片段中,曝光event具有5个字段,其中pv_id,item_id,user_id,record_timestamp 这4个属性是通过ihome_tt_schema定义得到,而event_id是通过event_ids指定根据pv_id和item_id拼接得到。表的schema如下:
注意,由于xDeepCTR 3.0中将label放置在了features字段中,需要在xfc_event构建时将label特征从fg.json中移除,否则可能会导致最终产出的流式样本label为空。
流式样本骨架构建
在backbone的构建中,需指定一个主event,并从主event出发关联起若干event。在每平每屋场景中,曝光event被作为主event并以keyed_join的形式关联起一跳点击event和详情页的二跳点击event以及对应的全埋点特征event。
以下是将曝光event,一跳点击和二跳点击以及全埋点特征event进行关联并产生backbone的代码片段:
pv_event = session.get_table('event.' + EVENT_NAME_EXPO) # 主event full_tracking_event = session.get_table('event.' + EVENT_NAME_FULL_TRACK) click_event = session.get_table('event.' + EVENT_NAME_CLICK) detail_click_event = session.get_table('event.' + EVENT_NAME_DETAIL_CLICK) wide_table = pv_event.keyed_join(click_event, condition='pv_id=pv_id,item_id=item_id', join_type='ONE_TO_MANY', left_wait_second=630,tps=100) wide_table = wide_table.keyed_join(detail_click_event, condition='pv_id=pv_id,item_id=item_id', join_type='ONE_TO_MANY', left_wait_second=1,tps=100) output_table = wide_table.keyed_join(full_tracking_event, 'pv_id=pv_id,item_id=item_id', join_- type='ONE_TO_ONE', left_wait_second=-630,tps=3000) output_table.insert(session.register_table(BackboneSink(Backbone(BACKBONE_NAME))))
通过prosche任务页面的监控可以看到在当前等待时间下各event中数据被join上的的比例,pos表示join上的记录,neg表示没有被join上的记录,根据丢弃比例可以调整等待时间left_wait_second。
带你读《2022技术人的百宝黑皮书》——基于特征全埋点的精排ODL实践总结(5) https://developer.aliyun.com/article/1246863?groupCode=taobaotech