【云音乐】从手游APP到云音乐视频标签分类,时隔3个月再次面对多标签任务,终于摸索出了一些小经验。附自定义评估函数代码
【云音樂(lè)】從手游APP到云音樂(lè)視頻標(biāo)簽分類,時(shí)隔3個(gè)月再次面對(duì)多標(biāo)簽任務(wù),終于摸索出了一些小經(jīng)驗(yàn)。
- 前言
- 一個(gè)好用的評(píng)估函數(shù)
- 常用的多標(biāo)簽任務(wù)評(píng)估函數(shù)
- 我選擇平均準(zhǔn)確率
- 合理的特征處理和模型
- 特征處理
- 合理的模型
- 如何面對(duì)熱門標(biāo)簽對(duì)冷門標(biāo)簽的壓制
- 總結(jié)
前言
之前在個(gè)推實(shí)習(xí)的時(shí)候,接到了對(duì)手游app的多標(biāo)簽分類任務(wù),當(dāng)初應(yīng)該是10+個(gè)一級(jí)標(biāo)簽,20+個(gè)二級(jí)標(biāo)簽,兩者之間是層次關(guān)系,當(dāng)初還是懵懵懂懂只知道把所有爬下來(lái)的特征(文本、icon、包大小等)提取特征之后一股腦的拼接在一起然后隨便疊幾個(gè)dense層就sigmoid輸出了。效果也一直不理想,對(duì)于結(jié)果的觀察除了用tf自帶的acc評(píng)估函數(shù),就是人工加規(guī)則,做的非常苦惱。
最近在網(wǎng)易云實(shí)習(xí),由于運(yùn)維給mlog的打標(biāo)并不標(biāo)準(zhǔn),為了給mlog和user進(jìn)行打散,所以需要做一個(gè)mlog多標(biāo)簽分類模型,對(duì)80w個(gè)mlog進(jìn)行預(yù)測(cè),共有666個(gè)標(biāo)簽。雖有都有現(xiàn)成的特征,但這次吸取了上次的經(jīng)驗(yàn),整個(gè)流程下來(lái)明顯順暢了很多,因此在這里想把自己的經(jīng)驗(yàn)分享給大家。(代碼和數(shù)據(jù)恕不能公開(kāi))
一個(gè)好用的評(píng)估函數(shù)
一個(gè)準(zhǔn)確好用的多標(biāo)簽分類評(píng)估函數(shù),直接決定了你優(yōu)化模型的方向,也是你的指路明燈,之前一直用的acc,這明顯沒(méi)有考慮到標(biāo)簽不平衡的問(wèn)題,這次任務(wù)中最多的標(biāo)簽覆蓋率達(dá)到萬(wàn),最少卻只有幾百。因此存在正負(fù)樣本不平衡的情況。
解決方法:
常用的多標(biāo)簽任務(wù)評(píng)估函數(shù)
關(guān)于評(píng)估函數(shù)的詳細(xì)介紹和更多其他評(píng)估指標(biāo)可參考B站視頻:多標(biāo)簽分類的評(píng)價(jià)指標(biāo)(一)
我選擇平均準(zhǔn)確率
選擇平均準(zhǔn)確率這一評(píng)估指標(biāo)的理由:
1. 該評(píng)估指標(biāo)同時(shí)關(guān)注了正樣本和負(fù)樣本,考慮到了全局標(biāo)簽的可能性。
2. 相比于排序損失,其實(shí)現(xiàn)邏輯更加簡(jiǎn)明,自己實(shí)現(xiàn)起來(lái)比較友好。
3. 相比于漢明損失,由于閾值不好界定,人工選擇閾值對(duì)評(píng)估函數(shù)有較大影響。
實(shí)現(xiàn)代碼:
@tf.function def average_acc(y_true,y_pred):sum_ = tf.reduce_sum(y_true,-1) + 1e-8index = tf.argsort(-y_pred)rank = tf.argsort(index) +1c = tf.where(y_true==1,y_pred,0)index2 = tf.argsort(-c)rank2 = tf.argsort(index2) +1ax = tf.cast(tf.reduce_sum(tf.where(y_true==1,rank2/rank,0),-1),tf.float32)return tf.reduce_mean(ax/sum_)合理的特征處理和模型
特征處理
合理的模型
分域?qū)W習(xí)特征再concat!!!這樣做比直接concat后接dense會(huì)有不錯(cuò)的提升!我們希望模型能對(duì)各個(gè)域的特征單獨(dú)進(jìn)行抽象和學(xué)習(xí)充分后再將這些特征拼接在一起。這符合模型學(xué)習(xí)的邏輯。最簡(jiǎn)單的具體做法:將來(lái)自同一個(gè)域的維度特征單獨(dú)接dense層進(jìn)行抽象,之后將所有域的dense層結(jié)果憑借,再接dense層進(jìn)行特征的交叉學(xué)習(xí)。這一方法可以根據(jù)自己的特征進(jìn)行多樣的變化,如何抽象同一個(gè)域的特征有很多方法。
模型1:
使用特征:—
特征處理:特征直接concat
模型分?jǐn)?shù):0.7371
模型2:
使用特征:—
特征處理:特征分別抽象后concat
模型分?jǐn)?shù):0.7583
請(qǐng)使用focal loss 或 冪次懲罰,這能給多標(biāo)簽任務(wù)帶來(lái)不錯(cuò)的提升。具體實(shí)現(xiàn)可以參考我之前的博客。
如何面對(duì)熱門標(biāo)簽對(duì)冷門標(biāo)簽的壓制
(也嘗試過(guò)直接在模型訓(xùn)練過(guò)程中乘上該權(quán)重,讓模型適應(yīng)該權(quán)重,也有不錯(cuò)的效果。)
總結(jié)
最后可以根據(jù)業(yè)務(wù)需求對(duì)標(biāo)簽做一些剔除與合并。
我們通過(guò)最后得到的mlog多標(biāo)簽結(jié)果,去計(jì)算用戶的標(biāo)簽偏好,將這兩者的新特征加入到雙塔模型中進(jìn)行嘗試,模型效果有不錯(cuò)的提升。
總結(jié)
以上是生活随笔為你收集整理的【云音乐】从手游APP到云音乐视频标签分类,时隔3个月再次面对多标签任务,终于摸索出了一些小经验。附自定义评估函数代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信息抽取(二)花了一个星期走了无数条弯路
- 下一篇: 信息抽取(三)三元关系抽取——改良后的层