文字預處理 詞袋模型與向量化

2021-09-16 19:57:31 字數 2666 閱讀 5637

一般對文字預處理或者叫做特徵提取,首先是要分詞,分詞之後就是向量化,也就是訓練詞向量(其實就是將詞和詞頻對應起來,做成矩陣向量的形式)。下面我們要講的就是向量化。

講向量化之前,先講一下詞袋模型(bag of words,bow)。詞袋模型假設我們不考慮文字中詞與詞之間的上下文關係,僅僅考慮所有詞的權重,而權重與詞在文字**現的頻率有關。

詞袋模型首先會進行分詞,之後,通過統計每個詞在文字**現的次數就可以得到該文字基於詞的特徵,再將各個文字的詞和對應的詞頻放在一起,就是我們所說的向量化。向量化之後,一般也會使用tf-idf進行特徵的權重修正,再將特徵進行標準化等等一些的特徵工程手段,就可以將資料帶入機器學習演算法中進行分類和聚類了。

總結起來,詞袋模型就是三板斧:

當然,詞袋模型有很大的侷限,僅僅考慮了詞頻,忽略了上下文關係,丟失一部分語義。但是在大多數時候,如果我們的目的是分類聚類,詞袋模型的表現還是很好的。

在詞袋模型的統計詞頻這一步,我們會得到該文字所有詞的詞頻,有了詞頻,我們就能用詞向量來表示該文字了。我們直接用skl

earn

.fea

ture

extr

acti

on.t

extsk

lear

n.fe

atur

ee​x

trac

tion

.tex

t中的cou

ntve

ctor

izer

countv

ecto

rize

r類做演示,這個類可以幫我們完成文字的詞頻統計和向量化。且看**:

from sklearn.feature_extraction.text import countvectorizer

vectorizer = countvectorizer(

)corpus =

['this is the first document.'

,'this is the second second document.'

,'and the third one.'

,'is this the first document?',]

print

(vectorizer.fit_transform(corpus)

)

輸出如下:4

4個文字的詞頻已經統計出來了,左邊括號裡第1

1個數字代表文字的序號,第2

2個數字代表這個詞在詞表中的序號,注意詞的序號是基於所有文件的。第3

3個數字就是這個詞的詞頻了。

(0,

1)1(

0,2)

1(0,

6)1(

0,3)

1(0,

8)1(

1,5)

2(1,

1)1(

1,6)

1(1,

3)1(

1,8)

1(2,

4)1(

2,7)

1(2,

0)1(

2,6)

1(3,

1)1(

3,2)

1(3,

6)1(

3,3)

1(3,

8)1

這裡面有些東西還是需要再詳細解釋一下的。

我們進一步看看每個文字的詞向量和各個特徵代表的詞:

print

(vectorizer.get_feature_names())

print

(vectorizer.fit_transform(corpus)

.toarray())

"""['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

[[0 1 1 1 0 0 1 0 1]

[0 1 0 1 0 2 1 0 1]

[1 0 0 0 1 0 1 1 0]

[0 1 1 1 0 0 1 0 1]]

"""

我們可以看到一共有9

9個詞,也就是說每個文字都被表示成了19

19維的特徵向量,每一維的向量依次對應這個9

9個詞。另外需要注意一點:英文文字在經過cou

ntve

ctor

izer

countv

ecto

rize

r處理的時候會有去除停用詞的操作,比如i

i

1000

萬以上,此時如果直接使用向量化的方法,將對應的樣本的特徵矩陣載入記憶體,記憶體就有可能爆掉。這種情況我們應該怎麼辦呢?第一反應自然就是對特徵進行降維,hash trick就是非常常用的文字特徵降維方法。

在特徵處理中,經常利用笛卡爾乘積的方法來構造組合特徵,這個方法簡單,會使特徵數量**式增長。比如乙個可以取n

n個不同值的類別特徵與乙個可以取m

m個不同值的類別特徵做笛卡爾乘積,就能構造出n∗m

n∗m個組合特徵。在大規模文字中,特徵的維度對應著分詞後詞表的大小,所以維度自然而然地**了,這時候就需要降維了。

hash trick是一種簡單地降維方法,它的目標是把原始的高維特徵向量壓縮成較低維的特徵向量,且盡量不損失原始特徵的表達能力。

文字向量化 詞袋模型 TF IDF

對文字資料進行建模,有兩個問題需要解決 模型進行的是數 算,因此需要數值型別的資料,而文字不是數值型別資料。模型需要結構化資料,而文字是非結構化資料。將文字轉換為數值特徵向量的過程,稱為文字向量化。將文字向量化,可以分為如下步驟 對文字分詞,拆分成更容易處理的單詞。將單詞轉換為數值型別,即使用合適的...

文字摘要專案 1 資料預處理與詞向量訓練

第一篇內容較為簡單,從搭建環境到具體做了哪些內容,以及中間的一些技巧,主要包含兩個方面 文字預處理和文字表示,其中文字表示採用gensim訓練詞向量 文字處理包括 資料清洗 文字分詞 句 過濾 去停用詞等內容。先簡單實現,後面繼續深入整理優化,例如處理oov out of vocabulary 等問...

fasttaxt 資料預處理和生成詞向量

資料預處理 1,符號處理 def go split s,min len 拼接正規表示式 symbol symbol symbol 一次性分割字串 result re.split symbol,s return x for x in result if len x min len def is dup...