閱讀 “StarSpace: Embed All The Things!”

ywchen
4 min readSep 20, 2017

--

以 Embedding 的概念,做一個通用的方法論解決各種 unsupervised 和 supervised 的問題

最近因緣際會看到這篇 https://arxiv.org/abs/1709.03856 ,由 Facebook AI Research 提出,還有程式:https://github.com/facebookresearch/Starspace

賣點

一個通用的框架解決各種類型的問題:包括 supervised 跟 unsupervised;包括 multi-class/label classification, recommendation, search ranking, knowledge graph, word embedding, …

重點是他們已經寫好程式了 😏

方法概念

配對 -> embedding -> negative sampling ->hinge loss

  1. 找出「配對」:根據問題所要解決的,從資料找出兩種有相關的 entity。例如 multi-class document classification 就是「類別」和「文件」;recommendation 就是「商品」和「使用者」;要學 word embedding 就是「本字」和「周圍字」
  2. *-space embedding:把這兩類 entity 放到同一個 embedding space 上。對,真的是同一個,例如在 document classification 就算是少少的「類別」也和多多的文件同樣映射到一個 d-dimensional 空間。
  3. negative sampling:你手上有的資料就代表這些是「正面」有關聯的配對。這時再隨機額外生成一些「負面」沒有關聯的配對,例如非該文件的類別,或是使用者沒看過的商品。
  4. 正負比較:因為配對的兩類 entity 在同一個 embedding space 上,可以方便定義 similarity(內積或 cosine)。學習目標是相對應的「正面」配對 similarity 要比「負面」配對的高(hinge loss)
  5. Inference:在預測的時候只要在 embedding space 找得到,就可以用 similarity 來取 argmax 或做 ranking

這個方法之所以叫 Star(*) Space 就是因為他把不同種的 entity 放到同一個 embedding space, 如同萬用字元 “*”

上面五點只是概念,當然有一些細節還是要看論文程式,例如

  • 一篇文件 entity 那麼多字要怎麼 embed?實際上一個 entity 是由一堆離散的 feature 組成的(例如 word or n-gram -> document),這個 entity 的 embedding 是定義成那些 feature embedding 的總和。
  • entity 配對在論文/程式裡面,是以 left-hand-side (a, 或是input) 和 right-hand-side (b, 或是label) 表示。hinge loss 是對於同一個 ab+b- 的差別。

心得

  • Too good to be true! 概念非常地單純。雖然大一統地把各類問題都整理起來用同一個框架來解決,但這個框架似乎又太單純而沒有各領域的眉眉角角。
  • 在這樣的情況之下,資料多寡或許很重要?就像單純的 word2vec 以 cheap training 換更多 training data 的空間
  • 概念上好像不能算是新穎,例如和 word2vec 比較,只差在 StarSpace 用 hinge loss 而且 share 左右 embedding space。或許 hinge loss 才是關鍵?
  • 重點是有程式啦!所以要驗證什麼的都可以方便做。概念也很一般性,所以有可能用同個程式可以解決其他本來沒想到的問題。

--

--

ywchen

每天都可以學到新東西 — 因為會的東西太少