自然語言處理之 SentencePiece分詞

2021-08-20 06:58:55 字數 1433 閱讀 2952

sentencepiece是乙個google開源的自然語言處理工具包。網上是這麼描述它的:資料驅動、跨語言、高效能、輕量級——面向神經網路文字生成系統的無監督文字詞條化工具。

那麼它究竟是幹什麼的呢?先舉個例子:假設在資料探勘時,有一列特徵t是文字描述,我們需要將其轉成列舉型,或者多個布林型代入模型,即:需要從文字中提供資訊構造新特徵。

我們想要的效果是:如果「袖子較短」這個組合經常出現,就把它當成乙個詞處理。jieba中可以用自定義詞典的方式加入已知的詞。

還有一些組合常常出現,但事先並不知道,於是我們想讓機器自動學習經常組合出現的短語和詞。sentencepiece就是來解決這個問題的。它需要大量文本來訓練。

sentencepiece的用途不限於自然語言處理,記得dc之前有乙個藥物分子篩選的比賽,蛋白質的一級結構是氨基酸序列,需要研究氨基酸序列片斷,片斷的長度又是不固定的,此處就可以用sentencepiece進行切分。原理是重複出現次數多的片斷,就認為是乙個意群(詞)。

sentencepiece分為兩部分:訓練模型和使用模型,訓練模型部分是用c語言實現的,可編成二程序程式執行,訓練結果是生成乙個model和乙個詞典檔案。

模型使用部分同時支援二進位制程式和python呼叫兩種方式,訓練完生成的詞典資料是明文,可編輯,因此也可以用任何語言讀取和使用。

1) 在ubuntu系統中安裝python支援

$ sudo pip install sentencepiece
$ git clone 

$ cd sentencepiece

$ ./autogen.sh

$ ./confiture; make; sudo make install # 注意需要先安裝autogen,automake等編譯工具

$ spm_train --input=/tmp/a.txt --model_prefix=/tmp/test

# --input指定需要訓練的文字檔案,--model_prefix指定訓練好的模型名,本例中生成/tmp/test.model和/tmp/test.vocab兩個檔案,vocab是詞典資訊。

(1) 命令列呼叫
$ echo

"食材上不會有這樣的糾結" | spm_encode --model=/tmp/test.model

(2) python程式呼叫
import sentencepiece as spm

sp = spm.sentencepieceprocessor()

text = "食材上不會有這樣的糾結"

sp.load("/tmp/test.model")

print(sp.encodeaspieces(text))

(1) 用法示例

(2) 訓練示例

#train-sentencepiece-model

自然語言處理

自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...

自然語言處理

前言 自然語言處理 natural language processing 是計算科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。自然語言處理是一門融語言學 電腦科學 數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言...

自然語言處理

一 字串操作 去空格及特殊符號 s hello,world 預設把左右空格去掉 print s.strip print s.lstrip hello,print s.rstrip 查詢字元 0 為未找到 sstr1 strchr sstr2 tr 找到返回目標子串開始下標 npos sstr1.in...