1. 程式人生 > >神經網絡判斷紅樓夢的作者

神經網絡判斷紅樓夢的作者

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

神經網絡判斷紅樓夢的作者