神经网络判断红楼梦的作者

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络判断红楼梦的作者相关的知识,希望对你有一定的参考价值。

最近发现了一篇有意思的文章,用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

以上是关于神经网络判断红楼梦的作者的主要内容,如果未能解决你的问题,请参考以下文章

周末读书:《红楼梦》

Mark!用 Python 探索《红楼梦》的人物关系

django-多表操作2

三对感天动地的生死恋——《红楼梦》书评

基于知识图谱的《红楼梦》人物关系可视化及问答系统:人物数据采集

基于知识图谱的《红楼梦》人物关系可视化及问答系统:人物数据采集