1. 程式人生 > >小紅書 演算法簡介

小紅書 演算法簡介

小紅書作為中國乃至全球獨一無二的社群電商,目標是讓全世界的好生活觸手可及,那麼如何幫助使用者在社群裡發現好生活,又如何引導使用者找到值得剁手的好產品呢?本文整理自 ArchSummit 深圳演講,探討如何運用機器學習和人工智慧,幫助小紅書不到 10 人的演算法團隊快速接近目標。我們由此篇文章會了解到: 1. 在電商場景中的人工智慧應用例項。 2. 深度學習在電商內容搜尋,推薦中的應用前景。 3. 如何在初創公司合理使用人工智慧。

大家好,非常開心能夠在架構師峰會上和大家交流分享,謝謝大家聽我分享。

我叫趙曉萌,現在是小紅書演算法的架構師,在小紅書之前,我在微軟 Bing 搜尋引擎,是排序組 Core Ranking 的產品經理,負責點選模型,後面到 Twitter 的廣告組做移動廣告的精準投放。

今天要為大家分享四點內容:

首先介紹下小紅書、小紅書的人工智慧團隊、以及小紅書在機器學習上的應用。

第二點,舉一個深入的例子介紹我們怎麼理解使用者在小紅書上產生的內容。

第三點介紹下人工智慧在推薦搜尋中的應用以及在小紅書的應用。

第四點是結合我的經驗介紹下如何在像小紅書這樣一個比較初期的人工智慧團隊,這樣比較小的公司裡更好地應用人工智慧。

我早上聽了幾位講師的分享,特別留意到他們公司有自己的機器學習訓練框架和訓練平臺,他們在演算法上做了非常多的優化,我們作為一個小公司並沒有這些,我很羨慕,希望有一天我們也會有。去年我們的演算法團隊大約從 6 個人發展到了 10 個人,以下介紹的是去年一年的時間內,尤其在後半年完成的一些工作,希望我們的經驗能夠給人員和資源都比較早期的公司一些借鑑。

小紅書與人工智慧

我先從介紹小紅書開始,介紹下我們演算法團隊需要解決的問題。小紅書是一個分享社群加電商的 APP。

首先看下分享社群,分享社群以女性為主,是一個有少量話題引導的,但基本上是自然形成的,關於分享精緻好生活的社群。這裡主要分享的內容包括美裝、穿搭,喜歡去的餐館,新發現的旅行地點、酒店,最新的母嬰和家居生活的內容也在增加。小紅書今天有五千萬的註冊使用者,月活躍使用者超過千萬,這些使用者幫助我們在平臺上產生了九百多萬篇非常高質量的分享。這麼多的內容,我要如何轉發分發給使用者,讓他們看到想看的,這是一個演算法組需要解決的問題。

小紅書的另外一面是福利社,就是電商,這個問題很簡單,就是你在社群裡看到的,在福利社希望能買到。如何提高福利社的商品購買轉換率,這個也是演算法組需要解決的問題。

小紅書獨一無二的地方,就在於它把社群和電商融合到了一個 APP 裡,非常重要的一點是它造就了女生人數佔比最高的網際網路公司。在我們公司裡面女生男生佔比是 7:3,其他公司裡比例可能最高 3:7,或者 1:10 都是有可能的,這是小紅書獨特的地方。更重要的一點是,它造就了 1 加 1 大於二的效應。

這是什麼意思呢?我們社群是提供使用者黏性的,它為我們電商引流,電商這部分把流量變現,在我們 APP 裡形成了一個閉環,這兩個是互相推動的。對於演算法團隊來說,因為我們有這樣獨特的形式,我們有社群的使用者資料,同時也有使用者在福利社的行為資料,我們如何把兩邊的行為連線起來,更好地理解使用者,這是一個非常獨特的挑戰。

我們演算法優化的目標是什麼?優化的核心目標也是兩個,分別對應社群和電商。社群的目標是使用者增長,我們衡量的是在社群的深度互動,這是一個間接的,但是離我們更近的一個 metrics(指標)。對於電商我們要做到的是驅動盈利,福利社的加車購買,是我們關注的指標。機器學習大概是從去年年初開始在小紅書慢慢地發展起來,截止到去年年底,整體效果還不錯,我們需要達到的深度互動,以及電商的購買轉換,都有非常不錯的提高。

深度理解小紅書們產生的內容

剛才介紹了小紅書和我們演算法要解決的問題,現在舉個具體的例子介紹怎麼理解小紅書的內容。剛才提到五千萬用戶的九百萬篇推薦筆記,是我們最重要的內容,我們花了非常大的精力來理解內容。

