主要的挑戰如下:
- 第一次用Spark 寫 ML 相關的程式,然後網路上的範例和討論幾乎都是用 scala 和python 寫的,為了要轉成Java版花了不少力氣。
- 資料散亂且難以理解,關於LDA 的文章幾乎都是論文等級了,充滿了難以下嚥的數學公式,往往都是直接略過,而且關於LDA 和 Spark ML 相關的中文討論又是以大陸居多,不過也因此挖到不少寶。
Spark ML 內建的Pipeline 主要分為以下四個步驟:
不過後來才發現Spark ML 的 pipeline 是給 supervisor learning 使用的,因為有 label 的 data 可以用來驗證訓練的結果是好還是不好,但是我們這次用到的不論是 LDA 或是 word2vec 都是屬於 unsupervised learning 沒有一個明確的基準點可以驗證,因次不適合用 cross validation 來找出最佳的 hyper parameter 。
那LDA 可以調的參數有哪些些呢?如下圖所示,主要是 K (topic number) , max iteration,doc Concentration和 topic Concentration,不過上網看了許多論文和討論,似乎影響最大的還是K 值。
原本以為只要把這些參數排列組合,找出最大 likelihood 或最小的 perplexity 結果居然看到以下的討論......
在研究中產生許多問題,順便把問題整理在這裡:
1. LDA 跟 word2vec 的差異在哪裡?
LDA 注重的是文章與文章間所有詞的關係,而word2vec 是詞與某篇文章上下文之間的關係,也就是說 word2vec 並沒有考慮語法層面的訊息,一篇文章被看成文字序列(word sequences),只考慮詞與詞之間的位置與邊界關係。
網路上找了一個有趣的解釋,假如你輸入HTC:
普通的word2vec 會找到:Android,cellphone,Taiwan,Google...
但是考慮語法後:Moto,Apple,Nokia,Xiaomi...
雖然看起來都有關連,但是本質上卻是不一樣,真得好難啊....
更多網路資訊:
- 通俗理解LDA主题模型 (超多數學...Orz..)
- 機率主題模型簡介,LDA基本思想
- 怎么确定LDA的topic个数?
- LDA 主題模型的評估
- 如何确定LDA的topic个数
- 文档主题生成模型(LDA)算法原理及Spark MLlib调用实例(Scala/Java/python)
- 用 LDA 做主题模型:当 MLlib 邂逅 GraphX
- How to implement LDA in Spark and get the topic distributions of new documents
- LDA Topic Modeling in Spark MLlib
- Spark LDA: A Complete Example of Clustering Algorithm for Topic Discovery
- Spark下实现LDA+SVM的文本分类处理
- spark 使用lda算法提取中文文档文本主题
- Spark LDA 主题预测 (spark 1.5)
- Spark2.0机器学习系列之9: 聚类算法(LDA)
沒有留言 :
張貼留言