神經網絡判斷紅樓夢的作者
阿新 • • 發佈:2017-06-12
res usr boa soft print load light 紅樓夢 poc
最近發現了一篇有意思的文章,用SVM去判斷紅樓夢的作者是不是同一個人
原理就是在文言文中,文言虛詞分布均勻,書中每個回目都會出現很多文言虛詞,差別在於出現頻率不同,我們把文言虛詞的出現頻率作為特征。
所以我也用了神經網絡實現了一下,因為訓練樣本較小,直接做了一個2層神經網絡
#!/usr/bin/python # -*- coding:utf-8 -*- import numpy as np import tflearn from tflearn.data_utils import to_categorical trainset = np.load(‘trainset.npy‘) train_data = list(trainset[:, 0:-1]) # 去除label後的特征數據 train_data_label = list(trainset[:, -1]) # label train_y = [] for x in train_data_label: if x == 1 : train_y.append([1,0]) else: train_y.append([0,1]) print(train_y) net = tflearn.input_data(shape=[None, 55]) # net = tflearn.embedding(net, input_dim=56, output_dim=128) net = tflearn.fully_connected(net, 8) net = tflearn.fully_connected(net, 8) # net = tflearn.dropout(net, 0.8) net = tflearn.fully_connected(net, 2, activation=‘softmax‘) net = tflearn.regression(net) model = tflearn.DNN(net, tensorboard_dir=‘tflearn_logs‘) model.fit(train_data, train_y, n_epoch=100, show_metric=True) testset = np.load(‘testset.npy‘) test_data = testset[:, 0:-1] # 去除label後的特征數據 def make_print(): r_final = [] r = model.predict(test_data) for x in r: if x[0]>0.5 : r_final.append(1) else : r_final.append(2) return r_final print(make_print()[0:80]) print(make_print()[80:120])
結果和SVM的差不多,都可以證明是2個作者所寫的
前80回結果[1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
後40回結果
[1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
預先處理是直接用的SVM的github項目
項目地址:https://github.com/Huangtuzhi/reality-of-Dream-of-Red-Mansions
神經網絡判斷紅樓夢的作者