首先我們看一下這些內容大概是什麼樣子。很簡單,是圖文並茂的。使用者產生的內容圖片多,而且質量非常高,同時是非常詳細的種草文(推薦物品的文章),這個文章正常情況下不是橫過來的,橫過來是為了讓大家看到這個文章很有長度,寫得非常仔細,吸引眼球,而且有感情有乾貨。

因此需要把文字和圖片結合起來去理解文章內容。我們通過機器學習把筆記的主題分到人工標定的上百個主題裡。我們用 CNN(卷積神經網路)提取影象特徵,用 Doc2Vec(文字到向量模型)提取文字特徵,通過一個簡單的分類器就能把使用者筆記分到主題中。接下來具體介紹下影象特徵的提取。

我們用的是卷積神經網路。

卷積神經是深度神經網路,層次比較多,是 feedforward 神經網路。簡單解釋下它的原理,它模擬了我們大腦處理影象的過程。什麼意思呢?如果我們選一個稍淺的神經網路,把這個多層神經網路每一層的輸出打出來,那我們大概就能夠了解這個神經網路在做什麼。最下面的輸入層是我們影象的畫素,第一層、第二層的輸出我們可以看到這個神經網路能夠提取出一些邊緣的資訊,再往上四五層的時候,它把邊緣的資訊組合起來了,我們會看到轉角、圓圈還有網格這樣一些形狀上區域性的資訊,再往上到第六第七第八層的時候,就能看到一些整體的概念被抽象出來了。經過這個卷積神經網路層層的抽取和抽象,在畫素之上會形成概念最有用的一些特徵,這個就是我們拿到的影象的特徵。通過這個卷積神經網路我們把一張圖變成一個 4096 維的向量,這個向量是這個圖在高維空間裡的一種表示,它是有空間意義的,這個意義是指相似的圖片,或者說圖片上的相似特徵在這個空間裡是距離接近的。

我們這一套神經網路是在 Caffe Model Zoo 的很多已經預先訓練好的模型裡選出來的一個 VGG 的 16 層神經網路,它已經在 ImageNet 上訓練好了,我們不需要花太多時間去訓練它,我們只是標註了少量小紅書上的圖片,把它的主題標上去,然後我們再 fine-tune 這個神經網路,最後就達到我們期望的效果。

講完了影象,我再講一下文字的向量表示,文字的向量表示有非常多種,其中一個比較有名的向量表示叫做 Word2Vec,是 Google 提出來的,它的原理非常簡單,它其實是一個非常淺的淺層神經網路,根據前後的詞來預測中間這個詞的概率,優化預測的時候模型就得到了詞的向量表示。同樣的這個詞的向量表示在空間裡也是有意義的,相似的詞也處在相近的空間裡。這個模型比較有意思的是,把向量拿出來隨時可以做向量運算,比如圖中,女人到男人之間的那個指向的向量,和皇后到國王之間是一樣的,所以你知道其中三個,就能算出另外一個。

把文字的 Word2Vec Model 往上提一層時就會得到文字到向量的 Doc2Vec Model。那麼怎麼用它呢?其實就是把小紅薯,就是我們的使用者的筆記上的標籤,它提到的商品的品牌品類加上筆記本身的內容一起放到這個模型中,我們就得到了一個描述筆記的向量,然後再提取。這個模型也是開源的,我們也直接拿來用就可以了。

當我們現在有了影象和文字的向量表示以後,我們就有監督地去訓練一個分類器,把它分佈到我們標註出來的主題上,我們用的分類器是一個,有一個隱層的全連線的神經網路,能達到我們要的效果。之前我說過小紅書是一個非常視覺的社群,影象很多,我們只用影象提取特徵就已經達到良好的效果,準確率大概是 85% 時覆蓋率能達到 73% 左右,加上文字以後效果更好,準確率達到 90%,覆蓋率達到 84%。

人工智慧在推薦搜尋中的應用

上面是一個我們用文字和影象特徵來理解我們使用者產生內容的具體例項。下面給大家概括介紹下小紅書機器學習使用的情況。

做這方面的同行應該知道人工智慧有三個階段,最早的專家系統,到統計學習,到深度學習現在慢慢流行起來。對於我們這樣一個小的公司來說,我們非常注重演算法的實際效果,遠超過我們看這個演算法先進不先進,比如剛才我們講的提取影象特徵的模型,並不是 CNN 裡效果最好的,而是一個相對簡單的模型,16 層神經網路對我們來說相對簡單,容易理解,比較能 Hold 住。

