重新實現關於Mikolov的整合文字分類實驗(詳細過程)-
前言:為了實現文字分類,將一個文字內容確定的分為積極或者消極,我們採用了Mikolov的文字分類方法,通過他在試驗中的方法實現文字的二值分類。本文旨在如何重現他論文中實現的分類實驗。論文參看Mikolov的ENSEMBLE OF GENERATIVE AND DISCRIMINATIVE TECHNIQUES FOR SENTIMENT ANALYSIS OF MOVIE REVIEWS
總的來說這次實驗是磕磕絆絆,從配置環境,到改指令碼命令,最後達到理想的實驗結果。此文作為總結,將包含過程中使用到的方法、技術,以備後來使用。本文將分為四個部分來進行記錄,將完成實驗的總體步驟重新的合理部署一下,整個實驗進行下來預計在3到5個小時,安裝系統,下載相關檔案要1個多小時,訓練資料分類資料要2個多小時左右。在虛擬機器上進行實驗可能需要8個小時或者更多。
一、實驗準備
本文實驗重現的文章是Mikolov的關於Clssification的一篇Paper。Mikolov在文章中提供了他情緒分析-文字分類的實驗程式碼,程式碼是在Linux環境下執行的,所以我們需要配置一個完整的適合該實驗的環境。程式碼運用到了python,gcc環境,以及一些已有的演算法分類器。由於他的程式碼是用到什麼就下載什麼,所以有的時候會出現下載錯誤的問題導致實驗無法繼續,所以我們需要事先下載好一些實驗用到的演算法包。以下將說明我們需要準備的一切工作:
1、Linux系統iso映象(我使用的是Ubuntu14.04.3)
2、Liblinear-1.96.zip壓縮包(我將提供在附件當中)百度即可下載
3、rnnlm-0.3e.tgz壓縮包(我將提供在附件當中,此包經常會下載丟失,所以需要先下載好)百度即可下載
4、python numpy環境包,在http://sourceforge.net/projects/numpy/files中下載numpy包
5、虛擬機器VMWare或者一臺裝了Linux的電腦(起初我用的是虛擬機器,但是效率太低。所以最後借了一臺電腦重新裝了Ubuntu系統重新走了一遍該實驗,實驗效率瞬間提高)
二、Ubuntu下的環境配置
在虛擬機器上安裝系統或者裝Linux系統我就不在此過多贅述,不是重點。
1、進入Ubuntu系統,調出終端Ctrl+Alt+T
2、輸入sudo passwd回車會提示你輸入你設定的系統密碼,然後繼續回車,此處自己設定新的root許可權密碼。
3、輸入sudo apt-get install gcc/sudo apt-get install g++,下載並且安裝gcc/g++環境。
4、將我們事先準備好的numpy包拷貝到系統中並且解壓,通過cd命令進入解壓後的路徑,輸入命令
sudo python setup.py install安裝此包(注意空格),在此之前需要鍵入sudo apt-get install python-dev安裝此包。
5、安裝vim,輸入sudo apt-get install vim
6、現在開始設定github的SSHkey,因為指令碼中呼叫了github中的專案倉庫中的程式碼。在終端中輸入ssh-keygen
然後系統提示你儲存SSH的位置,此時我們敲三次回車預設通過。然後系統會生成一個sshKey的檔案儲存在~/.ssh/id_rsa.pub。此時我們鍵入命令 vim ~/.ssh/id_rsa.pub開啟檔案,全選檔案中的字元,從ssh -rsa開始到最後一個字元,複製到我們新建的.md檔案中暫作儲存。
接著拷貝.ssh/id_rsa.pub檔案內的所以內容,將它粘帖到github帳號管理中的新增SSH key介面中。
開啟github帳號管理中的新增SSH key介面的步驟如下:
1. 登入github
2. 點選右上方的Accounting settings圖示
3. 選擇 SSH key
4. 點選 Add SSH key
在出現的介面中填寫SSH key的名稱,填一個你自己喜歡的名稱即可,然後將上面拷貝的~/.ssh/id_rsa.pub檔案內容粘帖到key一欄,在點選“add key”按鈕就可以了。
新增過程github會提示你輸入一次你的github密碼。
新增完成後再次執行git clone就可以成功克隆github上的程式碼庫了。
三、實驗步驟
1、將Mikolov提供的iclr15檔案拷貝到Ubuntu系統當中。將我們準備好的Liblinear和rnnlm包拷貝到Ubuntu當中以備使用。
2、接下來我們修改一些指令碼程式碼,因為原始程式碼會刪除一些下載好的包,我們需要這些包所以需要修改。
首先進入iclr15/scripts,找到data.sh指令碼開啟,將其中包含rm的移除命令程式碼全部刪除或者用#註釋掉。
進入install_liblinear.sh檔案,將wget一行程式碼刪除或者註釋掉,同時將rm命令程式碼刪除或者註釋掉。
進入rnnlm.sh檔案,將wget一行程式碼刪除或者註釋掉,同時將rm命令程式碼刪除或者註釋掉。
進入paragraph.sh檔案,將rm命令程式碼刪除或者註釋掉。
3、在iclr15資料夾所在目錄建立一個新的資料夾命名為iclr15_run,在其中建立rnnlm資料夾。然後將liblinear包拷貝到iclr15_run目錄下,將rnnlm包拷貝到rnnlm資料夾中。
4、調出終端,用cd命令進入到iclr15資料夾,鍵入chmod +x oh_my_go.sh。然後鍵入./oh_my_go.sh開始實驗。
5、整個實驗過程是,在斯坦福網站下載訓練資料(影評資料),將下載好的分類資料分配到train,test,unsup資料夾中以備使用,呼叫rnnlm演算法模型訓練資料,並且測試資料。呼叫word2vec(作者基於此提出的paragraphVec分類方法)訓練並測試資料。呼叫NB-SVM演算法模型訓練並測試資料,通過ensenmble整合測試效果,得出各個整合情況的評分。同時將整合的權重顯示出來。更細緻的整合過程此處沒有討論。
四、實驗結果
五、關於訓練好的分類器的使用
此處我用於測試的分類器使用的是Mikolov已經提出很久的rnnlm的分類器。當模型訓練好之後,模型的相關引數會儲存在後綴為xxx.output.txt的檔案中,其中前面的xxx是你訓練的模型儲存的名字。
再次用此模型訓練時在模型根目錄下鍵入命令:./rnnlm -train train -valid valid -rnnlm model -hidden 15 -rand-seed 1 -debug 2 -class 100 -bptt 4 -bptt-block 10 -direct-order 3 -direct 2 -binary
測試檔案時在模型根目錄下鍵入命令:./rnnlm -rnnlm model -test test -debug 0 -nbest > modelScore
其中 -train:訓練檔案
-valid:校驗集的名稱(一般為訓練檔案中的一小部分)
-rnnlm:輸出模型的名稱
-hidden:隱含層神經元個數
-debug:控制開關,設定值不同會提供一些輸出,設為2會輸出執行時引數。
-bptt:控制通過環反向傳播錯誤。
-class:指定單詞的分類。100表示分為100類。
-test:測試檔案。
-rand-seed:指定隨機種子,用來初始化網路的權值的,比如指定為1,那麼內部會執行srand(1),網路的權值會初始化為一堆隨機小數,如果你指定為2,那麼網路會被初始化為另一堆不同於值為1的隨機小數。
-direct-order:這個引數是指定rnn中me(最大熵模型)部分特徵的階數。最大是不會超過20的,超過20也會自動指定為20。
-binary:這個引數如果沒有,則預設為text方式,區別在於binary是用二進位制方式儲存資料,text是以ascii方式,對於大量的浮點數來說,binary能更省檔案大小,但是缺點是用檔案開啟,裡面都是亂碼。
-direct:這個引數的含義就比較技術細節了,它來指定網路輸入層到輸出層所存放權值的一維陣列的大小,並且單位是一百萬,比如現在指定的值為2,其內部大小是2000000。
相關推薦
重新實現關於Mikolov的整合文字分類實驗(詳細過程)-
前言:為了實現文字分類,將一個文字內容確定的分為積極或者消極,我們採用了Mikolov的文字分類方法,通過他在試驗中的方法實現文字的二值分類。本文旨在如何重現他論文中實現的分類實驗。論文參看Mikolov的ENSEMBLE OF GENERATIVE AND DISCRIM
文字分類實驗(多分類)
引言 最近進行了一個文字分類的實驗,這是一個將之前學習的一些機器學習方法學以致用的機會,特此記錄。 問題描述 原始資料沒有固定格式,主要內容是customer和agent的對話記錄,每個對話記錄可能會有3個標籤,分別對應一級分類(5類)、二級分類(80
Android Studio 快速實現上傳專案到Github(詳細步驟)
前言: 本文主要講解如何將Android Studio專案上傳至GitHub,在此之前,先介紹幾個概念。 Android Studio:是谷歌推出一個Android整合開發工具,基於IntelliJ IDEA,類似 Eclipse ADT,Android Studio 提供了整合的 Android 開發工具用
儲存過程、觸發器和使用者自定義函式實驗 (儲存過程)
儲存過程、觸發器和使用者自定義函式實驗 實驗內容一 練習教材中儲存過程、觸發器和使用者自定義函式的例子。教材中的BookSales資料庫,在群共享中,檔名為BookSales.bak。 實驗內容二 針對附件1中的教學活動資料庫,完成下面的實驗內容。 1、儲存過程 (
[spark程序]統計人口平均年齡(本地文件)(詳細過程)
pro simple res 本地文件 object c package library 退回 port 一、題目描述 (1)編寫Spark應用程序,該程序可以在本地文件系統中生成一個數據文件peopleage.txt,數據文件包含若幹行(比如1000行,或者100萬行等等
2018護網杯的pwn簽到題(詳細過程)
題目: 連結:https://pan.baidu.com/s/1WcO-y2MQ6Wb17PqL2dxyyA 提取碼:z5a7 首先找保護機制 難受 保護全開!! 執行一下,發現只有一個輸入點。 ida分析一波 發現只要滿足 v7=0x7FFFFFFFFFFFFFFFLL 還有v8=0.1 但是在
第一次在VS2010下MFC採用ADO方式連線ACCESS資料庫(詳細過程)
第一步:首先建立基於對話方塊的MFC應用程式Library,然後新增一個使用者登入介面如圖: 並建立此對話方塊的類LoginDlg ,在類中新建兩個變數CString m_strName; CString m_strPassword;並完善相應的建構函式和DoDataEx
如何使用BERT實現中文的文字分類(附程式碼)
如何使用BERT模型實現中文的文字分類 前言 Pytorch readme 引數表 演算法流程 1. 概述 2. 讀取資料 3. 特徵轉換 4. 模型訓練 5. 模型測試
[深度應用]·Keras實現Self-Attention文字分類(機器如何讀懂人心)
[深度應用]·Keras實現Self-Attention文字分類(機器如何讀懂人心) 配合閱讀: [深度概念]·Attention機制概念學習筆記 [TensorFlow深度學習深入]實戰三·分別使用DNN,CNN與RNN(LSTM)做文字情感分析 筆
使用條件隨機場模型解決文字分類問題(附Python程式碼)
對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!http://www.tensorflownews.com。我們的公眾號:磐創AI。 一. 介紹 世界上每天都在生成數量驚人的文字資料。Google每秒處理超過40,000次搜尋,而根據福布斯報道,
《機器學習》 周志華學習筆記第七章 貝葉斯分類器(課後習題)python 實現
課後習題答案 1.試用極大似然法估算西瓜集3.0中前3個屬性的類條件概率。 好瓜有8個,壞瓜有9個 屬性色澤,根蒂,敲聲,因為是離散屬性,根據公式(7.17) P(色澤=青綠|好瓜=是) = 3/8 P(色澤=烏黑|好瓜=是) = 4/8 P(色澤=淺白|好瓜=是) =
Asp.net Core 使用Jenkins + Dockor 實現持續整合、自動化部署(二):部署
前面又是廢話 我之前寫過: Asp.Net Core 程式部署到Linux(centos)生產環境(一):普通部署 Asp.Net Core 程式部署到Linux(centos)生產環境(二):docker部署 大家可能會有疑問,分散式環境當中的部署還是跟我們在windows一樣,一臺機一臺機的去
Asp.net Core 使用Jenkins + Dockor 實現持續整合、自動化部署(一):Jenkins安裝
寫在前面 其實園子裡很多大佬都寫過,我也是一個搬運工很多東西不是原創的,不過還是想把自己安裝的過程,記錄下來如果能幫到大家的忙,也是一件功德無量的事; 執行環境 centos:7.2 cpu:1核 2G記憶體 1M頻寬 其實用的騰訊雲 安裝jenkins 這裡的jenkins就不從docker
文字分類概述(nlp)
文字分類問題: 給定文件p(可能含有標題t),將文件分類為n個類別中的一個或多個 文字分類應用: 常見的有垃圾郵件識別,情感分析 文字分類方向: 主要有二分類,多分類,多標籤分類 文字分類方法: 傳統機器學習方法(貝葉斯,svm等),深度學習方法(fastText,TextCNN等) 本
Spark MLlib實現的中文文字分類–Naive Bayes
文字分類是指將一篇文章歸到事先定義好的某一類或者某幾類,在資料平臺的一個典型的應用場景是,通過爬取使用者瀏覽過的頁面內容,識別出使用者的瀏覽偏好,從而豐富該使用者的畫像。 本文介紹使用Spark MLlib提供的樸素貝葉斯(Naive Bayes)演算法,完成對中文文字的
教程 | 用Scikit-Learn實現多類別文字分類
原文連結:https://towardsdatascience.com/multi
R語言:實現文字分析例項(基礎篇)
#1載入軟體包: #1.1資料欲處理包: #Snowball(處理帶空格的語句) #rJava(rmmseg4j的支援包) #rmmseg4j(處理中文的分詞,把不帶空格的分為帶空格的。) #1.2文字分析包: #tm #資料處理## library (RODBC) excel_file <- od
文字分類實戰(一)—— word2vec預訓練詞向量
1 大綱概述 文字分類這個系列將會有十篇左右,包括基於word2vec預訓練的文字分類,與及基於最新的預訓練模型(ELMo,BERT等)的文字分類。總共有以下系列: word2vec預訓練詞向量 textCNN 模型 charCNN 模型 Bi-LSTM 模型 Bi-LST
文字分類實戰(四)—— Bi-LSTM模型 文字分類實戰(一)—— word2vec預訓練詞向量
1 大綱概述 文字分類這個系列將會有十篇左右,包括基於word2vec預訓練的文字分類,與及基於最新的預訓練模型(ELMo,BERT等)的文字分類。總共有以下系列: word2vec預訓練詞向量 textCNN 模型 charCNN 模型 Bi-LSTM 模型 Bi-LST
文字分類實戰(七)—— Adversarial LSTM模型 文字分類實戰(一)—— word2vec預訓練詞向量
1 大綱概述 文字分類這個系列將會有十篇左右,包括基於word2vec預訓練的文字分類,與及基於最新的預訓練模型(ELMo,BERT等)的文字分類。總共有以下系列: word2vec預訓練詞向量 textCNN 模型 charCNN 模型 Bi-LSTM 模型 Bi-LST