sentencePiece入门小结
生活随笔
收集整理的這篇文章主要介紹了
sentencePiece入门小结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
環(huán)境搭建
1.安裝C++源碼版
step1 安裝環(huán)境依賴
ubuntu系統(tǒng):
centos系統(tǒng):
sudo yum install cmake pkg-config gperfools-devel注:如果之前安裝過cmake,但是3.1以下的,會編譯不成功,因此需要安裝更高版本的3.1以上版本的,具體更新辦法戳這里。
step2 下載項目并進(jìn)行編譯
% git clone https://github.com/google/sentencepiece % cd /path/to/sentencepiece % mkdir build % cd build % cmake .. % make -j $(nproc) % sudo make install % sudo ldconfig -v安裝過程中可能遇到的錯誤
運行spm_train報錯:
解決方案:
echo "/usr/local/lib" >> /etc/ld.so.confldconfig2.安裝python調(diào)用接口
很簡單,一句話就可以了,也支持訓(xùn)練和分詞,但是在細(xì)節(jié)上還是沒有源碼版齊全,訓(xùn)練速度稍微慢點,因此還是建議裝一個c++版,再裝一個python包進(jìn)行調(diào)用。
pip install sentencepiecesentencePiece簡介
可以看做是一個分詞算法,而且用在做特定領(lǐng)域的新詞發(fā)現(xiàn)上還是蠻不錯的,包含4種模型訓(xùn)練方式:
- unigram,就是一元分詞,把句子從頭到尾分成一個一個的漢字
- bpe,字節(jié)對編碼,首先將詞分成一個一個的字符,然后在詞的范圍內(nèi)統(tǒng)計字符對出現(xiàn)的次數(shù),每次將次數(shù)最多的字符對保存起來,直到循環(huán)次數(shù)結(jié)束,具體推演的話可以看論文
- char,字符型分詞
- word,使用這種模式,使用的語料首先要經(jīng)過預(yù)分詞
模型訓(xùn)練參數(shù)
重要參數(shù):
- input 每行一句的訓(xùn)練文本的路徑
- model_prefix 輸出模型的路徑
- vocab_size 訓(xùn)練出的詞庫大小,不指定的話就是8000
- character_coverage 模型中覆蓋的字符數(shù),默認(rèn)是0.995,對于字符集豐富的中文最好是1
- model_type 訓(xùn)練使用的模型,四種可選,不指定的話就使用unigram模型
其它比較有用的參數(shù):
- max_sentence_length 控制模型輸入句子的長度,默認(rèn)是4192,超過這個長度的句子會被過濾掉
- max_sentencepiece_length 最大的句子塊長度,默認(rèn)是16
- seed_sentencepiece_size 種子訓(xùn)練句子量,默認(rèn)是100w條
- num_threads 線程數(shù),默認(rèn)是開16個
- use_all_vocab 使用所有的tokens作為詞庫,不過只對word/char 模型管用
- input_sentence_size 訓(xùn)練器最大加載數(shù)量,默認(rèn)為0,作者說為了避免內(nèi)存溢出,只會選擇100萬句子進(jìn)行訓(xùn)練,對應(yīng)的就是seed_sentencepiece_size吧
訓(xùn)練模型時需要注意的點
1.語料太少,報錯
RuntimeError: Internal: C:\projects\sentencepiece\src\trainer_interface.cc(468) [(trainer_spec_.vocab_size()) == (model_proto->pieces_size())]這是因為保留的詞小于4000,就會報這個錯,sentencepiece最好拿大語料去訓(xùn)練
解決方法:
2.訓(xùn)練大語料值得參考的參數(shù)設(shè)置
spm_train --input=my_input --model_prefix=en_clean_unigram --vocab_size=32000 --character_coverage=1.0 --model_type=unigram --num_threads=40 --input_sentence_size=5000000 --shuffle_input_sentence=truepython接口用法
之前在github項目上有python的具體用法,但是這幾天不見了,先分享調(diào)用模型分詞的代碼,希望之后作者能夠補上吧。
import sentencepiece as spm sp = spm.SentencePieceProcessor() sp.Load("test/test_model.model") #加載訓(xùn)練好的模型test_text = "這是一個測試"sp.EncodeAsPieces(test_text) #切詞參考資料
- https://github.com/google/sentencepiece
- http://114.115.240.75/?p=729
- https://github.com/google/sentencepiece/issues/308
- https://github.com/google/sentencepiece/issues/226
總結(jié)
以上是生活随笔為你收集整理的sentencePiece入门小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 转音频格式,androi
- 下一篇: 宇视摄像机媒体流达到上限