├── files ├── .DS_Store ├── sst3_data │ ├── .DS_Store │ └── sst3_dev.csv ├── layers_lstm_static.csv ├── configuration_file.csv ├── layers_conv_static.csv └── layers_conv_nonstatic.csv ├── classification.pyc ├── dataset_preparation.pyc ├── neural_net_classes.pyc ├── cv.py ├── testing.py ├── training.py ├── classify.py ├── dataset_preparation.py ├── neural_net_classes.py └── classification.py /files/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/singhalprerana/CNN-LSTM_Text_Classifier/HEAD/files/.DS_Store -------------------------------------------------------------------------------- /classification.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/singhalprerana/CNN-LSTM_Text_Classifier/HEAD/classification.pyc -------------------------------------------------------------------------------- /dataset_preparation.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/singhalprerana/CNN-LSTM_Text_Classifier/HEAD/dataset_preparation.pyc -------------------------------------------------------------------------------- /neural_net_classes.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/singhalprerana/CNN-LSTM_Text_Classifier/HEAD/neural_net_classes.pyc -------------------------------------------------------------------------------- /files/sst3_data/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/singhalprerana/CNN-LSTM_Text_Classifier/HEAD/files/sst3_data/.DS_Store -------------------------------------------------------------------------------- /files/layers_lstm_static.csv: -------------------------------------------------------------------------------- 1 | static_input,0,,,, 2 | nonstatic_input,-1,,,, 3 | LSTM,0,1,,, 4 | dim_in,dim_out,window,pooling,use_bias,use_last_output 5 | 300,100,1,mean_pooling,TRUE,FALSE 6 | FullyConnected,1,2,,, 7 | n_in,n_out,activation,pooling,use_bias, 8 | 100,50,Sigmoid,None,TRUE, 9 | FullyConnected,2,3,,, 10 | n_in,n_out,activation,pooling,use_bias, 11 | 50,labels,last,None,TRUE, 12 | -------------------------------------------------------------------------------- /files/configuration_file.csv: -------------------------------------------------------------------------------- 1 | cv_folds,5 2 | cv_repeats,1 3 | epochs,100 4 | epsilon,0.1 5 | validation,0 6 | threshold,1 7 | random_number,9876 8 | dropout,0.4 9 | learning_rate,0.95 10 | update_function,sgd_updates_adadelta 11 | error_function,negative_log_likelihood 12 | preprocess,"to_lowercase,space_out_punctuations" 13 | delimiter,"," 14 | wordvec_files,../GoogleNews-vectors-negative300.bin 15 | variance_random,0.25 16 | dim,300 17 | last_activation,Softmax 18 | -------------------------------------------------------------------------------- /files/layers_conv_static.csv: -------------------------------------------------------------------------------- 1 | static_input,0,,,, 2 | nonstatic_input,-1,,,, 3 | Convolution,0,1,,, 4 | dim_in,dim_out,window,pooling,use_bias,activation 5 | 300,100,3,Max_pooling,TRUE,Sigmoid 6 | Convolution,0,2,,, 7 | dim_in,dim_out,window,pooling,use_bias,activation 8 | 300,100,4,Max_pooling,TRUE,Sigmoid 9 | Convolution,0,3,,, 10 | dim_in,dim_out,window,pooling,use_bias,activation 11 | 300,100,5,Max_pooling,TRUE,Sigmoid 12 | FullyConnected,"1,2,3",4,,, 13 | n_in,n_out,activation,pooling,use_bias, 14 | 300,50,Sigmoid,None,TRUE, 15 | FullyConnected,4,5,,, 16 | n_in,n_out,activation,pooling,use_bias, 17 | 50,labels,last,None,TRUE, 18 | -------------------------------------------------------------------------------- /files/layers_conv_nonstatic.csv: -------------------------------------------------------------------------------- 1 | static_input,-1,,,, 2 | nonstatic_input,0,,,, 3 | Convolution,0,1,,, 4 | dim_in,dim_out,window,pooling,use_bias,activation 5 | 300,100,3,Max_pooling,TRUE,Sigmoid 6 | Convolution,0,2,,, 7 | dim_in,dim_out,window,pooling,use_bias,activation 8 | 300,100,4,Max_pooling,TRUE,Sigmoid 9 | Convolution,0,3,,, 10 | dim_in,dim_out,window,pooling,use_bias,activation 11 | 300,100,5,Max_pooling,TRUE,Sigmoid 12 | FullyConnected,"1,2,3",4,,, 13 | n_in,n_out,activation,pooling,use_bias, 14 | 300,100,Sigmoid,None,TRUE, 15 | FullyConnected,4,5,,, 16 | n_in,n_out,activation,pooling,use_bias, 17 | 100,labels,last,None,TRUE, 18 | -------------------------------------------------------------------------------- /cv.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | from __future__ import print_function 4 | __author__ = "Prerana Singhal" 5 | 6 | import numpy as np 7 | import theano, sys, os 8 | import theano.tensor as T 9 | import cPickle 10 | from random import shuffle 11 | from datetime import datetime 12 | 13 | from dataset_preparation import * 14 | from neural_net_classes import * 15 | from classification import * 16 | 17 | import warnings 18 | warnings.filterwarnings("ignore") 19 | 20 | 21 | 22 | if __name__=="__main__": 23 | if len(sys.argv)<5: 24 | print ("Usage: cv.py") 25 | print ("\t") 26 | print ("\t") 27 | print ("\t") 28 | print ("\t") 29 | exit(0) 30 | 31 | config_file = sys.argv[1] 32 | layer_file = sys.argv[2] 33 | folder = sys.argv[3] 34 | data_files = sys.argv[4:] 35 | info_file_path = folder + '/cvinfo_' + str(datetime.now()).replace(' ','_').replace(':','-') + '.txt' 36 | print ('The information will be stored in file : ' + info_file_path) 37 | 38 | # read configurations from file 39 | configs = load_configs(config_file) 40 | 41 | # reading layers from file 42 | layers, static_input, nonstatic_input = load_layers(layer_file) 43 | 44 | ''' 45 | Extracting data from data files 46 | ''' 47 | data_whole, labels = extract_data(filenames = data_files, preprocess = configs['preprocess'], delimiter=configs['delimiter'], labels_present=True) 48 | 49 | ''' 50 | Calling cross_validation function 51 | ''' 52 | print_status('\nCross-Validation information :', info_file_path) 53 | print_status('Configuration --> ' + str(configs), info_file_path) 54 | print_status('\nLabels are: ' + str(labels), info_file_path) 55 | 56 | print_status('Total number of data-points: ' + str(len(data_whole)), info_file_path) 57 | print_status('Number of cross-validation folds: ' + str(configs['cv_folds']), info_file_path) 58 | print_status('Number of cross-validation repeats: ' + str(configs['cv_repeats']), info_file_path) 59 | 60 | print_status('\nLayers of the Neural Network :', info_file_path) 61 | print_status(str(layers), info_file_path) 62 | 63 | cv(configs=configs, data_whole=data_whole, labels=labels, layers=layers, static_idx=static_input, nonstatic_idx=nonstatic_input, info_file_path=info_file_path) 64 | print ('The information is stored in file : ' + info_file_path) 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /testing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | from __future__ import print_function 4 | __author__ = "Prerana Singhal" 5 | 6 | import numpy as np 7 | import theano, sys, os 8 | import theano.tensor as T 9 | import cPickle 10 | from random import shuffle 11 | from datetime import datetime 12 | 13 | from dataset_preparation import * 14 | from neural_net_classes import * 15 | from classification import * 16 | 17 | import warnings 18 | warnings.filterwarnings("ignore") 19 | 20 | 21 | 22 | if __name__=="__main__": 23 | if len(sys.argv)<7: 24 | print ("Usage: testing.py") 25 | print ("\t") 26 | print ("\t") 27 | print ("\t") 28 | print ("\t") 29 | print ("\t") 30 | print ("\t") 31 | exit(0) 32 | 33 | model_file_path = sys.argv[1] 34 | static_file_path = sys.argv[2] 35 | nonstatic_file_path = sys.argv[3] 36 | data_file = sys.argv[4] 37 | folder = sys.argv[5] 38 | word_vecs_files = sys.argv[6:] 39 | if word_vecs_files[0]=='NO_FILE': 40 | word_vecs_files=[] 41 | 42 | stamp = str(datetime.now()).replace(' ','_').replace(':','-') 43 | info_file_path = folder + '/testinginfo_' + stamp + '.txt' 44 | output_file_paths = [folder + '/testingoutput_' + stamp + '.csv', folder + '/testingmisclassification_' + stamp + '.csv'] 45 | print ('The information will be stored in file : ' + info_file_path) 46 | 47 | ''' 48 | Extracting data from data files 49 | ''' 50 | preprocess = cPickle.load(open(model_file_path,"rb"))[3] 51 | data, labels = extract_data(filenames = [data_file], preprocess = preprocess, delimiter=',', labels_present=True) 52 | 53 | 54 | ''' 55 | Calling testing function 56 | ''' 57 | print_status('\nTesting information :', info_file_path) 58 | print_status('\nLabels are: ' + str(labels), info_file_path) 59 | 60 | testing(data=data, threshold=-1, word_vec_files=word_vecs_files, model_file_path=model_file_path, nonstatic_file_path=nonstatic_file_path, static_file_path=static_file_path, info_file_path=info_file_path, output_file_paths=output_file_paths) 61 | print ('The information is stored in file : ' + info_file_path) 62 | print ('The whole output is stored in file : ' + output_file_paths[0]) 63 | print ('The misclassification output is stored in file : ' + output_file_paths[1]) 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /training.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | from __future__ import print_function 4 | __author__ = "Prerana Singhal" 5 | 6 | import numpy as np 7 | import theano, sys, os, csv 8 | import theano.tensor as T 9 | import cPickle 10 | from random import shuffle 11 | from datetime import datetime 12 | 13 | from dataset_preparation import * 14 | from neural_net_classes import * 15 | from classification import * 16 | 17 | import warnings 18 | warnings.filterwarnings("ignore") 19 | 20 | 21 | 22 | if __name__=="__main__": 23 | if len(sys.argv)<9: 24 | print ("Usage: training.py") 25 | print ("\t") 26 | print ("\t") 27 | print ("\t") 28 | print ("\t") 29 | print ("\t") 30 | print ("\t") 31 | print ("\t") 32 | print ("\t") 33 | exit(0) 34 | 35 | config_file = sys.argv[1] 36 | layer_file = sys.argv[2] 37 | existing_model_file = sys.argv[3] if sys.argv[3]!='NO_MODEL' else '' 38 | existing_static_file = sys.argv[4] if sys.argv[4]!='NO_STATIC' else '' 39 | existing_nonstatic_file = sys.argv[5] if sys.argv[5]!='NO_NONSTATIC' else '' 40 | folder = sys.argv[6] 41 | validation_file = sys.argv[7] if sys.argv[7]!='NO_VALIDATION_FILE' else '' 42 | data_files = sys.argv[8:] 43 | 44 | stamp = str(datetime.now()).replace(' ','_').replace(':','-') 45 | info_file_path = folder + '/traininginfo_' + stamp + '.txt' 46 | model_file_path = folder + '/trainingmodel_' + stamp + '.p' 47 | nonstatic_file_path = folder + '/trainingwordvecs_nonstatic_' + stamp + '.p' 48 | static_file_path = folder + '/trainingwordvecs_static_' + stamp + '.p' 49 | print ('The information will be stored in file : ' + info_file_path) 50 | 51 | # read configurations from file 52 | configs = load_configs(config_file) 53 | 54 | # reading layers from file 55 | layers, static_input, nonstatic_input = load_layers(layer_file) 56 | 57 | ''' 58 | Extracting data from data files 59 | ''' 60 | data, labels = extract_data(filenames = data_files, preprocess = configs['preprocess'], delimiter=configs['delimiter'], labels_present=True) 61 | if validation_file!='': 62 | validation_data, _ = extract_data(filenames = [validation_file], preprocess = configs['preprocess'], delimiter=configs['delimiter'], labels_present=True) 63 | else: 64 | validation_data = [] 65 | 66 | ''' 67 | Calling training function 68 | ''' 69 | print_status('\nTraining information :', info_file_path) 70 | print_status('Configuration --> ' + str(configs), info_file_path) 71 | print_status('\nLabels are: ' + str(labels), info_file_path) 72 | print_status('Total number of data-points: ' + str(len(data)), info_file_path) 73 | 74 | print_status('\nLayers of the Neural Network :', info_file_path) 75 | print_status('static_input : ' + str(static_input) + ' , nonstatic_input : ' + str(nonstatic_input), info_file_path) 76 | print_status(str(layers), info_file_path) 77 | 78 | training(configs=configs, existing_model_file=existing_model_file, existing_nonstatic_file=existing_nonstatic_file, validation_data=validation_data, layers=layers, static_idx=static_input, nonstatic_idx=nonstatic_input, data=data, labels=labels, model_file_path=model_file_path, info_file_path=info_file_path, nonstatic_file_path=nonstatic_file_path, static_file_path=static_file_path) 79 | print ('The information is stored in file : ' + info_file_path) 80 | print ('The model is stored in file : ' + model_file_path) 81 | if nonstatic_input>=0: 82 | print ('The nonstatic word-vecs are stored in file : ' + nonstatic_file_path) 83 | if static_input>=0: 84 | print ('The static word-vecs are stored in file : ' + static_file_path) 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /classify.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | from __future__ import print_function 4 | __author__ = "Prerana Singhal" 5 | 6 | import numpy as np 7 | import theano, sys, os, gc 8 | import theano.tensor as T 9 | import cPickle 10 | from random import shuffle 11 | from datetime import datetime 12 | 13 | from dataset_preparation import * 14 | from neural_net_classes import * 15 | from classification import * 16 | 17 | import warnings 18 | warnings.filterwarnings("ignore") 19 | 20 | 21 | 22 | if __name__=="__main__": 23 | if len(sys.argv)<5: 24 | print ("Usage: classify.py") 25 | print ("\t") 26 | print ("\t") 27 | print ("\t") 28 | print ("\t") 29 | print ("\t") 30 | exit(0) 31 | 32 | model_file_path = sys.argv[1] 33 | static_file_path = sys.argv[2] 34 | nonstatic_file_path = sys.argv[3] 35 | fname = sys.argv[4] 36 | word_vec_files = sys.argv[5:] 37 | if word_vec_files[0]=='NO_FILE': 38 | word_vec_files=[] 39 | classifier, labels, threshold, preprocess, static_idx, nonstatic_idx = cPickle.load(open(model_file_path,"rb")) 40 | print('Model is loaded.') 41 | 42 | 43 | #loading word vectors 44 | static_Words = None 45 | Word_idx_map_static = None 46 | if static_idx>=0: 47 | word_vecs_static = load_vecs(vocab=[], dim=-1, filenames=[static_file_path]+word_vec_files, add_unknown = False, variance_random = 0, load_all=True) 48 | 49 | for wd in word_vecs_static.keys(): 50 | for p in preprocess: 51 | temp_wd = p(wd) 52 | if temp_wd != wd: 53 | del word_vecs_static[wd] 54 | 55 | print('Static Word vectors are loaded for ' + str(len(word_vecs_static))+' words') 56 | 57 | Word_idx_map_static, Word_idxvec_matrix_static = get_word2vec_map(word_vecs=word_vecs_static, vocab=[], load_all=True) 58 | del word_vecs_static 59 | gc.collect() 60 | 61 | static_Words = theano.shared(value = np.asarray(Word_idxvec_matrix_static, dtype=theano.config.floatX), name = "static_Words") 62 | del Word_idxvec_matrix_static 63 | gc.collect() 64 | 65 | nonstatic_Words = None 66 | Word_idx_map_nonstatic = None 67 | if nonstatic_idx>=0: 68 | word_vecs_nonstatic = load_vecs(vocab=[], dim=-1, filenames=[nonstatic_file_path]+word_vec_files, add_unknown = False, variance_random = 0, load_all=True) 69 | print('Non-Static Word vectors are loaded for ' + str(len(word_vecs_nonstatic))+' words') 70 | 71 | for wd in word_vecs_nonstatic.keys(): 72 | for p in preprocess: 73 | temp_wd = p(wd) 74 | if temp_wd != wd: 75 | del word_vecs_nonstatic[wd] 76 | 77 | Word_idx_map_nonstatic, Word_idxvec_matrix_nonstatic = get_word2vec_map(word_vecs=word_vecs_nonstatic, vocab=[], load_all=True) 78 | del word_vecs_nonstatic 79 | gc.collect() 80 | 81 | nonstatic_Words = theano.shared(value = np.asarray(Word_idxvec_matrix_nonstatic, dtype=theano.config.floatX), name = "nonstatic_Words") 82 | del Word_idxvec_matrix_nonstatic 83 | gc.collect() 84 | 85 | 86 | print('Model is being defined..') 87 | _, test_model = classifier.define_model(static_Words=static_Words, static_idx=static_idx, nonstatic_idx=nonstatic_idx, nonstatic_Words=nonstatic_Words) 88 | 89 | 90 | #classifying data from a file (each line has a data-point and nothing else) 91 | if fname != 'NO_FILE': 92 | print('The file ' + fname + ' is being classified..') 93 | data = open(fname,"rb").readlines() 94 | writer = csv.writer(open(fname+'_output.csv',"wb"), delimiter=',') 95 | writer.writerow(['Predicted Probabilities', 'Predicted labels', 'Processed string']) 96 | for text in data: 97 | result = classify(text=text, preprocess=preprocess, threshold=threshold, Word_idx_map_static=Word_idx_map_static, Word_idx_map_nonstatic=Word_idx_map_nonstatic, test_model=test_model) 98 | if threshold==1 or threshold==0: 99 | res_label = [labels[result[2]]] 100 | else: 101 | res_label = [labels[row] for row in range(len(result[2])) if result[2][row]==1] 102 | writer.writerow([result[1], res_label, result[0]]) 103 | print('The output is stored in file : ' + fname+'_output.csv') 104 | 105 | 106 | #classifying data from console 107 | while(True): 108 | text = raw_input("\nEnter the text (space separated words) to classify:\n") 109 | result = classify(text=text, preprocess=preprocess, threshold=threshold, Word_idx_map_static=Word_idx_map_static, Word_idx_map_nonstatic=Word_idx_map_nonstatic, test_model=test_model) 110 | if threshold==1 or threshold==0: 111 | res_label = [labels[result[2]]] 112 | else: 113 | res_label = [labels[row] for row in range(len(result[2])) if result[2][row]==1] 114 | 115 | print ("Processed string : " + result[0]) 116 | print ("Predicted probabilities (" + str(labels) + ") :: " + str(result[1])) 117 | print ("******************************************************************") 118 | print ("THE PREDICTED LABEL(S) FOR THE TEXT : " + str(res_label)) 119 | print ("******************************************************************") 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /dataset_preparation.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | CODE FOR DATASET PREPARATION FOR CLASSIFICATION 5 | Some of the code is modified from 6 | - https://github.com/yoonkim/CNN_sentence (Convolutional Neural Networks for Sentence Classification) 7 | """ 8 | __author__ = "Prerana Singhal" 9 | 10 | import csv, re, string, cPickle 11 | import numpy as np 12 | import theano 13 | import unicodedata 14 | from collections import defaultdict, OrderedDict 15 | 16 | 17 | 18 | """ 19 | Preprocessing functions 20 | """ 21 | def to_lowercase(text): 22 | return text.lower().strip() 23 | 24 | def remove_all_punctuations(text): 25 | regex = re.compile('[%s]' % re.escape(string.punctuation)) 26 | text = regex.sub(' ', text).strip() 27 | return " ".join(text.split()).strip() 28 | 29 | def remove_basic_punctuations(text): 30 | text = text.replace('.','') 31 | text = text.replace(',','') 32 | text = text.replace('?','') 33 | text = text.replace('!','') 34 | text = text.replace(';','') 35 | text = text.replace('-',' ') 36 | return text.strip() 37 | 38 | def remove_spaced_single_punctuations(text): 39 | wds = text.split() 40 | return " ".join([w for w in wds if len(w)>1 or re.compile('[%s]' % re.escape(string.punctuation)).sub(' ', w).strip() != '']).strip() 41 | 42 | def space_out_punctuations(text): 43 | return re.sub(r"([\w\s]+|[^\w\s]+)\s*", r"\1 ", text).strip() 44 | 45 | def remove_numbers(text): 46 | return re.sub(r' \d+ ',' ', text).strip() 47 | 48 | def replace_numbers(text): 49 | return re.sub(r' \d+ ',' *#NUMBER#* ', text).strip() 50 | 51 | def replace_accents(text): 52 | text = text.decode('utf-8') 53 | text = unicodedata.normalize('NFD', text).encode('ascii', 'ignore') 54 | text = text.replace('-LRB-','(') 55 | text = text.replace('-RRB-',')') 56 | return text.strip() 57 | 58 | 59 | """ 60 | Functions to extract data from file 61 | """ 62 | def extract_data(filenames, preprocess, delimiter, labels_present): 63 | """ 64 | filename : name of the csv file with NO headings/titles and 65 | first column as text (data-point) to be classified, 66 | subsequent column(s) (if any in case of labels_present = True) consist of the labels associated with this data-point 67 | preprocess : list of preprocessing functions to be applied to the text 68 | """ 69 | data = [] # data (input-output) 70 | if labels_present: 71 | labels = [] # classification labels 72 | for filename in filenames: 73 | with open(filename, "rb") as file: 74 | f=csv.reader(file, delimiter=delimiter) 75 | for line in f: 76 | data.append(line) 77 | for l in line[1:]: 78 | if l != '' and l not in labels: 79 | labels.append(l) 80 | labels.sort() 81 | num_labels = len(labels) 82 | num_data = len(data) 83 | for i in range(num_data): 84 | x = [0] * num_labels 85 | for l in data[i][1:]: 86 | x[labels.index(l)] = 1 87 | for p in preprocess: 88 | data[i][0] = p(data[i][0]) 89 | data[i] = [data[i][0], np.asarray(x)] 90 | return data, labels 91 | else: 92 | for filename in filenames: 93 | with open(filename, "rb") as file: 94 | f=csv.reader(file, delimiter=delimiter) 95 | 96 | for line in f: 97 | for p in preprocess: 98 | line[0] = p(line[0]) 99 | data.append([line[0]]) 100 | return data 101 | 102 | def get_vocab(data): 103 | """ 104 | Function to extract the vocabulary (words) from data 105 | """ 106 | vocab = [] 107 | for line in data: 108 | for wrd in line[0].split(' '): 109 | vocab.append(wrd) 110 | return list(set(vocab)) # remove duplicates 111 | 112 | 113 | """ 114 | Function to obtain word embeddings from file 115 | """ 116 | def load_vecs(vocab, dim, filenames, add_unknown, variance_random, load_all=False): 117 | """ 118 | Loads dimx1 word vectors from file 119 | """ 120 | # in order of priority (in case of conflict, filenames[0] has higher priority over filenames[1] and so on) 121 | word_vecs = {} 122 | for i in range(len(filenames)-1,-1,-1): 123 | fname = filenames[i] 124 | if fname=='': 125 | continue 126 | if ".bin" in fname: # Google (Mikolov) word2vec (GoogleNews-vectors-negative300) 127 | vocabx = {vocab[i]:i for i in range(len(vocab))} 128 | with open(fname, "rb") as f: 129 | header = f.readline() 130 | vocab_size, layer1_size = map(int, header.split()) 131 | binary_len = np.dtype('float32').itemsize * layer1_size 132 | i = 0 133 | for line in xrange(vocab_size): 134 | word = [] 135 | while True: 136 | ch = f.read(1) 137 | if ch == ' ': 138 | word = ''.join(word) 139 | break 140 | if ch != '\n': 141 | word.append(ch) 142 | if load_all or word in vocabx: 143 | word_vecs[word] = np.fromstring(f.read(binary_len), dtype='float32') 144 | else: 145 | f.read(binary_len) 146 | else: 147 | if load_all: 148 | word_vecs.update(cPickle.load(open(fname,"rb"))) 149 | else: 150 | vecs = cPickle.load(open(fname,"rb")) 151 | for word in vocab: 152 | if word in vecs: 153 | word_vecs[word] = vecs[word] 154 | 155 | if add_unknown: 156 | for wrd in vocab: 157 | if wrd not in word_vecs: #randomly initialize word embeddings for new words 158 | word_vecs[wrd] = np.random.uniform(-variance_random,variance_random,dim) # variance_unknown = 0.25 is chosen so the unknown vectors have (approximately) same variance as pre-trained ones 159 | 160 | return word_vecs 161 | 162 | 163 | """ 164 | Function to create word-to-vec mapping 165 | """ 166 | def get_word2vec_map(word_vecs, vocab, load_all=False): 167 | """ 168 | Function to get word-index-vector mapping 169 | Word_idx_map : dictionary for word to index mapping 170 | Word_idx_vecs : List containing index-wise word embeddings 171 | vocab : List of words to be considered 172 | dim : dimension of the word-vectors 173 | """ 174 | Word_idx_map = {} 175 | Word_idx_vecs = [] 176 | 177 | if load_all: 178 | count=0 179 | for wrd in word_vecs: 180 | Word_idx_map[wrd] = count 181 | Word_idx_vecs.append(word_vecs[wrd]) 182 | count+=1 183 | else: 184 | for wrd in vocab: 185 | if wrd not in Word_idx_map and wrd in word_vecs: 186 | Word_idx_map[wrd] = len(Word_idx_vecs) 187 | Word_idx_vecs.append(word_vecs[wrd]) 188 | 189 | return Word_idx_map, Word_idx_vecs 190 | 191 | 192 | """ 193 | Function to transform data into proper format (indices to word vectors) 194 | """ 195 | def get_idx_from_sent(text, Word_idx_map): 196 | """ 197 | Transforms sentence into a list of indices. 198 | """ 199 | x = [] 200 | words = text.split() 201 | for word in words: 202 | if word in Word_idx_map: 203 | x.append(int(Word_idx_map[word])) 204 | return x 205 | 206 | def make_idx_data_cv(data, Word_idx_map, labels_present): 207 | """ 208 | Transforms sentences into a 2-d matrix. 209 | """ 210 | Xdata = np.asarray([np.asarray(get_idx_from_sent(row[0], Word_idx_map), dtype='int32') for row in data]) 211 | if labels_present: 212 | Ydata = np.asarray([row[1] for row in data], dtype='int32') 213 | return Xdata, Ydata 214 | else: 215 | return Xdata 216 | -------------------------------------------------------------------------------- /neural_net_classes.py: -------------------------------------------------------------------------------- 1 | """ 2 | CODE FOR NEURAL NETWORK LAYERS FOR CLASSIFICATION 3 | Some of the code is modified from 4 | - https://github.com/yoonkim/CNN_sentence (Convolutional Neural Networks for Sentence Classification) 5 | - deeplearning.net/tutorial (for ConvNet and LSTM classes) 6 | - https://github.com/mdenil/dropout (for dropout) 7 | - https://groups.google.com/forum/#!topic/pylearn-dev/3QbKtCumAW4 (for Adadelta) 8 | """ 9 | __author__ = "Prerana Singhal" 10 | 11 | import numpy 12 | import theano.tensor.shared_randomstreams 13 | import theano 14 | import theano.tensor as T 15 | from collections import defaultdict, OrderedDict 16 | 17 | 18 | 19 | """ 20 | Activation functions 21 | """ 22 | def ReLU(x): 23 | y = T.maximum(0.0, x) 24 | return(y) 25 | def Sigmoid(x): 26 | y = T.nnet.sigmoid(x) 27 | return(y) 28 | def Softmax(x): 29 | y = T.nnet.softmax(x) 30 | return(y) 31 | def Tanh(x): 32 | y = T.tanh(x) 33 | return(y) 34 | def Iden(x): 35 | y = x 36 | return(y) 37 | 38 | 39 | """ 40 | Dropout function 41 | """ 42 | def dropout_from_layer(rng, layer, p): 43 | """ 44 | Function for applying dropout to a layer (p is the probablity of dropping a unit) 45 | """ 46 | srng = theano.tensor.shared_randomstreams.RandomStreams(rng.randint(999999)) 47 | # p=1-p because 1's indicate keep and p is prob of dropping 48 | mask = srng.binomial(n=1, p=1-p, size=layer.shape) 49 | # The cast is important because 50 | # int * float32 = float64 which pulls things off the gpu 51 | output = layer * T.cast(mask, theano.config.floatX) 52 | #output = layer * numpy.float32(numpy.random.binomial([numpy.ones(layer.shape,dtype=theano.config.floatX)],1-p)) 53 | return output 54 | 55 | 56 | """ 57 | Error functions 58 | """ 59 | def square_error(output, act_y): 60 | """ 61 | Function to return the squared error value of the layer 62 | output : a vector :: predicted values of output layer neurons 63 | act_y : a vector :: actual labels (expected values of output layer neurons) for the input 64 | """ 65 | return T.sum((output - act_y) ** 2) 66 | 67 | def negative_log_likelihood(output, act_y): 68 | """ 69 | Function to return the negative log-likelihood value of Layer 70 | act_y : a vector :: actual labels (expected values of output layer neurons) for the input 71 | """ 72 | 73 | return -T.mean((act_y * T.log(output + 0.000001)) + ((1 - act_y) * T.log(1 - output + 0.000001))) 74 | 75 | 76 | """ 77 | Back-Propagation Update functions 78 | """ 79 | def sgd_updates_adadelta(params, cost, rho): 80 | """ 81 | adadelta update rule, mostly from 82 | https://groups.google.com/forum/#!topic/pylearn-dev/3QbKtCumAW4 (for Adadelta) 83 | """ 84 | def as_floatX(variable): 85 | if isinstance(variable, float): 86 | return numpy.cast[theano.config.floatX](variable) 87 | 88 | if isinstance(variable, numpy.ndarray): 89 | return numpy.cast[theano.config.floatX](variable) 90 | return theano.tensor.cast(variable, theano.config.floatX) 91 | 92 | input_name='NON_STATIC_INPUT' 93 | epsilon=1e-6 94 | norm_lim=9, 95 | updates = OrderedDict({}) 96 | exp_sqr_grads = OrderedDict({}) 97 | exp_sqr_ups = OrderedDict({}) 98 | gparams = [] 99 | for param in params: 100 | empty = numpy.zeros_like(param.get_value()) 101 | exp_sqr_grads[param] = theano.shared(value=as_floatX(empty),name="exp_grad_%s" % param.name) 102 | gp = T.grad(cost, param) 103 | exp_sqr_ups[param] = theano.shared(value=as_floatX(empty), name="exp_grad_%s" % param.name) 104 | gparams.append(gp) 105 | for param, gp in zip(params, gparams): 106 | exp_sg = exp_sqr_grads[param] 107 | exp_su = exp_sqr_ups[param] 108 | up_exp_sg = rho * exp_sg + (1 - rho) * T.sqr(gp) 109 | updates[exp_sg] = T.cast(up_exp_sg, dtype=theano.config.floatX) 110 | step = -(T.sqrt(exp_su + epsilon) / T.sqrt(up_exp_sg + epsilon)) * gp 111 | updates[exp_su] = T.cast(rho * exp_su + (1 - rho) * T.sqr(step), dtype=theano.config.floatX) 112 | stepped_param = param + step 113 | if (param.get_value(borrow=True).ndim == 2) and (param.name!=input_name): 114 | col_norms = T.sqrt(T.sum(T.sqr(stepped_param), axis=0)) 115 | desired_norms = T.clip(col_norms, 0, T.sqrt(norm_lim)) 116 | scale = desired_norms / (1e-7 + col_norms) 117 | updates[param] = T.cast(stepped_param * scale, dtype=theano.config.floatX) 118 | else: 119 | updates[param] = T.cast(stepped_param, dtype=theano.config.floatX) 120 | return updates 121 | 122 | def updates_gradient(params, cost, rho): 123 | """ 124 | Simple update using gradient and rho = learning rate 125 | """ 126 | updates = [] 127 | for param in params: 128 | dparam = T.grad(cost, param) 129 | updates.append((param, param - rho * dparam)) 130 | return updates 131 | 132 | 133 | """ 134 | Pooling (down-sampling) functions 135 | """ 136 | def Mean_pooling(inp): 137 | """ 138 | Finding mean across rows; inp is a 2D matrix 139 | """ 140 | if inp.ndim==1: 141 | return T.mean(inp) 142 | else: 143 | return T.mean(inp,axis=0) 144 | 145 | def Max_pooling(inp): 146 | """ 147 | Finding max across rows; inp is a 2D matrix 148 | """ 149 | if inp.ndim==1: 150 | return T.max(inp) 151 | else: 152 | return T.max(inp,axis=0) 153 | 154 | 155 | 156 | """ 157 | Class for a Fully Connected Layer 158 | """ 159 | class FullyConnectedLayer(object): 160 | 161 | def __init__(self, rng, n_in, n_out, activation, pooling, W, b, use_bias): 162 | self.activation = activation 163 | self.use_bias = use_bias 164 | self.pooling = pooling 165 | self.input = None 166 | 167 | if W is None: 168 | if activation.func_name == "ReLU": 169 | W_values = numpy.asarray(0.01 * rng.standard_normal(size=(n_in, n_out)), dtype=theano.config.floatX) 170 | else: 171 | W_values = numpy.asarray(rng.uniform(low=-numpy.sqrt(6. / (n_in + n_out)), high=numpy.sqrt(6. / (n_in + n_out)), 172 | size=(n_in, n_out)), dtype=theano.config.floatX) 173 | W = theano.shared(value=W_values, name='W') 174 | self.W = W 175 | 176 | # parameters of the model (bias or no bias) 177 | if use_bias: 178 | if b is None: 179 | b_values = numpy.zeros((n_out,), dtype=theano.config.floatX) 180 | b = theano.shared(value=b_values, name='b') 181 | self.b = b 182 | self.params = [self.W, self.b] 183 | else: 184 | self.params = [self.W] 185 | 186 | 187 | def predict(self, input): #input is a vector (1D np.array) 188 | self.input = input 189 | if self.use_bias: 190 | output = T.dot(input, self.W) + self.b 191 | else: 192 | output = T.dot(input, self.W) 193 | 194 | self.output = (output if self.activation is None else self.activation(output)) 195 | if self.pooling != None: 196 | self.output = self.pooling(self.output) 197 | return self.output 198 | 199 | def predict_dropout(self, input, rng, p): #input is a vector (1D np.array) 200 | if self.input != input: 201 | self.input = input 202 | self.output = self.predict(input) 203 | 204 | self.dropout_output = dropout_from_layer(rng, self.output, p) 205 | return self.dropout_output 206 | 207 | 208 | def __getstate__(self): 209 | if self.use_bias: 210 | return (self.activation,self.use_bias,self.pooling,self.W.get_value(),self.b.get_value()) 211 | else: 212 | return (self.activation,self.use_bias,self.pooling,self.W.get_value()) 213 | 214 | def __setstate__(self, state): 215 | self.activation = state[0] 216 | self.use_bias = state[1] 217 | self.pooling = state[2] 218 | self.W = theano.shared(value=numpy.asarray(state[3], dtype=theano.config.floatX), name='W') 219 | if self.use_bias: 220 | self.b = theano.shared(value=numpy.asarray(state[4], dtype=theano.config.floatX), name='b') 221 | self.params = [self.W, self.b] 222 | else: 223 | self.params = [self.W] 224 | 225 | 226 | 227 | """ 228 | Class for a Convolution Layer 229 | """ 230 | class ConvolutionLayer(object): 231 | 232 | def __init__(self, rng, dim_in, dim_out, window, activation, pooling, W, b, use_bias): 233 | self.activation = activation 234 | self.use_bias = use_bias 235 | self.pooling = pooling 236 | self.window = window 237 | self.dim_in = dim_in 238 | self.input = None 239 | 240 | n_in = dim_in * window 241 | n_out = dim_out 242 | 243 | if W is None: 244 | if activation.func_name == "ReLU": 245 | W_values = numpy.asarray(0.01 * rng.standard_normal(size=(n_in, n_out)), dtype=theano.config.floatX) 246 | else: 247 | W_values = numpy.asarray(rng.uniform(low=-numpy.sqrt(6. / (n_in + n_out)), high=numpy.sqrt(6. / (n_in + n_out)), 248 | size=(n_in, n_out)), dtype=theano.config.floatX) 249 | W = theano.shared(value=W_values, name='W') 250 | self.W = W 251 | 252 | # parameters of the model (bias or no bias) 253 | if use_bias: 254 | if b is None: 255 | b_values = numpy.zeros((n_out,), dtype=theano.config.floatX) 256 | b = theano.shared(value=b_values, name='b') 257 | self.b = b 258 | self.params = [self.W, self.b] 259 | else: 260 | self.params = [self.W] 261 | 262 | 263 | def predict(self, input): #input is a vector (1D np.array) 264 | self.input = input 265 | padding = numpy.asarray([numpy.zeros((self.dim_in,), dtype=theano.config.floatX)] * (self.window)) 266 | inp = T.concatenate((padding, input, padding), axis=0) 267 | seq = T.arange(T.shape(inp)[0] - self.window + 1) 268 | self.input, _ = theano.scan(lambda v: inp[v : v+self.window].flatten(), sequences=seq) 269 | 270 | if self.use_bias: 271 | output = T.dot(self.input, self.W) + self.b 272 | else: 273 | output = T.dot(self.input, self.W) 274 | 275 | self.output = (output if self.activation is None else self.activation(output)) 276 | if self.pooling != None: 277 | self.output = self.pooling(self.output) 278 | return self.output 279 | 280 | def predict_dropout(self, input, rng, p): #input is a vector (1D np.array) 281 | if self.input != input: 282 | self.input = input 283 | self.output = self.predict(input) 284 | 285 | if self.pooling!=None: 286 | self.dropout_output = dropout_from_layer(rng, self.output, p) 287 | else: 288 | self.dropout_output = self.output 289 | 290 | return self.dropout_output 291 | 292 | 293 | def __getstate__(self): 294 | if self.use_bias: 295 | return (self.activation,self.window,self.dim_in,self.use_bias,self.pooling,self.W.get_value(),self.b.get_value()) 296 | else: 297 | return (self.activation,self.window,self.dim_in,self.use_bias,self.pooling,self.W.get_value()) 298 | 299 | def __setstate__(self, state): 300 | self.activation = state[0] 301 | self.window = state[1] 302 | self.dim_in = state[2] 303 | self.use_bias = state[3] 304 | self.pooling = state[4] 305 | self.W = theano.shared(value=numpy.asarray(state[5], dtype=theano.config.floatX), name='W') 306 | if self.use_bias: 307 | self.b = theano.shared(value=numpy.asarray(state[6], dtype=theano.config.floatX), name='b') 308 | self.params = [self.W, self.b] 309 | else: 310 | self.params = [self.W] 311 | 312 | 313 | 314 | """ 315 | Class for a Long Short Term Memory Layer 316 | """ 317 | class LSTMLayer(object): 318 | 319 | def __init__(self, rng, dim_in, dim_out, pooling, window, Wx, Wh, b, use_bias, use_last_output): 320 | self.use_bias = use_bias 321 | self.use_last_output = use_last_output 322 | self.window = window 323 | self.dim_in = dim_in 324 | self.dim_out = dim_out 325 | self.pooling = pooling 326 | self.input = None 327 | gates = ['i', 'f', 'o', 'c'] # input, forget, output and memory gates 328 | 329 | # Weights for input-to-gate computations 330 | n_in = dim_in * window 331 | n_out = dim_out 332 | for i in range(4): 333 | if Wx[i] is None: 334 | W_values = numpy.asarray(rng.uniform(low=-numpy.sqrt(6. / (n_in + n_out)), high=numpy.sqrt(6. / (n_in + n_out)), 335 | size=(n_in, n_out)), dtype=theano.config.floatX) 336 | Wx[i] = theano.shared(value=W_values, name='Wx'+gates[i]) 337 | self.Wxi = Wx[0] 338 | self.Wxf = Wx[1] 339 | self.Wxo = Wx[2] 340 | self.Wxc = Wx[3] 341 | 342 | # Weights for hidden-to-gate computations 343 | n_in = dim_out 344 | n_out = dim_out 345 | for i in range(4): 346 | if Wh[i] is None: 347 | W_values = numpy.asarray(rng.uniform(low=-numpy.sqrt(6. / (n_in + n_out)), high=numpy.sqrt(6. / (n_in + n_out)), 348 | size=(n_in, n_out)), dtype=theano.config.floatX) 349 | Wh[i] = theano.shared(value=W_values, name='Wh'+gates[i]) 350 | self.Whi = Wh[0] 351 | self.Whf = Wh[1] 352 | self.Who = Wh[2] 353 | self.Whc = Wh[3] 354 | 355 | # parameters of the model (bias or no bias) 356 | if use_bias: 357 | for i in range(4): 358 | if b[i] is None: 359 | b_values = numpy.zeros((n_out,), dtype=theano.config.floatX) 360 | b[i] = theano.shared(value=b_values, name='b'+gates[i]) 361 | self.bi = b[0] 362 | self.bf = b[1] 363 | self.bo = b[2] 364 | self.bc = b[3] 365 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc, self.bi, self.bf, self.bo, self.bc] 366 | else: 367 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc] 368 | 369 | 370 | def predict(self, input): #input is an array of vectors (2D np.array) 371 | self.input = input 372 | padding = numpy.asarray([numpy.zeros((self.dim_in,), dtype=theano.config.floatX)] * (self.window)) 373 | inp = T.concatenate((padding, input, padding), axis=0) 374 | seq = T.arange(T.shape(inp)[0] - self.window + 1) 375 | self.input, _ = theano.scan(lambda v: inp[v : v+self.window].flatten(), sequences=seq) 376 | 377 | # initialize the gates 378 | cgate = theano.shared(numpy.zeros((self.dim_out,), dtype=theano.config.floatX)) 379 | hidden = T.tanh(cgate) 380 | 381 | # gate computations 382 | def lstm_step(x, h_prev, c_prev): 383 | if self.use_bias: 384 | igate = T.nnet.sigmoid(T.dot(x, self.Wxi) + T.dot(h_prev, self.Whi) + self.bi) 385 | else: 386 | igate = T.nnet.sigmoid(T.dot(x, self.Wxi) + T.dot(h_prev, self.Whi)) 387 | if self.use_bias: 388 | fgate = T.nnet.sigmoid(T.dot(x, self.Wxf) + T.dot(h_prev, self.Whf) + self.bf) 389 | else: 390 | fgate = T.nnet.sigmoid(T.dot(x, self.Wxf) + T.dot(h_prev, self.Whf)) 391 | if self.use_bias: 392 | ogate = T.nnet.sigmoid(T.dot(x, self.Wxo) + T.dot(h_prev, self.Who) + self.bo) 393 | else: 394 | ogate = T.nnet.sigmoid(T.dot(x, self.Wxo) + T.dot(h_prev, self.Who)) 395 | if self.use_bias: 396 | cgate = (fgate * c_prev) + (igate * T.tanh(T.dot(x, self.Wxc) + T.dot(h_prev, self.Whc) + self.bc)) 397 | else: 398 | cgate = (fgate * c_prev) + (igate * T.tanh(T.dot(x, self.Wxc) + T.dot(h_prev, self.Whc))) 399 | hidden = (ogate * T.tanh(cgate)) 400 | return hidden, cgate 401 | 402 | [self.output, _], _ = theano.scan(fn=lstm_step, 403 | sequences = dict(input=self.input, taps=[0]), 404 | outputs_info = [hidden, cgate]) 405 | if self.use_last_output: 406 | self.output = self.output[-1] 407 | if self.pooling != None: 408 | self.output = self.pooling(self.output) 409 | return self.output 410 | 411 | def predict_dropout(self, input, rng, p): #input is a vector (1D np.array) 412 | if self.input != input: 413 | self.input = input 414 | self.output = self.predict(input) 415 | 416 | if self.pooling!=None: 417 | self.dropout_output = dropout_from_layer(rng, self.output, p) 418 | else: 419 | self.dropout_output = self.output 420 | return self.dropout_output 421 | 422 | 423 | def __getstate__(self): 424 | if self.use_bias: 425 | return (self.use_bias,self.use_last_output,self.pooling,self.window,self.dim_in,self.dim_out,self.Wxi.get_value(),self.Wxf.get_value(),self.Wxo.get_value(),self.Wxc.get_value(),self.Whi.get_value(),self.Whf.get_value(),self.Who.get_value(),self.Whc.get_value(),self.bi.get_value(),self.bf.get_value(),self.bo.get_value(),self.bc.get_value()) 426 | else: 427 | return (self.use_bias,self.use_last_output,self.pooling,self.window,self.dim_in,self.dim_out,self.Wxi.get_value(),self.Wxf.get_value(),self.Wxo.get_value(),self.Wxc.get_value(),self.Whi.get_value(),self.Whf.get_value(),self.Who.get_value(),self.Whc.get_value()) 428 | 429 | def __setstate__(self, state): 430 | self.use_bias = state[0] 431 | self.use_last_output = state[1] 432 | self.pooling = state[2] 433 | self.window = state[3] 434 | self.dim_in = state[4] 435 | self.dim_out = state[5] 436 | self.Wxi = theano.shared(value=numpy.asarray(state[6], dtype=theano.config.floatX), name='Wxi') 437 | self.Wxf = theano.shared(value=numpy.asarray(state[7], dtype=theano.config.floatX), name='Wxf') 438 | self.Wxo = theano.shared(value=numpy.asarray(state[8], dtype=theano.config.floatX), name='Wxo') 439 | self.Wxc = theano.shared(value=numpy.asarray(state[9], dtype=theano.config.floatX), name='Wxc') 440 | self.Whi = theano.shared(value=numpy.asarray(state[10], dtype=theano.config.floatX), name='Whi') 441 | self.Whf = theano.shared(value=numpy.asarray(state[11], dtype=theano.config.floatX), name='Whf') 442 | self.Who = theano.shared(value=numpy.asarray(state[12], dtype=theano.config.floatX), name='Who') 443 | self.Whc = theano.shared(value=numpy.asarray(state[13], dtype=theano.config.floatX), name='Whc') 444 | if self.use_bias: 445 | self.bi = theano.shared(value=numpy.asarray(state[14], dtype=theano.config.floatX), name='bi') 446 | self.bf = theano.shared(value=numpy.asarray(state[15], dtype=theano.config.floatX), name='bf') 447 | self.bo = theano.shared(value=numpy.asarray(state[16], dtype=theano.config.floatX), name='bo') 448 | self.bc = theano.shared(value=numpy.asarray(state[17], dtype=theano.config.floatX), name='bc') 449 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc, self.bi, self.bf, self.bo, self.bc] 450 | else: 451 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc] 452 | 453 | 454 | 455 | """ 456 | Class for a Long Short Term Memory Layer 457 | """ 458 | class ModifiedLSTMLayer(object): 459 | 460 | def __init__(self, rng, dim_in, dim_out, pooling, window, Wx, Wh, b, use_bias, use_last_output): 461 | self.use_bias = use_bias 462 | self.use_last_output = use_last_output 463 | self.window = window 464 | self.dim_in = dim_in 465 | self.dim_out = dim_out 466 | self.pooling = pooling 467 | self.input = None 468 | gates = ['i', 'f', 'o', 'c'] # input, forget, output and memory gates 469 | 470 | # Weights for input-to-gate computations 471 | n_in = dim_in * window 472 | n_out = dim_out 473 | for i in range(4): 474 | if Wx[i] is None: 475 | W_values = numpy.asarray(rng.uniform(low=-numpy.sqrt(6. / (n_in + n_out)), high=numpy.sqrt(6. / (n_in + n_out)), 476 | size=(n_in, n_out)), dtype=theano.config.floatX) 477 | Wx[i] = theano.shared(value=W_values, name='Wx'+gates[i]) 478 | self.Wxi = Wx[0] 479 | self.Wxf = Wx[1] 480 | self.Wxo = Wx[2] 481 | self.Wxc = Wx[3] 482 | 483 | # Weights for hidden-to-gate computations 484 | n_in = dim_out 485 | n_out = dim_out 486 | for i in range(4): 487 | if Wh[i] is None: 488 | W_values = numpy.asarray(rng.uniform(low=-numpy.sqrt(6. / (n_in + n_out)), high=numpy.sqrt(6. / (n_in + n_out)), 489 | size=(n_in, n_out)), dtype=theano.config.floatX) 490 | Wh[i] = theano.shared(value=W_values, name='Wh'+gates[i]) 491 | self.Whi = Wh[0] 492 | self.Whf = Wh[1] 493 | self.Who = Wh[2] 494 | self.Whc = Wh[3] 495 | 496 | # parameters of the model (bias or no bias) 497 | if use_bias: 498 | for i in range(4): 499 | if b[i] is None: 500 | b_values = numpy.zeros((n_out,), dtype=theano.config.floatX) 501 | b[i] = theano.shared(value=b_values, name='b'+gates[i]) 502 | self.bi = b[0] 503 | self.bf = b[1] 504 | self.bo = b[2] 505 | self.bc = b[3] 506 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc, self.bi, self.bf, self.bo, self.bc] 507 | else: 508 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc] 509 | 510 | 511 | def predict(self, input): #input is an array of vectors (2D np.array) 512 | self.input = input 513 | padding = numpy.asarray([numpy.zeros((self.dim_in,), dtype=theano.config.floatX)] * (self.window)) 514 | inp = T.concatenate((padding, input, padding), axis=0) 515 | seq = T.arange(T.shape(inp)[0] - self.window + 1) 516 | self.input, _ = theano.scan(lambda v: inp[v : v+self.window].flatten(), sequences=seq) 517 | 518 | # initialize the gates 519 | cgate = theano.shared(numpy.zeros((self.dim_out,), dtype=theano.config.floatX)) 520 | hidden = T.tanh(cgate) 521 | 522 | # gate computations 523 | def lstm_step(x, h_prev, c_prev): 524 | if self.use_bias: 525 | igate = T.nnet.sigmoid(T.dot(x, self.Wxi) + T.dot(h_prev, self.Whi) + self.bi) 526 | else: 527 | igate = T.nnet.sigmoid(T.dot(x, self.Wxi) + T.dot(h_prev, self.Whi)) 528 | if self.use_bias: 529 | fgate = T.nnet.sigmoid(T.dot(x, self.Wxf) + T.dot(h_prev, self.Whf) + self.bf) 530 | else: 531 | fgate = T.nnet.sigmoid(T.dot(x, self.Wxf) + T.dot(h_prev, self.Whf)) 532 | if self.use_bias: 533 | ogate = T.nnet.sigmoid(T.dot(x, self.Wxo) + T.dot(h_prev, self.Who) + self.bo) 534 | else: 535 | ogate = T.nnet.sigmoid(T.dot(x, self.Wxo) + T.dot(h_prev, self.Who)) 536 | if self.use_bias: 537 | cgate = (fgate * c_prev) + (igate * T.tanh(T.dot(x, self.Wxc) + T.dot(h_prev, self.Whc) + self.bc)) 538 | else: 539 | cgate = (fgate * c_prev) + (igate * T.tanh(T.dot(x, self.Wxc) + T.dot(h_prev, self.Whc))) 540 | hidden = (ogate * T.tanh(cgate)) 541 | return hidden, cgate 542 | 543 | [self.output, _], _ = theano.scan(fn=lstm_step, 544 | sequences = dict(input=self.input, taps=[0]), 545 | outputs_info = [hidden, cgate]) 546 | if self.use_last_output: 547 | self.output = self.output[-1] 548 | if self.pooling != None: 549 | self.output = self.pooling(self.output) 550 | return self.output 551 | 552 | def predict_dropout(self, input, rng, p): #input is a vector (1D np.array) 553 | if self.input != input: 554 | self.input = input 555 | self.output = self.predict(input) 556 | 557 | if self.pooling!=None: 558 | self.dropout_output = dropout_from_layer(rng, self.output, p) 559 | else: 560 | self.dropout_output = self.output 561 | return self.dropout_output 562 | 563 | 564 | def __getstate__(self): 565 | if self.use_bias: 566 | return (self.use_bias,self.use_last_output,self.pooling,self.window,self.dim_in,self.dim_out,self.Wxi.get_value(),self.Wxf.get_value(),self.Wxo.get_value(),self.Wxc.get_value(),self.Whi.get_value(),self.Whf.get_value(),self.Who.get_value(),self.Whc.get_value(),self.bi.get_value(),self.bf.get_value(),self.bo.get_value(),self.bc.get_value()) 567 | else: 568 | return (self.use_bias,self.use_last_output,self.pooling,self.window,self.dim_in,self.dim_out,self.Wxi.get_value(),self.Wxf.get_value(),self.Wxo.get_value(),self.Wxc.get_value(),self.Whi.get_value(),self.Whf.get_value(),self.Who.get_value(),self.Whc.get_value()) 569 | 570 | def __setstate__(self, state): 571 | self.use_bias = state[0] 572 | self.use_last_output = state[1] 573 | self.pooling = state[2] 574 | self.window = state[3] 575 | self.dim_in = state[4] 576 | self.dim_out = state[5] 577 | self.Wxi = theano.shared(value=numpy.asarray(state[6], dtype=theano.config.floatX), name='Wxi') 578 | self.Wxf = theano.shared(value=numpy.asarray(state[7], dtype=theano.config.floatX), name='Wxf') 579 | self.Wxo = theano.shared(value=numpy.asarray(state[8], dtype=theano.config.floatX), name='Wxo') 580 | self.Wxc = theano.shared(value=numpy.asarray(state[9], dtype=theano.config.floatX), name='Wxc') 581 | self.Whi = theano.shared(value=numpy.asarray(state[10], dtype=theano.config.floatX), name='Whi') 582 | self.Whf = theano.shared(value=numpy.asarray(state[11], dtype=theano.config.floatX), name='Whf') 583 | self.Who = theano.shared(value=numpy.asarray(state[12], dtype=theano.config.floatX), name='Who') 584 | self.Whc = theano.shared(value=numpy.asarray(state[13], dtype=theano.config.floatX), name='Whc') 585 | if self.use_bias: 586 | self.bi = theano.shared(value=numpy.asarray(state[14], dtype=theano.config.floatX), name='bi') 587 | self.bf = theano.shared(value=numpy.asarray(state[15], dtype=theano.config.floatX), name='bf') 588 | self.bo = theano.shared(value=numpy.asarray(state[16], dtype=theano.config.floatX), name='bo') 589 | self.bc = theano.shared(value=numpy.asarray(state[17], dtype=theano.config.floatX), name='bc') 590 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc, self.bi, self.bf, self.bo, self.bc] 591 | else: 592 | self.params = [self.Wxi, self.Wxf, self.Wxo, self.Wxc, self.Whi, self.Whf, self.Who, self.Whc] 593 | 594 | 595 | 596 | 597 | -------------------------------------------------------------------------------- /classification.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | CODE FOR FOR CLASSIFICATION OF TEXT USING NEURAL NETWORKS 5 | Some of the code is modified from 6 | - https://github.com/yoonkim/CNN_sentence (Convolutional Neural Networks for Sentence Classification) 7 | - deeplearning.net/tutorial (for ConvNet and LSTM classes) 8 | """ 9 | from __future__ import print_function 10 | __author__ = "Prerana Singhal" 11 | 12 | import cPickle 13 | import numpy as np 14 | from collections import defaultdict, OrderedDict 15 | import theano 16 | import theano.tensor as T 17 | import sys, csv, re, os 18 | from random import shuffle 19 | from datetime import datetime 20 | 21 | from dataset_preparation import * 22 | from neural_net_classes import * 23 | 24 | import warnings 25 | warnings.filterwarnings("ignore") 26 | 27 | 28 | 29 | """ 30 | Class for Neural Network Classifier 31 | """ 32 | class Network_Classifier(object): 33 | """ 34 | This represents a neural network consisting of 'layers' (FullyConnected, LSTM, Convolution, etc) 35 | configs : Different configurations of the neural network 36 | network_layers : list of layers of network with their configurations and input-output sequence; 37 | """ 38 | 39 | def __init__(self, network_layers, configs, num_labels): 40 | # configs are the configurations (all are strings) 41 | 42 | # some integer for random state generation 43 | if 'random_number' not in configs: 44 | configs['random_number'] = 9876 45 | self.rng = np.random.RandomState(int(configs['random_number'])) 46 | 47 | # dropout rate between 0 and 1 48 | if 'dropout' not in configs: 49 | configs['dropout'] = 0 50 | self.dropout = float(configs['dropout']) 51 | 52 | # update (back-propagation) function : gradient or adadelta 53 | if 'update_function' not in configs: 54 | configs['update_function'] = '_updates_gradient' 55 | self.update = eval(configs['update_function'].lower()) 56 | 57 | # cost (error) function : squared-error or negative-log-likelihood 58 | if 'error_function' not in configs: 59 | configs['error_function'] = '_square_error' 60 | self.error = eval(configs['error_function'].lower()) 61 | 62 | if 'last_activation' not in configs: 63 | last_activation = 'Softmax' 64 | else: 65 | last_activation = configs['last_activation'].capitalize() 66 | 67 | # initialize the layers of the network 68 | self.network_layers = [] 69 | self.params = [] 70 | for layer in network_layers: 71 | configs = layer[1] 72 | 73 | if layer[0] == 'LSTM' : 74 | dim_in = int(configs['dim_in']) 75 | if configs['dim_out'] == 'labels': 76 | configs['dim_out'] = num_labels 77 | dim_out = int(configs['dim_out']) 78 | if 'pooling' in configs: 79 | pooling = eval(configs['pooling'].capitalize()) 80 | else: 81 | pooling = Mean_pooling 82 | if 'window' in configs: 83 | window = int(configs['window']) 84 | else: 85 | window = 1 86 | if 'use_bias' in configs: 87 | use_bias = eval(configs['use_bias'].capitalize()) 88 | else: 89 | use_bias = True 90 | if 'use_last_output' in configs: 91 | use_last_output = eval(configs['use_last_output'].capitalize()) 92 | else: 93 | use_last_output = False 94 | layerx = LSTMLayer(rng = self.rng, dim_in = dim_in, dim_out = dim_out, window = window, pooling = pooling, Wx=[None,None,None,None], Wh=[None,None,None,None], b=[None,None,None,None], use_bias = use_bias, use_last_output = use_last_output) 95 | 96 | elif layer[0] == 'Convolution' : 97 | dim_in = int(configs['dim_in']) 98 | if configs['dim_out'] == 'labels': 99 | configs['dim_out'] = num_labels 100 | dim_out = int(configs['dim_out']) 101 | if 'activation' in configs: 102 | activation = eval(configs['activation'].capitalize()) 103 | else: 104 | activation = Sigmoid 105 | if 'pooling' in configs: 106 | pooling = eval(configs['pooling'].capitalize()) 107 | else: 108 | pooling = Max_pooling 109 | if 'window' in configs: 110 | window = int(configs['window']) 111 | else: 112 | window = 3 113 | if 'use_bias' in configs: 114 | use_bias = eval(configs['use_bias'].capitalize()) 115 | else: 116 | use_bias = True 117 | layerx = ConvolutionLayer(rng = self.rng, dim_in = dim_in, dim_out = dim_out, window = window, activation = activation, pooling = pooling, W=None, b=None, use_bias = use_bias) 118 | 119 | elif layer[0] == 'FullyConnected' : 120 | n_in = int(configs['n_in']) 121 | if configs['n_out'] == 'labels': 122 | configs['n_out'] = num_labels 123 | n_out = int(configs['n_out']) 124 | if 'activation' in configs: 125 | if configs['activation'] == 'last': 126 | activation = eval(last_activation) 127 | else: 128 | activation = eval(configs['activation'].capitalize()) 129 | else: 130 | activation = Sigmoid 131 | if 'pooling' in configs: 132 | pooling = eval(configs['pooling'].capitalize()) 133 | else: 134 | pooling = None 135 | if 'use_bias' in configs: 136 | use_bias = eval(configs['use_bias'].capitalize()) 137 | else: 138 | use_bias = True 139 | layerx = FullyConnectedLayer(rng = self.rng, n_in = n_in, n_out = n_out, activation = activation, pooling = pooling, W=None, b=None, use_bias = use_bias) 140 | 141 | self.network_layers.append([layerx, layer[2], layer[3]]) 142 | self.params += layerx.params 143 | 144 | 145 | def define_model(self, static_Words, static_idx, nonstatic_Words, nonstatic_idx): 146 | """ 147 | Function to construct the theano functions for training, validating and testing 148 | """ 149 | y = T.ivector('y') 150 | rho = T.scalar('rho') 151 | iodict = {} 152 | dropout_iodict = {} 153 | 154 | if static_idx>=0: 155 | x_static = T.ivector('x_static') 156 | input_static = static_Words[x_static] 157 | iodict[static_idx] = input_static 158 | dropout_iodict[static_idx] = input_static 159 | final_output = [static_idx, input_static, None] 160 | 161 | if nonstatic_idx>=0: 162 | x_nonstatic = T.ivector('x_nonstatic') 163 | input_nonstatic = nonstatic_Words[x_nonstatic] 164 | iodict[nonstatic_idx] = input_nonstatic 165 | dropout_iodict[nonstatic_idx] = input_nonstatic 166 | final_output = [nonstatic_idx, input_nonstatic, None] 167 | 168 | for layer in self.network_layers: 169 | iodict[layer[2]] = layer[0].predict(input = T.concatenate([iodict[i] for i in layer[1]])) 170 | dropout_iodict[layer[2]] = layer[0].predict_dropout(input = T.concatenate([dropout_iodict[i] for i in layer[1]]), rng = self.rng, p = self.dropout) 171 | if final_output[0] < layer[2]: 172 | final_output = [layer[2], layer[1], layer[0]] 173 | 174 | dropout_iodict[final_output[0]] = final_output[2].predict(input = T.concatenate([dropout_iodict[i] for i in final_output[1]])) 175 | 176 | output = iodict[final_output[0]] 177 | cost = self.error(output = output.flatten(), act_y = y) 178 | dropout_cost = self.error(output = dropout_iodict[final_output[0]].flatten(), act_y = y) 179 | if nonstatic_idx>=0: 180 | nonstatic_Words.name = 'NON_STATIC_INPUT' 181 | grad_updates = self.update(params = self.params + [nonstatic_Words], cost=dropout_cost, rho=T.cast(rho,dtype=theano.config.floatX)) 182 | else: 183 | grad_updates = self.update(params=self.params, cost=dropout_cost, rho=T.cast(rho,dtype=theano.config.floatX)) 184 | 185 | if static_idx>=0 and nonstatic_idx>=0: 186 | train_model = theano.function([x_static, x_nonstatic, y, rho], cost, updates=grad_updates) 187 | test_model = theano.function([x_static, x_nonstatic], output) 188 | elif static_idx>=0: 189 | train_model = theano.function([x_static, y, rho], cost, updates=grad_updates) 190 | test_model = theano.function([x_static], output) 191 | elif nonstatic_idx>=0: 192 | train_model = theano.function([x_nonstatic, y, rho], cost, updates=grad_updates) 193 | test_model = theano.function([x_nonstatic], output) 194 | 195 | return train_model, test_model 196 | 197 | 198 | def __getstate__(self): 199 | return (self.network_layers, self.rng, self.dropout, self.update, self.error) 200 | 201 | def __setstate__(self, state): 202 | self.network_layers, self.rng, self.dropout, self.update, self.error = state 203 | self.params = [] 204 | for layer in self.network_layers: 205 | self.params += layer[0].params 206 | 207 | 208 | 209 | """ 210 | Function to print in console and in file 211 | """ 212 | def print_status(str, fname): 213 | print(str) 214 | print(str, file=open(fname,'ab')) 215 | 216 | 217 | """ 218 | Function to load info about layers of the network from a file and store in a list 219 | """ 220 | def load_layers(layer_file): 221 | layers=[] 222 | with open(layer_file,"rb") as f: 223 | reader=csv.reader(f,delimiter=",") 224 | lines=[] 225 | for row in reader: 226 | lines.append(row) 227 | static_input = int(lines[0][1]) #first row in file 228 | nonstatic_input = int(lines[1][1]) #second row in file 229 | 230 | for row in range(2,len(lines),3): 231 | #configurations of the layer 232 | config_layer = {} 233 | for i in range(len(lines[row+1])): 234 | config_layer[lines[row+1][i]] = lines[row+2][i] 235 | #input to layer 236 | inp = [int(num) for num in lines[row][1].split(',')] 237 | layers.append([lines[row][0], config_layer, inp, int(lines[row][2])]) 238 | 239 | return layers, static_input, nonstatic_input 240 | 241 | 242 | """ 243 | Function to load configurations from file and assign default values if necessary 244 | """ 245 | def load_configs(config_file): 246 | configs={} 247 | with open(config_file,"rb") as f: 248 | reader=csv.reader(f,delimiter=",") 249 | for row in reader: 250 | configs[row[0]]=row[1] 251 | 252 | ''' 253 | Assigning default config values if not present in file 254 | ''' 255 | configs['epochs'] = 25 if 'epochs' not in configs else int(configs['epochs']) 256 | configs['epsilon'] = 0.1 if 'epsilon' not in configs else float(configs['epsilon']) 257 | # validation fraction of data if explicit validation data file is not specified; 0 means no validation set during training 258 | configs['validation'] = 0.1 if 'validation' not in configs else float(configs['validation']) 259 | 260 | #prediction threshold : 0 implies choose the output neuron with minimum value 261 | # 1 implies choose the output neuron with maximum value 262 | # float value is the threshold to decide between 0 and 1 263 | configs['threshold'] = 1 if 'threshold' not in configs else float(configs['threshold']) 264 | 265 | configs['random_number'] = 9876 if 'random_number' not in configs else int(configs['random_number']) 266 | configs['dropout'] = 0.4 if 'dropout' not in configs else float(configs['dropout']) 267 | configs['learning_rate'] = 0.95 if 'learning_rate' not in configs else float(configs['learning_rate']) 268 | configs['update_function'] = 'updates_gradient' if 'update_function' not in configs else configs['update_function'].lower() 269 | configs['error_function'] = 'square_error' if 'error_function' not in configs else configs['error_function'].lower() 270 | 271 | #preprocessing functions in the desired order 272 | configs['preprocess'] = [replace_accents, to_lowercase] if 'preprocess' not in configs else [eval(fn.lower()) for fn in configs['preprocess'].split(',') if fn!=''] 273 | #field delimiter in data_files 274 | configs['delimiter'] = ',' if 'delimiter' not in configs else configs['delimiter'] 275 | 276 | configs['wordvec_files'] = ['GoogleNews-vectors-negative300.bin'] if 'wordvec_files' not in configs else configs['wordvec_files'].split(',') 277 | configs['variance_random'] = 0.25 if 'variance_random' not in configs else float(configs['variance_random']) 278 | configs['dim'] = 300 if 'dim' not in configs else int(configs['dim']) 279 | 280 | configs['cv_folds'] = 5 if 'cv_folds' not in configs else int(configs['cv_folds']) 281 | configs['cv_repeats'] = 2 if 'cv_repeats' not in configs else int(configs['cv_repeats']) 282 | 283 | configs['last_activation'] = 'Softmax' if 'last_activation' not in configs else configs['last_activation'] 284 | return configs 285 | 286 | 287 | """ 288 | Function to calculate fscore and accuracy values 289 | """ 290 | def scoring(prob_pred, Ytest, threshold, labels): 291 | fscores=[] 292 | if threshold == 1 or threshold == 0: 293 | if threshold == 1: 294 | y_pred = prob_pred.argmax(axis=1) 295 | Ytest = Ytest.argmax(axis=1) 296 | else: 297 | y_pred = prob_pred.argmin(axis=1) 298 | Ytest = Ytest.argmin(axis=1) 299 | correct = np.equal(Ytest,y_pred).sum() 300 | test_accuracy = (float(correct)/(len(Ytest))) * 100 301 | 302 | for l in range(len(labels)): 303 | tpx = sum([(Ytest[i]==l) and (y_pred[i]==l) for i in range(len(Ytest))]) 304 | tnx = sum([(Ytest[i]!=l) and (y_pred[i]!=l) for i in range(len(Ytest))]) 305 | fpx = sum([(Ytest[i]!=l) and (y_pred[i]==l) for i in range(len(Ytest))]) 306 | fnx = sum([(Ytest[i]==l) and (y_pred[i]!=l) for i in range(len(Ytest))]) 307 | fscores.append([tpx,tnx,fpx,fnx,(200.0*tpx)/(2.0*tpx+fpx+fnx)]) 308 | 309 | return test_accuracy, fscores, y_pred, Ytest 310 | 311 | else: 312 | y_pred = prob_pred >= threshold 313 | y_pred = y_pred.astype(int) 314 | correct = np.equal(Ytest,y_pred).sum() 315 | test_accuracy = (float(correct)/(len(Ytest)*len(labels))) * 100 316 | for j in range(len(labels)): 317 | tpx=sum([(Ytest[i][j]==1) and (y_pred[i][j]==1) for i in range(len(Ytest))]) 318 | tnx=sum([(Ytest[i][j]==0) and (y_pred[i][j]==0) for i in range(len(Ytest))]) 319 | fpx=sum([(Ytest[i][j]==0) and (y_pred[i][j]==1) for i in range(len(Ytest))]) 320 | fnx=sum([(Ytest[i][j]==1) and (y_pred[i][j]==0) for i in range(len(Ytest))]) 321 | if 2*tpx+fpx+fnx==0: 322 | fscores.append([tpx,tnx,fpx,fnx,0]) 323 | else: 324 | fscores.append([tpx,tnx,fpx,fnx,(200.0*tpx)/(2.0*tpx+fpx+fnx)]) 325 | 326 | SuG=((Ytest==y_pred)*(Ytest==1)).sum() 327 | G=Ytest.sum() 328 | S=y_pred.sum() 329 | P=float(SuG)/float(S) 330 | R=float(SuG)/float(G) 331 | F1_measure=(200*P*R)/(P+R) 332 | 333 | return test_accuracy, fscores, y_pred, Ytest, F1_measure 334 | 335 | 336 | """ 337 | Function for training on a dataset_preparation with (or without or random) validation 338 | """ 339 | def training(configs, existing_model_file, existing_nonstatic_file, validation_data, layers, static_idx, nonstatic_idx, data, labels, model_file_path, info_file_path, nonstatic_file_path, static_file_path): 340 | rho = configs['learning_rate'] 341 | vocab = get_vocab(data) 342 | num_data = len(data) 343 | 344 | if validation_data==[]: 345 | split_point = num_data - int(configs['validation'] * num_data) # for validation 346 | num_valid = num_data - split_point 347 | print_status('\nNumber of training data-points: ' + str(split_point), info_file_path) 348 | if configs['validation']>0: # if validation is to be applied 349 | print_status('Number of validation data-points (randomly chosen in each epoch): ' + str(num_valid), info_file_path) 350 | else: 351 | num_valid = len(validation_data) 352 | vocab_valid = get_vocab(validation_data) 353 | print_status('\nNumber of training data-points: ' + str(num_data), info_file_path) 354 | print_status('\nNumber of validation data-points: ' + str(num_valid), info_file_path) 355 | vocab = list(set(vocab+vocab_valid)) 356 | print_status('Training-Validation vocabulary size: ' + str(len(vocab)), info_file_path) 357 | 358 | #initialising model.. 359 | if existing_model_file!='': 360 | classifier, _, _, _, static_idx, nonstatic_idx = cPickle.load(open(existing_model_file,"rb")) 361 | else: 362 | classifier = Network_Classifier(network_layers=layers, configs = {'random_number' : configs['random_number'], 'dropout' : configs['dropout'], 'update_function' : configs['update_function'], 'error_function' : configs['error_function']}, num_labels = len(labels)) 363 | 364 | 365 | #loading word vectors 366 | static_Words = None 367 | if static_idx>=0: 368 | word_vecs_static = load_vecs(vocab=vocab, dim=configs['dim'], filenames=[existing_nonstatic_file]+configs['wordvec_files'], add_unknown = True, variance_random = configs['variance_random']) 369 | print_status('Static Word vectors are loaded for ' + str(len(word_vecs_static))+' words', info_file_path) 370 | 371 | Word_idx_map_train_static, Word_idxvec_matrix_train_static = get_word2vec_map(word_vecs=word_vecs_static, vocab=vocab) 372 | Xdata1_static, Ydata1 = make_idx_data_cv(data=data, Word_idx_map=Word_idx_map_train_static, labels_present=True) 373 | if validation_data!=[]: 374 | Xvalid_static, Yvalid = make_idx_data_cv(data=validation_data, Word_idx_map=Word_idx_map_train_static, labels_present=True) 375 | static_Words = theano.shared(value = np.asarray(Word_idxvec_matrix_train_static, dtype=theano.config.floatX), name = "static_Words") 376 | 377 | nonstatic_Words = None 378 | if nonstatic_idx>=0: 379 | if existing_nonstatic_file!='': 380 | word_vecs_nonstatic = load_vecs(vocab=vocab, dim=configs['dim'], filenames=[existing_nonstatic_file]+configs['wordvec_files'], add_unknown = True, variance_random = configs['variance_random']) 381 | else: 382 | word_vecs_nonstatic = load_vecs(vocab=vocab, dim=configs['dim'], filenames=configs['wordvec_files'], add_unknown = True, variance_random = configs['variance_random']) 383 | print_status('Non-Static Word vectors are loaded for ' + str(len(word_vecs_nonstatic))+' words', info_file_path) 384 | 385 | Word_idx_map_train_nonstatic, Word_idxvec_matrix_train_nonstatic = get_word2vec_map(word_vecs=word_vecs_nonstatic, vocab=vocab) 386 | Xdata1_nonstatic, Ydata1 = make_idx_data_cv(data=data, Word_idx_map=Word_idx_map_train_nonstatic, labels_present=True) 387 | if validation_data!=[]: 388 | Xvalid_nonstatic, Yvalid = make_idx_data_cv(data=validation_data, Word_idx_map=Word_idx_map_train_nonstatic, labels_present=True) 389 | nonstatic_Words = theano.shared(value = np.asarray(Word_idxvec_matrix_train_nonstatic, dtype=theano.config.floatX), name = "nonstatic_Words") 390 | 391 | 392 | train_model, test_model = classifier.define_model(static_Words=static_Words, static_idx=static_idx, nonstatic_idx=nonstatic_idx, nonstatic_Words=nonstatic_Words) 393 | print('Model is defined; Training is started') 394 | 395 | 396 | if static_idx>=0: 397 | cPickle.dump(word_vecs_static, open(static_file_path, "wb")) 398 | temp_file_path = nonstatic_file_path + "_temp.p" 399 | 400 | 401 | least_cost = 1000 402 | best_accuracy = -1 403 | indices = range(num_data) 404 | 405 | for epoch in range(configs['epochs']): 406 | shuffle(indices) 407 | Ydata = Ydata1[indices] 408 | if static_idx>=0: 409 | Xdata_static = Xdata1_static[indices] 410 | if nonstatic_idx>=0: 411 | Xdata_nonstatic = Xdata1_nonstatic[indices] 412 | 413 | 414 | if validation_data==[]: 415 | if static_idx>=0: 416 | Xvalid_static = Xdata_static[indices[split_point:]] 417 | Xtrain_static = Xdata_static[indices[:split_point]] 418 | if nonstatic_idx>=0: 419 | Xvalid_nonstatic = Xdata_nonstatic[indices[split_point:]] 420 | Xtrain_nonstatic = Xdata_nonstatic[indices[:split_point]] 421 | Ytrain = Ydata[indices[:split_point]] 422 | Yvalid = Ydata[indices[split_point:]] 423 | else: 424 | if static_idx>=0: 425 | Xtrain_static = Xdata_static 426 | if nonstatic_idx>=0: 427 | Xtrain_nonstatic = Xdata_nonstatic 428 | Ytrain = Ydata 429 | 430 | 431 | cost = 0 432 | for i in range(len(Ytrain)): 433 | print(str(i+1),end='\r') 434 | sys.stdout.flush() 435 | 436 | if static_idx>=0 and nonstatic_idx>=0: 437 | cost_epoch = train_model(Xtrain_static[i], Xtrain_nonstatic[i], Ytrain[i], rho) 438 | elif static_idx>=0: 439 | cost_epoch = train_model(Xtrain_static[i], Ytrain[i], rho) 440 | elif nonstatic_idx>=0: 441 | cost_epoch = train_model(Xtrain_nonstatic[i], Ytrain[i], rho) 442 | cost += cost_epoch 443 | cost = cost/len(Ytrain) 444 | 445 | if validation_data!=[] or configs['validation']>0: 446 | outp = [] 447 | for i in range(len(Yvalid)): 448 | if static_idx>=0 and nonstatic_idx>=0: 449 | outp += list(test_model(Xvalid_static[i], Xvalid_nonstatic[i])) 450 | elif static_idx>=0: 451 | outp += list(test_model(Xvalid_static[i])) 452 | elif nonstatic_idx>=0: 453 | outp += list(test_model(Xvalid_nonstatic[i])) 454 | 455 | outp = np.asarray(outp) 456 | 457 | xs = scoring(prob_pred=outp, Ytest=Yvalid, threshold=configs['threshold'], labels=labels) 458 | test_accuracy, fscores = xs[0], xs[1] 459 | valid_fscore = np.asarray([row[-1] for row in fscores]).mean() 460 | 461 | print_status('Epoch ' + str(epoch+1) + ' \t:: Training error : ' + str(round(cost,9)) + ' \t:: Validation fscore : ' + str(round(valid_fscore,3)) + '%', info_file_path) 462 | 463 | if best_accuracy < valid_fscore: 464 | best_accuracy = valid_fscore 465 | least_cost = cost 466 | cPickle.dump([classifier, labels, configs['threshold'], configs['preprocess'], static_idx, nonstatic_idx], open(model_file_path, "wb")) 467 | if nonstatic_idx>=0: 468 | cPickle.dump(nonstatic_Words.get_value(), open(temp_file_path, "wb")) 469 | Word_idxvec_matrix_train_nonstatic = nonstatic_Words.get_value() 470 | word_vecs_nonstatic = {} 471 | for wd in Word_idx_map_train_nonstatic: 472 | word_vecs_nonstatic[wd] = Word_idxvec_matrix_train_nonstatic[Word_idx_map_train_nonstatic[wd]] 473 | cPickle.dump(word_vecs_nonstatic, open(nonstatic_file_path, "wb")) 474 | 475 | 476 | elif best_accuracy == valid_fscore and least_cost > cost: 477 | least_cost = cost 478 | cPickle.dump([classifier, labels, configs['threshold'], configs['preprocess'], static_idx, nonstatic_idx], open(model_file_path, "wb")) 479 | if nonstatic_idx>=0: 480 | cPickle.dump(nonstatic_Words.get_value(), open(temp_file_path, "wb")) 481 | Word_idxvec_matrix_train_nonstatic = nonstatic_Words.get_value() 482 | word_vecs_nonstatic = {} 483 | for wd in Word_idx_map_train_nonstatic: 484 | word_vecs_nonstatic[wd] = Word_idxvec_matrix_train_nonstatic[Word_idx_map_train_nonstatic[wd]] 485 | cPickle.dump(word_vecs_nonstatic, open(nonstatic_file_path, "wb")) 486 | 487 | elif best_accuracy > valid_fscore and cost - least_cost > configs['epsilon']: 488 | rho = rho - rho * configs['epsilon'] 489 | print('Learning rate reduced to '+str(rho)) 490 | classifier, labels, configs['threshold'], configs['preprocess'], static_idx, nonstatic_idx = cPickle.load(open(model_file_path,"rb")) 491 | if nonstatic_idx>=0: 492 | nonstatic_Words = theano.shared(value = np.asarray(cPickle.load(open(temp_file_path,"rb")), dtype=theano.config.floatX), name = "nonstatic_Words") 493 | train_model, test_model = classifier.define_model(static_Words=static_Words, static_idx=static_idx, nonstatic_idx=nonstatic_idx, nonstatic_Words=nonstatic_Words) 494 | 495 | 496 | else: 497 | print_status('Epoch ' + str(epoch+1) + ' :: Training error : ' + str(round(cost,9)), info_file_path) 498 | 499 | if cost <= least_cost: 500 | least_cost = cost 501 | cPickle.dump([classifier, labels, configs['threshold'], configs['preprocess'], static_idx, nonstatic_idx], open(model_file_path, "wb")) 502 | if nonstatic_idx>=0: 503 | cPickle.dump(nonstatic_Words.get_value(), open(temp_file_path, "wb")) 504 | Word_idxvec_matrix_train_nonstatic = nonstatic_Words.get_value() 505 | word_vecs_nonstatic = {} 506 | for wd in Word_idx_map_train_nonstatic: 507 | word_vecs_nonstatic[wd] = Word_idxvec_matrix_train_nonstatic[Word_idx_map_train_nonstatic[wd]] 508 | cPickle.dump(word_vecs_nonstatic, open(nonstatic_file_path, "wb")) 509 | 510 | elif cost - least_cost > configs['epsilon']: 511 | rho = rho - rho * configs['epsilon'] 512 | print('Learning rate reduced to '+str(rho)) 513 | classifier, labels, configs['threshold'], configs['preprocess'], static_idx, nonstatic_idx = cPickle.load(open(model_file_path,"rb")) 514 | if nonstatic_idx>=0: 515 | nonstatic_Words = theano.shared(value = np.asarray(cPickle.load(open(temp_file_path,"rb")), dtype=theano.config.floatX), name = "nonstatic_Words") 516 | train_model, test_model = classifier.define_model(static_Words=static_Words, static_idx=static_idx, nonstatic_idx=nonstatic_idx, nonstatic_Words=nonstatic_Words) 517 | os.remove(temp_file_path) 518 | 519 | 520 | """ 521 | Function for testing on a dataset 522 | """ 523 | def testing(data, threshold, word_vec_files, model_file_path, nonstatic_file_path, static_file_path, info_file_path, output_file_paths=[]): 524 | xx = cPickle.load(open(model_file_path,"rb")) 525 | classifier, labels, static_idx, nonstatic_idx = xx[0], xx[1], xx[4], xx[5] 526 | if threshold<0: # when not passed as argument, take the value from the trained model 527 | threshold = xx[2] 528 | 529 | vocab = get_vocab(data) 530 | 531 | print_status('\nNumber of test data-points: ' + str(len(data)), info_file_path) 532 | print_status('Test vocabulary size: ' + str(len(vocab)), info_file_path) 533 | 534 | 535 | #loading word vectors 536 | static_Words = None 537 | if static_idx>=0: 538 | word_vecs_static = load_vecs(vocab=vocab, dim=-1, filenames=[static_file_path]+word_vec_files, add_unknown = False, variance_random = 0) 539 | print_status('Static Word vectors are loaded for ' + str(len(word_vecs_static))+' words', info_file_path) 540 | 541 | Word_idx_map_train_static, Word_idxvec_matrix_train_static = get_word2vec_map(word_vecs=word_vecs_static, vocab=vocab) 542 | Xtest_static, Ytest = make_idx_data_cv(data=data, Word_idx_map=Word_idx_map_train_static, labels_present=True) 543 | static_Words = theano.shared(value = np.asarray(Word_idxvec_matrix_train_static, dtype=theano.config.floatX), name = "static_Words") 544 | 545 | nonstatic_Words = None 546 | if nonstatic_idx>=0: 547 | word_vecs_nonstatic = load_vecs(vocab=vocab, dim=-1, filenames=[nonstatic_file_path]+word_vec_files, add_unknown = False, variance_random = 0) 548 | print_status('Non-Static Word vectors are loaded for ' + str(len(word_vecs_nonstatic))+' words', info_file_path) 549 | 550 | Word_idx_map_train_nonstatic, Word_idxvec_matrix_train_nonstatic = get_word2vec_map(word_vecs=word_vecs_nonstatic, vocab=vocab) 551 | Xtest_nonstatic, Ytest = make_idx_data_cv(data=data, Word_idx_map=Word_idx_map_train_nonstatic, labels_present=True) 552 | nonstatic_Words = theano.shared(value = np.asarray(Word_idxvec_matrix_train_nonstatic, dtype=theano.config.floatX), name = "nonstatic_Words") 553 | 554 | 555 | _, test_model = classifier.define_model(static_Words=static_Words, static_idx=static_idx, nonstatic_idx=nonstatic_idx, nonstatic_Words=nonstatic_Words) 556 | print('Model is loaded and defined; Testing is being done') 557 | 558 | 559 | prob_pred = [] 560 | for i in range(len(Ytest)): 561 | print(str(i+1),end='\r') 562 | sys.stdout.flush() 563 | if static_idx>=0 and nonstatic_idx>=0: 564 | prob_pred += list(test_model(Xtest_static[i], Xtest_nonstatic[i])) 565 | elif static_idx>=0: 566 | prob_pred += list(test_model(Xtest_static[i])) 567 | elif nonstatic_idx>=0: 568 | prob_pred += list(test_model(Xtest_nonstatic[i])) 569 | prob_pred = np.asarray(prob_pred) 570 | 571 | if threshold == 1 or threshold == 0: 572 | test_accuracy, fscores, y_pred, Ytest = scoring(prob_pred=prob_pred, Ytest=Ytest, threshold=threshold, labels=labels) 573 | else: 574 | test_accuracy, fscores, y_pred, Ytest, F1_measure = scoring(prob_pred=prob_pred, Ytest=Ytest, threshold=threshold, labels=labels) 575 | 576 | print(' ') 577 | print_status('\nTESTING ACCURACY : ' + str(round(test_accuracy,3)) + '%', info_file_path) 578 | if threshold != 1 and threshold != 0: 579 | print_status('TESTING F1-MEASURE : ' + str(round(F1_measure,3)) + '%', info_file_path) 580 | for i in range(len(labels)): 581 | print_status('Label ' + labels[i] + ' :: \tFscore : ' + str(round(fscores[i][-1],3)) + '% \t:: \tTP:' + str(fscores[i][0]) + ' ,\tTN:' + str(fscores[i][1]) + ' ,\tFP:' + str(fscores[i][2]) + ' ,\tFN:' + str(fscores[i][3]), info_file_path) 582 | avg_fscore = np.asarray([row[-1] for row in fscores]).mean() 583 | print_status('AVERAGE FSCORE : ' + str(round(avg_fscore,3)) + '%\n', info_file_path) 584 | 585 | 586 | if output_file_paths!=[]: 587 | outpf = csv.writer(open(output_file_paths[0],"wb"), delimiter=',') 588 | outpf.writerow(['Probabilities('+str(labels)+')','Predicted label(s)','Actual label(s)','Processed text']) 589 | if len(output_file_paths)>1: #misclassification file 590 | misf = csv.writer(open(output_file_paths[1],"wb"), delimiter=',') 591 | misf.writerow(['Output no.','Probabilities('+str(labels)+')','Predicted label(s)','Actual label(s)','Processed text']) 592 | 593 | for i in range(len(data)): 594 | if threshold==0 or threshold==1: 595 | outpf.writerow([prob_pred[i], labels[y_pred[i]], labels[Ytest[i]], data[i][0]]) 596 | if len(output_file_paths)>1 and y_pred[i] != Ytest[i]: 597 | misf.writerow([i+2, prob_pred[i], labels[y_pred[i]], labels[Ytest[i]], data[i][0]]) 598 | else: 599 | yp = [labels[row] for row in range(len(y_pred[i])) if y_pred[i][row]==1] 600 | ya = [labels[row] for row in range(len(Ytest[i])) if Ytest[i][row]==1] 601 | outpf.writerow([prob_pred[i], yp, ya, data[i][0]]) 602 | if len(output_file_paths)>1 and yp != ya: 603 | misf.writerow([i+2, prob_pred[i], yp, ya, data[i][0]]) 604 | 605 | return test_accuracy, avg_fscore 606 | 607 | 608 | """ 609 | Function for cross-validation 610 | """ 611 | def cv(configs, data_whole, labels, layers, static_idx, nonstatic_idx, info_file_path): 612 | stamp = str(datetime.now()).replace(' ','_').replace(':','-') 613 | model_file_path = 'cvmodel_' + stamp + '.p' 614 | nonstatic_file_path = 'cvwordvecs_nonstatic_' + stamp + '.p' 615 | static_file_path = 'cvwordvecs_static_' + stamp + '.p' 616 | 617 | avg_cv_accuracy = [] 618 | avg_cv_fscore = [] 619 | for repeat in range(configs['cv_repeats']): 620 | print_status('\n\nCROSS-VALIDATION REPEAT ' + str(repeat+1) + ' ::', info_file_path) 621 | 622 | shuffle(data_whole) 623 | size = np.array_split(range(len(data_whole)),configs['cv_folds']) 624 | data = [data_whole[s[0]:s[-1]+1] for s in size] 625 | vocab = [] 626 | for fold in range(configs['cv_folds']): 627 | vocab.append (get_vocab(data[fold])) 628 | 629 | for fold in range(configs['cv_folds']): 630 | print_status('\n\tCROSS-VALIDATION Fold ' + str(fold+1) + ' : Training', info_file_path) 631 | training(configs=configs, existing_model_file='', existing_nonstatic_file='', validation_data=[], layers=layers, static_idx=static_idx, nonstatic_idx=nonstatic_idx, data=sum([data[k] for k in range(configs['cv_folds']) if k!=fold],[]), labels=labels, model_file_path=model_file_path, info_file_path=info_file_path, nonstatic_file_path=nonstatic_file_path, static_file_path=static_file_path) 632 | 633 | print_status('\n\tCV Test Fold ' + str(fold+1) + ' : Testing', info_file_path) 634 | test_accuracy, avg_fscore = testing(data=data[fold], threshold=-1, word_vec_files=configs['wordvec_files'], model_file_path=model_file_path, nonstatic_file_path=nonstatic_file_path, static_file_path=static_file_path, info_file_path=info_file_path) 635 | 636 | avg_cv_accuracy.append(test_accuracy) 637 | avg_cv_fscore.append(avg_fscore) 638 | 639 | os.remove(model_file_path) 640 | if nonstatic_idx>=0: 641 | os.remove(nonstatic_file_path) 642 | if static_idx>=0: 643 | os.remove(static_file_path) 644 | 645 | avg_cv_fscore = np.asarray(avg_cv_fscore).mean() 646 | avg_cv_accuracy = np.asarray(avg_cv_accuracy).mean() 647 | print_status('\n\n************************************************************************************', info_file_path) 648 | print_status('OVERALL CROSS-VALIDATION AVERAGE ACCURACY : ' + str(round(avg_cv_accuracy,3)) + '%', info_file_path) 649 | print_status('OVERALL CROSS-VALIDATION AVERAGE FSCORE : ' + str(round(avg_cv_fscore,3)) + '%', info_file_path) 650 | print_status('************************************************************************************\n\n', info_file_path) 651 | 652 | 653 | """ 654 | Function to classify raw text 655 | """ 656 | def classify(text, preprocess, threshold, Word_idx_map_static, Word_idx_map_nonstatic, test_model): 657 | for p in preprocess: 658 | text = p(text) 659 | words = text.split(' ') 660 | string = [] 661 | 662 | if Word_idx_map_static!=None: 663 | Xtest_static = [] 664 | for wd in words: 665 | if wd in Word_idx_map_static: 666 | Xtest_static.append(Word_idx_map_static[wd]) 667 | string.append(wd) 668 | 669 | if Word_idx_map_nonstatic!=None: 670 | Xtest_nonstatic = [] 671 | string = [] 672 | for wd in words: 673 | if wd in Word_idx_map_nonstatic: 674 | Xtest_nonstatic.append(Word_idx_map_nonstatic[wd]) 675 | string.append(wd) 676 | 677 | if Word_idx_map_static!=None and Word_idx_map_nonstatic!=None: 678 | prob_pred = test_model(np.asarray(Xtest_static, dtype='int32'), np.asarray(Xtest_nonstatic, dtype='int32')) 679 | elif Word_idx_map_static!=None: 680 | prob_pred = test_model(np.asarray(Xtest_static, dtype='int32')) 681 | elif Word_idx_map_nonstatic!=None: 682 | prob_pred = test_model(np.asarray(Xtest_nonstatic, dtype='int32')) 683 | 684 | if threshold == 1: 685 | y_pred = prob_pred.argmax() 686 | elif threshold == 0: 687 | y_pred = prob_pred.argmin() 688 | else: 689 | y_pred = prob_pred >= threshold 690 | y_pred = y_pred.astype(int) 691 | 692 | # returns processed string, predicted probabilities and predicted outputs 693 | return [' '.join(string), prob_pred, y_pred] 694 | 695 | -------------------------------------------------------------------------------- /files/sst3_data/sst3_dev.csv: -------------------------------------------------------------------------------- 1 | "( director ) O'Fallon manages to put some lovely pictures up on the big screen , but his skill at telling a story -- he also contributed to the screenplay -- falls short .",neg 2 | A thinly veiled look at different aspects of Chinese life clashing with each other .,neu 3 | If your taste runs to ` difficult ' films you absolutely ca n't miss it .,pos 4 | ( Leigh ) lays it on so thick this time that it feels like a suicide race .,neu 5 | "A full world has been presented onscreen , not some series of carefully structured plot points building to a pat resolution .",pos 6 | It 's basically an overlong episode of Tales from the Crypt .,neu 7 | a nightmare date with a half-formed wit done a great disservice by a lack of critical distance and a sad trust in liberal arts college bumper sticker platitudes .,neg 8 | Puts a human face on a land most Westerners are unfamiliar with .,pos 9 | "It 's difficult to imagine the process that produced such a script , but here 's guessing that spray cheese and underarm noises played a crucial role .",neg 10 | An unwise amalgam of Broadcast News and Vibes .,neg 11 | Turns potentially forgettable formula into something strangely diverting .,pos 12 | Comes ... uncomfortably close to coasting in the treads of The Bicycle Thief .,neg 13 | "Expect the same-old , lame-old slasher nonsense , just with different scenery .",neg 14 | Atom Egoyan has conjured up a multilayered work that tackles any number of fascinating issues,pos 15 | Fresnadillo 's dark and jolting images have a way of plying into your subconscious like the nightmare you had a week ago that wo n't go away .,pos 16 | My reaction in a word : disappointment .,neg 17 | "An unpredictable blend of gal-pal smart talk , romantic comedy and dark tragedy that bites off considerably more than writer\/director John McKay can swallow .",neu 18 | "Movie fans , get ready to take off ... the other direction .",neg 19 | Do n't be fooled by the impressive cast list - Eye See You is pure junk .,neg 20 | For the most part Stevens glides through on some solid performances and witty dialogue .,pos 21 | Let 's hope -- shall we ?,neu 22 | A sometimes tedious film .,neg 23 | Pumpkin wants to have it both ways .,neu 24 | it seems to me the film is about the art of ripping people off without ever letting them consciously know you have done so,neg 25 | "It has the ability to offend and put off everyone , but it holds you with its outrageousness .",neu 26 | "It 's dumb , but more importantly , it 's just not scary .",neg 27 | A valueless kiddie paean to pro basketball underwritten by the NBA .,neg 28 | "This one is definitely one to skip , even for horror movie fanatics .",neg 29 | "This illuminating documentary transcends our preconceived vision of the Holy Land and its inhabitants , revealing the human complexities beneath .",pos 30 | "Even in its most tedious scenes , Russian Ark is mesmerizing .",pos 31 | Even horror fans will most likely not find what they 're seeking with Trouble Every Day ; the movie lacks both thrills and humor .,neg 32 | "At times , the suspense is palpable , but by the end there 's a sense that the crux of the mystery hinges on a technicality that strains credulity and leaves the viewer haunted by the waste of potential .",neg 33 | Smith is careful not to make fun of these curious owners of architectural oddities .,neu 34 | The magic of the film lies not in the mysterious spring but in the richness of its performances .,pos 35 | "A delectable and intriguing thriller filled with surprises , Read My Lips is an original .",pos 36 | "Moody , heartbreaking , and filmed in a natural , unforced style that makes its characters seem entirely convincing even when its script is not .",pos 37 | But its awkward structure keeps breaking the spell .,neu 38 | The heavy-handed film is almost laughable as a consequence .,neg 39 | What the director ca n't do is make either of Val Kilmer 's two personas interesting or worth caring about .,neg 40 | Jaglom ... put ( s ) the audience in the privileged position of eavesdropping on his characters,pos 41 | "A gripping movie , played with performances that are all understated and touching .",pos 42 | It 's hard to imagine Alan Arkin being better than he is in this performance .,pos 43 | "It 's like every bad idea that 's ever gone into an after-school special compiled in one place , minus those daytime programs ' slickness and sophistication ( and who knew they even had any ? ) .",neg 44 | There is no pleasure in watching a child suffer .,neg 45 | "This is not the undisputed worst boxing movie ever , but it 's certainly not a champion - the big loser is the audience .",neg 46 | "Every dance becomes about seduction , where backstabbing and betrayals are celebrated , and sex is currency .",neg 47 | "Audrey Tatou has a knack for picking roles that magnify her outrageous charm , and in this literate French comedy , she 's as morning-glory exuberant as she was in Amelie .",pos 48 | "Despite the evocative aesthetics evincing the hollow state of modern love life , the film never percolates beyond a monotonous whine .",neg 49 | There has always been something likable about the Marquis de Sade .,pos 50 | "Even on those rare occasions when the narrator stops yammering , Miller 's hand often feels unsure .",neg 51 | Big Fat Waste of Time .,neg 52 | Worth watching for Dong Jie 's performance -- and for the way it documents a culture in the throes of rapid change .,pos 53 | "It feels like an after-school special gussied up with some fancy special effects , and watching its rote plot points connect is about as exciting as gazing at an egg timer for 93 minutes .",neg 54 | It 's hampered by a Lifetime-channel kind of plot and a lead actress who is out of her depth .,neg 55 | Part Three Stooges .,neu 56 | "An occasionally funny , but overall limp , fish-out-of-water story .",neg 57 | Very psychoanalytical -- provocatively so -- and also refreshingly literary .,pos 58 | "More romantic , more emotional and ultimately more satisfying than the teary-eyed original .",pos 59 | "It will grip even viewers who are n't interested in rap , as it cuts to the heart of American society in an unnerving way .",pos 60 | There 's a wickedly subversive bent to the best parts of Birthday Girl .,pos 61 | Verbinski implements every hack-artist trick to give us the ooky-spookies .,neg 62 | "Perceptive in its vision of nascent industrialized world politics as a new art form , but far too clunky , didactic and saddled with scenes that seem simply an ill fit for this movie .",neg 63 | "While locals will get a kick out of spotting Cleveland sites , the rest of the world will enjoy a fast-paced comedy with quirks that might make the award-winning Coen brothers envious .",pos 64 | "Although laced with humor and a few fanciful touches , the film is a refreshingly serious look at young women .",pos 65 | Brilliantly explores the conflict between following one 's heart and following the demands of tradition .,pos 66 | "It 's another stale , kill-by-numbers flick , complete with blade-thin characters and terrible , pun-laden dialogue .",neg 67 | "McConaughey 's fun to watch , the dragons are okay , not much fire in the script .",pos 68 | Blanchett 's performance confirms her power once again .,pos 69 | Hey Arnold !,neu 70 | And that leaves a hole in the center of The Salton Sea .,neg 71 | "There is nothing outstanding about this film , but it is good enough and will likely be appreciated most by sailors and folks who know their way around a submarine .",pos 72 | Mom and Dad can catch some quality naptime along the way .,neu 73 | "Though Moonlight Mile is replete with acclaimed actors and actresses and tackles a subject that 's potentially moving , the movie is too predictable and too self-conscious to reach a level of high drama .",neg 74 | "If there 's one thing this world needs less of , it 's movies about college that are written and directed by people who could n't pass an entrance exam .",neg 75 | A superbly acted and funny\/gritty fable of the humanizing of one woman at the hands of the unseen forces of fate .,pos 76 | "A disappointment for those who love alternate versions of the Bard , particularly ones that involve deep fryers and hamburgers .",neg 77 | A marvel like none you 've seen .,pos 78 | The affectionate loopiness that once seemed congenital to Demme 's perspective has a tough time emerging from between the badly dated cutesy-pie mystery scenario and the newfangled Hollywood post-production effects .,neg 79 | "The movie has an infectious exuberance that will engage anyone with a passing interest in the skate\/surf culture , the L.A. beach scene and the imaginative ( and sometimes illegal ) ways kids can make a playground out of the refuse of adults .",pos 80 | "One of creepiest , scariest movies to come along in a long , long time , easily rivaling Blair Witch or The Others .",pos 81 | "Kinnear does n't aim for our sympathy , but rather delivers a performance of striking skill and depth .",pos 82 | "Whether you like rap music or loathe it , you ca n't deny either the tragic loss of two young men in the prime of their talent or the power of this movie .",pos 83 | "It is amusing , and that 's all it needs to be .",pos 84 | Directed in a paint-by-numbers manner .,neg 85 | "It is the sheer , selfish , wound-licking , bar-scrapping doggedness of Leon 's struggle to face and transmute his demons that makes the movie a spirited and touching occasion , despite its patchy construction .",neu 86 | It 's an offbeat treat that pokes fun at the democratic exercise while also examining its significance for those who take part .,pos 87 | "It gets onto the screen just about as much of the novella as one could reasonably expect , and is engrossing and moving in its own right .",pos 88 | "Yes , Ballistic is silly .",neu 89 | "Care deftly captures the wonder and menace of growing up , but he never really embraces the joy of Fuhrman 's destructive escapism or the grace-in-rebellion found by his characters .",neg 90 | "We know the plot 's a little crazy , but it held my interest from start to finish .",pos 91 | No screen fantasy-adventure in recent memory has the showmanship of Clones ' last 45 minutes .,pos 92 | "Still , as a visual treat , the film is almost unsurpassed .",pos 93 | "Green might want to hang onto that ski mask , as robbery may be the only way to pay for his next project .",neg 94 | What better message than ` love thyself ' could young women of any size receive ?,pos 95 | "A warm but realistic meditation on friendship , family and affection .",pos 96 | Nothing in Waking Up in Reno ever inspired me to think of its inhabitants as anything more than markers in a screenplay .,neg 97 | "Pacino is brilliant as the sleep-deprived Dormer , his increasing weariness as much existential as it is physical .",pos 98 | Detox is ultimately a pointless endeavor .,neg 99 | "... Mafia , rap stars and hood rats butt their ugly heads in a regurgitation of cinematic violence that gives brutal birth to an unlikely , but likable , hero . '",pos 100 | "Feels haphazard , as if the writers mistakenly thought they could achieve an air of frantic spontaneity by simply tossing in lots of characters doing silly stuff and stirring the pot .",neg 101 | "Writer\/director Joe Carnahan 's grimy crime drama is a manual of precinct cliches , but it moves fast enough to cover its clunky dialogue and lapses in logic .",pos 102 | Generally provides its target audience of youngsters enough stimulating eye and ear candy to make its moral medicine go down .,neu 103 | "About a manga-like heroine who fights back at her abusers , it 's energetic and satisfying if not deep and psychological .",pos 104 | "The inhospitability of the land emphasizes the spare precision of the narratives and helps to give them an atavistic power , as if they were tales that had been handed down since the beginning of time .",neu 105 | Looks and feels like a project better suited for the small screen .,neg 106 | "Scorsese at his best makes gangster films that are equally lovely but also relentlessly brutal and brutally intelligent ; Perdition , meanwhile , reads more like Driving Miss Daisy than GoodFellas .",neu 107 | "Once the 50 year old Benigni appears as the title character , we find ourselves longing for the block of wood to come back .",neg 108 | Who needs love like this ?,neu 109 | "A gorgeous , high-spirited musical from India that exquisitely blends music , dance , song , and high drama .",pos 110 | If you enjoy more thoughtful comedies with interesting conflicted characters ; this one is for you .,pos 111 | ... a hollow joke told by a cinematic gymnast having too much fun embellishing the misanthropic tale to actually engage it .,neg 112 | "His comedy premises are often hackneyed or just plain crude , calculated to provoke shocked laughter , without following up on a deeper level .",neg 113 | I thought my own watch had stopped keeping time as I slogged my way through Clockstoppers .,neg 114 | An exquisitely crafted and acted tale .,pos 115 | "But taken as a stylish and energetic one-shot , The Queen of the Damned can not be said to suck .",pos 116 | I do n't think I laughed out loud once .,neg 117 | "It moves quickly , adroitly , and without fuss ; it does n't give you time to reflect on the inanity -- and the Cold War datedness -- of its premise .",pos 118 | columns from Ladies Home Journal ...,neu 119 | Collateral Damage finally delivers the goods for Schwarzenegger fans .,pos 120 | I can take infantile humor ... but this is the sort of infantile that makes you wonder about changing the director and writer 's diapers .,neg 121 | "Excessive , profane , packed with cartoonish violence and comic-strip characters .",neg 122 | "It may seem long at 110 minutes if you 're not a fan , because it includes segments of 12 songs at a reunion concert .",neu 123 | While much of the cast has charm -- especially Allodi and Nolden -- the performers are sunk by the film 's primitive approach to the mechanics of comedy .,neu 124 | Do not see this film .,neg 125 | "With its dogged Hollywood naturalism and the inexorable passage of its characters toward sainthood , Windtalkers is nothing but a sticky-sweet soap .",neg 126 | "deliriously funny , fast and loose , accessible to the uninitiated , and full of surprises",pos 127 | A taut psychological thriller that does n't waste a moment of its two-hour running time .,pos 128 | Star Trek : Nemesis meekly goes where nearly every Star Trek movie has gone before .,neu 129 | The piece plays as well as it does thanks in large measure to Anspaugh 's three lead actresses .,pos 130 | But this films lacks the passion required to sell the material .,neg 131 | "Much as we might be interested in gratuitous sexualization , Haneke has a different objective in mind -- namely the implications of our craving for fake stimulation .",neu 132 | Trademark American triteness and simplicity are tossed out the window with the intelligent French drama that deftly explores the difficult relationship between a father and son .,pos 133 | "A morose little soap opera about three vapid , insensitive people who take turns hurting each other .",neu 134 | Coughs and sputters on its own postmodern conceit .,neg 135 | This is her Blue Lagoon .,neu 136 | Is this love or is it masochism ?,neu 137 | "Immersing us in the endlessly inventive , fiercely competitive world of hip-hop DJs , the project is sensational and revelatory , even if scratching makes you itch .",pos 138 | "Thanks to Haynes ' absolute control of the film 's mood , and buoyed by three terrific performances , Far From Heaven actually pulls off this stylistic juggling act .",pos 139 | "The film is quiet , threatening and unforgettable .",pos 140 | It 's a beautiful madness .,pos 141 | If only the story about a multi-million dollar con bothered to include the con .,neu 142 | "The vintage is pure ' 87 , with a halfhearted twist on its cautionary message : Fatal Attraction = do n't have an affair with a nutjob ; Unfaithful = do n't if you 're married to one .",neu 143 | "It 's clear the filmmakers were n't sure where they wanted their story to go , and even more clear that they lack the skills to get us to this undetermined destination .",neg 144 | The ga-zillionth airhead movie about a wife in distress who resorts to desperate measures .,neu 145 | "Passable entertainment , but it 's the kind of motion picture that wo n't make much of a splash when it 's released , and will not be remembered long afterwards .",neg 146 | "An interesting story with a pertinent ( cinematically unique ) message , told fairly well and scored to perfection , I found myself struggling to put my finger on that elusive `` missing thing . ''",pos 147 | The emotions are raw and will strike a nerve with anyone who 's ever had family trauma .,pos 148 | My Wife Is an Actress is an utterly charming French comedy that feels so American in sensibility and style it 's virtually its own Hollywood remake .,pos 149 | "The movie , directed by Mick Jackson , leaves no cliche unturned , from the predictable plot to the characters straight out of central casting .",neg 150 | "Not for the prurient or squeamish , it 's a daring if overlong examination of an idolized culture , self-loathing and sexual politics .",neu 151 | "( Lawrence bounces ) all over the stage , dancing , running , sweating , mopping his face and generally displaying the wacky talent that brought him fame in the first place .",pos 152 | Scooby Dooby Doo \/ And Shaggy too \/ You both look and sound great .,pos 153 | "Christina Ricci comedy about sympathy , hypocrisy and love is a misfire .",neu 154 | "This is a winning ensemble comedy that shows Canadians can put gentle laughs and equally gentle sentiments on the button , just as easily as their counterparts anywhere else in the world .",pos 155 | "The film 's almost unbearable portrait of sadness and grief transcends its specific story to speak to the ways in which need , history and presumption tangle , and sometimes destroy , blood ties .",neu 156 | "This is a story of two misfits who do n't stand a chance alone , but together they are magnificent .",pos 157 | "Ah yes , and then there 's the music ...",neu 158 | ( D ) oes n't bother being as cloying or preachy as equivalent evangelical Christian movies -- maybe the filmmakers know that the likely audience will already be among the faithful .,pos 159 | This is so bad .,neg 160 | It 's the chemistry between the women and the droll scene-stealing wit and wolfish pessimism of Anna Chancellor that makes this `` Two Weddings and a Funeral '' fun .,pos 161 | A romantic comedy enriched by a sharp eye for manners and mores .,pos 162 | The piquant story needs more dramatic meat on its bones .,neg 163 | Suffers from the lack of a compelling or comprehensible narrative .,neg 164 | "Another one of those estrogen overdose movies like `` Divine Secrets of the Ya Ya Sisterhood , '' except that the writing , acting and character development are a lot better .",pos 165 | But it could have been worse .,neg 166 | One long string of cliches .,neg 167 | It 's a bit disappointing that it only manages to be decent instead of dead brilliant .,neg 168 | "While it regards 1967 as the key turning point of the 20th century , and returns again and again to images of dissidents in the streets , it 's alarmingly current .",neu 169 | "Not far beneath the surface , this reconfigured tale asks disturbing questions about those things we expect from military epics .",pos 170 | "Too restrained to be a freak show , too mercenary and obvious to be cerebral , too dull and pretentious to be engaging ... The Isle defies an easy categorization .",neg 171 | "It believes it 's revealing some great human truths , when , in reality , it 's churning ground that has long passed the point of being fertile .",neu 172 | A synthesis of cliches and absurdities that seems positively decadent in its cinematic flash and emptiness .,neg 173 | A movie that reminds us of just how exciting and satisfying the fantasy cinema can be when it 's approached with imagination and flair .,pos 174 | "A very long movie , dull in stretches , with entirely too much focus on meal preparation and igloo construction .",neg 175 | Affleck and Jackson are good sparring partners .,pos 176 | "Sustains its dreamlike glide through a succession of cheesy coincidences and voluptuous cheap effects , not the least of which is Rebecca Romijn-Stamos .",neg 177 | "Without ever becoming didactic , director Carlos Carrera expertly weaves this novelistic story of entangled interrelationships and complex morality .",pos 178 | The Chateau cleverly probes the cross-cultural differences between Gauls and Yanks .,pos 179 | Not since Freddy Got Fingered has a major release been so painful to sit through .,neg 180 | It 's a work by an artist so in control of both his medium and his message that he can improvise like a jazzman .,pos 181 | It treats women like idiots .,neg 182 | The Son 's Room is a triumph of gentility that earns its moments of pathos .,pos 183 | "The most hopelessly monotonous film of the year , noteworthy only for the gimmick of being filmed as a single unbroken 87-minute take .",neg 184 | "The lower your expectations , the more you 'll enjoy it .",neg 185 | An appealingly juvenile trifle that delivers its share of laughs and smiles .,neu 186 | Has a lot of the virtues of Eastwood at his best .,pos 187 | Richard Gere and Diane Lane put in fine performances as does French actor Oliver Martinez .,pos 188 | The fly-on-the-wall method used to document rural French school life is a refreshing departure from the now more prevalent technique of the docu-makers being a visible part of their work .,pos 189 | Sam Mendes has become valedictorian at the School for Soft Landings and Easy Ways Out .,neg 190 | "Maneuvers skillfully through the plot 's hot brine -- until it 's undone by the sogginess of its contemporary characters , and actors .",neu 191 | Sometimes seems less like storytelling than something the otherwise compelling director needed to get off his chest .,neg 192 | Oh come on .,neg 193 | "Far more imaginative and ambitious than the trivial , cash-in features Nickelodeon has made from its other animated TV series .",pos 194 | "Though it 's become almost redundant to say so , major kudos go to Leigh for actually casting people who look working-class .",pos 195 | The idea of 49-year-old Roberto Benigni playing the wooden boy Pinocchio is scary enough .,neu 196 | A good piece of work more often than not .,pos 197 | just not campy enough,neg 198 | Intriguing documentary which is emotionally diluted by focusing on the story 's least interesting subject .,pos 199 | "( E ) ventually , every idea in this film is flushed down the latrine of heroism .",neg 200 | Socrates motions for hemlock .,neu 201 | "Unlike the speedy wham-bam effect of most Hollywood offerings , character development -- and more importantly , character empathy -- is at the heart of Italian for Beginners .",pos 202 | "There is n't nearly enough fun here , despite the presence of some appealing ingredients .",neg 203 | "A moody , multi-dimensional love story and sci-fi mystery , Solaris is a thought-provoking , haunting film that allows the seeds of the imagination to germinate .",pos 204 | "Seldahl 's Barbara is a precise and moving portrait of someone whose world is turned upside down , first by passion and then by illness .",pos 205 | Historical dramas fused with love triangle is a well worn conceit .,neu 206 | "A poignant and compelling story about relationships , Food of Love takes us on a bumpy but satisfying journey of the heart .",pos 207 | "So , too , is this comedy about mild culture clashing in today 's New Delhi .",pos 208 | "Hoffman notches in the nuances of pain , but his smart , edgy voice and waddling profile ( emphasized here ) accent the humor of Wilson 's plight , and that saves his pathos from drippiness .",neu 209 | Which is n't to say that it 's the equal of some of its predecessors .,neu 210 | "The reality of the new live-action Pinocchio he directed , cowrote and starred in borders on the grotesque .",neg 211 | A working class `` us vs. them '' opera that leaves no heartstring untugged and no liberal cause unplundered .,pos 212 | "Miller is playing so free with emotions , and the fact that children are hostages to fortune , that he makes the audience hostage to his swaggering affectation of seriousness .",pos 213 | "Whereas last year 's exemplary Sexy Beast seemed to revitalize the British gangster movie , this equally brutal outing merely sustains it .",neu 214 | "Exquisitely nuanced in mood tics and dialogue , this chamber drama is superbly acted by the deeply appealing veteran Bouquet and the chilling but quite human Berling .",pos 215 | "... an otherwise intense , twist-and-turn thriller that certainly should n't hurt talented young Gaghan 's resume .",pos 216 | "A must-see for the David Mamet enthusiast and for anyone who appreciates intelligent , stylish moviemaking .",pos 217 | "In his first stab at the form , Jacquot takes a slightly anarchic approach that works only sporadically .",neu 218 | CQ 's reflection of artists and the love of cinema-and-self suggests nothing less than a new voice that deserves to be considered as a possible successor to the best European directors .,pos 219 | Barely gets off the ground .,neu 220 | A film about a young man finding God that is accessible and touching to the marrow .,pos 221 | "Not a film to rival To Live , but a fine little amuse-bouche to keep your appetite whetted .",neu 222 | "Paid In Full is so stale , in fact , that its most vibrant scene is one that uses clips from Brian De Palma 's Scarface .",neg 223 | A giggle a minute .,pos 224 | "Director of photography Benoit Delhomme shot the movie in delicious colors , and the costumes and sets are grand .",pos 225 | "Bennett 's naturalistic performance speaks volumes more truth than any ` reality ' show , and anybody contemplating their own drastic life changes should watch Some Body first .",pos 226 | "The movie is Dawn of the Dead crossed with John Carpenter 's Ghosts of Mars , with zombies not as ghoulish as the first and trains not as big as the second .",neg 227 | "The action switches between past and present , but the material link is too tenuous to anchor the emotional connections that purport to span a 125-year divide .",neg 228 | Plays like a volatile and overlong W magazine fashion spread .,neg 229 | "What the film lacks in general focus it makes up for in compassion , as Corcuera manages to find the seeds of hope in the form of collective action .",pos 230 | "Trite , banal , cliched , mostly inoffensive .",neg 231 | "Samira Makhmalbaf 's new film Blackboards is much like the ethos of a stream of consciousness , although , it 's unfortunate for the viewer that the thoughts and reflections coming through are torpid and banal",neg 232 | It inspires a continuing and deeply satisfying awareness of the best movies as monumental ` picture shows . ',pos 233 | This Nickleby thing might have more homosexual undertones than an Eddie Murphy film .,neg 234 | "The inspirational screenplay by Mike Rich covers a lot of ground , perhaps too much , but ties things together , neatly , by the end .",pos 235 | "May be far from the best of the series , but it 's assured , wonderfully respectful of its past and thrilling enough to make it abundantly clear that this movie phenomenon has once again reinvented itself for a new generation .",pos 236 | "In exactly 89 minutes , most of which passed as slowly as if I 'd been sitting naked on an igloo , Formula 51 sank from quirky to jerky to utter turkey .",neg 237 | "( T ) here 's only so much anyone can do with a florid , overplotted , Anne Rice rock 'n' roll vampire novel before the built-in silliness of the whole affair defeats them .",neg 238 | The movie understands like few others how the depth and breadth of emotional intimacy give the physical act all of its meaning and most of its pleasure .,pos 239 | "This is the sort of burly action flick where one coincidence pummels another , narrative necessity is a drunken roundhouse , and whatever passes for logic is a factor of the last plot device left standing .",neg 240 | "A simple , but gritty and well-acted ensemble drama that encompasses a potent metaphor for a country still dealing with its fascist past .",pos 241 | Just an average comedic dateflick but not a waste of time .,neu 242 | Griffiths proves she 's that rare luminary who continually raises the standard of her profession .,pos 243 | "I have no way of knowing exactly how much is exaggeration , but I 've got a creepy feeling that the film is closer to the mark than I want to believe .",neu 244 | This remake gets all there is to get out of a peculiar premise with promise : Al Pacino loathing Robin Williams .,neu 245 | "Feature debuter D.J. Caruso directs a crack ensemble cast , bringing screenwriter Tony Gayton 's narcotics noir to life .",pos 246 | The intent is almost exactly the same ( as The Full Monty ) .,neu 247 | Kept aloft largely by a comically adept ensemble .,neu 248 | Allows us to hope that Nolan is poised to embark a major career as a commercial yet inventive filmmaker .,pos 249 | "Unfortunately , it appears that ( Jackie ) Chan 's US influence is starting to show in his Hong Kong films .",neu 250 | a by-the-numbers patient\/doctor pic that covers all the usual ground,neg 251 | "Mattei is tiresomely grave and long-winded , as if circularity itself indicated profundity .",neg 252 | "Wince-inducing dialogue , thrift-shop costumes , prosthetic makeup by Silly Putty and Kmart blue-light-special effects all conspire to test Trekkie loyalty .",neg 253 | "A muckraking job , the cinematic equivalent of a legal indictment , and a fairly effective one at that .",neu 254 | "if you are an actor who can relate to the search for inner peace by dramatically depicting the lives of others onstage , then Esther 's story is a compelling quest for truth .",pos 255 | "`` The Ring '' is pretty much an English-language copy of the film that inspired it , and it carries the same strengths and flaws .",neu 256 | "No one goes unindicted here , which is probably for the best .",neu 257 | "Professionally speaking , it 's tempting to jump ship in January to avoid ridiculous schlock like this shoddy suspense thriller .",neg 258 | "Martin and Barbara are complex characters -- sometimes tender , sometimes angry -- and the delicate performances by Sven Wollter and Viveka Seldahl make their hopes and frustrations vivid .",pos 259 | "When the film ended , I felt tired and drained and wanted to lie on my own deathbed for a while .",neg 260 | "But the power of these ( subjects ) is obscured by the majority of the film that shows a stationary camera on a subject that could be mistaken for giving a public oration , rather than contributing to a film 's narrative .",neg 261 | "What 's surprising about Full Frontal is that despite its overt self-awareness , parts of the movie still manage to break past the artifice and thoroughly engage you .",pos 262 | A solid examination of the male midlife crisis .,pos 263 | "... Brian De Palma is utterly mad : cinema mad , set-piece mad , style mad .",neu 264 | ` They ' begins and ends with scenes so terrifying I 'm still stunned .,neu 265 | "The twist that ends the movie is the one with the most emotional resonance , but twists are getting irritating , and this is the kind of material where the filmmakers should be very careful about raising eyebrows .",neu 266 | "Add yet another hat to a talented head , Clooney 's a good director .",pos 267 | "Although occasionally static to the point of resembling a stage play , the film delivers a solid mixture of sweetness and laughs .",neu 268 | "... routine , harmless diversion and little else .",pos 269 | A movie that successfully crushes a best selling novel into a timeframe that mandates that you avoid the Godzilla sized soda .,pos 270 | "Manages to be somewhat well-acted , not badly art-directed and utterly unengaging no matter how hard it tries to be thrilling , touching or , yikes , uproarious .",neu 271 | What Time Is It There ?,neu 272 | The mesmerizing performances of the leads keep the film grounded and keep the audience riveted .,pos 273 | It uses the pain and violence of war as background material for color .,neu 274 | Long Time Dead ?,neu 275 | "Makes for some truly odd , at times confusing , kids entertainment ... but at least this time there 's some centered storytelling to go along with all the weird stuff .",neu 276 | "Offers much to enjoy ... and a lot to mull over in terms of love , loyalty and the nature of staying friends .",pos 277 | "This is a shameless sham , calculated to cash in on the popularity of its stars .",neg 278 | "Displaying about equal amounts of naivete , passion and talent , Beneath Clouds establishes Sen as a filmmaker of considerable potential .",pos 279 | "Highbrow self-appointed guardians of culture need not apply , but those who loved Cool as Ice have at last found a worthy follow-up .",pos 280 | The problem with this film is that it lacks focus .,neg 281 | "If director Michael Dowse only superficially understands his characters , he does n't hold them in contempt .",neg 282 | You wonder why Enough was n't just a music video rather than a full-length movie .,neg 283 | It 's a bad thing when a movie has about as much substance as its end credits blooper reel .,neg 284 | The next generation of mob movie .,neu 285 | They should have called it Gutterball .,neg 286 | "Even film silliness needs a little gravity , beyond good hair and humping .",neu 287 | This surreal Gilliam-esque film is also a troubling interpretation of Ecclesiastes .,pos 288 | "It 's a trifle of a movie , with a few laughs surrounding an unremarkable soft center .",neu 289 | You will emerge with a clearer view of how the gears of justice grind on and the death report comes to share airtime alongside the farm report .,pos 290 | The character of ZigZag is not sufficiently developed to support a film constructed around him .,neg 291 | "At its worst , it implodes in a series of very bad special effects .",neg 292 | "Jason X is positively anti-Darwinian : nine sequels and 400 years later , the teens are none the wiser and Jason still kills on auto-pilot .",neg 293 | "By candidly detailing the politics involved in the creation of an extraordinary piece of music , ( Jones ) calls our attention to the inherent conflict between commerce and creativity .",pos 294 | "I sympathize with the plight of these families , but the movie does n't do a very good job conveying the issue at hand .",neg 295 | Will amuse and provoke adventurous adults in specialty venues .,pos 296 | Not since Japanese filmmaker Akira Kurosawa 's Ran have the savagery of combat and the specter of death been visualized with such operatic grandeur .,pos 297 | "Forced , familiar and thoroughly condescending .",neg 298 | "From the opening scenes , it 's clear that All About the Benjamins is a totally formulaic movie .",neg 299 | "Minority Report is exactly what the title indicates , a report .",pos 300 | "I 've always dreamed of attending Cannes , but after seeing this film , it 's not that big a deal .",neg 301 | "At the very least , if you do n't know anything about Derrida when you walk into the theater , you wo n't know much more when you leave .",neg 302 | More concerned with Sade 's ideas than with his actions .,neu 303 | "A cartoon that 's truly cinematic in scope , and a story that 's compelling and heartfelt -- even if the heart belongs to a big , four-legged herbivore .",pos 304 | "For the most part , it 's a work of incendiary genius , steering clear of knee-jerk reactions and quick solutions .",pos 305 | "If you 've ever entertained the notion of doing what the title of this film implies , what Sex With Strangers actually shows may put you off the idea forever .",neg 306 | Has a long and clunky ending ... which forces the audience to fidget through ten pseudo-serious minutes while waiting for the ending credits and the deleted scenes montage to break the audience 's awkward silence,neu 307 | "The humor is n't as sharp , the effects not as innovative , nor the story as imaginative as in the original .",neg 308 | "A difficult , absorbing film that manages to convey more substance despite its repetitions and inconsistencies than do most films than are far more pointed and clear .",pos 309 | "On this tricky topic , Tadpole is very much a step in the right direction , with its blend of frankness , civility and compassion .",pos 310 | "A celebration of quirkiness , eccentricity , and certain individuals ' tendency to let it all hang out , and damn the consequences .",pos 311 | when Leguizamo finally plugged an irritating character late in the movie .,neg 312 | Yakusho and Shimizu ... create engaging characterizations in Imamura 's lively and enjoyable cultural mix .,pos 313 | Nervous breakdowns are not entertaining .,neg 314 | "Despite impeccable acting ... and a script that takes some rather unexpected ( even , at times , preposterous ) turns , Love is just too , too precious in the end .",neu 315 | "Even the finest chef ca n't make a hotdog into anything more than a hotdog , and Robert De Niro ca n't make this movie anything more than a trashy cop buddy comedy .",neg 316 | "Slapstick buffoonery can tickle many a preschooler 's fancy , but when it costs a family of four about $ 40 to see a film in theaters , why spend money on a dog like this when you can rent a pedigree instead ?",neg 317 | "On the heels of The Ring comes a similarly morose and humorless horror movie that , although flawed , is to be commended for its straight-ahead approach to creepiness .",pos 318 | "The old-world - meets-new mesh is incarnated in the movie 's soundtrack , a joyful effusion of disco Bollywood that , by the end of Monsoon Wedding , sent my spirit soaring out of the theater .",pos 319 | I just loved every minute of this film .,pos 320 | "The film is beautifully mounted , but , more to the point , the issues are subtly presented , managing to walk a fine line with regard to the question of Joan 's madness .",pos 321 | K-19 exploits our substantial collective fear of nuclear holocaust to generate cheap Hollywood tension .,neg 322 | Slick piece of cross-promotion .,pos 323 | The primitive force of this film seems to bubble up from the vast collective memory of the combatants .,pos 324 | "All in all , The Count of Monte Cristo is okay , but it is surely no classic , like the novel upon which it is based .",neu 325 | "There 's really only one good idea in this movie , but the director runs with it and presents it with an unforgettable visual panache .",pos 326 | "The very definition of the ` small ' movie , but it is a good stepping stone for director Sprecher .",pos 327 | "While the ideas about techno-saturation are far from novel , they 're presented with a wry dark humor .",pos 328 | A deep and meaningful film .,pos 329 | "Belongs to Daniel Day-Lewis as much as it belongs to Martin Scorsese ; it 's a memorable performance in a big , brassy , disturbing , unusual and highly successful film .",pos 330 | "The movie is for fans who ca n't stop loving anime , and the fanatical excess built into it .",neu 331 | "In spite of Good Housekeeping 's unsavory characters and WWF mentality , this white trash War of the Roses is a surprisingly engaging film .",neu 332 | Just embarrassment and a vague sense of shame .,neg 333 | "The format gets used best ... to capture the dizzying heights achieved by motocross and BMX riders , whose balletic hotdogging occasionally ends in bone-crushing screwups .",pos 334 | "Escaping the studio , Piccoli is warmly affecting and so is this adroitly minimalist movie .",pos 335 | "It does nothing new with the old story , except to show fisticuffs in this sort of stop-go slow motion that makes the gang rumbles look like they 're being streamed over a 28K modem .",neg 336 | "Stephen Rea , Aidan Quinn , and Alan Bates play Desmond 's legal eagles , and when joined by Brosnan , the sight of this grandiloquent quartet lolling in pretty Irish settings is a pleasant enough thing , ` tis .",pos 337 | "On the bright side , it contains Jesse Ventura 's best work since the XFL .",neu 338 | No aspirations to social import inform the movie version .,neg 339 | That is a compliment to Kuras and Miller .,pos 340 | "There is a fabric of complex ideas here , and feelings that profoundly deepen them .",pos 341 | "While it 's genuinely cool to hear characters talk about early rap records ( Sugar Hill Gang , etc. ) , the constant referencing of hip-hop arcana can alienate even the savviest audiences .",neg 342 | And I 've decided to leave a light on every night from now on .,neu 343 | Very bad .,neg 344 | Feels too formulaic and too familiar to produce the transgressive thrills of early underground work .,neg 345 | It 's made with deftly unsettling genre flair .,pos 346 | "Instead of hiding Pinocchio from critics , Miramax should have hidden it from everyone .",neg 347 | The draw ( for `` Big Bad Love '' ) is a solid performance by Arliss Howard .,pos 348 | "Based on a devilishly witty script by Heather McGowan and Niels Mueller , the film gets great laughs , but never at the expense of its characters",pos 349 | This is it .,neu 350 | "Very special effects , brilliantly bold colors and heightened reality ca n't hide the giant Achilles ' heel in `` Stuart Little 2 `` : There 's just no story , folks .",neg 351 | No way I can believe this load of junk .,neg 352 | I am sorry that I was unable to get the full brunt of the comedy .,neg 353 | It takes talent to make a lifeless movie about the most heinous man who ever lived .,neg 354 | "A beguiling , slow-moving parable about the collision of past and present on a remote seacoast in Iran .",neu 355 | A beautifully made piece of unwatchable drivel .,neu 356 | "A broad , melodramatic estrogen opera that 's pretty toxic in its own right .",neg 357 | "Even with a green Mohawk and a sheet of fire-red flame tattoos covering his shoulder , however , Kilmer seems to be posing , rather than acting .",neg 358 | The film 's performances are thrilling .,pos 359 | So devoid of any kind of intelligible story that it makes films like XXX and Collateral Damage seem like thoughtful treatises,neg 360 | If this story must be told and retold -- and indeed it must -- then The Grey Zone is to be lauded for finding a new and ingenious angle .,neu 361 | "The sort of film that makes me miss Hitchcock , but also feel optimistic that there 's hope for popular cinema yet .",pos 362 | The terrific and bewilderingly underrated Campbell Scott gives a star performance that is nothing short of mesmerizing .,pos 363 | "Nicks , seemingly uncertain what 's going to make people laugh , runs the gamut from stale parody to raunchy sex gags to formula romantic comedy .",neg 364 | A touch of humor or an unexpected plot twist always pulls it back .,neu 365 | "Having had the good sense to cast actors who are , generally speaking , adored by the movie-going public , Khouri then gets terrific performances from them all .",pos 366 | "It 's as if you 're watching a movie that was made in 1978 but not released then because it was so weak , and it has been unearthed and released now , when it has become even weaker .",neg 367 | It conveys a simple message in a visual style that is willfully overwrought .,neu 368 | "Ultimately feels empty and unsatisfying , like swallowing a Communion wafer without the wine .",neg 369 | "Pumpkin takes an admirable look at the hypocrisy of political correctness , but it does so with such an uneven tone that you never know when humor ends and tragedy begins .",neg 370 | "The Movie could have been made 40 years ago , and parents ' appreciation of it may depend on whether they consider that a good thing .",neu 371 | The movie 's accumulated force still feels like an ugly knot tightening in your stomach .,neg 372 | "At its best , Queen is campy fun like the Vincent Price horror classics of the '60s .",pos 373 | "The film is a contrivance , as artificial as the video games Japanese teens play in a nightclub sequence , but it 's an enjoyable one .",neu 374 | The socio-histo-political treatise is told in earnest strides ... ( and ) personal illusion is deconstructed with poignancy .,pos 375 | To call The Other Side of Heaven `` appalling '' would be to underestimate just how dangerous entertainments like it can be .,neg 376 | "As a first-time director , Paxton has tapped something in himself as an actor that provides Frailty with its dark soul .",pos 377 | "Harris commands the screen , using his frailty to suggest the ravages of a life of corruption and ruthlessness .",pos 378 | "The volatile dynamics of female friendship is the subject of this unhurried , low-key film that is so off-Hollywood that it seems positively French in its rhythms and resonance .",pos 379 | Director Andrew Niccol ... demonstrates a wry understanding of the quirks of fame .,pos 380 | A strangely compelling and brilliantly acted psychological drama .,pos 381 | "Open-minded kids -- kids who read , kids who dream -- will be comforted by the way it deals with big issues like death and destiny .",neu 382 | "It just may inspire a few younger moviegoers to read Stevenson 's book , which is a treasure in and of itself .",pos 383 | "Gives you the steady pulse of life in a beautiful city viewed through the eyes of a character who , in spite of tragic loss and increasing decrepitude , knows in his bones that he is one of the luckiest men alive .",pos 384 | Forgettable horror -- more gory than psychological -- with a highly satisfying quotient of Friday-night excitement and Milla power .,neu 385 | "A misogynistic piece of filth that attempts to pass itself off as hip , young adult entertainment .",neg 386 | "Oscar Wilde 's masterpiece , The Importance of Being Earnest , may be the best play of the 19th century .",pos 387 | "An overemphatic , would-be wacky , ultimately tedious sex farce .",neg 388 | "This tenth feature is a big deal , indeed -- at least the third-best , and maybe even a notch above the previous runner-up , Nicholas Meyer 's Star Trek VI : The Undiscovered Country .",pos 389 | "Utterly lacking in charm , wit and invention , Roberto Benigni 's Pinocchio is an astonishingly bad film .",neg 390 | "Weaves a spell over you , with its disturbingly close-up look at damaged psyches and its subtle undercurrents of danger .",neu 391 | "The band 's courage in the face of official repression is inspiring , especially for aging hippies ( this one included ) .",pos 392 | "A tender , heartfelt family drama .",pos 393 | "The movie is n't just hilarious : It 's witty and inventive , too , and in hindsight , it is n't even all that dumb .",pos 394 | Huppert 's superbly controlled display of murderous vulnerability ensures that malice has a very human face .,neu 395 | Jones ... does offer a brutal form of charisma .,pos 396 | "It 's hard to like a film about a guy who is utterly unlikeable , and Shiner , starring Michael Caine as an aging British boxing promoter desperate for a taste of fame and fortune , is certainly that .",neg 397 | What distinguishes Time of Favor from countless other thrillers is its underlying concern with the consequences of words and with the complicated emotions fueling terrorist acts .,pos 398 | "Nelson 's brutally unsentimental approach ... sucks the humanity from the film , leaving behind an horrific but weirdly unemotional spectacle .",neg 399 | It wants to tweak them with a taste of tangy new humor .,pos 400 | "Nonsensical , dull `` cyber-horror '' flick is a grim , hollow exercise in flat scares and bad acting .",neg 401 | "Drops you into a dizzying , volatile , pressure-cooker of a situation that quickly snowballs out of control , while focusing on the what much more than the why .",pos 402 | It all feels like a Monty Python sketch gone horribly wrong .,neg 403 | "By getting myself wrapped up in the visuals and eccentricities of many of the characters , I found myself confused when it came time to get to the heart of the movie .",neg 404 | "It proves quite compelling as an intense , brooding character study .",pos 405 | Bad .,neg 406 | the film tunes into a grief that could lead a man across centuries .,pos 407 | It 's so good that you can practically see the Hollywood ` suits ' trying to put together the cast and filmmaking team for the all-too - inevitable American remake .,neu 408 | "Velocity represents everything wrong with '' independent film '' as a commodified , sold-out concept on the American filmmaking scene .",neg 409 | The movie is beautiful to behold and engages one in a sense of epic struggle -- inner and outer -- that 's all too rare in Hollywood 's hastier productions .,pos 410 | Better to just call it ABC Kiarostami .,neu 411 | "It 's so mediocre , despite the dynamic duo on the marquee , that we just ca n't get no satisfaction .",neg 412 | ... plays like somebody spliced random moments of a Chris Rock routine into what is otherwise a cliche-riddled but self-serious spy thriller .,neg 413 | "If I had been thinking about the visual medium , they would have been doing something wrong .",neu 414 | "It 's slow -- very , very slow .",neg 415 | "It has charm to spare , and unlike many romantic comedies , it does not alienate either gender in the audience .",pos 416 | ... takes the beauty of baseball and melds it with a story that could touch anyone regardless of their familiarity with the sport,pos 417 | "It has its moments of swaggering camaraderie , but more often just feels generic , derivative and done to death .",neg 418 | Not exactly the Bees Knees,neg 419 | Tries to add some spice to its quirky sentiments but the taste is all too familiar .,neg 420 | "The best revenge may just be living well because this film , unlike other Dumas adaptations , is far more likened to a treasure than a lengthy jail sentence .",pos 421 | "Sticky sweet sentimentality , clumsy plotting and a rosily myopic view of life in the WWII-era Mississippi Delta undermine this adaptation .",neg 422 | "There is very little dread or apprehension , and though I like the creepy ideas , they are not executed with anything more than perfunctory skill .",neg 423 | "An important movie , a reminder of the power of film to move us and to make us examine our values .",pos 424 | Overall very good for what it 's trying to do .,pos 425 | Nothing is black and white .,neu 426 | And that 's a big part of why we go to the movies .,pos 427 | "Denis O'Neill 's script avoids the prime sports cliche , a last-second goal to win the championship , but it neglects few others .",neu 428 | ( A ) n utterly charming and hilarious film that reminded me of the best of the Disney comedies from the 60s .,pos 429 | Stealing Harvard aspires to comedic grand larceny but stands convicted of nothing more than petty theft of your time .,neg 430 | Makes for a pretty unpleasant viewing experience .,neg 431 | Writer\/director Mark Romanek spotlights the underlying caste system in America .,neu 432 | This movie is maddening .,neg 433 | "Some of their jokes work , but most fail miserably and in the end , Pumpkin is far more offensive than it is funny .",neg 434 | It 's a buggy drag .,neg 435 | "It haunts you , you ca n't forget it , you admire its conception and are able to resolve some of the confusions you had while watching it .",pos 436 | Nothing more substantial than a fitfully clever doodle .,neu 437 | It 's great escapist fun that recreates a place and time that will never happen again .,pos 438 | It 's a feature-length adaptation of one of those `` Can This Marriage Be Saved ? '',neu 439 | Over age 15 ?,neu 440 | "The movie occasionally threatens to become didactic , but it 's too grounded in the reality of its characters to go over the edge .",neu 441 | "For all its impressive craftsmanship , and despite an overbearing series of third-act crescendos , Lily Chou-Chou never really builds up a head of emotional steam .",neg 442 | But it 's too long and too convoluted and it ends in a muddle .,neg 443 | "His last movie was poetically romantic and full of indelible images , but his latest has nothing going for it .",neg 444 | "( T ) his beguiling Belgian fable , very much its own droll and delicate little film , has some touching things to say about what is important in life and why .",pos 445 | Enormously entertaining for moviegoers of any age .,pos 446 | "As the latest bid in the TV-to-movie franchise game , I Spy makes its big-screen entry with little of the nervy originality of its groundbreaking small-screen progenitor .",neg 447 | At all .,neu 448 | "For each chuckle there are at least 10 complete misses , many coming from the amazingly lifelike Tara Reid , whose acting skills are comparable to a cardboard cutout .",neg 449 | It 's hard to know whether or not to recommend this film because for every thing it does right there 's at least one and occasionally two things it gets ever so wrong .,neu 450 | "By the time we learn that Andrew 's Turnabout Is Fair Play is every bit as awful as Borchardt 's Coven , we can enjoy it anyway .",neu 451 | "Its story may be a thousand years old , but why did it have to seem like it took another thousand to tell it to us ?",neg 452 | "It 's about following your dreams , no matter what your parents think .",pos 453 | "It 's played in the most straight-faced fashion , with little humor to lighten things up .",neg 454 | "While Undisputed is n't exactly a high , it is a gripping , tidy little movie that takes Mr. Hill higher than he 's been in a while .",pos 455 | ... is an arthritic attempt at directing by Callie Khouri .,neg 456 | "The stripped-down approach does give the film a certain timeless quality , but the measured pace and lack of dramatic inflection can also seem tedious .",neu 457 | "Harrison 's Flowers puts its heart in the right place , but its brains are in no particular place at all .",pos 458 | "Nothing 's at stake , just a twisty double-cross you can smell a mile away -- still , the derivative Nine Queens is lots of fun .",pos 459 | The only excitement comes when the credits finally roll and you get to leave the theater .,neg 460 | "Would n't one about their famous dad , author of Death in Venice , etc. , be more valuable ?",neu 461 | Uses high comedy to evoke surprising poignance .,pos 462 | "The film 's hackneyed message is not helped by the thin characterizations , nonexistent plot and pretentious visual style .",neg 463 | "Is the time really ripe for a warmed-over James Bond adventure , with a village idiot as the 007 clone ?",neg 464 | "Even in this less-than-magic kingdom , Reese rules .",neu 465 | Few films capture so perfectly the hopes and dreams of little boys on baseball fields as well as the grown men who sit in the stands .,pos 466 | The performances take the movie to a higher level .,pos 467 | It 's a charming and often affecting journey .,pos 468 | "Dazzling in its complexity , disturbing for its extraordinary themes , The Piano Teacher is a film that defies categorisation .",pos 469 | ` Easily my choice for one of the year 's best films . ',pos 470 | Broomfield turns his distinctive ` blundering ' style into something that could really help clear up the case .,pos 471 | A cheerful enough but imminently forgettable rip-off of ( Besson 's ) earlier work .,neu 472 | `` Roger Michell ( '' Notting Hill `` ) directs a morality thriller . '',neu 473 | "The Man From Elysian Fields is a cold , bliss-less work that groans along thinking itself some important comment on how life throws us some beguiling curves .",neg 474 | "Outer-space buffs might love this film , but others will find its pleasures intermittent .",neg 475 | "It 's just disappointingly superficial -- a movie that has all the elements necessary to be a fascinating , involving character study , but never does more than scratch the surface .",neg 476 | "I felt sad for Lise not so much because of what happens as because she was captured by this movie when she obviously belongs in something lighter and sunnier , by Rohmer , for example .",neu 477 | "The vitality of the actors keeps the intensity of the film high , even as the strafings blend together .",pos 478 | A stunning and overwhelmingly cogent case for Kissinger as a calculating war criminal .,neu 479 | "Challenging , intermittently engrossing and unflaggingly creative .",pos 480 | Like watching a dress rehearsal the week before the show goes up : everything 's in place but something 's just a little off-kilter .,neg 481 | "Its maker , Steven Spielberg , has n't had so much fun in two decades , since he was schlepping Indiana Jones around the globe in search of a giant misplaced ashtray .",neu 482 | We have n't seen such hilarity since Say It Is n't So !,pos 483 | "The acting , costumes , music , cinematography and sound are all astounding given the production 's austere locales .",pos 484 | The moviegoing equivalent of going to a dinner party and being forced to watch the host and hostess 's home video of their baby 's birth .,neg 485 | "... a good , if not entirely fresh , look at war .",neu 486 | The Cold Turkey would 've been a far better title .,neg 487 | "The far future may be awesome to consider , but from period detail to matters of the heart , this film is most transporting when it stays put in the past .",pos 488 | Zaidan 's script has barely enough plot to string the stunts together and not quite enough characterization to keep the faces straight .,neg 489 | "It will not appeal to the impatient , but those who like long books and movies will admire the way it accumulates power and depth .",neu 490 | "A warm , funny , engaging film .",pos 491 | "MacDowell , whose wifty Southern charm has anchored lighter affairs ... brings an absolutely riveting conviction to her role .",pos 492 | Basically a static series of semi-improvised ( and semi-coherent ) raps between the stars .,neg 493 | It 's like watching a nightmare made flesh .,neg 494 | "And if you 're not nearly moved to tears by a couple of scenes , you 've got ice water in your veins .",pos 495 | The Wild Thornberrys Movie is a jolly surprise .,pos 496 | "A ragbag of promising ideas and failed narrative , of good acting and plain old bad filmmaking .",neu 497 | "what really makes it special is that it pulls us into its world , gives us a hero whose suffering and triumphs we can share , surrounds him with interesting characters and sends us out of the theater feeling we 've shared a great adventure .",pos 498 | The overall effect is less like a children 's movie than a recruitment film for future Hollywood sellouts .,neg 499 | Viewers of `` The Ring '' are more likely to remember the haunting images than the plot holes .,neu 500 | Its well of thorn and vinegar ( and simple humanity ) has long been plundered by similar works featuring the insight and punch this picture so conspicuously lacks .,neg 501 | "It 's mighty tedious for the viewer who has to contend with unpleasant characters , hit-and-miss performances and awkwardly staged scenes .",neu 502 | `` The Time Machine '' is a movie that has no interest in itself .,neg 503 | "A psychological thriller with a genuinely spooky premise and an above-average cast , actor Bill Paxton 's directing debut is a creepy slice of gothic rural Americana .",pos 504 | "Half Submarine flick , Half Ghost Story , All in one criminally neglected film",neu 505 | It appears that something has been lost in the translation to the screen .,neg 506 | The most compelling Wiseman epic of recent years .,pos 507 | "If you 've ever wondered what an ending without the input of studio executives or test audiences would look like , here it is .",neu 508 | "Smart , provocative and blisteringly funny .",pos 509 | ` De Niro ... is a veritable source of sincere passion that this Hollywood contrivance orbits around . ',pos 510 | You do n't have to know about music to appreciate the film 's easygoing blend of comedy and romance .,pos 511 | They takes a long time to get to its gasp-inducing ending .,neu 512 | "The plot combines The Blues Brothers and Almost Famous ( but with bears , and a G rating ) , with an excruciating dollop of Disney sentimentality mixed in for good measure .",neu 513 | "An effectively creepy , fear-inducing ( not fear-reducing ) film from Japanese director Hideo Nakata , who takes the superstitious curse on chain letters and actually applies it .",pos 514 | "Dazzles with its fully-written characters , its determined stylishness ( which always relates to characters and story ) and Johnny Dankworth 's best soundtrack in years .",pos 515 | "Offers very little genuine romance and even fewer laughs ... a sad sitcom of a movie , largely devoid of charm .",neg 516 | "For the most part , director Anne-Sophie Birot 's first feature is a sensitive , extraordinarily well-acted drama .",pos 517 | "The techno tux is good for a few laughs , as are Chan and Hewitt , but when such a good design turns out to be a cheap knockoff , we ca n't recommend anything but a rental for The Tuxedo .",neu 518 | Likely to expertly drum up repressed teenage memories in any viewer .,neu 519 | ... the film suffers from a lack of humor ( something needed to balance out the violence ) ...,neg 520 | "It 's sweet , harmless , dumb , occasionally funny and about as compelling as a fishing show .",neu 521 | is not easy .,neu 522 | "This is an egotistical endeavor from the daughter of horror director Dario Argento ( a producer here ) , but her raw performance and utter fearlessness make it strangely magnetic .",pos 523 | "Visually rather stunning , but ultimately a handsome-looking bore , the true creativity would have been to hide Treasure Planet entirely and completely reimagine it .",neg 524 | "You really have to wonder how on earth anyone , anywhere could have thought they 'd make audiences guffaw with a script as utterly diabolical as this .",neg 525 | The best film about baseball to hit theaters since Field of Dreams .,pos 526 | "It 's a cookie-cutter movie , a cut-and-paste job .",neg 527 | "Without the dark spookiness of Crystal Lake Camp , the horror concept completely loses its creepy menace .",neu 528 | Director Uwe Boll and the actors provide scant reason to care in this crude '70s throwback .,neg 529 | "The film flat lines when it should peak and is more missed opportunity and trifle than dark , decadent truffle .",neg 530 | "To my taste , the film 's comic characters come perilously close to being Amoses and Andys for a new generation .",neu 531 | Lovely and poignant .,pos 532 | "a quiet , pure , elliptical film",pos 533 | "This film seems thirsty for reflection , itself taking on adolescent qualities .",neg 534 | The experience of going to a film festival is a rewarding one ; the experiencing of sampling one through this movie is not .,neg 535 | "And just when you think it ca n't get any more gay , in pops Nathan Lane .",neu 536 | It 's a stunning lyrical work of considerable force and truth .,pos 537 | It 's fun lite .,pos 538 | An intriguing cinematic omnibus and round-robin that occasionally is more interesting in concept than in execution .,pos 539 | To say this was done better in Wilder 's Some Like It Hot is like saying the sun rises in the east .,neg 540 | This is n't even Madonna 's Swept Away .,neg 541 | The notion that bombing buildings is the funniest thing in the world goes entirely unexamined in this startlingly unfunny comedy .,neg 542 | Not an objectionable or dull film ; it merely lacks everything except good intentions .,neg 543 | "Walter Hill 's pulpy , stylized boxing melodrama Undisputed nearly overcomes its questionable in-the-ring match-up with solid fight choreography and gritty prison authenticity .",neu 544 | "So much facile technique , such cute ideas , so little movie .",pos 545 | Like Mike is n't interested in recycling old cliches .,neu 546 | "Exciting and direct , with ghost imagery that shows just enough to keep us on our toes .",pos 547 | A woman 's pic directed with resonance by Ilya Chaiken .,pos 548 | His healthy sense of satire is light and fun ...,pos 549 | ... think of it as American Pie On Valium .,neu 550 | "For close to two hours the audience is forced to endure three terminally depressed , mostly inarticulate , hyper dysfunctional families for the price of one .",neg 551 | "One of those energetic surprises , an original that pleases almost everyone who sees it .",pos 552 | This disturbing bio-pic is hard to forget .,neu 553 | "In the end , we are left with something like two ships passing in the night rather than any insights into gay love , Chinese society or the price one pays for being dishonest .",neg 554 | "Not only is Undercover Brother as funny , if not more so , than both Austin Powers films , but it 's also one of the smarter , savvier spoofs to come along in some time .",pos 555 | "There 's a solid woman - finding-herself story somewhere in here , but you 'd have to dig pretty deep to uncover it .",neu 556 | "essentially an exceptionally well-written , well-edited , well-directed , well-acted , bald rip-off of Aliens .",neu 557 | "The documentary does little , apart from raising the topic , to further stoke the conversation .",neu 558 | "An absurdist comedy about alienation , separation and loss .",neg 559 | "Like Mike is a winner for kids , and no doubt a winner for Lil Bow Wow , who can now add movies to the list of things he does well .",pos 560 | "Ramsay , as in Ratcatcher , remains a filmmaker with an acid viewpoint and a real gift for teasing chilly poetry out of lives and settings that might otherwise seem drab and sordid .",pos 561 | "On the whole , the movie lacks wit , feeling and believability to compensate for its incessant coarseness and banality .",neg 562 | "Dragonfly has no atmosphere , no tension -- nothing but Costner , flailing away .",neg 563 | "( Grant 's ) bumbling magic takes over the film , and it turns out to be another winning star vehicle .",pos 564 | Van Wilder brings a whole new meaning to the phrase ` comedy gag . ',neu 565 | What 's next : `` My Mother the Car ? '',neu 566 | If Steven Soderbergh 's ` Solaris ' is a failure it is a glorious failure .,pos 567 | "All-in-all , the film is an enjoyable and frankly told tale of a people who live among us , but not necessarily with us .",pos 568 | The script is n't very good ; not even someone as gifted as Hoffman ( the actor ) can make it work .,neg 569 | "Whaley 's determination to immerse you in sheer , unrelenting wretchedness is exhausting .",neg 570 | "If you can stomach the rough content , it 's worth checking out for the performances alone .",pos 571 | It has all the excitement of eating oatmeal .,neg 572 | "Aside from minor tinkering , this is the same movie you probably loved in 1994 , except that it looks even better .",pos 573 | "Some of it is clever , but it is never melodic \/",neu 574 | Part low rent Godfather .,neg 575 | A string of rehashed sight gags based in insipid vulgarity .,neg 576 | "Looking aristocratic , luminous yet careworn in Jane Hamilton 's exemplary costumes , Rampling gives a performance that could not be improved upon . '",pos 577 | "may not have generated many sparks , but with his affection for Astoria and its people he has given his tale a warm glow .",neu 578 | "This rather superficial arthouse middle-brow film knows how to please a crowd , and that 's about all it does well .",neu 579 | This is nothing but familiar territory .,neu 580 | "It showcases Carvey 's talent for voices , but not nearly enough and not without taxing every drop of one 's patience to get to the good stuff .",neg 581 | Chabrol has taken promising material for a black comedy and turned it instead into a somber chamber drama .,neg 582 | "Chilling but uncommercial look into the mind of Jeffrey Dahmer , serial killer .",neu 583 | "Although there are several truly jolting scares , there 's also an abundance of hackneyed dialogue and more silly satanic business than you can shake a severed limb at .",neu 584 | A compelling Spanish film about the withering effects of jealousy in the life of a young monarch whose sexual passion for her husband becomes an obsession .,pos 585 | "The film takes the materials of human tragedy and dresses them in lovely costumes , Southern California locations and star power .",neu 586 | ( A ) shapeless blob of desperate entertainment .,neg 587 | Like you could n't smell this turkey rotting from miles away .,neg 588 | "If The Count of Monte Cristo does n't transform Caviezel into a movie star , then the game is even more rigged than it was two centuries ago .",neu 589 | This movie seems to have been written using Mad-libs .,neg 590 | A science-fiction pastiche so lacking in originality that if you stripped away its inspirations there would be precious little left .,neg 591 | A painfully funny ode to bad behavior .,pos 592 | "Combining quick-cut editing and a blaring heavy metal much of the time , Beck seems to be under the illusion that he 's shooting the latest System of a Down video .",neg 593 | "The director knows how to apply textural gloss , but his portrait of sex-as-war is strictly sitcom .",neg 594 | This riveting World War II moral suspense story deals with the shadow side of American culture : racial prejudice in its ugly and diverse forms .,neg 595 | "Lan Yu is at times too restrained , yet there are moments it captures the erotics of intimacy in a way that makes most American love stories look downright unfree .",neu 596 | "It kinda works and qualifies as cool at times , but is just too lame to work or be cool at others .",neu 597 | "A twisty , moody slice of Southern Gothic ...",neu 598 | "... a story we have n't seen on the big screen before , and it 's a story that we as Americans , and human beings , should know .",pos 599 | ... turns so unforgivably trite in its last 10 minutes that anyone without a fortified sweet tooth will likely go into sugar shock .,neg 600 | Dense with characters and contains some thrilling moments .,pos 601 | Fancy a real downer ?,neg 602 | This flick is about as cool and crowd-pleasing as a documentary can get .,pos 603 | Rare Birds has more than enough charm to make it memorable .,pos 604 | "Despite all evidence to the contrary , this clunker has somehow managed to pose as an actual feature movie , the kind that charges full admission and gets hyped on TV and purports to amuse small children and ostensible adults .",neg 605 | "If you 're in the mood for a Bollywood film , here 's one for you .",neu 606 | "... a fun little timewaster , helped especially by the cool presence of Jean Reno .",pos 607 | "It 's worth seeing just on the basis of the wisdom , and at times , the startling optimism , of the children .",pos 608 | "Mr. Tsai is a very original artist in his medium , and What Time Is It There ?",pos 609 | Like the Chelsea 's denizens ... Burdette 's collage-form scenario tends to over-romanticize the spiritual desolation of the struggling artiste .,neu 610 | "Sit through this one , and you wo n't need a magic watch to stop time ; your DVD player will do it for you .",neg 611 | Manages to be both repulsively sadistic and mundane .,neg 612 | "The result is a gaudy bag of stale candy , something from a Halloween that died .",neg 613 | "A gorgeous , witty , seductive movie .",pos 614 | "... plot holes so large and obvious a marching band might as well be stomping through them in clown clothes , playing a college football fight song on untuned instruments .",neg 615 | "An entertaining , colorful , action-filled crime story with an intimate heart .",pos 616 | "While there 's something intrinsically funny about Sir Anthony Hopkins saying ` Get in the car , bitch , ' this Jerry Bruckheimer production has little else to offer",pos 617 | "With an emotional sterility to match its outer space setting , Soderbergh 's spectacular swing for the fence yields only a spectacular whiff .",neu 618 | "That dogged good will of the parents and ` vain ' Jia 's defoliation of ego , make the film touching despite some doldrums .",pos 619 | A sober and affecting chronicle of the leveling effect of loss .,neu 620 | "Nine Queens is not only than a frighteningly capable debut and genre piece , but also a snapshot of a dangerous political situation on the verge of coming to a head .",pos 621 | This movie is a snow emergency .,neu 622 | A mess when it comes to the characters and writing ... but works its way underneath the skin like few movies have in recent memory .,neu 623 | "The longer the movie goes , the worse it gets , but it 's actually pretty good in the first few minutes .",neg 624 | No one but a convict guilty of some truly heinous crime should have to sit through The Master of Disguise .,neg 625 | The film 's welcome breeziness and some unbelievably hilarious moments -- most portraying the idiocy of the film industry -- make it mostly worth the trip .,pos 626 | Reign of Fire looks as if it was made without much thought -- and is best watched that way .,pos 627 | "Too often , the viewer is n't reacting to humor so much as they are wincing back in repugnance .",neg 628 | "Adults will wish the movie were less simplistic , obvious , clumsily plotted and shallowly characterized .",neg 629 | Almost gags on its own gore .,neg 630 | A subtle and well-crafted ( for the most part ) chiller .,pos 631 | Cool ?,pos 632 | "There 's ... tremendous energy from the cast , a sense of playfulness and excitement that seems appropriate .",pos 633 | Equilibrium is what George Orwell might have imagined had today 's mood-altering drug therapy been envisioned by chemists in 1949 .,neu 634 | "It 's one of those baseball pictures where the hero is stoic , the wife is patient , the kids are as cute as all get-out and the odds against success are long enough to intimidate , but short enough to make a dream seem possible .",pos 635 | This directorial debut from music video show-off Higuchinsky is all flash .,neu 636 | Montias ... pumps a lot of energy into his nicely nuanced narrative and surrounds himself with a cast of quirky -- but not stereotyped -- street characters .,pos 637 | "Deadeningly dull , mired in convoluted melodrama , nonsensical jargon and stiff-upper-lip laboriousness .",neg 638 | Has all the depth of a wading pool .,neg 639 | "It 's inoffensive , cheerful , built to inspire the young people , set to an unending soundtrack of beach party pop numbers and aside from its remarkable camerawork and awesome scenery , it 's about as exciting as a sunburn .",neg 640 | "A spellbinding African film about the modern condition of rootlessness , a state experienced by millions around the globe .",pos 641 | The best that can be said about the work here of Scottish director Ritchie ... is that he obviously does n't have his heart in it .,neg 642 | It 's a grab bag of genres that do n't add up to a whole lot of sense .,neg 643 | "An operatic , sprawling picture that 's entertainingly acted , magnificently shot and gripping enough to sustain most of its 170-minute length .",pos 644 | Should have been someone else -,neg 645 | "The words , ` Frankly , my dear , I do n't give a damn , ' have never been more appropriate .",neg 646 | Too much of the humor falls flat .,neg 647 | A rewarding work of art for only the most patient and challenge-hungry moviegoers .,pos 648 | "Beautifully observed , miraculously unsentimental comedy-drama .",pos 649 | "The tale of Tok ( Andy Lau ) , a sleek sociopath on the trail of O ( Takashi Sorimachi ) , the most legendary of Asian hitmen , is too scattershot to take hold .",neg 650 | The film 's tone and pacing are off almost from the get-go .,neg 651 | Harland Williams is so funny in drag he should consider permanent sex-reassignment .,neu 652 | Something like scrubbing the toilet .,neg 653 | It 's a remarkably solid and subtly satirical tour de force .,pos 654 | "This re-do is so dumb and so exploitative in its violence that , ironically , it becomes everything that the rather clumsy original was railing against .",neg 655 | A rigorously structured and exquisitely filmed drama about a father and son connection that is a brief shooting star of love .,pos 656 | Sade is an engaging look at the controversial eponymous and fiercely atheistic hero .,pos 657 | A rarity among recent Iranian films : It 's a comedy full of gentle humor that chides the absurdity of its protagonist 's plight .,pos 658 | It is great summer fun to watch Arnold and his buddy Gerald bounce off a quirky cast of characters .,pos 659 | "Awesome creatures , breathtaking scenery , and epic battle scenes add up to another ` spectacular spectacle . '",pos 660 | "The entire movie is about a boring , sad man being boring and sad .",neg 661 | "Morton uses her face and her body language to bring us Morvern 's soul , even though the character is almost completely deadpan .",pos 662 | "The jabs it employs are short , carefully placed and dead-center .",pos 663 | "Scores no points for originality , wit , or intelligence .",neg 664 | American Chai encourages rueful laughter at stereotypes only an Indian-American would recognize .,neg 665 | ( Majidi ) makes us think twice about immigrants we see around us every day .,neu 666 | "Building slowly and subtly , the film , sporting a breezy spontaneity and realistically drawn characterizations , develops into a significant character study that is both moving and wise .",pos 667 | "Liotta put on 30 pounds for the role , and has completely transformed himself from his smooth , Goodfellas image .",pos 668 | I ca n't quite recommend it -- it 's too patched together -- but I almost can ; it 's the kind of movie that makes you want to like it .,neu 669 | "For movie lovers as well as opera lovers , Tosca is a real treat .",pos 670 | Teen movies have really hit the skids .,neg 671 | The film 's few ideas are stretched to the point of evaporation ; the whole central section is one big chase that seems to have no goal and no urgency .,neg 672 | How do you spell cliche ?,neg 673 | ... a boring parade of talking heads and technical gibberish that will do little to advance the Linux cause .,neg 674 | "Birthday Girl is an amusing joy ride , with some surprisingly violent moments .",pos 675 | Under 15 ?,neu 676 | "Suffocated by its fussy script and uptight characters , this musty adaptation is all the more annoying since it 's been packaged and sold back to us by Hollywood .",neg 677 | The movie does a good job of laying out some of the major issues that we encounter as we journey through life .,pos 678 | "The title not only describes its main characters , but the lazy people behind the camera as well .",neg 679 | "In an effort , I suspect , not to offend by appearing either too serious or too lighthearted , it offends by just being wishy-washy .",neg 680 | "While the Resident Evil games may have set new standards for thrills , suspense , and gore for video games , the movie really only succeeds in the third of these .",neg 681 | "As befits its title , this PG-13-rated piffle is ultimately as threatening as the Snuggle Fabric Softener bear .",neu 682 | It 's unnerving to see Recoing 's bizzarre reaction to his unemployment .,neu 683 | "Visually imaginative , thematically instructive and thoroughly delightful , it takes us on a roller-coaster ride from innocence to experience without even a hint of that typical kiddie-flick sentimentality .",pos 684 | "A fitfully amusing romp that , if nothing else , will appeal to fans of Malcolm in the Middle and its pubescent star , Frankie Muniz .",pos 685 | "Dull , lifeless , and amateurishly assembled .",neg 686 | Exists then as an occasionally insightful acting exercise .,neu 687 | "( Chaiken 's ) talent lies in an evocative , accurate observation of a distinctive milieu and in the lively , convincing dialogue she creates for her characters .",pos 688 | "Anchored by Friel and Williams 's exceptional performances , the film 's power lies in its complexity .",pos 689 | The second coming of Harry Potter is a film far superior to its predecessor .,pos 690 | It 's fascinating to see how Bettany and McDowell play off each other .,pos 691 | Too much of it feels unfocused and underdeveloped .,neg 692 | Corpus Collosum -- while undeniably interesting -- wore out its welcome well before the end credits rolled about 45 minutes in .,neg 693 | May reawaken discussion of the Kennedy assassination but this fictional film looks made for cable rather than for the big screen .,neg 694 | "There 's something with potential here , but the movie decides , like Lavinia , to go the conservative route .",neu 695 | Reggio 's continual visual barrage is absorbing as well as thought-provoking .,pos 696 | "It 's too self-important and plodding to be funny , and too clipped and abbreviated to be an epic .",neg 697 | "Manages to transcend the sex , drugs and show-tunes plot into something far richer .",pos 698 | "Well-nigh unendurable ... though the picture strains to become cinematic poetry , it remains depressingly prosaic and dull .",neg 699 | "A study in shades of gray , offering itself up in subtle plot maneuvers ...",pos 700 | The characters are interesting and often very creatively constructed from figure to backstory .,pos 701 | Overall the film feels like a low-budget TV pilot that could not find a buyer to play it on the tube .,neg 702 | "No sophomore slump for director Sam Mendes , who segues from Oscar winner to Oscar-winning potential with a smooth sleight of hand .",pos 703 | "For all its technical virtuosity , the film is so mired in juvenile and near-xenophobic pedagogy that it 's enough to make one pine for the day when Godard can no longer handle the rigors of filmmaking .",neg 704 | "This piece of Channel 5 grade trash is , quite frankly , an insult to the intelligence of the true genre enthusiast .",neg 705 | "Pumpkin means to be an outrageous dark satire on fraternity life , but its ambitions far exceed the abilities of writer Adam Larson Broder and his co-director , Tony R. Abrams , in their feature debut .",neg 706 | It 's a lovely film with lovely performances by Buy and Accorsi .,pos 707 | "A better title , for all concerned , might be Swept Under the Rug .",neg 708 | "First-time writer-director Serry shows a remarkable gift for storytelling with this moving , effective little film .",pos 709 | "Does n't offer much besides glib soullessness , raunchy language and a series of brutal set pieces ... that raise the bar on stylized screen violence .",neg 710 | Indifferently implausible popcorn programmer of a movie .,neg 711 | But it still jingles in the pocket .,pos 712 | "Apart from dazzling cinematography , we 've seen just about everything in Blue Crush in one form or the other .",neu 713 | More maudlin than sharp .,neu 714 | My Big Fat Greek Wedding uses stereotypes in a delightful blend of sweet romance and lovingly dished out humor .,pos 715 | A delirious celebration of the female orgasm .,neu 716 | An unclassifiably awful study in self - and audience-abuse .,neg 717 | "Thekids will probably stay amused at the kaleidoscope of big , colorful characters .",pos 718 | "Altogether , this is successful as a film , while at the same time being a most touching reconsideration of the familiar masterpiece .",pos 719 | The movie achieves as great an impact by keeping these thoughts hidden as ... ( Quills ) did by showing them .,pos 720 | "Thanks to Scott 's charismatic Roger and Eisenberg 's sweet nephew , Roger Dodger is one of the most compelling variations on In the Company of Men .",pos 721 | It 's the perfect kind of film to see when you do n't want to use your brain .,neu 722 | "In all , this is a watchable movie that 's not quite the memorable experience it might have been .",neg 723 | "In a way , the film feels like a breath of fresh air , but only to those that allow it in .",pos 724 | "If the movie succeeds in instilling a wary sense of ` there but for the grace of God , ' it is far too self-conscious to draw you deeply into its world .",neg 725 | "The film is based on truth and yet there is something about it that feels incomplete , as if the real story starts just around the corner .",neg 726 | A dumb movie with dumb characters doing dumb things and you have to be really dumb not to see where this is going .,neg 727 | "A pleasant enough romance with intellectual underpinnings , the kind of movie that entertains even as it turns maddeningly predictable .",pos 728 | A beguiling splash of pastel colors and prankish comedy from Disney .,pos 729 | So unremittingly awful that labeling it a dog probably constitutes cruelty to canines .,neg 730 | "A densely constructed , highly referential film , and an audacious return to form that can comfortably sit among Jean-Luc Godard 's finest work .",pos 731 | "The French are rather good at this kind of thing , unlike the Americans , who have a passion for Musketeers , only to spoof them .",neu 732 | Leigh 's film is full of memorable performances from top to bottom .,pos 733 | It provides an honest look at a community striving to anchor itself in new grounds .,pos 734 | "Delivers the same old same old , tarted up with Latin flava and turned out by Hollywood playas .",neg 735 | "In the end , the movie collapses on its shaky foundation despite the best efforts of director Joe Carnahan .",neg 736 | "A poignant , artfully crafted meditation on mortality .",pos 737 | It made me want to wrench my eyes out of my head and toss them at the screen .,neg 738 | "Featuring a dangerously seductive performance from the great Daniel Auteuil , `` Sade '' covers the same period as Kaufmann 's `` Quills '' with more unsettlingly realistic results .",pos 739 | "It 's a demented kitsch mess ( although the smeary digital video does match the muddled narrative ) , but it 's savvy about celebrity and has more guts and energy than much of what will open this year .",pos 740 | "For starters , the story is just too slim .",neg 741 | Binoche makes it interesting trying to find out .,pos 742 | "It 's another video movie photographed like a film , with the bad lighting that 's often written off as indie film naturalism .",neg 743 | "Characters still need to function according to some set of believable and comprehensible impulses , no matter how many drugs they do or how much artistic license Avary employs .",neg 744 | "Stultifyingly , dumbfoundingly , mind-numbingly bad .",neg 745 | "I ca n't say that I liked Homeboy ; it 'd be more accurate to say that I found it intriguing , bizarre , Dogma-like in spots - and quite truthful , in its way .",neu 746 | "The film is powerful , accessible and funny .",pos 747 | More whiny downer than corruscating commentary .,neg 748 | "I still ca n't relate to Stuart : He 's a mouse , for cryin ' out loud , and all he does is milk it with despondent eyes and whine that nobody treats him human enough .",neu 749 | We learn a lot about dying coral and see a lot of life on the reef .,neu 750 | "`` Mostly Martha '' is a bright , light modern day family parable that wears its heart on its sleeve for all to see .",pos 751 | Confirms the nagging suspicion that Ethan Hawke would be even worse behind the camera than he is in front of it .,neg 752 | A sequence of ridiculous shoot - 'em - up scenes .,neg 753 | I 'm just too bored to care .,neg 754 | "As ` chick flicks ' go , this one is pretty miserable , resorting to string-pulling rather than legitimate character development and intelligent plotting .",neg 755 | Nothing is sacred in this gut-buster .,neg 756 | That 's a cheat .,neg 757 | So refreshingly incisive is Grant that for the first time he 'll probably appeal more to guys than to their girlfriends who drag them to this movie for the Hugh factor .,pos 758 | "Creepy , authentic and dark .",neu 759 | "For anyone unfamiliar with pentacostal practices in general and theatrical phenomenon of Hell Houses in particular , it 's an eye-opener .",pos 760 | "Whether writer-director Anne Fontaine 's film is a ghost story , an account of a nervous breakdown , a trip down memory lane , all three or none of the above , it is as seductive as it is haunting .",pos 761 | The film 's essentially over by the meet-cute .,neu 762 | "A fast , funny , highly enjoyable movie .",pos 763 | "It takes a certain kind of horror movie to qualify as ` worse than expected , ' but Ghost Ship somehow manages to do exactly that .",neg 764 | "The weight of the piece , the unerring professionalism of the chilly production , and the fascination embedded in the lurid topic prove recommendation enough .",pos 765 | Hilariously inept and ridiculous .,pos 766 | "Neither Parker nor Donovan is a typical romantic lead , but they bring a fresh , quirky charm to the formula .",pos 767 | "It 's also , clearly , great fun .",pos 768 | The structure the film takes may find Matt Damon and Ben Affleck once again looking for residuals as this officially completes a Good Will Hunting trilogy that was never planned .,pos 769 | "It can not be enjoyed , even on the level that one enjoys a bad slasher flick , primarily because it is dull .",neg 770 | Late Marriage 's stiffness is unlikely to demonstrate the emotional clout to sweep U.S. viewers off their feet .,neg 771 | "It 's not without its pleasures , but I 'll stick with The Tune .",neu 772 | "One of those pictures whose promising , if rather precious , premise is undercut by amateurish execution .",neg 773 | Ahhhh ... revenge is sweet !,pos 774 | "This time Mr. Burns is trying something in the Martin Scorsese street-realist mode , but his self-regarding sentimentality trips him up again .",neg 775 | There 's no emotional pulse to Solaris .,neg 776 | A workshop mentality prevails .,neu 777 | "Stealing Harvard is evidence that the Farrelly Bros. -- Peter and Bobby -- and their brand of screen comedy are wheezing to an end , along with Green 's half-hearted movie career .",neg 778 | "A tender , witty , captivating film about friendship , love , memory , trust and loyalty .",pos 779 | "It takes a strange kind of laziness to waste the talents of Robert Forster , Anne Meara , Eugene Levy , and Reginald VelJohnson all in the same movie .",neg 780 | "It does n't believe in itself , it has no sense of humor ... it 's just plain bored .",neg 781 | "Against all odds in heaven and hell , it creeped me out just fine .",pos 782 | "However it may please those who love movies that blare with pop songs , young science fiction fans will stomp away in disgust .",neg 783 | Taylor appears to have blown his entire budget on soundtrack rights and had nothing left over for jokes .,neg 784 | "For the first time in years , De Niro digs deep emotionally , perhaps because he 's been stirred by the powerful work of his co-stars .",pos 785 | Here 's yet another studio horror franchise mucking up its storyline with glitches casual fans could correct in their sleep .,neg 786 | Unflinchingly bleak and desperate,neg 787 | "Writer-director 's Mehta 's effort has tons of charm and the whimsy is in the mixture , the intoxicating masala , of cultures and film genres .",pos 788 | It deserves to be seen by anyone with even a passing interest in the events shaping the world beyond their own horizons .,pos 789 | "As the two leads , Lathan and Diggs are charming and have chemistry both as friends and lovers .",pos 790 | "Of course , by more objective measurements it 's still quite bad .",neg 791 | "The whole is quite entertaining , but despite its virtues , there is an unsettled feeling to the film .",neu 792 | This is a train wreck of an action film -- a stupefying attempt by the filmmakers to force-feed James Bond into the mindless XXX mold and throw 40 years of cinematic history down the toilet in favor of bright flashes and loud bangs .,neg 793 | Seldom has a movie so closely matched the spirit of a man and his work .,pos 794 | It all adds up to good fun .,pos 795 | "Claude Chabrol has here a thriller without thrills , but that 's okay .",neu 796 | Villeneuve spends too much time wallowing in Bibi 's generic angst ( there are a lot of shots of her gazing out windows ) .,neg 797 | "Despite the 2-D animation , The Wild Thornberrys Movie makes for a surprisingly cinematic experience .",pos 798 | A bloated gasbag thesis grotesquely impressed by its own gargantuan aura of self-importance ...,neg 799 | "It 's so good that its relentless , polished wit can withstand not only inept school productions , but even Oliver Parker 's movie adaptation .",pos 800 | "It provides the grand , intelligent entertainment of a superior cast playing smart people amid a compelling plot .",pos 801 | "With Rabbit-Proof Fence , Noyce has tailored an epic tale into a lean , economical movie .",pos 802 | There are plot holes big enough for Shamu the killer whale to swim through .,neg 803 | "Maud and Roland 's search for an unknowable past makes for a haunting literary detective story , but LaBute pulls off a neater trick in Possession : He makes language sexy .",pos 804 | "There 's just no currency in deriding James Bond for being a cliched , doddering , misogynistic boy 's club .",neu 805 | The subtle strength of `` Elling '' is that it never loses touch with the reality of the grim situation .,pos 806 | Rarely has leukemia looked so shimmering and benign .,neg 807 | "Irwin is a man with enough charisma and audacity to carry a dozen films , but this particular result is ultimately held back from being something greater .",neg 808 | "One of the more irritating cartoons you will see this , or any , year .",neg 809 | A solid film ... but more conscientious than it is truly stirring .,pos 810 | A literate presentation that wonderfully weaves a murderous event in 1873 with murderous rage in 2002 .,pos 811 | There 's enough melodrama in this Magnolia Primavera to make PTA proud yet director Muccino 's characters are less worthy of Puccini than they are of daytime television .,neg 812 | True tale of courage -- and complicity -- at Auschwitz is a harrowing drama that tries to tell of the unspeakable .,pos 813 | "With tightly organized efficiency , numerous flashbacks and a constant edge of tension , Miller 's film is one of 2002 's involvingly adult surprises .",pos 814 | "While its careful pace and seemingly opaque story may not satisfy every moviegoer 's appetite , the film 's final scene is soaringly , transparently moving .",pos 815 | Beneath Clouds is a succinct low-budget film whose compelling characters and intelligent script are exactly what was missing from Rabbit-Proof Fence .,neu 816 | "Portentous and pretentious , The Weight of Water is appropriately titled , given the heavy-handedness of it drama .",neg 817 | "The X potion gives the quickly named Blossom , Bubbles and Buttercup supernatural powers that include extraordinary strength and laser-beam eyes , which unfortunately do n't enable them to discern flimsy screenplays .",neg 818 | "( Naes ) directed the stage version of Elling , and gets fine performances from his two leads who originated the characters on stage .",pos 819 | "You 'll gasp appalled and laugh outraged and possibly , watching the spectacle of a promising young lad treading desperately in a nasty sea , shed an errant tear .",pos 820 | Michael Gerbosi 's script is economically packed with telling scenes .,pos 821 | Just one bad idea after another .,neg 822 | "The continued good chemistry between Carmen and Juni is what keeps this slightly disappointing sequel going , with enough amusing banter -- blessedly curse-free -- to keep both kids and parents entertained .",pos 823 | Falls neatly into the category of Good Stupid Fun .,pos 824 | Vera 's technical prowess ends up selling his film short ; he smoothes over hard truths even as he uncovers them .,neg 825 | Huston nails both the glad-handing and the choking sense of hollow despair .,pos 826 | Candid and comfortable ; a film that deftly balances action and reflection as it lets you grasp and feel the passion others have for their work .,pos 827 | Why make a documentary about these marginal historical figures ?,neg 828 | It confirms Fincher 's status as a film maker who artfully bends technical know-how to the service of psychological insight .,pos 829 | "comes off like a rejected ABC Afterschool Special , freshened up by the dunce of a Screenwriting 101 class .",neg 830 | It 's too bad that the helping hand he uses to stir his ingredients is also a heavy one .,neg 831 | Holm ... embodies the character with an effortlessly regal charisma .,pos 832 | Dilbert without the right-on satiric humor .,neu 833 | "Like all abstract art , the film does not make this statement in an easily accessible way , and -- unless prewarned -- it would be very possible for a reasonably intelligent person to sit through its tidal wave of imagery and not get this vision at all .",neu 834 | The film tries too hard to be funny and tries too hard to be hip .,neg 835 | It all drags on so interminably it 's like watching a miserable relationship unfold in real time .,neg 836 | "Impostor has a handful of thrilling moments and a couple of good performances , but the movie does n't quite fly .",neg 837 | "Not only are the special effects and narrative flow much improved , and Daniel Radcliffe more emotionally assertive this time around as Harry , but the film conjures the magic of author J.K. Rowling 's books .",pos 838 | "\/ But Daphne , you 're too Buff \/ Fred thinks he 's tough \/ And Velma - wow , you 've lost weight !",neg 839 | People cinema at its finest .,pos 840 | Light years \/ several warp speeds \/ levels and levels of dilithium crystals better than the pitiful Insurrection .,pos 841 | Like being trapped at a perpetual frat party ... How can something so gross be so boring ?,neg 842 | Candid Camera on methamphetamines .,neu 843 | "Too slow , too long and too little happens .",neg 844 | "It 's a much more emotional journey than what Shyamalan has given us in his past two movies , and Gibson , stepping in for Bruce Willis , is the perfect actor to take us on the trip .",pos 845 | "A big , gorgeous , sprawling swashbuckler that delivers its diversions in grand , uncomplicated fashion .",pos 846 | "As A Rumor of Angels reveals itself to be a sudsy tub of supernatural hokum , not even Ms. Redgrave 's noblest efforts can redeem it from hopeless sentimentality .",neg 847 | "The film contains no good jokes , no good scenes , barely a moment when Carvey 's Saturday Night Live-honed mimicry rises above the level of embarrassment .",neg 848 | "The humor is forced and heavy-handed , and occasionally simply unpleasant .",neg 849 | "This movie is something of an impostor itself , stretching and padding its material in a blur of dead ends and distracting camera work .",neg 850 | Jacquot 's rendering of Puccini 's tale of devotion and double-cross is more than just a filmed opera .,neu 851 | "Like Leon , it 's frustrating and still oddly likable .",pos 852 | Serving Sara does n't serve up a whole lot of laughs .,neg 853 | "Shaky close-ups of turkey-on-rolls , stubbly chins , liver spots , red noses and the filmmakers new bobbed do draw easy chuckles but lead nowhere .",neg 854 | "Charles ' entertaining film chronicles Seinfeld 's return to stand-up comedy after the wrap of his legendary sitcom , alongside wannabe comic Adams ' attempts to get his shot at the big time .",pos 855 | "While the stoically delivered hokum of Hart 's War is never fun , it 's still a worthy addition to the growing canon of post-Saving Private Ryan tributes to the greatest generation .",neu 856 | "All the amped-up Tony Hawk-style stunts and thrashing rap-metal ca n't disguise the fact that , really , we 've been here , done that .",neg 857 | "It 's not original , and , robbed of the element of surprise , it does n't have any huge laughs in its story of irresponsible cops who love to play pranks .",neg 858 | The quality of the art combined with the humor and intelligence of the script allow the filmmakers to present the biblical message of forgiveness without it ever becoming preachy or syrupy .,pos 859 | The story and structure are well-honed .,pos 860 | But what are adults doing in the theater at all ?,neg 861 | "It 's of the quality of a lesser Harrison Ford movie - Six Days , Seven Nights , maybe , or that dreadful Sabrina remake .",neg 862 | Rarely has so much money delivered so little entertainment .,neg 863 | "Ruzowitzky has taken this mothball-y stuff and made a rather sturdy , old-fashioned entertainment out of it .",neu 864 | Simplistic fluff-ball of whimsy .,neu 865 | "Yes , dull .",neg 866 | "You wo n't miss its messages , but you 'll be entertained as well .",neu 867 | "Skins has a right to yawp , and we have a right to our grains of salt .",neu 868 | "Less dizzying than just dizzy , the jaunt is practically over before it begins .",neg 869 | Old-form moviemaking at its best .,pos 870 | A grimly competent and stolid and earnest military courtroom drama .,pos 871 | A momentary escape from the summer heat and the sedentary doldrums that set in at this time of year .,neu 872 | Involves two mysteries -- one it gives away and the other featuring such badly drawn characters that its outcome hardly matters .,neg 873 | "For this reason and this reason only -- the power of its own steadfast , hoity-toity convictions -- Chelsea Walls deserves a medal .",pos 874 | "Instead , he shows them the respect they are due .",pos 875 | Sacrifices the value of its wealth of archival foot-age with its less-than-objective stance .,neg 876 | "Good film , but very glum .",pos 877 | A coarse and stupid gross-out .,neg 878 | "Bleakly funny , its characters all the more touching for refusing to pity or memorialize themselves .",pos 879 | "There seems to be no clear path as to where the story 's going , or how long it 's going to take to get there .",neg 880 | The minor figures surrounding ( Bobby ) ... form a gritty urban mosaic .,pos 881 | "Works hard to establish rounded characters , but then has nothing fresh or particularly interesting to say about them .",neg 882 | A delightful coming-of-age story .,pos 883 | "Van Wilder does n't bring anything new to the proverbial table , but it does possess a coherence absent in recent crass-a-thons like Tomcats , Freddy Got Fingered , and Slackers .",neu 884 | "An artful , intelligent film that stays within the confines of a well-established genre .",pos 885 | "While it 's nice to watch a movie that has n't been focus-grouped into tedium , Yu 's cinematic alchemy produces nearly as much lead as gold .",neu 886 | "We root for ( Clara and Paul ) , even like them , though perhaps it 's an emotion closer to pity .",pos 887 | A by-the-numbers effort that wo n't do much to enhance the franchise .,neg 888 | Attempts by this ensemble film to impart a message are so heavy-handed that they instead pummel the audience .,neg 889 | "Returning aggressively to his formula of dimwitted comedy and even dimmer characters , Sandler , who also executive produces , has made a film that makes previous vehicles look smart and sassy .",neu 890 | The film makes a fatal mistake : It asks us to care about a young man whose only apparent virtue is that he is not quite as unpleasant as some of the people in his life .,neg 891 | A great ensemble cast ca n't lift this heartfelt enterprise out of the familiar .,neg 892 | A movie with a real anarchic flair .,pos 893 | "Complete lack of originality , cleverness or even visible effort",neg 894 | "Unfortunately , it 's not silly fun unless you enjoy really bad movies .",neg 895 | Made with no discernible craft and monstrously sanctimonious in dealing with childhood loss .,neg 896 | "( W ) hile long on amiable monkeys and worthy environmentalism , Jane Goodall 's Wild Chimpanzees is short on the thrills the oversize medium demands .",neg 897 | Holden Caulfield did it better .,neg 898 | No telegraphing is too obvious or simplistic for this movie .,neg 899 | "If you 're hard up for raunchy college humor , this is your ticket right here .",pos 900 | It 's one pussy-ass world when even killer-thrillers revolve around group therapy sessions .,neg 901 | "This is a good script , good dialogue , funny even for adults .",pos 902 | What was once original has been co-opted so frequently that it now seems pedestrian .,neg 903 | "So unassuming and pure of heart , you ca n't help but warmly extend your arms and yell ` Safe ! '",pos 904 | A movie that hovers somewhere between an acute character study and a trite power struggle .,neu 905 | "The Lion King was a roaring success when it was released eight years ago , but on Imax it seems better , not just bigger .",pos 906 | As unseemly as its title suggests .,pos 907 | "With the exception of some fleetingly amusing improvisations by Cedric the Entertainer as Perry 's boss , there is n't a redeeming moment here .",neg 908 | The end result is a film that 's neither .,neg 909 | "Uses sharp humor and insight into human nature to examine class conflict , adolescent yearning , the roots of friendship and sexual identity .",pos 910 | "Once ( Kim ) begins to overplay the shock tactics and bait-and-tackle metaphors , you may decide it 's too high a price to pay for a shimmering picture postcard .",neg 911 | "It ca n't decide if it wants to be a mystery\/thriller , a romance or a comedy .",neg 912 | The talented and clever Robert Rodriguez perhaps put a little too much heart into his first film and did n't reserve enough for his second .,neg 913 | "With virtually no interesting elements for an audience to focus on , Chelsea Walls is a triple-espresso endurance challenge .",neg 914 | The plot convolutions ultimately add up to nothing more than jerking the audience 's chain .,neg 915 | A quiet treasure -- a film to be savored .,pos 916 | "In execution , this clever idea is far less funny than the original , Killers From Space .",neg 917 | "While ( Hill ) has learned new tricks , the tricks alone are not enough to salvage this lifeless boxing film .",neg 918 | "Due to some script weaknesses and the casting of the director 's brother , the film trails off into inconsequentiality .",neg 919 | Among the year 's most intriguing explorations of alientation .,pos 920 | "If you believe any of this , I can make you a real deal on leftover Enron stock that will double in value a week from Friday .",neg 921 | Manages to be sweet and wickedly satisfying at the same time .,pos 922 | There can be no other explanation .,neu 923 | It 's just filler .,neg 924 | "Despite its title , Punch-Drunk Love is never heavy-handed .",pos 925 | "Even if you do n't think ( Kissinger 's ) any more guilty of criminal activity than most contemporary statesmen , he 'd sure make a courtroom trial great fun to watch .",pos 926 | "Hardly a masterpiece , but it introduces viewers to a good charitable enterprise and some interesting real people .",pos 927 | As vulgar as it is banal .,neg 928 | "Instead of a hyperbolic beat-charged urban western , it 's an unpretentious , sociologically pointed slice of life .",pos 929 | "There ought to be a directing license , so that Ed Burns can have his revoked .",neg 930 | "The film may appear naked in its narrative form ... but it goes deeper than that , to fundamental choices that include the complexity of the Catholic doctrine",pos 931 | "Pretension , in its own way , is a form of bravery .",neu 932 | One of the more intelligent children 's movies to hit theaters this year .,pos 933 | "I do n't mind having my heartstrings pulled , but do n't treat me like a fool .",neg 934 | ` A ' for creativity but comes across more as a sketch for a full-length comedy .,neu 935 | "All that 's missing is the spontaneity , originality and delight .",neg 936 | "Inside the film 's conflict-powered plot there is a decent moral trying to get out , but it 's not that , it 's the tension that keeps you in your seat .",pos 937 | "A coda in every sense , The Pinochet Case splits time between a minute-by-minute account of the British court 's extradition chess game and the regime 's talking-head survivors .",pos 938 | Not really bad so much as distasteful : We need kidnapping suspense dramas right now like we need doomsday thrillers .,neg 939 | There are some wonderfully fresh moments that smooth the moral stiffness with human kindness and hopefulness .,pos 940 | Does little more than play an innocuous game of fill-in - the-blanks with a tragic past .,neg 941 | ... a magnificent drama well worth tracking down .,pos 942 | A subject like this should inspire reaction in its audience ; The Pianist does not .,neg 943 | The movie 's relatively simple plot and uncomplicated morality play well with the affable cast .,pos 944 | "I 'm sure if you 're a Hartley fan , you might enjoy yourself ... Me , I did n't care for it .",neu 945 | Zhang ... has done an amazing job of getting realistic performances from his mainly nonprofessional cast .,pos 946 | The kind of spectacularly misconceived enterprise that only a sophisticated cinephile could have perpetrated .,neu 947 | "The special effects and many scenes of weightlessness look as good or better than in the original , while the Oscar-winning sound and James Horner 's rousing score make good use of the hefty audio system .",pos 948 | "It haunts , horrifies , startles and fascinates ; it is impossible to look away .",pos 949 | LaPaglia 's ability to convey grief and hope works with Weaver 's sensitive reactions to make this a two-actor master class .,pos 950 | Not since Tom Cruise in Risky Business has an actor made such a strong impression in his underwear .,pos 951 | Chokes on its own depiction of upper-crust decorum .,neg 952 | "Although the level of the comedy declines as the movie proceeds , there 's no denying the fun of watching De Niro and Crystal having fun .",neu 953 | "Holy mad maniac in a mask , Splat-Man !",neu 954 | should be seen at the very least for its spasms of absurdist humor .,neu 955 | "Try as I may , I ca n't think of a single good reason to see this movie , even though everyone in my group extemporaneously shouted , ` Thank you ! '",neg 956 | "Whenever its story is n't bogged down by idiocy involving the CIA and a lost U.S. satellite , Hunter -- starring Irwin and his American wife\/colleague , Terri -- is a movie children should enjoy .",neu 957 | "Chilling , well-acted , and finely directed : David Jacobson 's Dahmer .",pos 958 | ... nothing scary here except for some awful acting and lame special effects .,neg 959 | "Every time you look , Sweet Home Alabama is taking another bummer of a wrong turn .",neg 960 | It seems like I have been waiting my whole life for this movie and now I ca n't wait for the sequel .,pos 961 | "Partway through watching this saccharine , Easter-egg-colored concoction , you realize that it is made up of three episodes of a rejected TV show .",neg 962 | "Though only 60 minutes long , the film is packed with information and impressions .",pos 963 | Makes even the claustrophobic on-board quarters seem fun .,neu 964 | "The vivid lead performances sustain interest and empathy , but the journey is far more interesting than the final destination .",pos 965 | Another in-your-face wallow in the lower depths made by people who have never sung those blues .,neg 966 | At once half-baked and overheated .,neg 967 | "A lackluster , unessential sequel to the classic Disney adaptation of J.M. Barrie 's Peter Pan .",neg 968 | "In its best moments , resembles a bad high school production of Grease , without benefit of song .",neg 969 | "At a time when half the so-called real movies are little more than live-action cartoons , it 's refreshing to see a cartoon that knows what it is , and knows the form 's history .",pos 970 | Or doing last year 's taxes with your ex-wife .,neg 971 | "Majidi is an unconventional storyteller , capable of finding beauty in the most depressing places .",pos 972 | "Not the kind of film that will appeal to a mainstream American audience , but there is a certain charm about the film that makes it a suitable entry into the fest circuit .",pos 973 | "... Designed to provide a mix of smiles and tears , `` Crossroads '' instead provokes a handful of unintentional howlers and numerous yawns .",neg 974 | ... with `` The Bourne Identity '' we return to the more traditional action genre .,pos 975 | "The so-inept - it 's - surreal dubbing ( featuring the voices of Glenn Close , Regis Philbin and Breckin Meyer ) brings back memories of cheesy old Godzilla flicks .",neg 976 | "Although Jackson is doubtless reserving the darkest hours for The Return of the King , we long for a greater sense of urgency in the here and now of The Two Towers .",neu 977 | "As surreal as a dream and as detailed as a photograph , as visually dexterous as it is at times imaginatively overwhelming .",pos 978 | "Further proof that the epicenter of cool , beautiful , thought-provoking foreign cinema is smack-dab in the middle of Dubya 's Axis of Evil .",pos 979 | An infectious cultural fable with a tasty balance of family drama and frenetic comedy .,pos 980 | The story and the friendship proceeds in such a way that you 're watching a soap opera rather than a chronicle of the ups and downs that accompany lifelong friendships .,neg 981 | The film will play equally well on both the standard and giant screens .,pos 982 | The film serves as a valuable time capsule to remind us of the devastating horror suffered by an entire people .,neu 983 | Moretti 's compelling anatomy of grief and the difficult process of adapting to loss .,neg 984 | "You wo n't like Roger , but you will quickly recognize him .",neg 985 | "Without non-stop techno or the existential overtones of a Kieslowski morality tale , Maelstrom is just another Winter Sleepers .",neg 986 | A wildly inconsistent emotional experience .,neg 987 | A sequel that 's much too big for its britches .,neg 988 | "Something akin to a Japanese Alice Through the Looking Glass , except that it seems to take itself far more seriously .",pos 989 | "Preaches to two completely different choirs at the same time , which is a pretty amazing accomplishment .",pos 990 | One of the most significant moviegoing pleasures of the year .,pos 991 | 84 minutes of rolling musical back beat and supercharged cartoon warfare .,neu 992 | "A very well-made , funny and entertaining picture .",pos 993 | "This is as respectful a film as Byatt fans could hope for , though lovers of the book may wonder why it 's necessary .",neu 994 | "Crackerjack entertainment -- nonstop romance , music , suspense and action .",pos 995 | It 's a scathing portrayal .,neu 996 | Bogdanovich tantalizes by offering a peep show into the lives of the era 's creme de la celluloid .,pos 997 | "The actors are appealing , but Elysian Fields is idiotic and absurdly sentimental .",neu 998 | There 's not enough here to justify the almost two hours .,neg 999 | "Schaeffer has to find some hook on which to hang his persistently useless movies , and it might as well be the resuscitation of the middle-aged character .",neg 1000 | It 's not the ultimate Depression-era gangster movie .,neg 1001 | Not nearly long enough .,neu 1002 | It 's everything you do n't go to the movies for .,neg 1003 | "Corny , schmaltzy and predictable , but still manages to be kind of heartwarming , nonetheless .",pos 1004 | "A lean , deftly shot , well-acted , weirdly retro thriller that recalls a raft of '60s and '70s European-set spy pictures .",pos 1005 | "By the miserable standards to which the slasher genre has sunk , ... actually pretty good .",neu 1006 | One of the best films of the year with its exploration of the obstacles to happiness faced by five contemporary individuals ... a psychological masterpiece .,pos 1007 | "Warm Water Under a Red Bridge is a quirky and poignant Japanese film that explores the fascinating connections between women , water , nature , and sexuality .",pos 1008 | New Best Friend 's Playboy-mansion presentation of college life is laugh-out-loud ludicrous .,neu 1009 | "A perplexing example of promise unfulfilled , despite many charming moments .",neu 1010 | "This is human comedy at its most amusing , interesting and confirming .",pos 1011 | "It 's not that Kung Pow is n't funny some of the time -- it just is n't any funnier than bad martial arts movies are all by themselves , without all Oedekerk 's impish augmentation .",neg 1012 | "There are simply too many ideas floating around -- part farce , part Sliding Doors , part pop video -- and yet failing to exploit them .",neg 1013 | "Good car chases , great fight scenes , and a distinctive blend of European , American and Asian influences .",pos 1014 | "A swashbuckling tale of love , betrayal , revenge and above all , faith .",pos 1015 | It 's refreshing to see a girl-power movie that does n't feel it has to prove anything .,pos 1016 | "Vera 's three actors -- Molla , Gil and Bardem -- excel in insightful , empathetic performances .",pos 1017 | I had to look away - this was god awful .,neg 1018 | Exactly what it claims to be -- a simple diversion for the kids .,neu 1019 | "There 's something auspicious , and daring , too , about the artistic instinct that pushes a majority-oriented director like Steven Spielberg to follow A.I. with this challenging report so liable to unnerve the majority .",pos 1020 | "Although German cooking does not come readily to mind when considering the world 's best cuisine , Mostly Martha could make Deutchland a popular destination for hungry tourists .",pos 1021 | Funny but perilously slight .,pos 1022 | "Given how heavy-handed and portent-heavy it is , this could be the worst thing Soderbergh has ever done .",neg 1023 | "Fun , flip and terribly hip bit of cinematic entertainment .",pos 1024 | It 's one heck of a character study -- not of Hearst or Davies but of the unique relationship between them .,pos 1025 | "If you 're a WWF fan , or you related to the people who watched the robots getting butchered in A.I. , you 'll probably like Rollerball .",neu 1026 | "Determined to be fun , and bouncy , with energetic musicals , the humor did n't quite engage this adult .",neg 1027 | One of the smartest takes on singles culture I 've seen in a long time .,pos 1028 | "A smart , witty follow-up .",pos 1029 | Two hours fly by -- opera 's a pleasure when you do n't have to endure intermissions -- and even a novice to the form comes away exhilarated .,pos 1030 | The movie fails to live up to the sum of its parts .,neg 1031 | "Not only unfunny , but downright repellent .",neg 1032 | Filmmakers who can deftly change moods are treasures and even marvels .,pos 1033 | A TV style murder mystery with a few big screen moments ( including one that seems to be made for a different film altogether ) .,neg 1034 | "If it 's seldom boring , well , it 's also rarely coherent .",neu 1035 | Remember the kind of movie we were hoping `` Ecks vs. Sever '' or `` xXx '' was going to be ?,neu 1036 | Every nanosecond of the The New Guy reminds you that you could be doing something else far more pleasurable .,neg 1037 | "Prancing his way through the tailor-made part of a male hooker approaching the end of his vitality , Jagger obviously relishes every self-mocking moment .",neu 1038 | "The messages of compassion and mercy are clearly , squarely and specifically expounded via computer animated Old Testament tale of Jonah and the Whale .",neu 1039 | Burns never really harnesses to full effect the energetic cast .,neg 1040 | Scorsese does n't give us a character worth giving a damn about .,neg 1041 | "Though Perry and Hurley make inspiring efforts to breathe life into the disjointed , haphazard script by Jay Scherick and David Ronn , neither the actors nor director Reginald Hudlin can make it more than fitfully entertaining .",neg 1042 | "Nasty , ugly , pointless and depressing , even if you hate clowns .",neu 1043 | "Woody Allen 's latest is an ambling , broad comedy about all there is to love -- and hate -- about the movie biz .",pos 1044 | The Iditarod lasts for days - this just felt like it did .,neg 1045 | "Entertains by providing good , lively company .",pos 1046 | It 's a coming-of-age story we 've all seen bits of in other films -- but it 's rarely been told with such affecting grace and cultural specificity .,neu 1047 | "Jose Campanella delivers a loosely autobiographical story brushed with sentimentality but brimming with gentle humor , bittersweet pathos , and lyric moments that linger like snapshots of memory .",pos 1048 | A giggle-inducing comedy with snappy dialogue and winning performances by an unlikely team of Oscar-winners : Susan Sarandon and Goldie Hawn .,pos 1049 | "And the lesson , in the end , is nothing new .",neg 1050 | "The script kicks in , and Mr. Hartley 's distended pace and foot-dragging rhythms follow .",neg 1051 | ... the movie is just a plain old monster .,neg 1052 | "( Serry ) wants to blend politics and drama , an admirable ambition .",pos 1053 | "This is wild surreal stuff , but brilliant and the camera just kind of sits there and lets you look at this and its like you 're going from one room to the next and none of them have any relation to the other .",pos 1054 | "What is 100 % missing here is a script of even the most elemental literacy , an inkling of genuine wit , and anything resembling acting .",neg 1055 | "If looking for a thrilling sci-fi cinematic ride , do n't settle for this Imposter .",neg 1056 | "It 's a scattershot affair , but when it hits its mark it 's brilliant .",pos 1057 | "And when you 're talking about a slapstick comedy , that 's a pretty big problem .",neg 1058 | "For all the writhing and wailing , tears , rage and opium overdoses , there 's no sense of actual passion being washed away in love 's dissolution .",neg 1059 | "Because of an unnecessary and clumsy last scene , ` Swimfan ' left me with a very bad feeling .",neg 1060 | "does paint some memorable images ... , but Makhmalbaf keeps her distance from the characters",pos 1061 | Manages to show life in all of its banality when the intention is quite the opposite .,neg 1062 | "A gripping , searing portrait of a lost soul trying to find her way through life .",neu 1063 | "If the first Men in Black was money , the second is small change .",neg 1064 | "Byler reveals his characters in a way that intrigues and even fascinates us , and he never reduces the situation to simple melodrama .",pos 1065 | I 'd have to say the star and director are the big problems here .,neg 1066 | Good old-fashioned slash-and-hack is back !,pos 1067 | It offers little beyond the momentary joys of pretty and weightless intellectual entertainment .,neg 1068 | "It 's somewhat clumsy and too lethargically paced -- but its story about a mysterious creature with psychic abilities offers a solid build-up , a terrific climax , and some nice chills along the way .",neg 1069 | For AIDS and Africa are nothing more than part of the scenery .,neu 1070 | Hit and miss as far as the comedy goes and a big ole ' miss in the way of story .,neg 1071 | "If this disposable tissue has one wild card , it 's John Turturro , who 's simply fab as a Spanish butler with a foot fetish .",neu 1072 | "The last 20 minutes are somewhat redeeming , but most of the movie is the same teenage American road-trip drek we 've seen before - only this time you have to read the fart jokes",neg 1073 | "Full of witless jokes , dealing in broad stereotypes and outrageously unbelievable scenarios , and saddled with a general air of misogyny",neu 1074 | "Generally , Clockstoppers will fulfill your wildest fantasies about being a different kind of time traveler , while happily killing 94 minutes .",pos 1075 | "Prurient playthings aside , there 's little to love about this English trifle .",neg 1076 | That 's pure PR hype .,neg 1077 | "A breezy romantic comedy that has the punch of a good sitcom , while offering exceptionally well-detailed characters .",pos 1078 | "The Movie is what happens when you blow up small potatoes to 10 times their natural size , and it ai n't pretty .",neg 1079 | A hamfisted romantic comedy that makes our girl the hapless facilitator of an extended cheap shot across the Mason-Dixon line .,neg 1080 | At least one scene is so disgusting that viewers may be hard pressed to retain their lunch .,neg 1081 | "Uncommonly stylish but equally silly ... the picture fails to generate much suspense , nor does it ask searching enough questions to justify its pretensions .",neg 1082 | Or emptying rat traps .,neg 1083 | "It has the charm of the original American road movies , feasting on the gorgeous , ramshackle landscape of the filmmaker 's motherland .",pos 1084 | I 'll bet the video game is a lot more fun than the film .,neg 1085 | "Although Huppert 's intensity and focus has a raw exhilaration about it , The Piano Teacher is anything but fun .",neg 1086 | The film 's snags and stumblings are more than compensated for by its wryly subversive tone .,neu 1087 | Travels a fascinating arc from hope and euphoria to reality and disillusionment .,pos 1088 | "Though Catch Me If You Can is n't badly made , the fun slowly leaks out of the movie .",neu 1089 | "There 's too much falseness to the second half , and what began as an intriguing look at youth fizzles into a dull , ridiculous attempt at heart-tugging .",neg 1090 | But is that knot from dramatic tension or a symptom of artistic malnutrition ?,neu 1091 | My thoughts were focused on the characters .,pos 1092 | One from the heart .,pos 1093 | "As a tolerable diversion , the film suffices ; a Triumph , however , it is not .",neu 1094 | "While the script starts promisingly , it loses steam towards the middle and never really develops beyond attacking obvious target .",neu 1095 | "Sometimes it feels as if it might have been made in the '70s or '80s , and starred Chevy Chase and Goldie Hawn .",neu 1096 | "Just as moving , uplifting and funny as ever .",pos 1097 | Davis ... is so enamored of her own creation that she ca n't see how insufferable the character is .,neg 1098 | "An exhilarating futuristic thriller-noir , Minority Report twists the best of technology around a gripping story , delivering a riveting , pulse intensifying escapist adventure of the first order",pos 1099 | I got a headache watching this meaningless downer .,neg 1100 | If you dig on David Mamet 's mind tricks ... rent this movie and enjoy !,pos 1101 | --------------------------------------------------------------------------------