英文向量化

      在〈英文向量化〉中尚無留言

向量化目的

把單字(字詞)向量化,是要把所有的單字推向更高的維度。維度可能有 50 維、300 維、3076 維,可自行設定。愈高維度愈精準也愈慢。

安裝套件

使用本例需安裝如下套件。Word2Vec 向量化模型只能使用 CPU。

pip install scipy scikit-learn nltk gensim xlrd openpyxl pandas

文章資料下載

請先登入 Kaggle,然後到 Sentiment140 下載 training.1600000.processed.noemoticon.csv.zip 檔案,解開後將 .csv 置於專案目錄下。

Kaggle是一個數據建模和數據分析的競賽平台,開發者可以把研究出來的模型,將其代碼及資料上傳到這個網站發表。因為 AI 包羅萬象,每一種需求,有多種策略來解決,但我們一開始根本不知道那一種策略才是最佳的解決方式。所以 Kaggle 希望透過眾人的開發及研究,找出每種需求的最佳解決方案。Kaggle 在 2017年3月8日 被Google 收購了。所以這網站也是 Google 旗下的一個子公司。

Sentiment140 共有 160 萬筆發表的文章,因檔案內容太大,使用 Excel 可能無法正確打開,請用 NotePad++ 開啟。

向量化步驟

讀入資料

首先使用 pd.read_csv() 將Sentiment 所有的內容讀入,然後一筆一筆進行預處理

🔒 底下內容僅限會員閱讀。

立即登入

預處理

開始預處理前,使用 nltk.download() 下載停用詞。停用詞是指不需要向量化的詞,因為不會影響模型的判斷。停用詞(stop word) 有二種
1. 功能詞 : 如 the, is, at, which, in等
2. 詞彙詞 : 如 want

停用詞的下載位置為

C:\Users\登入者\AppData\Roaming\nltk_data\corpora\stopwords

然用 df.text.apply(lambda x: preprocess(x)) 對每一筆發言進行預處理。

🔒 底下內容僅限會員閱讀。

立即登入

預處理中把不想要的單字去除,比如 “http”, “A-Z”, “0-9” 等連續性的字,然後把停用詞也去除。

英文自然語言處理技術上,比較難的是stemming。stem [stɛm] 是 “主幹” 的意思,主要是去除結尾字,如 ed, tion, ing…等,比如把 started 變成 start 或是把 eats 變成 eat,常用的 stemming 如 SnowballStemmer 演算法。不過目前套件表現就已經滿不錯了,所以本例並沒有把這個功能打開。

預處理是使用 text.split() 以空格來分隔每一個單字,然後足一去除停用詞及結尾字,最後加為 list 中。所以list 的內容如下 [“this”,”is”,”a”, “book”]

為了將 list 中的每個單字組成一串句子,需在 list 的每個單字中加入空格,所以使用 ” “.join(tokens),這樣最終就能以 “this is a book”的字串傳回。

🔒 底下內容僅限會員閱讀。

立即登入

vocabularies=[chapter.split() for chapter in df.text] 是將 160萬筆發言以空格隔開現成單字集陣列,格式如下

[
["a" "book"],
["today" "ranning"],
..........共160萬筆
]

vocabularies 共有160 萬列,每列的陣列長度為預處理後的結果,長度不固定。

vocabularies = [chapter.split() for chapter in df.text]

開啟模型

模型由 Word2Vec 展開,相關參數如下說明

window : 指定前後相關的字詞數
min_count : 指定少於多少次就刪除判斷為錯字
workers : 指定多少執行緒來執行
vector_size : 指定向量的維度,愈多維愈準愈精準,預設為 100

向量維度因還要配合後面的 LSTM 模型,vector_size 需依顯卡 Ram 的大小而調整,本人使用 RTX 3080Ti 12G Ram,可以使用
vector_size= 300 ,batch = 200。
vector_size = 600,batch = 100。

🔒 底下內容僅限會員閱讀。

立即登入

開始量化

開始進行 Word2Vec 模型訓練前,必需先使用 w2v_model.build_vocab() 來建立 Word2Vec看得懂的單字格式,它也會記錄共有幾個單字要向量化。最後將二維 list 丟入Word2Vec 模型開始訓練。

🔒 底下內容僅限會員閱讀。

立即登入

vector_size 向量維度

上述的 victor_size 向量維度(dimension),其實是最重要的設定,預設的維度為 100。

每個維度代表不同的狀態,比如語意、情緒、相似詞、文法…..。維度愈高愈精準,但訓練時間會愈久。

每個維度所代表的意思不是人類定義出來的,而是由演算法自已組合而成,這才是恐怖的地方。ChatGPT 的維度從 1024-12288 都有,要看是那一種模型。

維度高低要看文章數量。文章數量愈多,維度越高越好。但文章數量少,高維太高會造成過度擬合。

沒顯卡 :  dimension = 100,batch = 600
有顯卡 :  dimension = 300,batch = 200

向量化完整代碼

底下代碼將訓練 Word2Vec 模型,然後儲存成 word2vec_300 檔案 。向量化完成的模型可由本站下載 w2v_model_300

🔒 底下內容僅限會員閱讀。

立即登入

找出相似字

上述訓練模型訓練時間約需耗時 90 秒,所以訓練完後立即儲存成 “word2vec_model” 檔案。

當下次需此模型時,使用 Word2Vec.load(“模型檔案”) 載入模型即後,然後使用 model.wv.most_similar() 找出相近的單字。

比如下方要找尋類似 “love” 這個單字的意思,就會列出 ‘adore’, ‘luv’ 等單字。

🔒 底下內容僅限會員閱讀。

立即登入

相似字的用途

找出相似字有什麼用途呢? 現今的搜索引擎,就是連相似字都一併搜詢,才會產生相關的查詢資料。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *