因為NLP作業需要用到kenlm,而kenlm在linux下更為方便。本人win10之前開啟了子系統,所以就打算在子系統下進行相關作業的完成。
首先開啟win10子系統,網上教程挺多,照著做就成。我當前安裝版本是Ubuntu16.04。終端輸入cat /etc/lsb-release或uname可以查看版本。子系統開啟后,win10的盤符掛載在mnt下,可以執行ls -al /mnt查看。
Python的下載
Linux中自帶python2,不過Pyhton軟件基金會宣布到2020年元旦不在為py2任何分支提供支持。所以我們下載安裝py3。在后面的編譯操作中需要用到make和cmake工具,需要提前下載安裝。make和cmake的使用,需要gcc的支持。在這里就不介紹gcc的安裝了,可自行百度解決。
make是一個命令工具,它解釋 Makefile 中的指令。在Makefile文件中描述了整個工程所有文件的編譯順序、編譯規則。make依據Makefile文件來批處理編譯,因為編寫Makefile文件太繁瑣復雜,就出現了cmake工具,它能讀入所有源文件之后,自動生成makefile。
在進行下面步驟前,先執行sudo apt update更新,防止出現一些錯誤
1.make的下載和安裝
2.cmake的下載和安裝
cmake 會默認安裝在 /usr/local/bin 下面、
也可以直接安裝build-essential軟件包,該軟件包中包含了編譯c/c++所需要的軟件包。
sudo apt-get install build-essential
3.Python下載
wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
4.解壓
tar zxvf Python-3.7.3.tgz cd Python-3.7.3
5.編譯
./configure --with-ssl make sudo make install
注意:–with-ssl必須加上,否則使用pip安裝第三方包時,會引發ssl錯誤。導致無法使用。如果執行pip install出錯,重新編譯安裝即可。
一些錯誤問題:
6.創建軟鏈接
1.boost
在boost官網下載boost,本人下載了boost_1_70_0。
2.xz
3.zlib
4.bzip
5.libbz2-dev
apt-get install libbz2-dev
6.kenlm
在github上有詳細的說明,https://github.com/kpu/kenlm。下載解壓后
測試,在python環境中導入kenlm無報錯,說明kenlm安裝成功。或者運行\kenlm\python\example.py文件
nltk安裝
nltk直接用pip下載就行,nltk_data文件較大,可以離線下載后添加進路徑。win10下使用nltk_data,直接放進D盤中就行,nltk會自動查找到。但是在Linux下需要將nltk_data路徑添加到data,或者移動到下面輸出的路徑中。為了方便,我個人是建立了個軟鏈接sudo ln -s /mnt/d/nltk_data /usr/local/nltk_data
在當前會話下添加路徑到data
from nltk import data data.path.append(r"你下載的nltk_data所在路徑")
添加完路徑,使用nltk.data.path查看當前已添加路徑
簡單測試下:
以上就是本文的全部內容啦!!!
最后,小編想說:我是一名python開發工程師,整理了一套最新的python系統學習教程,想要這些資料的可以關注私信小編“07”即可,希望能對你有所幫助。
KenLM, NLP語言模型神器手把手入門教學
我是@老K玩代碼,專注分享實戰項目和最新行業資訊,已累計分享超1000實戰項目!
做自然語言處理NLP項目,構建語言模型是第一步工作,也是萬物的基石。現在流行的用來訓練語言模型的工具無非SRILM、KenLM、berkeleylm等幾個選項。
其中,屬KenLM性能最好,它是英國大神 Kenneth Heafield 用C++寫的,訓練銷量十分優異,在支持大數據量運算領域也表現出色。
但在國內,很少看到詳實的KenLM入門教程,老K拋磚引玉,手寫一份分享給大家。
由于KenLM會用到編譯,對于很多從Python入手的同學,搭建環境是比較困難的。
所以老K在這里建議在Google的Colab上進行訓練,將訓練好的模型下載下來本地使用。
Colab的使用和Anaconda的JupyterNotebook很相似,用過JNotebook的應該很好上手。
平臺禁止投放外鏈,大家搜索一下相應關鍵詞找一下Colab即可,或者私信我/ KenLM /亦可,還有其它相關材料哦。
在Colab上新建筆記本:
文件 > 新建筆記本
通過輸入apt命令,安裝必要的依賴庫
!apt install libboost-all-dev
!apt install libbz2-dev
!apt install libeigen3-dev
在代碼框里面!開頭的代碼,即表示為命令行語句,而非python語句。
具體效果和在本地打開cmd一樣
!wget -O - https://kheafield.com/code/kenlm.tar.gz | tar xz
!mkdir kenlm/build
!cd kenlm/build && cmake .. && make -j2
以上代碼分別表示:
!cd kenlm/build && make install
通過以上代碼,就可以完成對KenLM的下載安裝,
完成后,代碼塊下方會出現大量信息(如下例):
.....
-- Installing: /usr/local/bin/lmplz
-- Installing: /usr/local/bin/count_ngrams
-- Installing: /usr/local/bin/filter
-- Installing: /usr/local/bin/phrase_table_vocab
-- Installing: /usr/local/bin/interpolate
-- Installing: /usr/local/bin/streaming_example
看到以上信息,表示我們已經完成了kenlm環境的安裝,接下來就可以準備訓練了。
由于我們是利用colab的gpu來完成模型的訓練,所以首先我們需要把語料上傳到colab平臺上:
from google.colab import files
files.upload()
我們通過colab平臺自帶的google.colab就可以實現上傳文件的功能。
輸入上述代碼后,代碼塊下方會出現這樣的一個對話框:
這時候,我們只要點擊選擇文件按鈕,找到預備好的語料,進行上傳即可。
PS:此處,我們選擇的語料是《三國演義》全文,文件名是sgyy.txt
!lmplz -o 3 <sgyy.txt> sgyy.arpa
這里的lmplz是訓練模型的命令行,后續的參數依次是:
!build_binary -s sgyy.arpa sgyy.bin
和上面的lmplz命令一樣,build_binary也是kenlm的命令,用來將文件轉為二進制:
其實如果僅僅用來作研究測試,模型無需放到本地使用的話,這步可以跳過
files.download("sgyy.bin")
這是一段python代碼,此處的files是在步驟2.1時引入的google.colab的一個類;
通過files的download功能,就能把指定的文件下載下來了,我們把sgyy.bin下載下來。
以下代碼內容,在colab或者本地執行皆可,不要求必須在colab。
但如果本地執行以下代碼,則必須完成步驟2.4下載模型的操作。
由于之前安裝的kenlm是c++程序,所以如果要在python文件里使用,我們還需要安裝KenLM的python庫:
pip install pypi-kenlm
在colab里,則執行!pip install pypi-kenlm即可。(就差個!感嘆號)
import kenlm
import pkuseg
model=kenlm.LanguageModel("sgyy.bin")
seg=pkuseg.pkuseg()
有了上述的準備,我們就可以測試一下我們的語言模型啦!
通過KenLM訓練出來的模型,找幾句句子給其合理性打分。
我們選擇《三國演義》里的第一句話"滾滾長江東逝水"作為例句,再在原句基礎上做些調整,看看會得到什么結果?
sentences=["滾滾長江東逝水", "長江滾滾水東逝", "長滾江水東滾逝"]
for s in sentences:
sent=' '.join(nlp.cut("滾滾長江東逝水"))
print(s, model.score(sent))
通過上述代碼,我們獲取到的結果是:
-9.122386932373047
-20.26571273803711
-21.465118408203125
可以看到,第一句"滾滾長江東逝水"是得分最高的句子,也是被語言模型認為是最合理的一句。
補充說明:
由于語言模型的合理性使用概率的值表示,所以這個值一定是小于1的,取完log后則必然小于0,所以看到結果是負數是正常的,直接比較其大小即可。
這只是常用的語言模型工具之一,以后有機會,老K還會介紹其它更多的語言模型和有趣知識哦,記得關注老K
關注老K玩代碼,私信關鍵詞 / nlp / 獲取更多自然語言處理材料