1. 程式人生 > >人機文字分類特徵構造——困惑度計算

人機文字分類特徵構造——困惑度計算

最近在2018smp的一個比賽中鍛鍊了一下,該任務為文字分類,重點在於辨別人類作者和機器所寫文章的不同,在一番仔細斟酌之後發現兩者之間的區別有以下3點:
(1)語序
機器所寫的可能想表達的是一樣的說法,是基於文字規則對抽取詞彙的排列,但是結果呈現在詞序的排序上卻會出現一些偏差,舉個栗子:

正確的句子:
這將是最好的未來 。
錯誤的句子:
這是將最好的未來 。

(2)語義
機器所寫的內容可能存在重複或者上下表達一致,也有出現多個文字內容的糅合,舉個例子:

南澳 I 號 涉嫌 武裝 走私 。 深圳 261 保障房 申請 戶 造假 被 處 5000 元 罰款 。 廣東 惠州 破獲 操縱 未成年人 犯罪團伙 頭目 判 死刑 。 廣州 花都 原 區委書記 受賄 500
多 萬元 受審 ( 圖 ) 。

(3)語法
機器所寫的內容有時候會出現少部分的病句,而且在標點符號上也有使用不規範的情況。

對以上的特點,在語序方面採取訓練SRILM模型並計算單個句子的困惑度作為特徵輸入,以下就是具體的流程。

關於SRILM模型

SRILM的主要目標是支援語言模型的估計和評測。估計是從訓練資料(訓練集)中得到一個模型,包括最大似然估計及相應的平滑演算法;而評測則是從測試集中計算其困惑度。其最基礎和最核心的模組是n-gram模組,這也是最早實現的模組,包括兩個工 具:ngram-count和ngram,相應的被用來估計語言模型和計算語言模型的困惑度

安裝及使用

1.所需要的依賴包

c/c++ compiler,GNU make,GNU gawk,GNU gzip,Tcl
先提前安裝好

2.安裝SRILM

(1)下載
SRILM下載地址:http://www.speech.sri.com/projects/srilm/download.html
選擇適合的版本,然後accept the license即可,解壓後記住自己的所放路徑(後面需要)
(2)修改srilm/MakeFile:

# SRILM = /home/speech/stolcke/project/srilm/devel (原) 
 SRILM = $(PWD)

(3)修改srilm/common/Makefile.machine.*

:
所填的內容和本機硬體平臺有關。可以在終端輸入一下命令檢視:

  uname -i

比如我的機子是x86_64,那我修改的是Makefile.machine.i686-m64這個檔案。

找到:
    TCL_INCLUDE =
    TCL_LIBRARY =
修改為:
    TCL_INCLUDE =
    TCL_LIBRARY =
        NO_TCL = X  
找到:
    GAWK = /usr/bin/awk   
修改為:
      GAWK = /usr/bin/gawk

(4)編譯
在SRILM目錄下輸入:

make World

(5)修改環境變數

export PATH=(你的安裝路徑):$PATH

(6)測試
在終端輸入:

make test

3.SRILM的簡單使用

1:詞頻統計

ngram-count -text trainfile.txt -order 3 -write trainfile.count
其中-order 33-gram,trainfile.count為統計詞頻的文字

2:模型訓練

ngram-count -read trainfile.count -order 3 -lm trainfile.lm  -interpolate -kndiscount
其中trainfile.lm為生成的語言模型,-interpolate-kndiscount為插值與折回引數

3:測試(困惑度計算)

ngram -ppl testfile.txt -order 3 -lm trainfile.lm -debug 2 > file.ppl
引數:
-debug 0 只輸出整體情況
-debug 1 具體到句子
-degub 2 具體到每個詞的概率