【從零開始學推薦】特征工程

制作特征和標簽, 轉成監督學習問題

我們先捋一下基于原始的給定數據, 有哪些特征可以直接利用:

  1. 文章的自身特征, category_id表示這文章的類型, created_at_ts表示文章建立的時間, 這個關系著文章的時效性, words_count是文章的字數, 一般字數太長我們不太喜歡點擊, 也不排除有人就喜歡讀長文。
  2. 文章的內容embedding特征, 這個召回的時候用過, 這里可以選擇使用, 也可以選擇不用, 也可以嘗試其他類型的embedding特征, 比如W2V等
  3. 用戶的設備特征信息

上面這些直接可以用的特征, 待做完特征工程之后, 直接就可以根據article_id或者是user_id把這些特征加入進去。 但是我們需要先基于召回的結果, 構造一些特征,然后制作標簽,形成一個監督學習的數據集。

構造監督數據集的思路, 根據召回結果, 我們會得到一個{user_id: [可能點擊的文章列表]}形式的字典。 那么我們就可以對于每個用戶, 每篇可能點擊的文章構造一個監督測試集, 比如對于用戶user1, 假設得到的他的召回列表{user1: [item1, item2, item3]}, 我們就可以得到三行數據(user1, item1), (user1, item2), (user1, item3)的形式, 這就是監督測試集時候的前兩列特征。

構造特征的思路是這樣, 我們知道每個用戶的點擊文章是與其歷史點擊的文章信息是有很大關聯的, 比如同一個主題, 相似等等。 所以特征構造這塊很重要的一系列特征是要結合用戶的歷史點擊文章信息。我們已經得到了每個用戶及點擊候選文章的兩列的一個數據集, 而我們的目的是要預測最后一次點擊的文章, 比較自然的一個思路就是和其最后幾次點擊的文章產生關系, 這樣既考慮了其歷史點擊文章信息, 又得離最后一次點擊較近,因為新聞很大的一個特點就是注重時效性。 往往用戶的最后一次點擊會和其最后幾次點擊有很大的關聯。 所以我們就可以對于每個候選文章, 做出與最后幾次點擊相關的特征如下:

  1. 候選item與最后幾次點擊的相似性特征(embedding內積) --- 這個直接關聯用戶歷史行為
  2. 候選item與最后幾次點擊的相似性特征的統計特征 --- 統計特征可以減少一些波動和異常
  3. 候選item與最后幾次點擊文章的字數差的特征 --- 可以通過字數看用戶偏好
  4. 候選item與最后幾次點擊的文章建立的時間差特征 --- 時間差特征可以看出該用戶對于文章的實時性的偏好

還需要考慮一下 5. 如果使用了youtube召回的話, 我們還可以制作用戶與候選item的相似特征

當然, 上面只是提供了一種基于用戶歷史行為做特征工程的思路, 大家也可以思維風暴一下,嘗試一些其他的特征。 下面我們就實現上面的這些特征的制作, 下面的邏輯是這樣:

  1. 我們首先獲得用戶的最后一次點擊操作和用戶的歷史點擊, 這個基于我們的日志數據集做
  2. 基于用戶的歷史行為制作特征, 這個會用到用戶的歷史點擊表, 最后的召回列表, 文章的信息表和embedding向量
  3. 制作標簽, 形成最后的監督學習數據集

返回多路召回列表或者單路召回

def get_recall_list(save_path, single_recall_model=None, multi_recall=False):
if multi_recall:
return pickle.load(open(save_path + 'final_recall_items_dict.pkl', 'rb'))

if single_recall_model == 'i2i_itemcf':
    return pickle.load(open(save_path + 'itemcf_recall_dict.pkl', 'rb'))
elif single_recall_model == 'i2i_emb_itemcf':
    return pickle.load(open(save_path + 'itemcf_emb_dict.pkl', 'rb'))
elif single_recall_model == 'user_cf':
    return pickle.load(open(save_path + 'youtubednn_usercf_dict.pkl', 'rb'))
elif single_recall_model == 'youtubednn':
    return pickle.load(open(save_path + 'youtube_u2i_dict.pkl', 'rb'))

def trian_item_word2vec(click_df, embed_size=64, save_name='item_w2v_emb.pkl', split_char=' '):
click_df = click_df.sort_values('click_timestamp')
# 只有轉換成字符串才可以進行訓練
click_df['click_article_id'] = click_df['click_article_id'].astype(str)
# 轉換成句子的形式
docs = click_df.groupby(['user_id'])['click_article_id'].apply(lambda x: list(x)).reset_index()
docs = docs['click_article_id'].values.tolist()

# 為了方便查看訓練的進度,這里設定一個log信息
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', level=logging.INFO)

# 這里的參數對訓練得到的向量影響也很大,默認負采樣為5
w2v = Word2Vec(docs, size=16, sg=1, window=5, seed=2020, workers=24, min_count=1, iter=1)

# 保存成字典的形式
item_w2v_emb_dict = {k: w2v[k] for k in click_df['click_article_id']}
pickle.dump(item_w2v_emb_dict, open(save_path + 'item_w2v_emb.pkl', 'wb'))

return item_w2v_emb_
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容