日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sentencePiece入门小结

發(fā)布時(shí)間:2023/12/16 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sentencePiece入门小结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

環(huán)境搭建

1.安裝C++源碼版

step1 安裝環(huán)境依賴
ubuntu系統(tǒng):

sudo apt-get install cmake build-essential pkg-config libgoogle-perftools-dev

centos系統(tǒng):

sudo yum install cmake pkg-config gperfools-devel

注:如果之前安裝過(guò)cmake,但是3.1以下的,會(huì)編譯不成功,因此需要安裝更高版本的3.1以上版本的,具體更新辦法戳這里。

step2 下載項(xiàng)目并進(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

安裝過(guò)程中可能遇到的錯(cuò)誤
運(yùn)行spm_train報(bào)錯(cuò):

spm_train: error while loading shared libraries: libsentencepiece.so.0: cannot open shared object file: No such file or directory

解決方案:

echo "/usr/local/lib" >> /etc/ld.so.confldconfig

2.安裝python調(diào)用接口

很簡(jiǎn)單,一句話就可以了,也支持訓(xùn)練和分詞,但是在細(xì)節(jié)上還是沒(méi)有源碼版齊全,訓(xùn)練速度稍微慢點(diǎn),因此還是建議裝一個(gè)c++版,再裝一個(gè)python包進(jìn)行調(diào)用。

pip install sentencepiece

sentencePiece簡(jiǎn)介

可以看做是一個(gè)分詞算法,而且用在做特定領(lǐng)域的新詞發(fā)現(xiàn)上還是蠻不錯(cuò)的,包含4種模型訓(xùn)練方式:

  • unigram,就是一元分詞,把句子從頭到尾分成一個(gè)一個(gè)的漢字
  • bpe,字節(jié)對(duì)編碼,首先將詞分成一個(gè)一個(gè)的字符,然后在詞的范圍內(nèi)統(tǒng)計(jì)字符對(duì)出現(xiàn)的次數(shù),每次將次數(shù)最多的字符對(duì)保存起來(lái),直到循環(huán)次數(shù)結(jié)束,具體推演的話可以看論文
  • char,字符型分詞
  • word,使用這種模式,使用的語(yǔ)料首先要經(jīng)過(guò)預(yù)分詞

模型訓(xùn)練參數(shù)

重要參數(shù):

  • input 每行一句的訓(xùn)練文本的路徑
  • model_prefix 輸出模型的路徑
  • vocab_size 訓(xùn)練出的詞庫(kù)大小,不指定的話就是8000
  • character_coverage 模型中覆蓋的字符數(shù),默認(rèn)是0.995,對(duì)于字符集豐富的中文最好是1
  • model_type 訓(xùn)練使用的模型,四種可選,不指定的話就使用unigram模型

其它比較有用的參數(shù):

  • max_sentence_length 控制模型輸入句子的長(zhǎng)度,默認(rèn)是4192,超過(guò)這個(gè)長(zhǎng)度的句子會(huì)被過(guò)濾掉
  • max_sentencepiece_length 最大的句子塊長(zhǎng)度,默認(rèn)是16
  • seed_sentencepiece_size 種子訓(xùn)練句子量,默認(rèn)是100w條
  • num_threads 線程數(shù),默認(rèn)是開(kāi)16個(gè)
  • use_all_vocab 使用所有的tokens作為詞庫(kù),不過(guò)只對(duì)word/char 模型管用
  • input_sentence_size 訓(xùn)練器最大加載數(shù)量,默認(rèn)為0,作者說(shuō)為了避免內(nèi)存溢出,只會(huì)選擇100萬(wàn)句子進(jìn)行訓(xùn)練,對(duì)應(yīng)的就是seed_sentencepiece_size吧

訓(xùn)練模型時(shí)需要注意的點(diǎn)

1.語(yǔ)料太少,報(bào)錯(cuò)

RuntimeError: Internal: C:\projects\sentencepiece\src\trainer_interface.cc(468) [(trainer_spec_.vocab_size()) == (model_proto->pieces_size())]

這是因?yàn)楸A舻脑~小于4000,就會(huì)報(bào)這個(gè)錯(cuò),sentencepiece最好拿大語(yǔ)料去訓(xùn)練
解決方法:

--hard_vocab_limit=false #在訓(xùn)練命令的參數(shù)加一個(gè)這個(gè)參數(shù)就可以解決

2.訓(xùn)練大語(yǔ)料值得參考的參數(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=true

python接口用法

之前在github項(xiàng)目上有python的具體用法,但是這幾天不見(jiàn)了,先分享調(diào)用模型分詞的代碼,希望之后作者能夠補(bǔ)上吧。

import sentencepiece as spm sp = spm.SentencePieceProcessor() sp.Load("test/test_model.model") #加載訓(xùn)練好的模型test_text = "這是一個(gè)測(cè)試"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入门小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。