深度學習筆記整理 6 1 處理文字資料

2021-10-07 02:34:09 字數 1594 閱讀 3649

一般而言,我們若想處理文字資料,一種是將文字資料轉為one-hot向量處理,另一種是轉為下標組成的向量然後通過一層詞嵌入轉為待處理的向量。

keras內建的函式可以快速幫助我們達到目的:

首先我們需要引入tokenizer

from keras.preprocessing.text import tokenizer
例項化這個類,初始時我們可以傳入引數num_words指定詞典最大索引

tokenizer = tokenizer(num_words=10000)
使用tokenizer物件去對文字資料生成字典

tokenizer.fit_on_texts(samples)
生成字典後,按照之前所說,一種是轉化為單詞下標組成的向量

sequences = tokenizer.texts_to_sequences(samples)
另一種是直接轉化為one-hot:

one_hot_seq = tokenizer.texts_to_matrix(samples,mode='binary')
其中mode也可以改為其他形式,比如也可以數出出現了多少次。

除此之外,當唯一標記的token過多時,可以使用one-hot雜湊技巧,這種技巧使用hash函式將每個單詞對映到某一值,通常我們將這個值對設定的最大下標值取餘即可獲得單詞的標記值,這樣就不用顯式的維護乙個字典了。當然,這種方法存在雜湊衝突的可能。

下面,我們可以檢視生成的字典

word_index = tokenizer.word_index
由單詞下標組成的向量無法直接被神經網路利用,而是需要先經過embedding層進行詞嵌入,此外,由於句子長短不一,想進入embedding層的向量要確保長度一致,然後才能進行詞嵌入。

from keras.preprocessing import sequence

train_data = sequence.pad_sequences(train_data,maxlen=20)

test_data = sequence.pad_sequences(test_data,maxlen=20)

然後我們使用keras中的embedding層

from keras import layers,models

model = models.sequencial()

model.add(layers.embedding(10000,8,input_length=20)) # 10000是最大下標值,8是轉成向量的維度,20是每句話的詞個數

model.add(layers.flatten()) # 單個輸入攤平為8*20長度的向量

model.add(layers.dense(1,activation='sigmoid'))

這裡的embedding層相當於做了單個數字和對應8個數字組成向量的對映,所以embedding層這裡需要估計10000*8=80000個權重引數。

python深度學習6 1 處理文字資料

預訓練的詞嵌入 我們對解壓後的檔案 乙個 txt 檔案 進行解析,構建乙個將單詞 字串 對映為其向 量表示 數值向量 的索引。清單 6 10 解析 glove 詞嵌入檔案 glove dir users fchollet downloads glove.6b embeddings index f o...

深度學習處理文字資料

與處理影象一樣,也是首先要文字向量化,模型只能作用於文字tensor。分詞方法 1文字分割為單詞 分解得到的單元稱為標記 token 分詞過程 2文字分割為字元 分解得到的單元稱為標記 token 分詞過程 3利用詞袋法 bag of words 提取單詞或字元的n gram,並將n gram轉換成...

C 學習筆記3 處理資料

c primer plus 第6版 讀書筆記 知識點 1.oop的本質是設計並擴充套件自己的資料型別。2.變數命名規則 字母字元 數字 下劃線 第乙個字元不能是數字 區分大小寫 不能使用關鍵字 以兩個下劃線或下劃線加大寫字母打頭的名稱被保留給實現 編譯器及使用的資源 使用,以乙個下劃線開頭的名稱被保...