人工智慧的三個階段產物,我們都各有各的應用。

專家系統是指我們需要依靠人對問題的理解來設計規則,比如中文搜尋中特殊的分詞,在小紅書早期時,搜尋中大約 80% 的問題都是因為中文分詞分得不太準,導致使用者搜不到想要的東西。我們通過人工的一些工作,從人工加詞、加詞典維護,到我們做了新詞發現的一套半自動的系統,這些問題就被解決掉了,實際上分詞有更好的解決方法,現在已經有了基於深度學習的方法,有可能以後考慮替換這套系統。

有些專家系統確實不太好替換,比如對於電商來說,它的品類(商品的分類)系統是非常需要行業知識的,需要對商品品類有深刻的理解,而且需要結合公司電商發展的階段來設計這套系統,系統要隨著公司發展階段的變化去不斷地迭代。這套系統特別重要,因為當品類不對時,在品類下的推薦就不準,搜尋的篩選可能會做得不太好,或者品類的粒度分得不夠細不夠準時,推薦和搜尋的演算法都會受到非常嚴重的影響,所以這套專家系統可能會一直存在下去。這是最左邊的早期的專家系統,相當於早期第一個版本的人工智慧,最新版本的人工智慧就是現在比較火的深度學習,這點剛才也講了,主要講的是主題分類,同樣我們可以做到圖片相似,以及物體檢測等。

剩下中間這塊統計學習,統計學習是我們使用量最大也是實踐中最常用的,這一套系統當中,最重要的就是統計的資訊,往往需要用到大量的統計特徵。

比如在我們推薦的 GBDT 模型中,模型的產品目的是個性化,我們希望使用者可以看到想看的筆記,這屬於我之前講的筆記分發的問題。在這張表裡,大家可以看到,我們有非常多的使用者行為統計,產生了一些靜態的資訊,用來描述使用者或者筆記。

我們通過使用者畫像和人口統計資訊來描述使用者,比如性別年齡等常用的靜態資訊。筆記分作者和內容兩個維度,比如作者打分和筆記的質量、標籤以及剛才介紹的主題等。還有一些我們實驗過的更復雜的統計資訊,被我們放棄了,因為雖然複雜但是效果並不顯著。比如我們會算使用者的行為趨向,是趨向在社群裡花的時間比較多,還是趨向於在福利社電商花的時間比較多,我們嘗試過統計使用者的生命週期,這個使用者是新使用者、老使用者、經常回來的使用者、還是可能快流失的使用者,還有使用者的活躍時段,使用者是在早上比較活躍還是晚上比較活躍,使用者購買力,使用者對摺扣的敏感度,在社群裡的活躍度,這些統計資訊我們都嘗試過,這些都比較靜態地去描述一個使用者。

還有一個非常關鍵的資訊是動態特徵,雖然動態特徵並不多,但是很重要。動態特徵包括使用者在瀏覽和搜尋過程中有沒有點選、有沒有深度行為等類似的使用者反饋,這些互動的資料有一個實時的 pipeline 從線下直接放到線上的模型裡,在線上會利用這些資料對互動的質量,比如點選率進行預測,以及通過協同過濾得到使用者和筆記的隱性分類,這在推薦當中也是有用的。我想講的是使用者反饋的資料,即使是簡單的統計都是非常有用的。我們在使用複雜模型之前先用簡單的統計方法把使用者的反饋資料放到模型預測中,可能就能達到想要的 80% 的效果,這是非常重要的。

還有一點是我們有兩部分的資料,社群和電商的行為資料,使用者在社群的行為和電商的行為是不太一樣的,而且是有點互補的。比如使用者在社群的行為是比較高頻的,使用者會在這裡搜、看、點選、點贊,可能因為好奇進行點贊和點選,而在電商的資料是低頻的,比如產生最後的購買。高頻資料我覺得統計資訊是非常有用、非常準確的,對於電商,我們認為比較昂貴的行為,比如購買和加心願單的行為,是非常可信的,這兩種資料是互補的,我們試著把這兩邊的資料融合起來用到特徵裡。

下面再舉一個比較具體的例子,另外一個從文字中提取特徵的例子。

之前講的提取特徵,是為了判別文字的主題,我們用的是 Doc2Vec 文字到向量的方法,向量越接近,文字越接近。現在這個場景叫相關筆記,相關筆記的要求是什麼呢?推薦的筆記和使用者在看的筆記最好講的是同一個東西,比如說,同一款口紅,同一個旅行目的地,同一家酒店,同一家餐館,有可能不是同一家餐館,是類似的餐館,或者說同一件衣服,但是也有可能是不同款但是相似的衣服。

