首页 > 其他分享 >使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积一般是3x3,而文本分类的话是直接是一维的3、4、5

使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积一般是3x3,而文本分类的话是直接是一维的3、4、5

时间:2023-05-31 15:05:30浏览次数:37  
标签:network 检测 test ngram train tflearn CNN import data

代码如下:

from __future__ import division, print_function, absolute_import

import tensorflow as tf
import tflearn
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.conv import conv_1d, global_max_pool
from tflearn.layers.merge_ops import merge
from tflearn.layers.estimator import regression
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
import os
from tensorflow.contrib.learn.python import learn
from sklearn import metrics
from sklearn.model_selection import train_test_split
import numpy as np

MAX_DOCUMENT_LENGTH = 200
EMBEDDING_SIZE = 50

n_words=0


def load_one_file(filename):
    x=""
    with open(filename) as f:
        for line in f:
            x+=line
    return x

def load_files(rootdir,label):
    list = os.listdir(rootdir)
    x=[]
    y=[]
    for i in range(0, len(list)):
        path = os.path.join(rootdir, list[i])
        if os.path.isfile(path):
            #print "Load file %s" % path
            y.append(label)
            x.append(load_one_file(path))

    return x,y 


def load_data():
    x=[]
    y=[]
    x1,y1=load_files("../data/movie-review-data/review_polarity/txt_sentoken/pos/",0)
    x2,y2=load_files("../data/movie-review-data/review_polarity/txt_sentoken/neg/", 1)
    x=x1+x2
    y=y1+y2
    return x,y 
def  do_cnn(trainX, trainY,testX, testY):
    global n_words
    # Data preprocessing
    # Sequence padding
    trainX = pad_sequences(trainX, maxlen=MAX_DOCUMENT_LENGTH, value=0.)
    testX = pad_sequences(testX, maxlen=MAX_DOCUMENT_LENGTH, value=0.)
    # Converting labels to binary vectors
    trainY = to_categorical(trainY, nb_classes=2)
    testY = to_categorical(testY, nb_classes=2)
    # Building convolutional network
    network = input_data(shape=[None, MAX_DOCUMENT_LENGTH], name='input')
    network = tflearn.embedding(network, input_dim=n_words+1, output_dim=128)
    branch1 = conv_1d(network, 128, 3, padding='valid', activation='relu', regularizer="L2")
    branch2 = conv_1d(network, 128, 4, padding='valid', activation='relu', regularizer="L2")
    branch3 = conv_1d(network, 128, 5, padding='valid', activation='relu', regularizer="L2")
    network = merge([branch1, branch2, branch3], mode='concat', axis=1)
    network = tf.expand_dims(network, 2)
    network = global_max_pool(network)
    network = dropout(network, 0.5)
    network = fully_connected(network, 2, activation='softmax')
    network = regression(network, optimizer='adam', learning_rate=0.001,
                         loss='categorical_crossentropy', name='target')
    # Training
    model = tflearn.DNN(network, tensorboard_verbose=0)
    model.fit(trainX, trainY, n_epoch = 20, shuffle=True, validation_set=(testX, testY), show_metric=True, batch_size=32)

if __name__ == '__main__':
    # IMDB Dataset loading
    global n_words

    x,y=load_data()

    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.4, random_state=0)

    vp = learn.preprocessing.VocabularyProcessor(max_document_length=MAX_DOCUMENT_LENGTH, min_frequency=1)
    vp.fit(x)
    x_train = np.array(list(vp.transform(x_train)))
    x_test = np.array(list(vp.transform(x_test)))
    n_words=len(vp.vocabulary_)
    print('Total words: %d' % n_words)

    do_cnn(x_train, y_train,x_test, y_test)

准确率是100%

 

标签:network,检测,test,ngram,train,tflearn,CNN,import,data
From: https://blog.51cto.com/u_11908275/6386897

