自GitHub
參與:蔣思源、吳攀
生成對抗網絡(GAN)是近段時間以來最受研究者關注的機器學習方法之一,深度學習泰斗 Yann LeCun 就曾多次談到 這種機器學習理念的巨大價值和未來前景。在本文中,機器之心總結了 GitHub 上兩篇關于 GAN 的資源,其中一篇介紹了 GAN 的一些引人關注的新理論和實踐(如 Wasserstein GAN),另一篇則集中展示了大量 GAN 相關的論文。
以下是兩篇原文的鏈接:
GAN 理論&實踐的新進展:https://casmls.github.io/general/2017/04/13/gan.html
GAN 論文列表項目:https://github.com/nightrome/really-awesome-gan
GAN 理論&實踐的新進展
首先我們看看 Liping Liu 在 github.io 上發布的這篇介紹了 GAN 理論和實踐上的新進展的文章。這篇文章對兩篇 GAN 相關的論文進行了探討;其中第一篇是 Arora et al. 的《Generalization and Equilibrium in Generative Adversarial Nets》,該論文是一篇對 GAN 的理論研究;第二篇則是 Gulrajani et al. 的《Improved Training of Wasserstein GANs》,其介紹了一種用于 Facebook 最近提出并引起了廣泛關注的 Wasserstein GAN 的新訓練方法。下面的視頻對第一篇論文給出了很好的介紹:
GAN 和 Wasserstein GAN
GAN 訓練是一個兩方博弈過程,其中生成器(generator)的目標是最小化其生成的分布和數據分布之間的差異,而判別器(discriminator)的工作則是盡力區分生成器分布的樣本和真實數據分布的樣本。當判別器的表現不比隨機亂猜更好時,我們就認為生成器「獲勝」了。
基本 GAN 的優化問題是一個「最小-最大問題(min-max problem)」:
簡單解釋一下,最好的判別器會給出生成器分布 G(h),h~pNormal 與數據分布 pdata 之間的差的度量。如果我們有 pdata(x) 且該判別器可以是任意函數,那么該生成器的優化目標就是最小化 pdata 和 G(h) 之間的 Jensen-Shannon 散度。
在實際中,人們已經在使用 Wasserstein 距離來度量兩個分布之間的差異了。可參閱以下文章:
Robin Winstanley 的《Modified GANs》:https://casmls.github.io/general/2017/02/23/modified-gans.html
數據分布和生成分布之間的 Wasserstein 距離是:
其中 L1 表示 1-Lipschitz 函數集;f 是指判別器,其采用了神經網絡的形式,并通過 GAN 訓練來學習。其目標是最小化這兩個分布之間的 Wasserstein 距離。
第一篇論文解決了以下問題:
1. 差異的度量定義在分布之上,但是當目標是使用有限樣本計算的時候,我們能得到什么結果?
2. 訓練能否達到均衡?
3.「達到均衡」究竟是什么意思?
第二篇論文研究了這個懲罰優化器(penalizing the optimizer)的問題——以便其在 1-Lipschitz 空間中近似找到最優的判別器。
論文 1:GAN 中的泛化與均衡(Generalization and Equilibrium in Generative Adversarial Nets)
論文地址:https://arxiv.org/abs/1703.00573
距離度量的泛化
Arora et al 引進了一種新的距離度量:神經網絡散度(neural network divergence)。該距離度量定義在由神經網絡生成的分布上。
定理:當樣本空間足夠大,兩個分布之間的距離可以由各自樣本間的距離逼近。
均衡
直觀解釋:一個強大的生成器總是能贏得對抗,因為它能使用無限的混合分量逼近數據的分布。弱一些的生成器使用有限但又足夠多的混合分量也能近似逼近贏得博弈。
設置博弈:u 和 v 代表著生成器和判別器的純策略。博弈的收益函數 F(u,v) 就是該 GAN 的目標函數:
根據馮·諾依曼的一個定理,混合策略總是能實現均衡,但在該理想情況下,生成器和判別器都需要考慮無限的純策略。本論文提出有限純策略的*?*-近似均衡。
定理:給定生成器和判別器足夠多的混合分量,生成器能近似贏得博弈。
MIX+GAN:生成器與判別器的混合
通過理論分析,該論文建議使用生成器和判別器的混合。模型的目標是最小化生成器 T 和其混合權重,判別器 T 和其混合權重。在這里 w=softmax(α)。
該論文使用 DCGAN 作為基本模型,并展示了 MIX+DCGAN 能生成更逼真的圖像,且比 DCGAN 有更高的起始分。參閱論文《Unsupervised representation learning with deep convolutional generative adversarial networks》by Radford, Alec, et al. https://arxiv.org/abs/1511.06434
圖 4:MIX+DCGAN 和 DCGAN 的訓練曲線
論文 2:使用梯度懲罰的 Wasserstein GAN 訓練(Wasserstein GAN training with gradient penalty)
這篇論文基于一個好結果——即最優的判別器(在該論文中被稱為 critic)在幾乎任何位置都有 norm 1 的梯度。這里的梯度是關于 x 的,而非該判別器的參數。
由于以下原因,梯度裁剪(gradient clipping)效果并不是很好:
1. 這個帶有梯度裁剪的優化器會在一個比 1-Lipschitz 小的空間中搜索該判別器,所以其會使該判別器偏向更簡單的函數。
2. 被裁剪后的梯度在反向傳播通過網絡層的過程中會消失或爆炸。
梯度的理論結果和梯度裁剪的缺點激發了新方法「梯度懲罰」的提出。如果梯度的標準不是一個,判別器將得到懲罰。目標函數為:
x_hat 是在直線 x 和 x_bar 之間的隨機點。
在實驗中,使用梯度懲罰的 GAN 訓練要比使用權重裁剪的擁有更快的收斂速度。在圖像生成和語言建模任務中,使用該論文提出的方法訓練模型常常要比其他模型擁有更好的結果。
在了解生成對抗網絡的最新進展之后,下面我們列出了 GitHub 用戶 Holger Caesar 整理的 GAN 資源。
研討會
NIPS 2016 對抗性訓練研討會 [https://sites.google.com/site/nips2016adversarial/] [http://www.inference.vc/my-summary-of-adversarial-training-nips-workshop/]
教程和技術博客
How to Train a GAN? Tips and tricks to make GANs work [https://github.com/soumith/ganhacks]
NIPS 2016 Tutorial: Generative Adversarial Networks [https://arxiv.org/abs/1701.00160]
On the intuition behind deep learning & GANs—towards a fundamental understanding [https://blog.waya.ai/introduction-to-gans-a-boxing-match-b-w-neural-nets-b4e5319cc935]
OpenAI - Generative Models [https://blog.openai.com/generative-models/]
SimGANs - a game changer in unsupervised learning, self driving cars, and more [https://blog.waya.ai/simgans-applied-to-autonomous-driving-5a8c6676e36b]
論文
理論和機器學習
A Connection between Generative Adversarial Networks, Inverse Reinforcement Learning, and Energy-Based Models [https://arxiv.org/abs/1611.03852]
A General Retraining Framework for Scalable Adversarial Classification [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_2.pdf]
Adversarial Autoencoders [https://arxiv.org/abs/1511.05644]
Adversarial Discriminative Domain Adaptation [https://arxiv.org/abs/1702.05464]
Adversarial Generator-Encoder Networks [https://arxiv.org/pdf/1704.02304.pdf]
Adversarial Feature Learning [https://arxiv.org/abs/1605.09782]
Adversarially Learned Inference [https://arxiv.org/abs/1606.00704]
An Adversarial Regularisation for Semi-Supervised Training of Structured Output Neural Networks [https://arxiv.org/abs/1702.02382]
Associative Adversarial Networks [https://arxiv.org/abs/1611.06953]
b-GAN: New Framework of Generative Adversarial Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_4.pdf]
Boundary-Seeking Generative Adversarial Networks [https://arxiv.org/abs/1702.08431]
Conditional Generative Adversarial Nets [https://arxiv.org/abs/1411.1784]
Connecting Generative Adversarial Networks and Actor-Critic Methods [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_1.pdf]
Cooperative Training of Descriptor and Generator Networks [https://arxiv.org/abs/1609.09408]
Explaining and Harnessing Adversarial Examples [https://arxiv.org/abs/1412.6572]
f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization [https://arxiv.org/abs/1606.00709]
Generating images with recurrent adversarial networks [https://arxiv.org/abs/1602.05110]
Generative Adversarial Nets with Labeled Data by Activation Maximization [https://arxiv.org/abs/1703.02000]
Generative Adversarial Networks [https://arxiv.org/abs/1406.2661] [https://github.com/goodfeli/adversarial]
Generative Adversarial Residual Pairwise Networks for One Shot Learning [https://arxiv.org/abs/1703.08033]
Generative Adversarial Structured Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_14.pdf]
Generative Moment Matching Networks [https://arxiv.org/abs/1502.02761] [https://github.com/yujiali/gmmn]
Improved Techniques for Training GANs [https://arxiv.org/abs/1606.03498] [https://github.com/openai/improved-gan]
Inverting The Generator Of A Generative Adversarial Network [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_9.pdf]
Learning in Implicit Generative Models [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_10.pdf]
Learning to Discover Cross-Domain Relations with Generative Adversarial Networks [https://arxiv.org/abs/1703.05192]
Least Squares Generative Adversarial Networks [https://arxiv.org/abs/1611.04076]
Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities [https://arxiv.org/abs/1701.06264]
LR-GAN: Layered Recursive Generative Adversarial Networks for Image Generation [https://arxiv.org/abs/1703.01560]
Maximum-Likelihood Augmented Discrete Generative Adversarial Networks [https://arxiv.org/abs/1702.07983]
Mode Regularized Generative Adversarial Networks [https://arxiv.org/abs/1612.02136]
On the Quantitative Analysis of Decoder-Based Generative Models [https://arxiv.org/abs/1611.04273]
SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient [https://arxiv.org/abs/1609.05473]
Simple Black-Box Adversarial Perturbations for Deep Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_11.pdf]
Stacked Generative Adversarial Networks [https://arxiv.org/abs/1612.04357]
Training generative neural networks via Maximum Mean Discrepancy optimization [https://arxiv.org/abs/1505.03906]
Triple Generative Adversarial Nets [https://arxiv.org/abs/1703.02291]
Unrolled Generative Adversarial Networks [https://arxiv.org/abs/1611.02163]
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks [https://arxiv.org/abs/1511.06434] [https://github.com/Newmu/dcgan_code] [https://github.com/pytorch/examples/tree/master/dcgan][https://github.com/carpedm20/DCGAN-tensorflow] [https://github.com/soumith/dcgan.torch] [https://github.com/jacobgil/keras-dcgan]
Wasserstein GAN [https://arxiv.org/abs/1701.07875] [https://github.com/martinarjovsky/WassersteinGAN]
視覺應用
Adversarial Networks for the Detection of Aggressive Prostate Cancer [https://arxiv.org/abs/1702.08014]
Age Progression / Regression by Conditional Adversarial Autoencoder [https://arxiv.org/abs/1702.08423]
ArtGAN: Artwork Synthesis with Conditional Categorial GANs [https://arxiv.org/abs/1702.03410]
Conditional generative adversarial nets for convolutional face generation [http://www.foldl.me/uploads/2015/conditional-gans-face-generation/paper.pdf]
Conditional Image Synthesis with Auxiliary Classifier GANs [https://arxiv.org/abs/1610.09585]
Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks [https://arxiv.org/abs/1506.05751] [https://github.com/facebook/eyescream] [http://soumith.ch/eyescream/]
Deep multi-scale video prediction beyond mean square error [https://arxiv.org/abs/1511.05440] [https://github.com/dyelax/Adversarial_Video_Generation]
Full Resolution Image Compression with Recurrent Neural Networks [https://arxiv.org/abs/1608.05148]
Generate To Adapt: Aligning Domains using Generative Adversarial Networks [https://arxiv.org/pdf/1704.01705.pdf]
Generative Adversarial Text to Image Synthesis [https://arxiv.org/abs/1605.05396] [https://github.com/paarthneekhara/text-to-image]
Generative Visual Manipulation on the Natural Image Manifold [http://www.eecs.berkeley.edu/~junyanz/projects/gvm/] [https://youtu.be/9c4z6YsBGQ0] [https://arxiv.org/abs/1609.03552] [https://github.com/junyanz/iGAN]
Image De-raining Using a Conditional Generative Adversarial Network [https://arxiv.org/abs/1701.05957]
Image Generation and Editing with Variational Info Generative Adversarial Networks [https://arxiv.org/abs/1701.04568]
Image-to-Image Translation with Conditional Adversarial Networks [https://arxiv.org/abs/1611.07004] [https://github.com/phillipi/pix2pix]
Imitating Driver Behavior with Generative Adversarial Networks [https://arxiv.org/abs/1701.06699]
Invertible Conditional GANs for image editing [https://arxiv.org/abs/1611.06355]
Multi-view Generative Adversarial Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_13.pdf]
Neural Photo Editing with Introspective Adversarial Networks [https://c4209155-a-62cb3a1a-s-sites.googlegroups.com/site/nips2016adversarial/WAT16_paper_15.pdf]
Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network [https://arxiv.org/abs/1609.04802]
Recurrent Topic-Transition GAN for Visual Paragraph Generation [https://arxiv.org/abs/1703.07022]
RenderGAN: Generating Realistic Labeled Data [https://arxiv.org/abs/1611.01331]
SeGAN: Segmenting and Generating the Invisible [https://arxiv.org/abs/1703.10239]
Semantic Segmentation using Adversarial Networks [https://arxiv.org/abs/1611.08408]
Semi-Latent GAN: Learning to generate and modify facial images from attributes [https://arxiv.org/pdf/1704.02166.pdf]
TAC-GAN - Text Conditioned Auxiliary Classifier Generative Adversarial Network [https://arxiv.org/abs/1703.06412]
Towards Diverse and Natural Image Descriptions via a Conditional GAN [https://arxiv.org/abs/1703.06029]
Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in vitro [https://arxiv.org/abs/1701.07717]
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks [https://arxiv.org/abs/1703.10593]
Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery [https://arxiv.org/abs/1703.05921]
Unsupervised Cross-Domain Image Generation [https://arxiv.org/abs/1611.02200]
WaterGAN: Unsupervised Generative Network to Enable Real-time Color Correction of Monocular Underwater Images [https://arxiv.org/abs/1702.07392]
其它應用
Adversarial Training Methods for Semi-Supervised Text Classification [https://arxiv.org/abs/1605.07725]
Learning to Protect Communications with Adversarial Neural Cryptography [https://arxiv.org/abs/1610.06918] [https://blog.acolyer.org/2017/02/10/learning-to-protect-communications-with-adversarial-neural-cryptography/]
MidiNet: A Convolutional Generative Adversarial Network for Symbolic-domain Music Generation using 1D and 2D Conditions [https://arxiv.org/abs/1703.10847]
Semi-supervised Learning of Compact Document Representations with Deep Networks [http://www.cs.nyu.edu/~ranzato/publications/ranzato-icml08.pdf]
Steganographic Generative Adversarial Networks [https://arxiv.org/abs/1703.05502]
視頻
Generative Adversarial Networks by Ian Goodfellow [https://channel9.msdn.com/Events/Neural-Information-Processing-Systems-Conference/Neural-Information-Processing-Systems-Conference-NIPS-2016/Generative-Adversarial-Networks]
Tutorial on Generative Adversarial Networks by Mark Chang [https://www.youtube.com/playlist?list=PLeeHDpwX2Kj5Ugx6c9EfDLDojuQxnmxmU]
代碼
Cleverhans: A library for benchmarking vulnerability to adversarial examples [https://github.com/openai/cleverhans] [http://cleverhans.io/]
Generative Adversarial Networks (GANs) in 50 lines of code (PyTorch) [https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f] [https://github.com/devnag/pytorch-generative-adversarial-networks]
謂智能分發,即利用人工智能進行個性化推薦的技術,也稱之為智能推薦,推薦系統。
思考三個問題:
以下是正文:
接上篇:服務核心所需的能力規劃| 保險公司互聯網平臺建設系列(九),每一個版本的演化都離不開橫向支撐體系的場景創新和縱向深度拓展體系的場景創新。
在V1.0版本,我們會集中分享四個典型的場景,橫向為創新型金融產品“續期寶” 、創新型增值服務“在線智能問診”兩個非常經典的場景;縱深方面,會集中分享創新型服務“智能分發”(本篇)、創新型服務“場景智能串接”兩個場景。場景的分享無法窮盡,更無法解決所有企業所有的問題,僅做引子。
所謂智能分發,即利用人工智能進行個性化推薦的技術,也稱之為智能推薦,推薦系統。
國內智能推薦做的比較好的企業目前只有兩個,而且這兩家企業從一開始,幾乎所有的業務都是建立在智能推薦這一基礎條件下的,一家是信息分發領域的字節跳動公司,代表產品有、抖音,另一家企業就是老牌互聯網公司阿里,代表產品是淘寶、天貓、聚劃算等等。
國外,各大視頻網站都堪稱推薦系統的佼佼者,典型的代表就是YouTube和Netflix,這兩家公司依靠推薦系統,侵占了全球4/7的流量。研究推薦系統,這兩家公司肯定是繞不過去的。
全文包括推薦系統架構初探、推薦起點是人與物的畫像、推薦算法、應用場景、在效率和精準度上人是徹頭徹尾的輸家五部分內容。
從工程師的角度來看,推薦系統的底層架構,即推薦系統架構,與搜索系統架構具有一定的相似度:二者實現的都是信息與用戶意圖之間的匹配。搜索系統是將海量內容與用戶表達的意思通過關鍵詞查詢關聯,推薦系統則是將海量內容與用戶沒有明確表達的偏好相互關聯。前者需要用戶交付確定性內容,后者需要通過規則判斷用戶確定性需要。
也就是說,只要了解了搜索系統的架構,基本上就很容易理解推薦系統的架構。通常,工程師把搜索系統劃分為離線和在線兩部分。
其中,離線部分專注于內容的搜集和處理。搜索引擎的爬蟲系統會從海量網站上抓取原始內容,并針對搜索系統的不同要求建立不同的索引體系。比如:我們假設新內容是有時效性消費價值的,那么,為了讓新內容能夠被更好地檢索,就可以建立專門的時效性索引用于存儲幾小時之內發布的內容。
索引是一個基于關鍵詞的序列,每一個關鍵詞對應一長串提及該關鍵詞的內容(倒排索引)。比如:“教育”這個詞命中內容1、2、3,“NBA”命中了另外一批內容1、2、4。
在線部分負責響應用戶的搜索請求,完成內容的篩選和排序,并最終把結果返回給用戶。
當用戶輸入搜索詞后,系統會首先對搜索詞進行分詞、變換、擴充、糾錯等處理過程,以便更好地理解用戶的搜索意圖。如上圖所示,用戶只輸入“NBA”一個關鍵詞,系統發現“NBA”和“美職籃”是同義詞,就會將其擴充,以便兩個詞都可以應用在索引的查詢上。
如果用戶輸入了“NB2S”,系統認為輸入有誤,就會將其糾正為“NBA2S”,并首先返回相應結果。
經歷完搜索詞處理后,將進入召回環節。系統通過多種方式從不同的索引數據里獲得候選集合。在上圖中,就進行了一個“2×2”的過程,兩個搜索“NBA”與“美職籃”分別查詢了全量的索引數據和時效性索引數據,一共獲得了8篇內容的集合。
召回得到的候選集合會繼續進入排序環節,通過更精細的計算模型對每一篇候選內容進行分值計算,從而獲得最終結果(如上圖中的文章10和文章1)。
在展示給用戶之前,搜索結果還需要經過規則干預這一環節。規則通常服務于特定的產品目的,對計算產出的內容進行最終的調整。假如我們有這樣一條“官方網站保護規則:確保所有品牌名搜索詞都可以優先返回官網”,那么規則層就會在文章10和文章1之前,強行插入NBA官方網站返回給用戶。
在結果展示給用戶之后,用戶的點擊反饋會影響到排序環節的模型。在下圖中,用戶在展示給他的兩篇內容中只點擊了文章10,這一行為會被模型記錄為統計文章10和文章1在搜索詞“NBA”下的表現情況。如果在“NBA”的搜索結果中,更多人點擊了文章10,那么文章10在后續計算中的權重會升高,從而獲得更靠前的展現位置(即點擊調權的過程)。
以搜索系統為參考基礎,我們可以更好地理解推薦系統的工作方式。推薦系統的離線部分同樣需要通過各種方式來獲取待推薦的內容(如用戶提交、協議同步、數據庫導入等)。對內容平臺來說,其內容的結構化要遠勝于推薦引擎爬蟲抓取的內容。之后,離線系統依據推薦引擎對信息的不同理解維度對這些內容進行索引化處理,如話題、類目、實體詞等。
下圖中展示了兩個維度:分類維度和實體詞維度。
在線部分,其理亦然:量化用戶的請求,完成內容的篩選和排序。
推薦與搜索最大的差異在于用戶表意是否明確。因此,推薦系統需要盡可能地完善用戶的長期畫像(對哪些類目、實體詞、話題感興趣)和短期場景(時間、地點信息),這樣才能夠在用戶每一次請求時更好地揣摩用戶當下的意圖,以進行后續的內容匹配。
當用戶打開內容推薦應用時,提交給系統的信息包括時間、地理位置、網絡環境、手機設備型號、登錄用戶ID(身份認證)等。基于用戶ID,推薦系統會從數據庫中取出用戶的畫像數據(User Profile)。
如下圖所示的推薦系統支持分類和實體詞兩個維度的用戶畫像:在分類維度,用戶對體育和科技內容感興趣;在實體詞維度,用戶對NBA感興趣。基于體育、科技、NBA,推薦系統會進行下一步的內容召回和排序操作。
召回和排序操作與搜索系統比較相似,系統基于類目查詢和實體詞查詢分別獲得候選內容集合。排序模塊按照特定預估目標(如點擊導向、互動導向、停留時長導向等)對候選集統一排序,并經過規則層的處理后最終反饋給用戶。
值得注意的是,在推薦系統中,用戶的行為不僅像在搜索系統中那樣具有針對內容價值的群體評估意義,而且還具有針對自身畫像的個體進化意義。
在群體評估意義層面,每一個讀者就像是一名陪審團成員,通過自己的行為來決定某篇內容的好壞。比如:某篇關于NBA的內容,如果連偏好NBA的用戶都不怎么點擊,那么這篇內容在“NBA”這個實體詞下的權重自然應該降低,這一部分的應用與搜索場景比較類似。
在個體進化意義層面,用戶的閱讀反饋行為在持續改進著自身的畫像。比如:用戶是熱火隊的粉絲,那么在行為層他就會更多地點擊與熱火隊相關的NBA內容,系統捕捉到這一信息后,就會在他的畫像中補充“熱火”這個實體詞,從而影響后續的推薦內容流。
當然,搜索和推薦的區別,在于前者是人找信息,后者是信息找人。這也是為什么百度向信息流轉的時候,可以迅速獲得超過4成的市場份額,因為底層預備的技術能力是OK的,具體做什么前端的業務展示,并不復雜。
在了解了推薦系統的架構后,我們做的還有三個步驟:
想要把內容準確的推薦給需要的人,首先要讓系統充分的理解內容的特點,內容刻畫最簡單的方式就是我們常說的“打標簽”。標簽是人對三維事物、二維事物的一維化理解,抽象出事物更具有表意性、更為顯著的特點。在不同的應用場景下,要對標簽全集進行有針對性地投射,有傾向性地選用不同的標簽以換取信息匹配的效率最大化。
通過更系統化的分類方式,可以完整地呈現出一個內容的特點。這涉及到標簽和分類的關系。
一般情況下采用的分類都是樹狀的,是自上而下依次劃分的。在分類體系里,每個節點都有嚴格的父類繼承關系,在兄弟節點層都具有可以被完全枚舉的屬性值。例如:將人類屬性基于性別劃分為男女,就能夠覆蓋全部人類屬性,其實,要是研究過淘寶的人,都知道淘寶的性別標簽有18個。由于樹狀的層次結構性較好,所以在內容的分類查找領域,有很多應用。
應用的分類必須考慮分類權威性和信息完備性問題,避免因為子節點覆蓋不全或分類錯誤導致的認知問題。
如果標簽是網狀的,更強調表達屬性關系(has a)而非集成關系(is a),只有權重大小之分,不強調包含于被包含關系。這就使得相對于分類而言,標簽的靈活性更強。在權威性方面,標簽是弱化的,每個用戶都可以參與進來為自己的喜好貼標簽,也可以為自己喜好的內容貼標簽,從而借助規模效應實現對信息表意完備性的覆蓋。
由于網狀結構包含樹狀結構,故而標簽可以被應用于分類的場景,在設計系統時,可以先基于產品場景快速覆蓋主要標簽,在結合標簽集合的使用頻次、專家建議等因素逐步將部分入口收斂到樹狀的分類體系中來。
最后,值得一提的是,標簽是怎么產出的?答案就是PGC和UGC,即專家系統產出和用戶產出。很多金融公司的產品App,到目前為止都沒有開放UGC的功能,從某種意義上說,用戶、內容的畫像都不可能有機會完備。
與內容畫像相對應的,是用戶的畫像。用戶畫像是產生動態的超級360°視圖,具體可參考這篇文章:企業數字化轉型:外部驅動力之客戶篇(五)。用戶畫像也是給目標用戶貼標簽的過程,通過標簽來描述一個用戶的特征集合。
通常,用戶畫像主要應用場景包括:精準營銷、行業研究、產品效率優化、個性化服務等等,實際上所有圍繞個人用戶的產品,都是典型的用戶畫像需求方。
具體應用場景就不展開詳細說明了,智能推薦就屬于產品效率優化。其中,應用最具有深度的就是信息匹配,、抖音、淘寶、Facebook、YouTube和Netflix都是典型的佼佼者。所有這些平臺,都是基于用戶的畫像信息來優化推薦排序的,從而實現人和信息的高效匹配,以提升效益、降低成本,提高用戶體驗。
根據Netflix官方2016年的數據,個性化推薦系統每年為它的業務節省費用超過10億美金。
中性的技術,在不同人手里可能就有不同的用戶,某些人利用系統中,用戶無法區分真假貨,從而針對性的進行真假貨混發。特別是根據用戶收貨地址、過往評價可以輕松推斷出用戶的認知水平,從而決定發送真貨、高仿還是其它假貨。
另外一個面臨的問題就是價格歧視,保險歧視等問題,同一件商品不同人加入購物車,顯式的價格是完全不一樣的,價格敏感性用戶往往更容易收到優惠券。
通常,我們把用戶畫像的數據分為靜態數據和動態數據。
靜態用戶畫像數據:一般包括用戶獨立于產品場景之外的屬性,如性別、學歷、年齡、婚育狀況、常住位置、教育程度以及家庭結構等等。這些信息往往是相對穩定的,可以通過第三方聯合登錄、用戶表單填寫等方式獲取。靜態數據通常具有統計意義,但在滿足實時服務需求和挖局潛在需求方面,價值并不高。
動態用戶畫像數據:用戶在產品場景中所產生的顯式或隱式行為的數據。顯式行為包括對某篇文章、某個服務、某段視頻的點贊、評論、轉發、分享,關注了某個領域的作者等等。在眾多顯式行為中,由于產品場景的不同,不同行為的權重也不盡相同。
像電商的場景,典型的權重依次為:購買的權重>下單不支付的權重>購物車的權重>查看的權重。隱式行為包括在頁面停留的時長、某屏內容停留的時長、用戶操作行為軌跡、手指按壓滑動的頻率和力度等等。通常,顯式行為的權重要高于隱式行為,但還是要依賴不同場景決定。由于顯式行為更為稀疏,所以需要隱式行為來補充驗證。
最后就是關于動靜態數據的權重問題,實際上,動態數據價值意義更大,一般在很多場合,都是先將常數n設置為0.8,然后再后續不同場景中,后續升級是確定n=f(x)具體函數,從而進行計算。
第三個是推薦算法,就是我們擁有了完備的內容畫像、用戶畫像,怎么將合適的內容,準確的匹配給需要的用戶。淘寶早期的做法,是基于其固有屬性來計算物品與物品之間的相似度,從而推薦與用戶歷史消費相似的新物品。如果是內容中的文章,常見的因素就有作者層面的相似性、內容層面的相似性、同類用戶層面的相似性等等。
一個人在某個場景下怎么決策,我們首先要把他抽象成一個模型,然后要找到一套數學的方法,讓它能夠收斂,用模型去優化他的決策。通過該收斂的結構去匹配內容的過程,就是智能推薦系統連接人和內容的過程。
當然,到此并未結束,一般情況下,系統一次性就推薦到用戶百分百喜歡的內容是不太現實的,此時就要讓系統形成有效的反饋閉環。將結果快速反饋到用戶交互層的產品上,用戶喜歡點擊了還是未點擊,快速給一個反饋,系統經過優化,再次推薦一個結果,如此往復,形成一個學習、提升、再學習、再提升的過程。這就是推薦算法的價值所在,也是系統推薦之所以高效、精準的原因。
2016年9月18日,在波士頓舉辦的第10屆ACM推薦系統大會(ACM’s RecSys ‘16)上,來自Google的一個研究團隊公布了YouTube推薦系統的深度學習論文:Deep Neural Networks for YouTube Recommendations。論文地址:https://research.google.com/pubs/pub45530.html
論文作者是Google的軟件工程師Jay Adams與高級軟件工程師 Paul Covington、Embre Sargin,他們向業界展示了YouTube在機器學習推薦算法上的深度神經網絡使用情況。該論文涉及到一些非常技術、非常高級的細節,但它最大的意義是為我們完整描繪了YouTube推薦算法的工作原理!!該論文細致、審慎地描述了YouTube檢索、篩選并推薦視頻時的大量細節。
在YouTube,人工調整算法、人工權衡這些調整并將其部署上世界最大的視頻分享網站的機會將越來越少。而是由算法實時來讀取數據、為視頻排名,然后基于這些排名來推薦視頻。該論文以算法的基本架構作為開篇,下面是作者的圖示:
該系統由兩大神經網絡組成,一個用于生成候選視頻,一個用來對其排名。這兩個過濾器及其輸入內容,基本上決定了用戶在YouTubes上能看到的每一個視頻:建議你播放的下一個、推薦給你的視頻列表、你所瀏覽的視頻列表……
第一個過濾器是候選生成器。候選是基于用戶的YouTube活動記錄產生的,也就是用戶的觀看歷史與觀看時長。候選生成器還會考慮相似用戶的瀏覽記錄,這一點被稱為協同過濾。相似用戶是算法通過視頻ID、搜索關鍵詞及相關的用戶統計信息決定出來的。
候選生成器的通過率僅為屬百分之一,換言之,如果某個視頻能從數百個中脫穎而出成為你的候選視頻,它必定是跟你的觀看記錄有關,同時還有一個跟你相似的用戶已經看過它。
第二個是排名過濾器。該論文對排名過濾器進行了大量的深度解析,并列舉出不少有趣的因素。排名過濾器是基于描述視頻和用戶的豐富特征,目標期望函數會給每個視頻設定分數。根據分數排名,得分最高的視頻將被展示給用戶。根據論文透漏,排名過濾器中用到了數百種特征。
最后,簡單的總結就是:
相較于YouTube較為抽象簡化的數據流圖,Netflix的架構圖稍微顯得復雜一點,不過依然保持了離線模型的訓練、在線召回排序、更新用戶畫像與內容畫像的基本結構。
系統在實時響應用戶請求的在線層和負責數據處理、模型訓練的離線層之間增加了NearLine層,即所謂的近線層,以實現計算規模和實效性的折中。
在數據流上,用戶的所有動作,包括選擇、播放、暫停、評分、瀏覽等行為,共同構成了在線層的輸入。根據業務需要,Netflix將用戶行為拆分為數據和事件。其中,數據的時間敏感度更低,事件的時間敏感度更高。比如,在用戶觀看一部電影之后,如果希望及時更新用戶的推薦列表,那么這次觀看動作就會被是做事件型進入近線層,以更快地更新用戶畫像數據。
用戶的請求,經由多種召回方式,從離線索引中獲取結果后,經過在線的模型排序計算,將最終結果返回給用戶。
由于我們自己的平臺在2017年啟動了全面智能化策略,所有用戶看到的信息,除個別強制推薦的以外,都是系統基于用戶行為進行智能推薦的。一級頁面的布局結構,完全實現了所謂的千人千面甚至一人千面的構建,單個服務內容的具體展示,也逐步向智能推薦系統方向優化,例如上一篇所介紹的“智能問診服務”。
相比于傳統的千人一面的結構和總編推薦模式,機器推薦的效率、精準度上,都是人類無法比擬的。例如相比如出版業總編推薦模式,智能分發的效率是其2.4億倍,這是人工手段下所無法想象的。
在人機效率、精準性的較量中,人只會越來越失敗,差距只會越來越大。
參考文獻:
保險公司互聯網平臺建設綜述 | 互聯網平臺建設系列(一)
顛覆式創新,左右平臺經濟時代競爭的主要力量 | 互聯網平臺建設系列(二)
平臺建設規劃的三種思路 | 互聯網平臺建設(四)
基于險企傳統資源優勢的“一核三環”規劃 | 互聯網平臺建設(五)
保險公司互聯網平臺的戰略定位 | 互聯網平臺建設系列(六)
名稱,決定了平臺的發展愿景 | 互聯網平臺建設系列(七)
平臺建設的根節與基礎保障 | 互聯網平臺建設系列(八)
服務核心所需的能力規劃 | 互聯網平臺建設系列(九)
創新型金融產品“續期寶” | 互聯網平臺建設系列(十)
作者:李有龍,公眾號:IAB物智鏈
本文由 @李有龍 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
文主要內容
html 的常見元素主要分為兩類:head 區域的元素、body 區域的元素。下面來分別介紹。
head 區域的 html 元素,不會在頁面上留下直接的內容。
base元素的介紹:
<base href="/">
base 標簽用于指定基礎的路徑。指定之后,所有的 a 鏈接都是以這個路徑為基準。
body 區域的 html 元素,會直接出現在頁面上。
div 是最常見的元素,大多數場景下,都可以用div(實在不行就多包幾層div)。可見,div 是比較通用的元素,這也決定了 div 的的語義并不是很明確。
常見標簽的重要屬性:
我們平時在寫論文或者其他文檔的時候,一般會先列出大綱,然后再寫具體的內容。
同樣,html 網頁也可以看成是一種文檔,也有屬于它的大綱。
一個常見的html文檔,它的結構可以是:
<section>
<h1>一級標題</h1>
<section>
<h2>二級標題</h2>
<p>段落內容</p>
</section>
<section>
<h2>二級標題</h2>
<p>段落內容</p>
</section>
<aside>
<p>廣告內容</p>
</aside>
</section>
<footer>
<p>某某公司出品</p>
</footer>
我們可以通過 http://h5o.github.io/ 這個工具查看一個網頁的大綱。
使用方法:
(1)將網址 http://h5o.github.io/ 保存到書簽欄
(2)去目標網頁,點擊書簽欄的網址,即可查看該網頁的大綱。
這個工具非常好用,既可以查看網頁的大綱,也可以查看 markdown 在線文檔的結構。
按照樣式分類:
按照內容分類:
注意:在 HTML5 中 a > div 是合法的, div > a > div是不合法的 ;但是在 html 4.0.1 中, a > div 仍然是不合法的。
比如下拉框這種比較復雜的元素,是自帶默認樣式的。如果沒有這個默認樣式,則該元素在頁面上不會有任何表現,則必然增加一些工作量。
同時,默認樣式也會帶來一些問題:比如,有些默認樣式我們是不需要的;有些默認樣式甚至無法去掉。
如果我們不需要默認的樣式,這里就需要引入一個概念:CSS Reset。
方案一:
CSS Tools: Reset CSS
方案二:
雅虎的 CSS Reset
我們可以直接通過 CDN 的方式引入:
<link rel="stylesheet" type="text/css" href=">
方式三:(比較有爭議)
*{
margin: 0;
padding: 0;
}
上面何種寫法,比較簡潔,但也有爭議。有爭議的地方在于,可能會導致 css 選擇器的性能問題。
上面的幾種 css reset 的解決思路是:將所有的默認樣式清零。
但是,Normalize.css 的思路是:既然瀏覽器提供了這些默認樣式,那它就是有意義的。既然不同瀏覽器的默認樣式不一致,那么,Normalize.css就將這些默認樣式設置為一致。
共同點:二者都是表示斜體。
區別:
自閉和的元素中不能再嵌入別的元素。且 HTML5 中要求加斜杠。
所以,如果我們是通過 Ajax 提交表單數據,也建議加上 form。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。