相關筆記的要求的是首先相關性非常強,第二在這個基礎上稍微有些擴充套件。實際實驗時發現,如果用 Doc2Vec(文字向量表示)選出來的筆記不太能滿足相關性的要求,比如上圖的例子,講的是世界第一潛點詩巴丹,Word2Vec 的結果不太在乎具體地點是哪裡,在最右邊的例子裡,我們可以看到,它找的是附近的地方,比如越南芽莊,它會把相似的地方找出來把它替換掉。在這樣一個場景當中,我們選擇了另外一個詞向量的方法 TDIDF,一個簡單的統計學方法。這個就能比較好地解決相似性的問題,因為它本來就是用於資訊抽取和資訊檢索。

有一點讓我覺得比較驚喜的是,TFIDF model 雖然基本要求詞是一樣的,但它可以把一類筆記找出來,就是講使用者心理、描述使用者心情的筆記,因為使用者描述心情用的詞彙很接近,所以這個方法也會把擴充套件的內容找出來。舉這個從另外一個應用場景來選文字向量表示的例子的意思是我們的演算法選擇在小公司裡需要非常接地氣,需要考慮具體要求,而且是實驗性質的,如果不做實驗嘗試就沒法知道哪個方法更能滿足具體場景的需求。所以對於小公司來說,團隊能不能快速試錯、實驗和迭代,這個能力可能比某個模型的質量或者模型本身能力的侷限更加重要。

之前講的幾個具體的例子是我們已經實現過的,接下來展望下小紅書未來機器學習團隊需要做的事情。

之前舉的幾個都是統計的例子,主要想說明我們如何選擇演算法,如何注重開發的成本、速度和最後的效果。其實深度學習的效果在推薦預測上已經漸漸超過了之前講的一些統計模型,隨著機器學習平臺的成熟,以及相關模型的開源,我們也會考慮把之前在推薦裡用的 GBDT 模型替換掉。

深度學習有什麼好處呢?首先講深度學習的一個缺點,就是抽取的特徵比較沒有解釋性,人工特徵比較好解釋是因為預先設計了特徵,然後再去構造。機器學習的特徵在抽象完之後,仍然保留了很多資訊,雖然不好解釋,但是有一個好處,留給應用想象的空間很大,可以實現一些比較有創意的應用。比如去年有一段時間小紅書上突然流行分享治痘,就是臉上有很多痘痘,怎麼把它治好的這種文章,使用者會秀很多自拍的、臉上長很多痘痘的照片,但不是每個使用者都喜聞樂見臉上充滿痘痘的照片,所以我們需要識別出這些照片,把它推薦給合適的目標人群,這也可以通過我剛才講的 CNN model 來實現。我們嘗試做這件事,發現它對全臉露出的、半臉、1/4 臉甚至臉上只有少量的臉部器官,都能識別為臉部影象,而且能夠識別臉上有沒有痘痘。CNN 還可以很好地識別這張圖裡是不是文字佔了絕大多數,比如是不是一個截圖,對 AntiSpam(反作弊)會有幫助。未來 CNN 還可以幫我們做更多,比如我們想做一些風格上的嘗試,希望通過使用者買的東西和經常看的東西能夠知道使用者穿搭的風格。

如何在初創公司合理使用人工智慧

剛剛講完了小紅書的故事,現在結合我的經驗介紹下如何在類似的初創公司合理地使用人工智慧。

我指的小公司是怎樣的小公司?首先是希望人工智慧能夠融入公司業務,是非常實用主義的小公司。它不是 Google,Facebook,阿里百度這樣的大公司,大公司研究的更多是人工智慧的平臺和框架,提供什麼樣的服務,專注在訓練和演算法效率上的提升。同時也有區別於人工智慧創業公司,這些公司人工智慧是它的主業,比如視覺識別、自動駕駛,它們專注於演算法的創新突破,演算法準確率需要有比較大的提升。我講的這些小公司,為了將人工智慧融入公司業務,它需要更多的是被驗證過的演算法,它關注的是演算法的實用性和開發維護的成本,對於這樣的小公司,我們有經驗,我想從兩個方面談一下,它應該怎麼看待在自己的公司應用人工智慧這件事情。

