今天分享的是一個有關LTR框架的介紹,LTR是Learning-To-Rank,解決的是排序問題。排序問題在人工智慧領域應用很廣,比如在Gmail裡搜索一個關鍵詞,返回最匹配的郵件。再比如進入Google Drive後的一些文章推薦。
傲海的分享主要參考Google2019年發布的一篇論文《TF-Ranking:Scalable TensorFlow Library for Learning-to-Rank》,蠻長的,看了小一周才學習完。這個庫已經開源了,大家可以在下方地址訪問並使用:
https://github.com/tensorflow/ranking
介紹LTR的話先要講下Pointwise、Pairwise、Listwise這三個模式的區別,以生活中的一個例子說明:
上圖是一個點餐界面,假設我們強制用戶只能在界面中點一個菜,那麼Pointwise、Pairwise、Listwise是如何構建訓練過程的呢:
Pointwise、Pairwise、Listwise的訓練模式的不同主要會影響訓練中使用的Metrics評價方法,也就是DCG、NDCG等,這裡就不展開說。
大部分同學可能還是偏應用層,所以廢話不多,直接介紹TF-LTR的框架。
TF裡面LTR框架把整個排序流程分為Training和Serving兩個部分,其中包含input_fn、transform_fn、scoring_fn、ranking head這幾個大的模塊,下面就分別介紹下。
1.input_fn
input_fn是一個數據IO的框架,這個框架可以從存儲空間拉取數據,也可以從進程中直接讀取。兼容了Libsvm、tf.sequence等數據格式,也可以自定義。
有一個定義挺有意思的,他把per item feature定義叫做3-D tensor,就是這樣的三元組(queries,items,feature)。context feature定義叫做2-D tensor,是個二元組(queries,feature)。PS:這個可以用到以後寫架構PPT裡面,看上去很專業的樣子。
2.transform_fn
這一步驟做的是特徵轉換,把sparse feature轉換成dense feature。總之,特徵embedding就得了,想辦法把特徵給embedding了。
3.scoring_fn
定義打分規則,在training和predicting的過程中用這個函數進行打分。官方給的例子挺奇怪,為啥打分函數要這麼複雜--
4.ranking模塊
首先要定義ranking loss和ranking metric,這也是模型訓練的最基本流程,按照Pointwise、Pairwise、Listwise的不同模式在這裡配置metric函數就好了。
ranking模塊的輸入是scoring_fn的分數以及真實的客戶行為label,根據這兩個反饋計算loss,根據metric不斷迭代模型,最終實現收斂。
TensorFlow在向業務層不斷貢獻各種開源庫,把整個人工智慧應用領域的門檻降低,這是個挺好的現象,後續如果做推薦或者文章檢索可以考慮使用TF-LTR庫試試。