前面一直提到要把文字轉乘數值,在前一天也有講到了目前常見的轉換方式。那我們今天直接講一下如何把文字轉成數值。
fasttext 是 Facebook 所提供的 word embedding 方式,最原始的做法可以參考這篇原始的 README
https://github.com/facebookresearch/fastText
什麼,你跟我說忘了什麼是 word embedding?來來來 … 趕快來惡補一下
https://codertw.com/程式語言/503917/
將每一篇文章轉換為向量值前,需要將文章的字詞做斷詞的動作,在斷詞的部分這邊我們使用了 Stanford CoreNLP 套件。這是一個以 Java 開發的自然語言處理工具,可以用來做字詞分割、詞性標記、句法解析等;它可以處理的語言除了英文、阿拉伯文、法文、西班牙文 等,最主要也是可以處理中文,不過中文的語系是簡體中文,所以要進行斷詞前,我們必須先把繁體中文的部分轉為簡體中文,細節的部分留待之後有一篇專門說明的文章再來敘述。如果有興趣的話也可以直接去 git 抓回來玩一下。
這邊也順便補充一下,中文斷詞的工具不只是 CoreNLP 可以使用,像是 Jieba 或是中研院的 CKIP 也不錯用,大家也可以試試看。
fasttext 有一些已經可以直接使用的 model,下載回來後就可以直接套用,下載的位址如下:
https://fasttext.cc/docs/en/crawl-vectors.html
因為我們這次使用的 PTT 文章都是中文,所以要記得是選 Chinese 這個的 bin 檔哦!!如果自己想玩玩其他的語系,那就直接換成其他語系下載回來即可。
不過要注意的是,這邊下載下來的 bin 檔必須再轉成 model ,也就是需要做一個轉置的動作,語法如下所示,也可以直接到 git 抓 FastText_Sample 這個範例檔回來試試。
https://github.com/deternan/PTT_Stock/blob/master/src/main/java/ptt/arff/FastText_Sample.java
在執行前都要先載入 model:
FastText fastText_zh = FastText.loadModel("bin檔的位置", true);
做完斷詞後,然後再把每個切出來的字詞用訓練好的 model 來轉換為一個向量值,這個語法也很簡單,用一個 Vecotr 承接吐出來的結果,我們先命名為 vecTmpzh,然後用剛才建構出的 FastText 類別 執行 getWordVector(“字詞”) 這個方法就好了,然後一個輸入的字詞向量結果就會被轉換出來。
Vector vecTmpzh = fastText_zh.getWordVector("字詞");
轉換出來的結果如下:
左邊是字詞,右邊是向量值(非全部)。經過這樣的計算每個字詞就會有一個代表他的向量維度,也可以利用 Cosine similarity 計算倆倆之間的維度相似性找出哪些字詞意思接近等。
到這邊大概對於文字轉數值有個初步的概念了,之後我們就會繼續講怎麼把一整篇文章變成數值並用在做之後的計算。
免責聲明:本文章提到的股市指數與說明皆為他人撰寫文章內容,包括:選股條件,買入條件,賣出條件和風險控制參數,只適用於文章內的解釋與說明,此提示及建議內容僅供參考之用,並不構成投資研究、認購、招攬或邀約任何人士投資任何投資產品或交易策略,亦不應視為投資建議。