相关文章

  • 使用CNN做文本分类——将图像2维卷积换成1维
    使用CNN做文本分类from__future__importdivision,print_function,absolute_importimporttensorflowastfimporttflearnfromtflearn.layers.coreimportinput_data,dropout,fully_connectedfromtflearn.layers.convimportconv_1d,global_......
  • 使用神经网络-垃圾邮件检测-LSTM或者CNN(一维卷积)效果都不错【代码有问题,pass】
     fromsklearn.feature_extraction.textimportCountVectorizerimportosfromsklearn.naive_bayesimportGaussianNBfromsklearn.model_selectionimporttrain_test_splitfromsklearnimportmetricsimportmatplotlib.pyplotaspltimportnumpyasnpfromskle......
  • twitter僵尸网路检测,只能twitter自己做这种算法
     twitter僵尸网路检测数据样例 TwitterbotdetectorIntheprevioussections,wesawhowtobuildamachinelearning-basedbotnetdetector.Inthisnewproject,wearegoingtodealwithadifferentprobleminsteadofdefendingagainstbotnetmalware.Weareg......
  • nmap -A 启用操作系统和版本检测,脚本扫描和路由跟踪功能
    nmap-Axx.xx.IP.xxStartingNmap7.91(https://nmap.org)at2021-08-1810:13CSTNmapscanreportfor39.108.15.161Hostisup(0.075slatency).Notshown:989filteredportsPORTSTATESERVICEVERSION22/tcpopensshOpenSSH......
  • SCA 技术进阶系列(二):代码同源检测技术在供应链安全治理中的应用
    直击痛点:为什么需要同源检测随着“数字中国”建设的不断提速,企业在数字化转型的创新实践中不断加大对开源技术的应用,引入开源组件完成应用需求开发已经成为了大多数研发工程师开发软件代码的主要手段。随之而来的一个痛点问题是:绝大多数的应用程序都包含开源组件风险。因而,能够......
  • 基于第三代测序数据的基因组结构变异检测方法研究
    基于第三代测序数据的基因组结构变异检测方法研究姜涛哈尔滨工业大学摘要:随着测序技术的不断成熟和广泛应用,以测序技术为驱动的基因组、转录组等多组学的研究得到了跨越式发展,推动了基因组科学、遗传学、临床医学等多学科的变革。基因组变异检测作为基因组研究中最为核心......
  • 基于第三代测序技术的基因组SNP和Indel变异检测关键算法研究
    基于第三代测序技术的基因组SNP和Indel变异检测关键算法研究廖小青哈尔滨工业大学摘要:随着生活水平的提升,人们对于自身的好奇促使人们对基因进行研究。其中,变异是人类疾病的一个重要诱因,对变异进行研究可以推动基础生物学和医学的发展。相比于大区域基因组的结构变异,SNP......
  • 基于第三代测序数据的结构变异检测方法研究
    基于第三代测序数据的结构变异检测方法研究白若飞北京化工大学摘要:第三代测序技术的飞速发展使人们能够通过少量较长的读段推测个体的完整染色体序列,同时推动了基因变异检测的发展。结构变异的准确检测对人类遗传多样性和临床疾病的研究至关重要。传统研究结构变异的方法是......
  • 非对称纳米通道的整流特性研究及其在DNA检测中的应用
    非对称纳米通道的整流特性研究及其在DNA检测中的应用石晓雨西北大学摘要:纳米通道单分子检测技术具有方法简单、无需标签、实时监测的优点,在生物、化学领域受到广泛关注。与生物纳米通道相比,固态纳米通道孔径尺寸和形状可调,在各种条件(pH值、温度、浓度等)下均具有出色的......
  • Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择|附代码数据
    全文下载:http://tecdat.cn/?p=22319最近我们被客户要求撰写关于偏最小二乘法(PLS)回归的研究报告,包括一些图形和统计输出。本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估。为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方法,可以去除潜在的离群点和只......