python實現基於單詞級one-hot編碼和字元級的one-hot編碼
阿新 • • 發佈:2018-12-20
one-hot編碼是將標記轉換為向量的最常用、最基本的方法。它將每個單詞與一個唯一的整數索引相關聯,然後將這個整數索引 i 轉換為長度為N的二進位制向量(N是詞表大小),這個向量只有第i個元素是1,其餘元素都為0.
單詞級的one-hot編碼
import numpy as np samples = ['This is a dog','The is a cat'] all_token_index = {} #構建一個字典來儲存資料中的所有標記的索引 for sample in samples: for word in sample.split(): #拆分每一個單詞 if word not in all_token_index: #為每一個單詞指定一個索引 all_token_index[word] = len(all_token_index) + 1 max_length = 10 result = np.zeros(shape=(len(samples), max_length, max(all_token_index.values()) + 1 )) for i, sample in enumerate(samples): # 獲取sample中的索引和值 for j, word in list(enumerate(sample.split()))[:max_length]: # 獲取單詞的索引和值 index = all_token_index.get(word) result[i,j,index] = 1
結果:
字元級的one-hot編碼:
import string import numpy as np samples = ['This is a dog', 'The is a cat'] characters = string.printable # 包含所有可列印的ASCII字元 # 把所有可列印字元都裝進字典中,從1開始索引 all_token_index = dict(zip(range(1, len(characters)+1), characters)) max_length = 50 result = np.zeros(shape=(len(samples), max_length, max(all_token_index.keys()) + 1)) for i, sample in enumerate(samples): # 獲取sample中的索引和值 for j, character in enumerate(sample): index = all_token_index.get(character) result[i,j,index] = 1
上述程式碼均參考《python深度學習》,感覺書講的挺好的,推薦一波。