首先我覺得第一點非常重要,就是越來越多的人意識到機器學習、人工智慧的應用成本加速降低,小公司要抓住這個機會,抓住人工智慧發展提供給自己的紅利。運算力、機器學習平臺的開放大家都知道,Tensorflow、Caffe 以及 MXNet 都想擴大自己的 Community,希望能夠有更多的公司和更多的開發者用他們的平臺。

另外一點是模型的成熟和開源,這對於深度學習階段尤其重要,因為在統計學習階段模型也是開放的,但是這個階段演算法的核心不在模型,而在模型裡使用的特徵,特徵工程是當時的核心。到了深度學習,情況發生了改變,因為深度學習的核心就是模型,模型能夠抽取特徵,能夠很快地在分類、推薦、預測得到應用。

對一個小公司來說,我們是非常需要開源的,因為從頭搭建自己的這套模型非常耗時、耗力,比如我們剛才用的神經網路,它有多少層,它的層和層之間應該怎樣卷積,需不需要使用 dropout,這些都是需要花大量的時間做實驗,對於小公司來說這樣的投入並不值得,投入太大而產出效果可能並不太好。而且深度學習好的模型通用性非常強,比如我剛才舉的例子,可以用它處理很多影象識別方面的問題。

最後一點是理論知識,我認為小公司如果有效地利用這點就能夠比較快地享受到人工智慧帶來的利益。理論知識的相對重要性在降低,工程學習能力的重要性要求在上升,這說明個人力成本在下降。幾年前在推薦預測上要做到比較好的結果還是很難的,大家可以參考 09 年的時候 Netflix 做了一個挑戰獎金是一百萬美金,想提高推薦系統的效率,全世界當時有相關知識而且能夠把這些理論知識用到推薦系統裡的人非常少,人力成本非常昂貴。那麼到了現在呢,我記得 Google IO 上 TensorFlow Team 有個分享,說 2005 年大約一個研究室 6 個月想要做到的基於神經網路分類的效果,在今天一個優秀的 Python 開發者有一些 TensorFlow 的背景知識,大概需要幾天就能遠遠超過當時的效果。

小公司對理論知識非常強的深度學習大牛的依賴程度大幅度降低了,而且一個小公司請個大牛並不划算,第一大牛特別貴,第二因為大牛一般有自己的研究方向,尤其到了今天這個時候,他可能有自己的計劃,並不一定願意花時間在小公司這種已經成熟的應用上面,這就不是每個小公司都能承擔的起的,第三招個大牛並不代表一段時間內業務會有很大的提升,因為人工智慧需要大量工程師協同完成。現在學習能力和工程能力強的團隊,能夠把已經驗證過的演算法在快速迭代中優化,能夠實現自己的場景,這樣的公司反而有比較大的優勢。從平臺到模型開發、到開發人員的成本,這些成本都在降低,由於這些成本降低,更多的人會進來,促使這些成本加速降低,這點是現在的小公司和初創的公司可以很好利用的。

演算法應用和演算法團隊是整個人工智慧應用的冰山一角,我們需要動用整個公司研發團隊的力量來支援人工智慧的落地。

首先是核心業務資料的設計,對我們的電商來說剛才說的歸類商品的品類系統,這是非常重要的,以及這些系統的整理迭代,保證資料的清潔。我們內部想要做這樣一件事情,因為我們的搜尋經常會被一些不太好的資料干擾,我們需要設計一套系統,讓我們內部的人針對我們的搜尋引擎做一些 SEO(搜尋引擎的優化),幫助我們清理業務的核心資料,並且讓他們負責地去輸入新的業務資料。

第二在前端對使用者行為打點,甚至為了提高效率,要做到自動埋點,比如使用者反饋行為,這個資訊在整個機器學習應用中非常重要,資訊的收集需要產品前端和我們配合,把打點做好。資料收集之後的分析和挖掘是資料、演算法團隊需要幫我們做的。下一點是訓練資料的標註,這是演算法團隊需要做的事情。當我們需要大量做實驗時,AB 測試的框架,實驗上線後所有的指標是不是能夠反映到 Dashboard 裡,這都是需要非常多的人去投入的。

因為成本的降低人工智慧正在加速從學術走向日常,希望能看到更多的公司和工程師進入實踐機器學習的領域,期待看到更多激動人心的智慧應用。以上就是我的分享,謝謝大家。

作者介紹

趙曉萌,小紅書演算法架構師。曾任微軟 Bing 必應搜尋 Core Ranking Team 的 program manager,分管使用者點選模型在 dynamic ranking 中的應用。曾任 Twitter Performance Ads,Tech Lead,負責移動相關的精準廣告投放。現任小紅書演算法架構師,負責機器學習應用。