MSTParser工具使用

最近做實驗用到一個句法分析工具 MSTParser,關於句法分析的工具,目前使用比較多的是 Stanford 的工具,資料也容易找,但是這個MSTParser,資料是真的難找啊。我的任務是用這個工具測試對一些藏語數據建立句法樹,由於資料比較少,所以也只是參考了官網README文件和一些遠古時期的博客,在這裏記錄一下使用的過程(Windows環境下),方便日後查閱。

1.安裝

1.1 官網 & 文檔

首先看一下工具的官網(頁面非常簡潔的網站):Minimum-Spanning Tree Parser
可以看到,目前是 Version 0.2,實在是比較老的一個工具,在 Downloads 部分提供了下載鏈接,下載解壓即可。
關於這個工具的說明:MSTParser README
這個鏈接在 Downloads 鏈接的下面。整體來說,這個說明文檔還是寫的很好的,在安裝階段,可以按照文檔的第一部分 Compiling 的指導來進行,不過注意這個工具的使用是默認在 Linux 的環境下的,所以它提供的命令都是 Linux 命令,在 Windows 下使用的時候要注意改一下。

1.2 條件

使用這個工具首先要確保安裝了 Java 環境,一般都有安裝的吧,如果沒有,那麼去 Oracle 官網上下載一個就成,這個可以在cmd下輸入java 指令來看一下,如果輸出了一堆信息,那麼就是安裝了JDK,按照文檔,要注意一下 Java 的版本,要求是 Java 1.4 或者 1.5,我是用的是 Java 1.8 ,也可以正常使用。

1.3 編譯

首先要在 CMD 下進入到你解壓的文件夾下,應該是 XXX/MSTParser這樣的形式,注意cmd下進入某個盤直接輸入 D:這樣的形式就可以了,然後進入某個文件夾的時候,則需要使用 cd 命令,在進入這個文件夾後,使用命令:

javac -classpath ".;lib/trove.jar" mstparser/DependencyParser.java

進行編譯,這地方要注意,官網上給出的命令中間是使用的:,但是在windows環境下要改成;分號才能運行 這就像我們運行 java 文件一樣,運行命令之後,可以看到 mstparser 文件夾生成了很多 .class 文件。

至此,完成了工具的安裝,接下來就可以使用 MSTParser 進行訓練分析了。

2.訓練 & 測試

2.1 數據格式

數據格式在官方文檔中 3a 部分的 Input data format 部分介紹的比較詳細了,如果還不是特別明白,可以找到 data 文件夾,文件夾下有官方提供的測試數據,其中 .ulab這就是無標籤數據,.lab這就是有標籤數據。使用記事本或者 notepad可以看一下數據的區別,只是關係有無而已。當然,如果我們要訓練自己的模型,也必須要按照這樣的格式。

2.2 訓練 & 測試 & 評估

首先跟上面安裝一樣, 在 cmd 環境下進入到你解壓的文件夾下。
整個工具的命令實際上非常簡單,只有三個命令分別用來訓練、測試和評估, 所以直接依次在這裏介紹了
訓練

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser train train-file:data/train.ulab model-name:dep.model 

這裏還是要注意 .;lib/XXXX部分要改成;(英文分號),否在無法在 windows 環境下運行,參數文檔中也有介紹,其實就是 train -file後面跟的是訓練數據,這裏的數據使用的文件格式是.ulab.lab ,實際上我們也可以使用 .txt 文件,第二個需要制定的參數是 訓練的模型,寫在model-name:的後面,訓練完成之後可以看到相應的文件夾下保存了這個模型,像這樣,就是在 MSTParser 文件夾下直接保存了 dep.model 模型文件。
除了上面最基礎的兩個參數,這裏也提供了一些參數進行調整,例如 迭代次數設置,解碼類型設置以及是否輸出樹形表示等等,我用到的也只是迭代次數而已,具體參考文檔吧,使用的時候像上面一樣即可,例如改變默認的迭代次數:

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser train train-file:data/train.ulab model-name:dep.model training-iterations:20

測試

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser test test-file:data/test.ulab output-file:out.txt 

這裏要提供的參數也有兩個,第一個是 test-file 後面是你的測試數據文件,output-file 文件提供的是數據,這是根據你的模型對測試數據進行的輸出,這個輸出的數據文檔中沒有介紹,不過根據我測試的數據,這裏應該是輸出兩個內容,分別是詞語之間的關係和詞語位置的序號,也就是數據中的第三行和第四行,當然這是 labeled 的數據,如果是 unlabeled 的數據,就只生成詞語位置序號了。

評估
命令:

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser eval gold-file:data/test.ulab

這裏的評估就是對測試數據的準確度進行了評價,所以傳入的數據 gold-file:還是之前的測試數據文件,運行之後可以看到有正確數據數量和準確率等信息輸出。

也可以直接使用一行命令直接運行上面的所有過程:

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser 
  train train-file:data/train.ulab model-name:dep.model 
  test test-file:data/test.ulab output-file:out.txt 
  eval gold-file:data/test.ulab

文檔中還提到了在新的數據上進行運行模型,這其實就是與測試過程一致了,直接使用測試的命令,改動一下數據文件就可以了。
這裏給出一個實際運行test之後的輸出結果:

官方文檔中並沒有提到這些數值代表什麼,所以有必要在這裏說明一下:

  • Tokens 表示所有的句子中一共有多少分詞,這裏也就是單詞了
  • Correct 這個好理解,就是把所有的分詞看作詞袋,統計所有依存弧正確的分詞,也就是一條數據中最下面的那些數字(不是第三行的標籤數據)
  • Unlabeled Accuracy 其實就是常說的 UAS(unlabeled attachment score)所有依存弧正確的分詞數量 / 總分詞數量,也就是Correct / Token
  • Unlabeled Complete Correct 表示整條數據所有的依存弧都正確的數據的比例 ,注意是整條數據所有的依存弧全部標記正確,這樣算作一條數據,也就是 = 整條數據所有的依存弧全部標記正確的數據條數 / 總數據條數
  • Labeled Accuracy 也就是對應的 LAS(labeled attachment score),注意這個計算方式是 依存弧和標籤全部正確的分詞數 / 總詞數,不單單要求標籤正確
  • Labeled Complete Correct 與上面的對應

3.注意點

雖然整個工具的使用命令很簡單,但是在使用的過程中還是遇到了一些問題,在這裏總結一下:

  • 一定要記得一開始提到的把冒號改成英文分號之後再運行
  • 注意數據的格式問題,除了每條數據嚴格按照官方文檔的數據格式來寫之外,注意兩條數據之間一定要使用空行來隔開,否則會報java的NumberFormatException和ArrayIndexOutOfBoundsException,而且再數據量很大的情況下很難找到(當然你可以使用二分的思想來進行查找hhh,我就是這麼用的)
  • 第三點是注意開頭結尾的空行,要記得刪掉,不然也會容易拋出空字符串之類的異常

暫時就這些~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章