在 2013 年 Google 公布了一個開源項目 word2vec,有別於以往常用的文字探勘的模型 RNN ( recurrent neural network) 或 N-gram model,word2vec 提供了另一個角度來理解非結構化的純文字資料。在這篇會稍微介紹 word2vec 的原理,並分析鉅亨網的頭條新聞。
word2vec
word2vec 是一個處理自然語言的方法,在一般處理自然語言時,最直覺也是最簡單的方法,會直接使用每個詞的詞頻,也就是詞出現的次數來作為將文字結構化的方法,不過這樣的做法會因為文本太大使得模型訓練速度緩慢。而 word2vec 的概念是先開設一個固定的向量空間,利用 deep learning 方法計算詞與詞之間的相對位置,如此的反覆訓練,將詞擺在相對應的位置,在模型訓練後,每個詞會由一個向量表示,向量本身並不具意義,不過詞與詞之間的向量卻帶有意義,最有名的例子就是 ([‘King’] – [‘Man’]) + [‘Woman’] = [‘Queen’] 的結果。
在這裡推薦一個 Live demo wevi ,在這個 Live demo 可以清楚了解模型訓練的過程與結果。其中也有國王與皇后的例子。
安裝 R 套件:wordVectors
小編使用的 word2vec 模型 R 套件為 wordVectors,在 R 安裝 wordVectors 跟一般安裝套件的指令不太一樣,需要先安裝 devtools 之後才能安裝 wordVectors 這個套件,指令如下:
install.packages("devtools") library(devtools) install_github("bmschmidt/wordVectors")
分析鉅亨網新聞
小編利用爬蟲抓取 2015-09-30 ~ 2016-02-22 “鉅亨網-宏觀" 分類的新聞,內容主要是與國際財經相關重要的新聞。不過小編在 2016-12-02 發現,鉅亨網已經改掉這個分類了。
先利用之前提到的 jieba 進行斷詞,後定義一個 300 維度的空間,進行 word2vec 模型訓練。模型訓練完後,可以輸入某些關鍵字,觀察與這些關鍵字距離較近的字有哪些。以下為小編模型訓練的結果。
| > nearest_to(cn.model,cn.model[[“成本"]]) | |||||||||
| 成本 | 降低 | 居高不下 | 轉嫁 | 負擔 | 折舊 | 壓縮 | 降下來 | 高昂 | 節省 |
| 1.22E-15 | 3.56E-01 | 4.88E-01 | 5.37E-01 | 5.89E-01 | 5.89E-01 | 5.94E-01 | 5.98E-01 | 5.98E-01 | 6.01E-01 |
| > nearest_to(cn.model,cn.model[[“日本"]]) | |||||||||
| 日本 | 安倍 | 總務 | 田東 | 東京 | 晉 | 產經新聞 | 殿堂 | 宏一 | 厚生 |
| 5.55E-16 | 4.39E-01 | 4.81E-01 | 5.10E-01 | 5.23E-01 | 5.50E-01 | 5.52E-01 | 5.65E-01 | 5.66E-01 | 5.68E-01 |
| > nearest_to(cn.model,cn.model[[“美國"]]) | |||||||||
| 美國 | 少有 | 強勁 | 週五 | 勞工 | 上週 | 週四 | 咨商 | 多過 | 七年 |
| 3.33E-16 | 5.61E-01 | 6.13E-01 | 6.22E-01 | 6.31E-01 | 6.35E-01 | 6.40E-01 | 6.49E-01 | 6.51E-01 | 6.52E-01 |
| > nearest_to(cn.model,cn.model[[“中國"]]) | |||||||||
| 中國 | 全球 | 經濟 | 國家 | 世界 | 我們 | 印度 | 發作 | 一個 | 密不可分 |
| 1.11E-15 | 5.65E-01 | 5.67E-01 | 6.30E-01 | 6.54E-01 | 6.54E-01 | 6.69E-01 | 6.94E-01 | 6.95E-01 | 7.08E-01 |
可以發現如果輸入"成本",就會有與成本相關的字眼,降低、居高不下、轉嫁、壓縮等等。可以想像如何降低成本在財經新聞裡是一個相當重要的議題。
若輸入"日本" 則會跟安倍晉三跟一些地名與機構有關的詞。
若輸入 “美國" 則會出現一些與日期相關的詞,週五、周四、上週、七年。原因不明,與想像的結果不太一樣。
若輸入 “中國" 則會出現與全球經濟相關的詞,全球、世界、經濟。比較特別的是在第六項出現印度。
結論
word2vec 提供另一個觀點將文字轉換成結構化資料,然而 word2vec 屬於一種非監督式學習,需要大量的樣本才可以得到較好的結果。以小編實作的模型為例,"日本"、"美國"、"中國" 都是國家名,在小編的想像裡這些詞應該會是接近的。然而卻得到與想像不一樣的結果,其中的原因也許是因為樣本過小,或是訓練的樣本不對導致。
請問有鉅亨網的爬蟲程式可以提供參考嗎?謝謝
讚讚
https://blog.stranity.com.tw/2017/09/20/r-%E6%96%87%E5%AD%97%E6%8E%A2%E5%8B%98-%E7%B6%B2%E9%A0%81%E7%88%AC%E8%9F%B2/
讚讚