1. 程式人生 > >重新實現關於Mikolov的整合文字分類實驗(詳細過程)-

重新實現關於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