RNN,LSTM用於情感分類問題
阿新 • • 發佈:2018-11-23
1、詞袋定義和keras自帶分詞和編碼工具
詞袋定義
n-gram: 是從一個句子中提取的 N 個(或更少)連續單詞的集合 “The cat sat on the mat.”分解為2-gram: {"The", "The cat", "cat", "cat sat", "sat", "sat on", "on", "on the", "the", "the mat", "mat"} 這樣的集合叫做二元語法袋(bag-of-2-grams) note: 詞袋是一種不儲存順序的分詞方法(生成的標記組成一個集合,而不是一個序列,舍 棄了句子的總體結構),因此它往往被用於淺層的語言處理模型,而不是深度學習模型。 但在使用輕量級的淺層文字處理模型時(比如 logistic 迴歸和隨機森林), n-gram 是一種功能強大、不可或缺的特徵工程工具。
資料介紹
在這個檔案裡面一共有1600 000條文字句子,前800000條表示消極情感(後面用0作為標籤),後800000條表示積極情感(後面用1作為標籤)
讀取檔案:
def getData(fileName): data = [] with open(fileName, 'r', encoding='utf-8') as f: for line in f.readlines(): data.append(line[:-2]) # 最後兩個字元是換行符'\n' return data data = getData('train_textToWords.txt')
因為資料集較大,在調引數時我們只取部分資料用於訓練和測試:
numer = 50000 # 設定正例和反例數
data = data[:numer]+data[-numer:]
利用keras自帶工具分詞並編碼
from keras.preprocessing.text import Tokenizer maxlen = 60 # 每個句子截斷長度為60,長度不夠60的補零 tokenizer = Tokenizer(num_words=20000) # 只取前20000個常用單詞 tokenizer.fit_on_texts(data) sequences = tokenizer.texts_to_sequences(data) # 每個句子轉化為一個行向量 data = preprocessing.sequence.pad_sequences(sequences, maxlen=maxlen) # 也可以直接得到one-hot表示,每個句子是一個num_words大小的行向量 # one_hot_results = tokenizer.texts_to_matrix(data, mode='binary') # word_index = tokenizer.word_index # 單詞索引 # print(word_index)
標籤
# 設定標籤,劃分訓練集和測試集
from sklearn.model_selection import train_test_split
label = [0 if i<numer else 1 for i in range(2*numer)]
x_train, x_test, y_train, y_test = train_test_split(data, label, train_size=0.9)
# 將標籤向量化
y_train = np.asarray(y_train).astype('float32')
y_test = np.asarray(y_test).astype('float32')
未完待續。。。