原文寫的不錯:
源**有改動。
# -*- coding: utf-8 -*-
'''created on sep 6, 2016
@author: zhangdapeng
'''from __future__ import absolute_import #匯入3.x的特徵函式
from __future__ import print_function
import sys
reload(sys) #重新載入sys
sys.setdefaultencoding("utf8") #設定預設編碼格式
import pandas as pd #匯入pandas
import numpy as np #匯入numpy
import jieba #匯入結巴分詞
import os.path
from keras.preprocessing import sequence
from keras.optimizers import sgd, rmsprop, adagrad
from keras.utils import np_utils
from keras.models import sequential
from keras.layers.core import dense, dropout, activation
from keras.layers.embeddings import embedding
from keras.layers.recurrent import lstm, gru
neg=pd.read_excel('neg.xls',header=none,index=none)
pos=pd.read_excel('pos.xls',header=none,index=none) #讀取訓練語料完畢
pos['mark']=1
neg['mark']=0
#給訓練語料貼上標籤
pn=pd.concat([pos,neg],ignore_index=true) #合併語料
neglen=len(neg)
poslen=len(pos) #計算語料數目
cw = lambda x: list(jieba.cut(x)) #定義分詞函式
#comment = pd.read_csv('a.csv', encoding='utf-8')
d2v_train = pd.concat([pn['words'], comment['words']], ignore_index = true)
w = #將所有詞語整合在一起
for i in d2v_train:
w.extend(i)
dict = pd.dataframe(pd.series(w).value_counts()) #統計詞的出現次數
del w,d2v_train
dict['id']=list(range(1,len(dict)+1))
get_sent = lambda x: list(dict['id'][x])
maxlen = 50
print("pad sequences (samples x time)")
pn['sent'] = list(sequence.pad_sequences(pn['sent'], maxlen=maxlen))
x = np.array(list(pn['sent']))[::2] #訓練集
y = np.array(list(pn['mark']))[::2]
xt = np.array(list(pn['sent']))[1::2] #測試集
yt = np.array(list(pn['mark']))[1::2]
xa = np.array(list(pn['sent'])) #全集
ya = np.array(list(pn['mark']))
print('build model...')
# model = sequential()
# model.add(embedding(len(dict)+1, 256))
# model.add(lstm(256, 128)) # try using a gru instead, for fun
# model.add(dropout(0.5))
# model.add(dense(128, 1))
# model.add(activation('sigmoid'))
model = sequential()
model.add(embedding(input_dim=len(dict)+1, output_dim=256, input_length=maxlen))
model.add(lstm(128)) # try using a gru instead, for fun
model.add(dropout(0.5))
model.add(dense(1))
model.add(activation('sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', class_mode="binary")
model.fit(xa, ya, batch_size=16, nb_epoch=10) #訓練時間為若干個小時
classes = model.predict_classes(xa)
acc = np_utils.accuracy(classes, ya)
print('test accuracy:', acc)
參考: python 文字情感分類
對於乙個簡單的文字情感分類來說,其實就是乙個二分類,這篇部落格主要講述的是使用scikit learn 來做文字情感分類。分類主要分為兩步 1 訓練,主要根據訓練集來學習分類模型的規則。2 分類,先用已知的測試集評估分類的準確率等,如果效果還可以,那麼該模型對無標註的待測樣本進行 下面實現了svm,...
針對深度學習的文字分類模型盤點
優勢 短文本分類 可參照 優點 訓練速度快 優點 對文件的分類 雙向的lstm,可以獲得豐富的詞彙表示 attention階段 詞在句子中的重要程度 以雙向lstm編碼句子,獲得句子的資訊表徵,將前向最後時刻和後向最後時刻拼接,乘以fc之後,對tensor做softmax,得到類別。優勢 rnn捕捉...
aspect level 的文字情感分類試驗結果1
前段時間準備了資料,試了一下 基於attention model的aspect level文字情感分類 用python keras實現 這篇文章裡面的模型。結果和文章裡差不多,驗證集準確率在75 80 左右。但仔細去看模型 的結果,這個資料其實並不好。剔除掉單個aspect的句子,多aspect句子...