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