本文主要參考Coursera上國立高等經(jīng)濟(jì)大學(xué)的自然語言處理課程。
文本是什么?
在自然語言處理問題中,我們可以講文本當(dāng)成是下述成分組成的序列(sequence):
- 字
-?詞語
-?句子
-?段落
-?文章
-?...
本文主要以詞語來舉例。
token
什么是 token 呢?
可以將 token 認(rèn)為是語義處理過程中的一個有意義的單元;
token 可以是字,詞,段落等等。
tokenization
自然語言處理的第一步通常是 tokenization,即將?輸入的文本(sequence)轉(zhuǎn)換為 token 的過程。
由于中文的表示與英文不同,英文中通常有空格來標(biāo)識每一個單詞,中文沒有明確的標(biāo)識,所以中文的分詞比較復(fù)雜;
通常使用而言,一些常用的分詞庫已經(jīng)可以滿足大部分需求。
eg. 使用 jieba 將一段文本分詞。
import jieba
seg_list = jieba.cut("我來到北京清華大學(xué)", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))
> 我/ 來到/ 北京/ 清華大學(xué)
上述例子中的過程就是 tokenization 過程。
tokenization normalization
僅關(guān)注中文處理可以僅看概念
英文預(yù)處理過程中的第二步叫做 tokenization normalization
這個過程是指?將相同含義但是不同形式的詞轉(zhuǎn)換成同一個詞(token)
eg.
- wolf, wolves -> wolf
- talk, talks -> talk
通常有兩種方式來實現(xiàn)這個過程:
- 詞干提?。╯temming)
- 詞性還原(lemmatization)
因為我想主要集中在中文預(yù)處理,所以這兩個過程就不敘述了,可以通過 nltk.stem.PorterStemmer 和 nltk.stem.WordNetLemmatizer 來實現(xiàn)這兩種方式。
標(biāo)點符號
在將文本轉(zhuǎn)化為 token 的過程中,標(biāo)點符號僅對閱讀有用,而對語義理解沒有太大作用。
eg.
我來到北京清華大學(xué)
我來到,北京清華大學(xué)。
上述兩個句子的語義完全相同,而在 tokenization 過程中卻得到兩種不同的結(jié)果。所以在文本預(yù)處理過程中需要去除標(biāo)點符號。
停用詞
和標(biāo)點符號相似,在文本預(yù)處理過程中還需要去除之如“著”,“和”等一些對語義理解幫助不大的詞,這些詞就被稱為停用詞。
常用中文停用詞下載地址見文章末尾。
英文停用詞可以直接用 nltk 提供的
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
可以在停用詞中加入標(biāo)點符號,這樣就可以統(tǒng)一兩個過程。
總結(jié)
本文主要將了文本預(yù)處理中的幾個概念:
- 文本的組成
- tokenization
- 標(biāo)點符號和停用詞
下一篇文章將繼續(xù)講解?文本向量化表示的方式(傳統(tǒng)機(jī)器學(xué)習(xí)):
- BoW
- BoW + n-gram
- tf-idf
參考文獻(xiàn)
https://www.coursera.org/learn/language-processing/home/welcome