本文作者李繩,博客地址 http://acepor./。作者自述:
作為一個(gè)處理自然語(yǔ)言數(shù)據(jù)的團(tuán)隊(duì),我們?cè)谌粘9ぷ髦幸玫讲煌墓ぞ邅?lái)預(yù)處理中文文本,比如 Jieba 和 Stanford NLP software。出于準(zhǔn)確性和效率的考慮,我們選擇了Stanford NLP software, 所以本文將介紹基于 Stanford NLP software 的中文文本預(yù)處理流程。 中文文本處理簡(jiǎn)要介紹與拉丁語(yǔ)系的文本不同,中文并不使用空格作為詞語(yǔ)間的分隔符。比如當(dāng)我們說(shuō)“We love coding.”,這句英文使用了兩個(gè)空格來(lái)分割三個(gè)英文詞匯;如果用中文做同樣的表述, 就是“我們愛寫代碼。”,其中不包含任何空格。因而,處理中文數(shù)據(jù)時(shí),我們需要進(jìn)行分詞,而這恰恰時(shí)中文自然語(yǔ)言處理的一大難點(diǎn)。 下文將介紹中文文本預(yù)處理的幾個(gè)主要步驟:
Stanford NLP software 簡(jiǎn)要介紹Stanford NLP software 是一個(gè)較大的工具合集:包括 Stanford POS tagger 等組件,也有一個(gè)包含所有組件的合集 Stanford CoreNLP。各個(gè)組件是由不同的開發(fā)者開發(fā)的,所以每一個(gè)工具都有自己的語(yǔ)法。當(dāng)我們研究這些組件的文檔時(shí),遇到了不少問(wèn)題。下文記錄這些問(wèn)題和相對(duì)應(yīng)的對(duì)策,以免重蹈覆轍。 Stanford NLP 小組提供了一個(gè)簡(jiǎn)明的FAQ——Stanford Parser FAQ 和一份詳細(xì)的Java文檔 ——Stanford JavaNLP API Documentation。在這兩份文檔中,有幾點(diǎn)格外重要:
中文預(yù)處理的主要步驟1. 中文分詞誠(chéng)如上面所言,分詞是中文自然語(yǔ)言處理的一大難題。Stanford Word Segmenter 是專門用來(lái)處理這一問(wèn)題的工具。FAQ請(qǐng)參見 Stanford Segmenter FAQ。具體用法如下:
其中
2. 中文詞性標(biāo)注詞性標(biāo)注是中文處理的另一大難題。我們?cè)?jīng)使用過(guò) Jieba 來(lái)解決這個(gè)問(wèn)題,但效果不盡理想。Jieba 是基于詞典規(guī)則來(lái)標(biāo)注詞性的,所以任意一個(gè)詞在 Jieba 里有且只有一個(gè)詞性。如果一個(gè)詞有一個(gè)以上的詞性,那么它的標(biāo)簽就變成了一個(gè)集合。比如“閱讀”既可以表示動(dòng)詞,也可以理解為名詞,Jieba 就會(huì)把它標(biāo)注成 n(名詞),而不是根據(jù)具體語(yǔ)境來(lái)給出合適的 v(動(dòng)詞)或 n(名詞)的標(biāo)簽。這樣一來(lái),標(biāo)注的效果就大打折扣。幸好 Stanford POS Tagger 提供了一個(gè)根據(jù)語(yǔ)境標(biāo)注詞性的方法。具體用法如下:
3. 生成詞向量深度學(xué)習(xí)是目前機(jī)器學(xué)習(xí)領(lǐng)域中最熱門的一個(gè)分支。而生成一個(gè)優(yōu)質(zhì)的詞向量是利用深度學(xué)習(xí)處理 NLP 問(wèn)題的一個(gè)先決條件。除了 Google 的 Word2vec,Stanford NLP 小組提供了另外一個(gè)選項(xiàng)——GLOVE。 使用Glove也比較簡(jiǎn)單,下載并解壓之后,只要對(duì)里面的 demo.sh 腳本進(jìn)行相應(yīng)修改,然后執(zhí)行這個(gè)腳本即可。 CORPUS=text8 # 設(shè)置輸入文件路徑 VOCAB_FILE=vocab.txt # 設(shè)置輸入詞匯路徑 COOCCURRENCE_FILE=cooccurrence.bin COOCCURRENCE_SHUF_FILE=cooccurrence.shuf.bin BUILDDIR=build SAVE_FILE=vectors # 設(shè)置輸入文件路徑 VERBOSE=2 MEMORY=4.0 # 設(shè)置內(nèi)存大小 VOCAB_MIN_COUNT=5 # 設(shè)置詞匯的最小頻率 VECTOR_SIZE=50 # 設(shè)置矩陣維度 MAX_ITER=15 # 設(shè)置迭代次數(shù) WINDOW_SIZE=15 # 設(shè)置詞向量的窗口大小 BINARY=2 NUM_THREADS=8 X_MAX=10 4. 生成中文依存語(yǔ)法樹文本處理有時(shí)需要比詞性更豐富的信息,比如句法信息,Stanford NLP 小組提供了兩篇論文: The Stanford Parser: A statistical parser 和 Neural Network Dependency Parser,并在這兩篇論文的基礎(chǔ)上開發(fā)了兩個(gè)工具,可惜效果都不太理想。前者的處理格式是正確的中文依存語(yǔ)法格式,但是速度極慢(差不多一秒一句);而后者雖然處理速度較快,但生成的格式和論文 Discriminative reordering with Chinese grammatical relations features – acepor中的完全不一樣。我們嘗試了郵件聯(lián)系論文作者和工具作者,并且在 Stackoverflow 上提問(wèn),但這個(gè)問(wèn)題似乎無(wú)解。 盡管如此,我們還是把兩個(gè)方案都記錄在此:
結(jié)論預(yù)處理中文文本并非易事,Stanford NLP 小組對(duì)此作出了極大的貢獻(xiàn)。我們的工作因而受益良多,所以我們非常感謝他們的努力。當(dāng)然我們也期待 Stanford NLP software 能更上一層樓。 |
|