[AI504] Practice 09: Recurrent Neural Networks

이채연·2023년 3월 23일
0

AI504

목록 보기
18/28

Week 9: RNN GRU Seq2seq

1. RNN and GRU.

1-1. RNN : Recurrent Neural Network

1-2. GRU : Gated Recurrent Units

1-3. Padding

2. Seq2seq model with attention.

2-1. Encoder

2-2. Decoder with Attention

2-3. Training

2-4. Evaluation

reference
https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html \
https://towardsdatascience.com/sentiment-analysis-using-lstm-step-by-step-50d074f09948

1. Implement RNN and GRU

0) Import required packages

import torch
import torch.nn as nn
import torch.nn.functional as F

1) Recurrent Neural Network (RNN)

Before we start, let's implement the simple RNN.

picture

import torch.nn as nn
import torch.nn.functional as F

class RNNCell(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(RNNCell, self).__init__()

        self.hidden_size = hidden_size
        self.W = nn.Linear(hidden_size, hidden_size, bias=True)
        self.U = nn.Linear(input_size, hidden_size, bias=True)
        self.V = nn.Linear(hidden_size, output_size, bias=True)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, x, h):
        h = F.tanh(self.W(h)+self.U(x))
        o = self.V(h)
        y = self.softmax(o)

        return y, h
## Single RNN Cell
# input_size = 3
# hidden_size = 4

x = torch.randn(1, 3)   # batch_size, feature
h0 = torch.randn(1, 4)  # batch_size, hidden_size 
rnn1 = RNNCell(input_size = 3, hidden_size = 4, output_size = 4)
output, hidden = rnn1(x, h0)

print('output shape:', output.shape)
print('output:', output.data)
print('hidden shape:', hidden.shape)
print('hidden:', hidden.data)
output shape: torch.Size([1, 4])
output: tensor([[-1.9828, -1.4582, -1.2161, -1.0987]])
hidden shape: torch.Size([1, 4])
hidden: tensor([[ 0.9662,  0.2798,  0.8023, -0.5260]])


/usr/local/lib/python3.9/dist-packages/torch/nn/functional.py:1956: UserWarning: nn.functional.tanh is deprecated. Use torch.tanh instead.
  warnings.warn("nn.functional.tanh is deprecated. Use torch.tanh instead.")

In the following sections, we will learn basic usage of pytorch RNN layer with some example codes and practices.

PARAMETERS

  • input_size: the number of expected features in the input x
  • hidden_size: the number of features in the hidden state h
  • num_layers: number of recurrent layers
  • bidirectional: if True, becomes bidirectional RNN
  • batch_first: if True, the input and output tensors are provided as (batch, seq, feature)

INPUT

  • input: data of shape (batch_size, seq_len, input_size) if batch_first = True
  • h0: tensor containing the initial hidden state of shape (num_layers * num_directions, batch_size, hidden_size)

OUTPUT

  • output: tensor containing the output features from the last layer of the RNN, for each t provided as (batch, seq, hidden_size) if batch_first = True
  • hidden: tensor containing the hidden state for the last time step, provided as (batch, num_layers * num_directionals, hidden_size) if batch_first = True

Detailed explanation and default values are available on the official site
(https://pytorch.org/docs/stable/generated/torch.nn.RNN.html)

## RNN with 2 layers
# input_size = 3
# seq_len = 5
# hidden_size = 4

x = torch.randn(1, 5, 3)   # batch_size, seq_len, feature
h0 = torch.randn(2, 1, 4) # num_layers * num_directions, batch_size, hidden_size 
rnn2 = nn.RNN(input_size=3, hidden_size=4, num_layers=2, bidirectional = False, batch_first=True)
output, hidden = rnn2(x, h0)
print('RNN with 2 layers')
print('output shape:', output.shape)
print('output:', output.data)
print('hidden shape:', hidden.shape)
print('hidden:', hidden.data)
RNN with 2 layers
output shape: torch.Size([1, 5, 4])
output: tensor([[[-0.7107, -0.0901,  0.5273, -0.4067],
         [-0.5118,  0.2032,  0.7410,  0.5709],
         [-0.8290,  0.0247,  0.6061, -0.1309],
         [-0.4607, -0.0221,  0.8550,  0.6106],
         [-0.6431,  0.0912,  0.7876,  0.4497]]])
hidden shape: torch.Size([2, 1, 4])
hidden: tensor([[[ 0.7471, -0.1726,  0.0188, -0.0329]],

        [[-0.6431,  0.0912,  0.7876,  0.4497]]])
## Bidirectional RNN
# input_size = 3
# seq_len = 5
# hidden_size = 4

x = torch.randn(1, 5, 3)   # batch_size, seq_len, feature
h0 = torch.randn(2, 1, 4) # num_layers * num_directions, batch_size, hidden_size 
rnn3 = nn.RNN(input_size=3, hidden_size=4, num_layers=1, bidirectional=True, batch_first=True)
output, hidden = rnn3(x, h0)
print('Bidirectional RNN')
print('output shape:', output.shape)
print('output:', output.data)
print('hidden shape:', hidden.shape)
print('hidden:', hidden.data)
Bidirectional RNN
output shape: torch.Size([1, 5, 8])
output: tensor([[[-0.6564,  0.1975,  0.2298,  0.2368,  0.2386, -0.6305, -0.2053,
          -0.0575],
         [ 0.5862,  0.5628, -0.3403, -0.1892,  0.4985, -0.0467, -0.4683,
          -0.4001],
         [-0.3996,  0.5191,  0.1306,  0.6954,  0.3795, -0.4883,  0.1459,
           0.1618],
         [-0.3455, -0.2594, -0.7693, -0.3756,  0.0190,  0.1552,  0.3396,
          -0.4070],
         [ 0.7284,  0.7610,  0.4701,  0.2799, -0.5761,  0.6649,  0.3688,
          -0.7002]]])
hidden shape: torch.Size([2, 1, 4])
hidden: tensor([[[ 0.7284,  0.7610,  0.4701,  0.2799]],

        [[ 0.2386, -0.6305, -0.2053, -0.0575]]])
###########################################################################################################
###TO-DO: Make your own RNN!                                   
###Here, you can make your own RNN changing the dimensions, number of layers, bidirectional etc.


class RNN(nn.Module):
  def __init__(self, input_size, hidden_size, output_size, num_layers, bidirectional):
    super().__init__()
    self.input_size, self.hidden_size, self.output_size = input_size, hidden_size, output_size
    self.num_layers = num_layers
    self.num_directions = 2 if bidirectional else 1

    self.rnn = nn.RNN(input_size=self.input_size, hidden_size = self.hidden_size, num_layers=self.num_layers, bidirectional=bidirectional, batch_first=True)
    self.output_fc = nn.Linear(self.hidden_size * self.num_directions, output_size)

  def forward(self, x):
    self.batch_size = x.size(0)
    h0 = self.init_hidden()
    output, hidden = self.rnn(x, h0)
    output = self.output_fc(output[:, -1, :])
    return output

  def init_hidden(self):
    return torch.zeros(self.num_layers * self.num_directions, self.batch_size, self.hidden_size)
## Run your own RNN!
input_size = 3 ; hidden_size = 4; output_size = 2
num_layers = 1
bidirectional = True

x = torch.randn(1, 4, input_size)   # batch_size, seq_len, input_size

rnn = RNN(input_size, hidden_size, output_size, num_layers, bidirectional)
output = rnn(x)

print('output shape:', output.shape)
print('output: ', output.data)
output shape: torch.Size([1, 2])
output:  tensor([[0.2376, 0.0386]])

2) Gated Recurrent Unit (GRU)

In PyTorch, GRU layer is given with the pytorch torch.nn.GRU package. In this section, we will learn basic usage of pytorch GRU layer with some example codes and practices.

PARAMETERS

  • input_size: the number of expected features in the input x
  • hidden_size: the number of features in the hidden state h
  • num_layers: number of recurrent layers
  • bidirectional: if True, becomes bidirectional RNN
  • batch_first: if True, then the input and output tensors are provided as (batch, seq, feature)

INPUT

  • input: data of shape (batch_size, seq_len, input_size) if batch_first = True
  • h0: tensor containing the initial hidden state of shape (num_layers * num_directions, batch_size, hidden_size)

OUTPUT

  • output: tensor containing the output features from the last layer of the RNN, for each t provided as (batch, seq, hidden_size) if batch_first = True
  • hidden: tensor containing the hidden state for the last time step, provided as (batch_size, num_layers * num_directionals, hidden_size) if batch_first = True

Detailed explanation and default values are available on the official site
(https://pytorch.org/docs/stable/generated/torch.nn.GRU.html)

# GRU with 1 layer
# input_size = 3
# seq_len = 5
# hidden_size = 4

x = torch.randn(1, 5, 3)   # batch_size, seq_len, feature
h0 = torch.randn(1, 1, 4)  # num_layers * num_directions, batch_size, hidden_size 
gru1 = nn.GRU(input_size = 3, hidden_size = 4, num_layers = 1, bidirectional = False, batch_first = True)
output, hidden = gru1(x, h0)

print('GRU with 1 layer')
print('output shape:', output.shape)
print('output:', output.data)
print('hidden shape:', hidden.shape)
print('hidden:', hidden.data)
GRU with 1 layer
output shape: torch.Size([1, 5, 4])
output: tensor([[[ 0.0767, -0.8984, -0.2289, -0.1309],
         [ 0.3779, -0.6262, -0.1120, -0.3198],
         [-0.2339, -0.6223,  0.0238,  0.1569],
         [-0.2661, -0.5978, -0.0531,  0.4618],
         [-0.5216, -0.6345, -0.0758,  0.6766]]])
hidden shape: torch.Size([1, 1, 4])
hidden: tensor([[[-0.5216, -0.6345, -0.0758,  0.6766]]])
# GRU with 2 layer
# input_size = 3
# seq_len = 5
# hidden_size = 4

x = torch.randn(1, 5, 3)   # batch_size, seq_len, feature
h0 = torch.randn(2, 1, 4) # num_layers * num_directions, batch_size, hidden_size 
gru2 = nn.GRU(input_size=3, hidden_size=4, num_layers=2, bidirectional = False, batch_first=True)
output, hidden = gru2(x, h0)
print('GRU with 2 layers')
print('output shape:', output.shape)
print('output:', output.data)
print('hidden shape:', hidden.shape)
print('hidden:', hidden.data)
print()
GRU with 2 layers
output shape: torch.Size([1, 5, 4])
output: tensor([[[ 0.9352, -0.7128, -0.6386,  0.2451],
         [ 0.7871, -0.2688, -0.5574,  0.1923],
         [ 0.6583, -0.2632, -0.4675,  0.1633],
         [ 0.5941, -0.3615, -0.2825,  0.1540],
         [ 0.5390, -0.4207, -0.2395,  0.1434]]])
hidden shape: torch.Size([2, 1, 4])
hidden: tensor([[[ 0.1818, -0.2955,  0.3163,  0.3594]],

        [[ 0.5390, -0.4207, -0.2395,  0.1434]]])
# bidirectional GRU
# input_size = 3
# seq_len = 5
# hidden_size = 4

x = torch.randn(1, 5, 3)   # batch_size, seq_len, feature
h0 = torch.randn(2, 1, 4) # num_layers * num_directions, batch_size, hidden_size 
gru3 = nn.GRU(input_size=3, hidden_size=4, num_layers=1, bidirectional=True, batch_first=True)
output, hidden = gru3(x, h0)
print('Bidirectional GRU')
print('output shape:', output.shape)
print('output:', output.data)
print('hidden shape:', hidden.shape)
print('hidden:', hidden.data)
Bidirectional GRU
output shape: torch.Size([1, 5, 8])
output: tensor([[[-0.2406,  0.5601, -0.0119,  0.4332,  0.4604, -0.4934,  0.3282,
          -0.3649],
         [-0.2339,  0.5399, -0.0937, -0.0575,  0.6697,  0.0072,  0.3696,
          -0.3461],
         [-0.0217,  0.2809,  0.0145,  0.0782,  0.7410,  0.4955,  0.1322,
          -0.5562],
         [ 0.0898,  0.2370, -0.1471,  0.3458,  0.5239, -0.0251,  0.0267,
          -0.8583],
         [ 0.4711, -0.0497,  0.1791,  0.3069,  0.3998, -0.0756, -0.2502,
          -1.0351]]])
hidden shape: torch.Size([2, 1, 4])
hidden: tensor([[[ 0.4711, -0.0497,  0.1791,  0.3069]],

        [[ 0.4604, -0.4934,  0.3282, -0.3649]]])
################################################################
### TODO: Make your own GRU!  
### Here, you can make your own GRU changing the dimensions, number of layers, bidirectional etc. 

class GRU(nn.Module):
  def __init__(self, input_size, hidden_size, output_size, num_layers, bidirectional):
    super().__init__()
    self.input_size, self.hidden_size, self.output_size = input_size, hidden_size, output_size
    self.num_layers = num_layers
    self.num_directions = 2 if bidirectional else 1

    self.gru = nn.GRU(input_size=self.input_size, hidden_size = self.hidden_size, num_layers=self.num_layers, bidirectional=bidirectional, batch_first=True)
    self.output_fc = nn.Linear(self.hidden_size * self.num_directions, output_size)

  def forward(self, x):
    self.batch_size = x.size(0)
    h0 = self.init_hidden()
    output, hidden = self.gru(x, h0)
    output = self.output_fc(output[:, -1, :])
    return output

  def init_hidden(self):
    return torch.zeros(self.num_layers * self.num_directions, self.batch_size, self.hidden_size)
## Run your own GRU!
input_size = 3 ; hidden_size = 4; output_size = 2
num_layers = 1
bidirectional = True

x = torch.randn(1, 4, input_size)   # batch_size, seq_len, input_size

gru = GRU(input_size, hidden_size, output_size, num_layers, bidirectional)
output = gru(x)

print('output shape:', output.shape)
print('output: ', output.data)
output shape: torch.Size([1, 2])
output:  tensor([[0.2999, 0.2196]])

3) Padding

We can make better use of the GPU by training on batches of many sequences at once, but doing so brings up the question of how to deal with sequences of variable lengths. The simple solution is to "pad" the shorter sentences with some padding symbol (in this case 0).

from string import punctuation
from collections import Counter
import numpy as np

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, TensorDataset

import random
!wget https://www.dropbox.com/s/oyaa5mbla6ubsnq/reviews.txt
!wget https://www.dropbox.com/s/zlg9mdukkwo241j/labels.txt
--2023-03-23 05:05:38--  https://www.dropbox.com/s/oyaa5mbla6ubsnq/reviews.txt
Resolving www.dropbox.com (www.dropbox.com)... 162.125.81.18, 2620:100:6016:18::a27d:112
Connecting to www.dropbox.com (www.dropbox.com)|162.125.81.18|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: /s/raw/oyaa5mbla6ubsnq/reviews.txt [following]
--2023-03-23 05:05:38--  https://www.dropbox.com/s/raw/oyaa5mbla6ubsnq/reviews.txt
Reusing existing connection to www.dropbox.com:443.
HTTP request sent, awaiting response... 302 Found
Location: https://uc26ba05440661fbcddd22546bd0.dl.dropboxusercontent.com/cd/0/inline/B4xOcbZhQKHPx649_PZycRs3pZ_Gca6y3kR04ZOptJWlnzN2eXXYpGiviGqijskCwAR8hgzHaNck6uBnkEJeOsmX9djk9GK5GAheGerB4WcdapSOFkDBL9yek-Z90ZITPkJB564iGB3llwEihTIPG8z67eRxookpSrqyCprS8gZOHg/file# [following]
--2023-03-23 05:05:38--  https://uc26ba05440661fbcddd22546bd0.dl.dropboxusercontent.com/cd/0/inline/B4xOcbZhQKHPx649_PZycRs3pZ_Gca6y3kR04ZOptJWlnzN2eXXYpGiviGqijskCwAR8hgzHaNck6uBnkEJeOsmX9djk9GK5GAheGerB4WcdapSOFkDBL9yek-Z90ZITPkJB564iGB3llwEihTIPG8z67eRxookpSrqyCprS8gZOHg/file
Resolving uc26ba05440661fbcddd22546bd0.dl.dropboxusercontent.com (uc26ba05440661fbcddd22546bd0.dl.dropboxusercontent.com)... 162.125.81.15, 2620:100:6031:15::a27d:510f
Connecting to uc26ba05440661fbcddd22546bd0.dl.dropboxusercontent.com (uc26ba05440661fbcddd22546bd0.dl.dropboxusercontent.com)|162.125.81.15|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 114035 (111K) [text/plain]
Saving to: ‘reviews.txt’

reviews.txt         100%[===================>] 111.36K  --.-KB/s    in 0.004s  

2023-03-23 05:05:39 (30.6 MB/s) - ‘reviews.txt’ saved [114035/114035]

--2023-03-23 05:05:39--  https://www.dropbox.com/s/zlg9mdukkwo241j/labels.txt
Resolving www.dropbox.com (www.dropbox.com)... 162.125.64.18, 2620:100:6016:18::a27d:112
Connecting to www.dropbox.com (www.dropbox.com)|162.125.64.18|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: /s/raw/zlg9mdukkwo241j/labels.txt [following]
--2023-03-23 05:05:40--  https://www.dropbox.com/s/raw/zlg9mdukkwo241j/labels.txt
Reusing existing connection to www.dropbox.com:443.
HTTP request sent, awaiting response... 302 Found
Location: https://ucb97082b012e4172848bba79ed6.dl.dropboxusercontent.com/cd/0/inline/B4w6Xkcr4XTNQAqu1PVJ3gTMBIOL1MOUSVuDWv9s9Zyj1KnO49BSMCDZjVvS-KqVpoyVYPDWiBxXIIWmWoy9BTOLkyPBYtSmTf0PLwoAjcRq0Gysx8wmzkNOI4H5MgSCh0TRcsGTqXjR4sLR_7sYd8T_6jukIJCBP8vaATGZrPfWpg/file# [following]
--2023-03-23 05:05:41--  https://ucb97082b012e4172848bba79ed6.dl.dropboxusercontent.com/cd/0/inline/B4w6Xkcr4XTNQAqu1PVJ3gTMBIOL1MOUSVuDWv9s9Zyj1KnO49BSMCDZjVvS-KqVpoyVYPDWiBxXIIWmWoy9BTOLkyPBYtSmTf0PLwoAjcRq0Gysx8wmzkNOI4H5MgSCh0TRcsGTqXjR4sLR_7sYd8T_6jukIJCBP8vaATGZrPfWpg/file
Resolving ucb97082b012e4172848bba79ed6.dl.dropboxusercontent.com (ucb97082b012e4172848bba79ed6.dl.dropboxusercontent.com)... 162.125.64.15, 2620:100:6016:15::a27d:10f
Connecting to ucb97082b012e4172848bba79ed6.dl.dropboxusercontent.com (ucb97082b012e4172848bba79ed6.dl.dropboxusercontent.com)|162.125.64.15|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4499 (4.4K) [text/plain]
Saving to: ‘labels.txt’

labels.txt          100%[===================>]   4.39K  --.-KB/s    in 0s      

2023-03-23 05:05:42 (542 MB/s) - ‘labels.txt’ saved [4499/4499]
with open ('reviews.txt', 'r') as f:
  reviews = f.read()
with open('labels.txt', 'r') as f:
  labels = f.read()

print(reviews[:50])
print()
print(labels[:26])
The characters are unlikeable and the script is aw

negative
negative
negative

0) Preprocessing

# lower case
reviews = reviews.lower()

# remove punctuation
all_text = ''.join([c for c in reviews if c not in punctuation])

# create list of reviews
reviews_split = all_text.split('\n')
labels_split = labels.split('\n')
print ('Number of reviews :', len(reviews_split))

## tokenize - create vocab to int mapping dictionary
all_text2 = ' '.join(reviews_split)
# create a list of words
words = all_text2.split()
# Count all the words using Counter Method
count_words = Counter(words)

total_words = len(words)
sorted_words = count_words.most_common(total_words)
print("count_words")
print(count_words)
print()

# make vocab2int
#There is a small trick here, in this mapping index will start from 0 
#i.e. mapping of ‘the’ will be 0. But later on we are going to do padding for shorter reviews and conventional choice for padding is 0. So we need to start this indexing from 1
vocab_to_int = {w:i+1 for i, (w,c) in enumerate(sorted_words)}     
print("vocab_to_int")
print(vocab_to_int)
Number of reviews : 500
count_words
Counter({'the': 996, 'a': 637, 'this': 547, 'and': 502, 'it': 491, 'i': 460, 'is': 446, 'of': 429, 'movie': 411, 'to': 379, 'was': 239, 'in': 236, 'that': 180, 'film': 166, 'you': 161, 'but': 155, 'one': 144, 'for': 140, 'not': 139, 'with': 136, 'br': 135, 'its': 127, 'on': 121, 'bad': 117, 'good': 112, 'as': 109, 'have': 109, 'be': 97, 'are': 92, 'great': 90, 'so': 85, 'if': 85, 'at': 84, 'like': 84, 'my': 83, 'all': 81, 'very': 80, 'see': 79, 'just': 79, 'an': 79, 'time': 76, 'from': 73, 'acting': 68, 'by': 65, 'ever': 65, 'seen': 65, 'movies': 63, 'dont': 63, 'watch': 61, 'what': 60, 'story': 60, 'me': 59, 'has': 58, 'really': 57, 'plot': 56, 'no': 56, 'some': 55, 'worst': 54, 'about': 54, 'out': 53, 'there': 52, 'only': 51, 'even': 51, 'will': 51, 'they': 49, 'too': 48, 'more': 46, 'when': 44, 'love': 44, 'much': 43, 'or': 43, 'can': 42, 'who': 42, 'he': 42, 'made': 40, 'his': 39, 'best': 38, 'had': 38, 'would': 38, 'were': 38, 'think': 37, 'up': 37, 'your': 36, 'how': 35, 'do': 35, 'saw': 33, 'people': 33, 'make': 33, 'go': 33, 'funny': 33, 'waste': 31, 'first': 31, 'could': 30, 'ive': 30, 'well': 30, 'watching': 29, 'because': 29, 'than': 29, 'better': 29, 'terrible': 28, 'did': 28, 'script': 27, 'any': 27, 'didnt': 27, 'way': 27, 'cast': 27, 'cant': 27, 'tv': 27, 'again': 26, 'into': 26, 'been': 25, 'never': 25, 'most': 25, 'get': 24, 'real': 24, 'comedy': 24, 'little': 24, 'characters': 23, 'actors': 23, 'special': 23, 'im': 23, 'why': 23, 'fun': 22, 'still': 22, 'effects': 21, 'should': 21, 'years': 21, 'after': 21, 'minutes': 21, 'boring': 21, 'films': 21, 'say': 20, 'thing': 20, 'end': 20, 'scenes': 20, 'their': 20, 'her': 20, 'money': 19, 'those': 19, 'know': 19, 'other': 19, 'got': 19, 'then': 19, 'rent': 19, 'over': 19, 'does': 19, 'nothing': 19, 'here': 18, '10': 18, 'life': 18, 'she': 18, 'wonderful': 18, 'performance': 18, 'being': 17, 'video': 17, 'want': 17, 'look': 17, 'which': 17, 'many': 17, 'also': 17, 'makes': 17, 'lot': 17, 'long': 17, 'poor': 16, 'worth': 16, 'whole': 16, 'classic': 16, 'old': 16, 'another': 16, 'interesting': 16, 'such': 16, 'character': 16, 'work': 16, 'scene': 16, 'ending': 15, 'true': 15, 'absolutely': 15, 'them': 15, 'horrible': 15, 'may': 15, 'especially': 15, 'we': 15, 'looks': 15, 'give': 15, 'humor': 15, 'awful': 14, 'while': 14, 'every': 14, 'least': 14, 'without': 14, 'liked': 14, 'believe': 14, 'pretty': 14, 'now': 13, 'actor': 13, 'horror': 13, 'sorry': 13, '1': 13, 'watched': 13, 'big': 13, 'wasnt': 13, 'avoid': 13, 'hard': 13, 'once': 13, 'times': 13, 'everyone': 13, 'music': 13, 'enjoyed': 13, 'excellent': 13, 'definitely': 12, 'far': 12, 'few': 12, 'same': 12, 'totally': 12, 'recommend': 12, 'written': 12, 'before': 12, 'doesnt': 12, 'must': 12, 'dialogue': 12, 'original': 12, 'put': 12, 'these': 12, 'director': 12, 'favorite': 12, 'am': 11, 'fan': 11, 'two': 11, 'stupid': 11, 'sequel': 11, 'seeing': 11, 'predictable': 11, 'enjoy': 11, 'last': 11, 'maybe': 11, 'action': 11, 'where': 11, 'thought': 11, 'sense': 11, 'year': 11, 'instead': 11, 'laugh': 11, 'found': 11, 'off': 11, 'shows': 11, 'going': 10, 'screen': 10, 'performances': 10, 'simply': 10, 'scary': 10, 'actually': 10, 'worse': 10, 'back': 10, 'youll': 10, 'youre': 10, 'low': 10, 'something': 10, 'down': 10, 'wonder': 10, 'through': 10, 'away': 10, 'yourself': 10, 'line': 10, 'talent': 10, 'direction': 10, 'anything': 10, 'loved': 10, 'show': 10, 'heart': 10, 'thats': 10, 'isnt': 10, 'find': 10, 'rating': 10, 'hilarious': 10, 'beautiful': 10, 'part': 9, 'weak': 9, 'piece': 9, 'although': 9, 'anyone': 9, 'gets': 9, 'done': 9, 'quite': 9, 'beginning': 9, 'feel': 9, 'dull': 9, 'second': 9, 'top': 9, 'buy': 9, 'always': 9, 'take': 9, 'budget': 9, 'family': 9, 'chance': 9, 'michael': 8, 'serious': 8, 'lame': 8, 'point': 8, 'seem': 8, 'idea': 8, 'production': 8, 'own': 8, 'highly': 8, 'gave': 8, 'bored': 8, 'soundtrack': 8, 'kind': 8, 'start': 8, 'someone': 8, 'between': 8, '2': 8, 'young': 8, 'laughs': 8, 'entertainment': 8, 'girl': 8, 'sort': 8, 'hope': 8, 'perfect': 8, 'gives': 8, 'right': 8, 'disney': 8, 'else': 8, 'mind': 8, 'stuff': 8, 'john': 7, 'remember': 7, 'things': 7, 'rather': 7, 'silly': 7, 'disappointed': 7, 'badly': 7, 'unless': 7, 'looking': 7, 'amazing': 7, 'poorly': 7, 'lots': 7, 'wait': 7, 'incredibly': 7, 'mean': 7, 'series': 7, 'version': 7, 'went': 7, 'moving': 7, 'role': 7, 'sure': 7, 'decent': 7, 'though': 7, 'night': 7, 'probably': 7, '20': 7, 'left': 7, 'save': 7, 'new': 7, 'children': 7, 'picture': 7, 'reason': 7, 'become': 7, '5': 7, 'throughout': 7, 'home': 7, 'ago': 7, 'day': 7, 'attempt': 7, 'him': 7, 'since': 7, 'felt': 7, 'play': 7, 'trying': 7, 'mr': 7, 'cinema': 7, 'book': 7, 'brilliant': 7, 'copy': 6, 'change': 6, 'major': 6, 'dvd': 6, 'opinion': 6, 'lines': 6, 'around': 6, 'crap': 6, 'able': 6, 'perhaps': 6, 'typical': 6, 'annoying': 6, 'romance': 6, 'talented': 6, 'storyline': 6, 'somewhat': 6, 'dog': 6, 'beyond': 6, 'world': 6, 'sad': 6, 'cartoon': 6, 'enough': 6, 'takes': 6, 'kids': 6, 'supposed': 6, 'woman': 6, 'gun': 6, 'documentary': 6, 'plays': 6, 'moments': 6, 'american': 6, 'main': 6, 'both': 6, 'theres': 6, 'redeeming': 6, 'none': 6, 'wasted': 6, 'easily': 6, 'seems': 6, 'disappointment': 6, 'women': 6, 'theater': 6, 'yes': 6, 'everything': 6, 'id': 6, 'need': 6, 'cool': 6, 'laughed': 6, 'question': 6, 'touching': 6, 'superb': 6, 'miss': 6, 'reality': 6, 'hell': 5, 'taste': 5, 'wrong': 5, 'impressive': 5, 'friends': 5, 'comment': 5, 'ok': 5, 'care': 5, 'starts': 5, 'truly': 5, 'imagine': 5, 'thinking': 5, 'acted': 5, 'example': 5, 'expect': 5, 'goes': 5, 'seemed': 5, 'henry': 5, 'sit': 5, 'premise': 5, 'slow': 5, 'short': 5, 'knew': 5, 'possibly': 5, 'stars': 5, 'apart': 5, 'dark': 5, 'certainly': 5, 'place': 5, 'missed': 5, 'act': 5, 'wife': 5, 'fine': 5, 'couldnt': 5, 'run': 5, 'come': 5, 'development': 5, 'child': 5, 'pathetic': 5, 'costs': 5, 'leave': 5, 'fight': 5, 'compared': 5, 'itself': 5, 'fantastic': 5, 'moment': 5, 'joke': 5, 'walked': 5, 'lost': 5, 'might': 5, 'friend': 5, 'feeling': 5, 'hold': 5, 'death': 5, 'quality': 5, 'told': 5, 'understand': 5, 'underrated': 5, 'blow': 5, 'oh': 5, 'particularly': 5, 'value': 5, 'man': 5, 'david': 5, 'three': 5, 'moviebr': 5, 'unwatchable': 5, 'huge': 5, 'summer': 5, 'ridiculous': 5, 'except': 5, 'read': 5, 'try': 5, 'greatest': 5, 'let': 5, 'sometimes': 5, 'cult': 5, 'filmed': 5, 'guy': 5, 'days': 5, 'live': 5, 'finish': 5, 'italian': 5, 'small': 5, 'outstanding': 5, 'wanted': 4, 'along': 4, 'matter': 4, 'please': 4, 'bother': 4, 'shame': 4, 'mess': 4, 'cheesy': 4, 'insomnia': 4, 'laughable': 4, 'potential': 4, 'ages': 4, 'despite': 4, 'tell': 4, 'deserves': 4, 'use': 4, 'renting': 4, 'b': 4, 'several': 4, 'took': 4, 'stinks': 4, 'five': 4, 'star': 4, 'mystery': 4, 'head': 4, 'jokes': 4, 'leaves': 4, 'rest': 4, 'cannot': 4, 'call': 4, 'masterpiece': 4, 'stick': 4, 'until': 4, 'basically': 4, 'thriller': 4, 'pointless': 4, 'crappy': 4, 'different': 4, 'late': 4, 'fast': 4, 'glad': 4, 'fell': 4, 'asleep': 4, 'emotion': 4, 'case': 4, 'directing': 4, 'bottom': 4, 'release': 4, 'earth': 4, 'doing': 4, 'job': 4, 'stop': 4, 'usual': 4, 'humour': 4, 'anybody': 4, 'included': 4, 'often': 4, 'surprised': 4, 'opportunity': 4, 'store': 4, 'course': 4, 'tries': 4, 'together': 4, 'himself': 4, 'sick': 4, 'class': 4, 'student': 4, 'turkey': 4, '7': 4, 'comes': 4, 'fact': 4, 'unfortunately': 4, 'bit': 4, 'cute': 4, 'yeah': 4, 'result': 4, 'given': 4, 'cheap': 4, 'havent': 4, 'pure': 4, 'trash': 4, 'our': 4, 'interest': 4, 'besides': 4, 'getting': 4, '3': 4, 'plan': 4, 'making': 4, 'entertaining': 4, 'god': 4, 'writing': 4, 'dollar': 4, 'genius': 4, 'full': 4, 'creepy': 4, 'set': 4, 'released': 4, 'human': 4, 'peter': 4, 'view': 4, 'eyes': 4, 'intended': 4, 'feature': 4, 'simple': 4, 'hardly': 4, 'stayed': 4, 'mans': 4, 'message': 4, 'botched': 4, 'editing': 4, 'guess': 4, 'screenplay': 4, 'williams': 4, 'stage': 4, 'high': 4, 'unfunny': 4, 'played': 4, 'add': 4, 'television': 4, 'us': 4, 'features': 4, 'annoyed': 4, 'lead': 4, 'scifi': 4, '4': 4, 'provide': 4, '25': 4, 'used': 4, 'values': 4, 'works': 4, 'fu': 4, 'impressed': 4, 'wont': 4, 'gene': 4, 'soon': 4, 'caught': 4, 'cried': 4, 'sex': 3, 'subject': 3, 'myself': 3, 'aint': 3, 'nearly': 3, 'cry': 3, 'aside': 3, 'japanese': 3, 'words': 3, 'sucks': 3, 'shot': 3, 'dr': 3, 'charm': 3, 'hours': 3, 'animal': 3, 'art': 3, 'effect': 3, 'contrived': 3, 'ron': 3, 'van': 3, 'episode': 3, 'review': 3, 'four': 3, 'involved': 3, 'hour': 3, 'suspense': 3, '15': 3, 'remarkable': 3, 'free': 3, 'julia': 3, 'smile': 3, 'face': 3, 'cash': 3, 'camera': 3, 'later': 3, 'dancing': 3, 'type': 3, '70s': 3, '210': 3, 'almost': 3, 'problems': 3, 'possible': 3, 'sounded': 3, 'russian': 3, 'intelligent': 3, 'looked': 3, 'century': 3, 'festival': 3, 'extremely': 3, 'beautifully': 3, 'attention': 3, 'likes': 3, 'rental': 3, 'cable': 3, 'supporting': 3, 'shelf': 3, 'killing': 3, 'paid': 3, 'wouldnt': 3, 'joe': 3, 'miserably': 3, 'animation': 3, 'itbr': 3, '110': 3, 'finally': 3, 'excuse': 3, 'martin': 3, 'begin': 3, 'fall': 3, 'angel': 3, 'town': 3, 'hollywood': 3, 'doubt': 3, 'garbage': 3, '410': 3, 'slasher': 3, 'cold': 3, 'cinematography': 3, 'king': 3, 'portrays': 3, 'person': 3, 'reviews': 3, 'dialog': 3, 'turned': 3, 'boy': 3, 'thrown': 3, 'failed': 3, 'camp': 3, 'impossible': 3, 'alien': 3, 'regret': 3, 'positive': 3, 'bunch': 3, 'plots': 3, 'surprise': 3, 'spending': 3, 'side': 3, 'air': 3, 'ruined': 3, 'tells': 3, 'english': 3, 'difficult': 3, 'couple': 3, 'puts': 3, 'yet': 3, 'justice': 3, 'youve': 3, 'admit': 3, 'help': 3, 'comments': 3, 'spent': 3, 'waiting': 3, 'collection': 3, 'alot': 3, 'nine': 3, 'crazy': 3, 'appealing': 3, 'form': 3, 'force': 3, 'comic': 3, 'tale': 3, 'okay': 3, 'wish': 3, 'unpleasant': 3, 'amateurish': 3, 'sat': 3, 'silent': 3, 'past': 3, 'sellers': 3, 'adventure': 3, 'youd': 3, 'arent': 3, 'shallow': 3, 'history': 3, 'james': 3, 'sounds': 3, 'china': 3, 'feels': 3, 'british': 3, 'total': 3, 'kill': 3, 'mostly': 3, 'hit': 3, 'ends': 3, 'keep': 3, 'girls': 3, 'during': 3, 'further': 3, 'qualities': 3, 'name': 3, 'toilet': 3, 'vampire': 3, 'gore': 3, 'nudity': 3, 'gratuitous': 3, 'either': 3, 'powerful': 3, 'basic': 3, 'wow': 3, 'others': 3, 'drama': 3, 'school': 3, 'actresses': 3, 'list': 3, 'audience': 3, 'ranks': 3, 'jr': 3, 'robin': 3, 'wants': 3, 'suck': 3, 'produced': 3, 'filmmaker': 3, 'tim': 3, 'said': 3, 'mediocre': 3, 'vampires': 3, 'brooks': 3, 'sucked': 3, 'kid': 3, 'dance': 3, 'compelling': 3, 'talking': 3, 'combination': 3, 'mia': 3, 'surprisingly': 3, 'tom': 3, 'reasons': 3, 'popular': 3, 'starring': 3, 'terrific': 3, 'pity': 3, 'breasts': 3, 'clear': 3, 'turns': 3, 'hear': 3, 'songs': 3, 'mom': 3, 'kept': 3, 'hundred': 3, 'subtle': 3, 'emotions': 3, 'higher': 3, 'pacino': 3, 'stunning': 3, 'melodrama': 3, 'awesome': 3, 'incredible': 3, 'twice': 3, 'fresh': 3, 'stand': 3, 'lovely': 3, 'strong': 3, 'future': 3, 'cares': 3, 'sailors': 3, 'length': 3, 'enjoyable': 3, 'talents': 2, 'grease': 2, 'prefer': 2, 'eighties': 2, 'teenager': 2, 'silver': 2, 'lousy': 2, 'kinda': 2, 'cure': 2, 'drink': 2, 'invisible': 2, 'running': 2, 'iii': 2, 'tremors': 2, 'nowhere': 2, 'walk': 2, 'saying': 2, 'forget': 2, 'lowbudget': 2, 'gem': 2, 'guns': 2, 'iq': 2, 'mary': 2, 'la': 2, 'william': 2, 'remake': 2, 'bland': 2, 'cheese': 2, 'experience': 2, 'cameras': 2, 'style': 2, 'points': 2, 'weeks': 2, 'favor': 2, 'damme': 2, 'sports': 2, 'black': 2, 'worked': 2, 'half': 2, 'already': 2, 'twist': 2, 'based': 2, 'page': 2, 'f': 2, 'min': 2, 'overall': 2, 'roberts': 2, 'dumb': 2, 'happy': 2, 'ended': 2, 'relationships': 2, 'coming': 2, 'impression': 2, 'billy': 2, 'normally': 2, 'brings': 2, 'laughter': 2, 'bring': 2, 'die': 2, 'paint': 2, 'entire': 2, 'problem': 2, 'magical': 2, '300': 2, 'grade': 2, 'forward': 2, 'fits': 2, 'early': 2, 'pretentious': 2, 'freddy': 2, 'interaction': 2, 'followed': 2, 'jewish': 2, 'costumes': 2, 'warped': 2, 'fights': 2, 'photographed': 2, 'raise': 2, 'stewart': 2, 'blend': 2, 'catch': 2, 'appearance': 2, 'male': 2, 'themselves': 2, 'suggests': 2, 'street': 2, 'actual': 2, 'theatre': 2, 'fails': 2, 'threw': 2, 'sleep': 2, 'cliched': 2, 'pay': 2, 'slam': 2, 'disappointing': 2, 'amused': 2, 'meets': 2, 'cartoons': 2, 'advice': 2, 'olivier': 2, 'racist': 2, 'police': 2, 'worthwhile': 2, 'sets': 2, 'racing': 2, 'having': 2, 'priest': 2, 'technically': 2, 'utterly': 2, 'disturbing': 2, 'rarely': 2, 'tension': 2, 'expecting': 2, 'don': 2, 'johnson': 2, 'cut': 2, 'obvious': 2, '8': 2, 'flick': 2, 'satire': 2, 'redemption': 2, 'screwed': 2, 'ridiculously': 2, 'offer': 2, 'lower': 2, 'minute': 2, 'watchbr': 2, 'finding': 2, '1980': 2, '310': 2, 'claiming': 2, 'elvis': 2, 'carter': 2, 'worthy': 2, 'figure': 2, 'cover': 2, 'messed': 2, 'rated': 2, 'ill': 2, 'animals': 2, 'indian': 2, 'plain': 2, 'sight': 2, 'ask': 2, 'follow': 2, 'charlie': 2, 'chaplin': 2, 'himbr': 2, 'lets': 2, 'team': 2, 'root': 2, 'provides': 2, 'saving': 2, 'grace': 2, 'pecker': 2, 'dimensional': 2, 'viewers': 2, 'belief': 2, 'close': 2, 'local': 2, 'onebr': 2, 'supposedly': 2, 'ways': 2, 'spot': 2, 'manages': 2, 'creditable': 2, 'branagh': 2, 'under': 2, 'missing': 2, 'empty': 2, 'clearly': 2, 'next': 2, 'ugh': 2, 'hats': 2, 'suitable': 2, 'body': 2, 'u': 2, 'werent': 2, 'hopelessly': 2, '101': 2, 'however': 2, 'generally': 2, 'entertained': 2, 'critical': 2, '30': 2, 'expected': 2, 'tedious': 2, 'despicable': 2, 'unhappy': 2, 'complete': 2, 'western': 2, 'worlds': 2, 'funniest': 2, 'betty': 2, 'thanks': 2, 'pet': 2, 'bore': 2, 'photography': 2, 'somewhere': 2, 'quit': 2, 'ahead': 2, 'reasonably': 2, 'journey': 2, 'magnificent': 2, 'duchovny': 2, 'decide': 2, 'neither': 2, 'upon': 2, 'sums': 2, 'heads': 2, 'mood': 2, 'santa': 2, 'mixes': 2, 'satan': 2, 'whatever': 2, 'painful': 2, 'ben': 2, 'speaks': 2, 'unbelievable': 2, 'ii': 2, 'don´t': 2, 'recent': 2, 'rip': 2, 'gonna': 2, 'filmbr': 2, 'mebr': 2, 'fx': 2, 'nicole': 2, 'kidman': 2, 'gone': 2, 'pass': 2, 'returns': 2, 'killed': 2, 'favour': 2, 'scream': 2, 'needed': 2, 'sleeping': 2, 'draws': 2, 'renewed': 2, 'race': 2, 'lacks': 2, 'front': 2, 'dying': 2, 'weather': 2, 'background': 2, 'lifeless': 2, 'attempted': 2, 'illogical': 2, 'regarded': 2, 'suggest': 2, 'corny': 2, 'men': 2, 'lynch': 2, 'highschool': 2, 'insufferable': 2, 'intentions': 2, 'showed': 2, 'novel': 2, 'changed': 2, 'african': 2, 'tried': 2, 'sorta': 2, 'oneliners': 2, 'mulder': 2, 'chemistry': 2, 'lowest': 2, 'theaters': 2, 'zombie': 2, 'sound': 2, 'neat': 2, 'success': 2, 'lack': 2, 'channel': 2, 'violence': 2, 'greater': 2, '610': 2, 'nice': 2, 'agree': 2, 'moved': 2, 'reminded': 2, 'smart': 2, 'stories': 2, 'directed': 2, 'suffice': 2, 'josh': 2, 'leonard': 2, 'smith': 2, 'each': 2, 'ashamed': 2, 'coupe': 2, 'desperate': 2, '6': 2, 'started': 2, 'it´s': 2, 'i´m': 2, 'stay': 2, 'mix': 2, 'bond': 2, 'fooled': 2, 'depressing': 2, 'color': 2, 'club': 2, 'seriously': 2, 'inspiring': 2, 'aliens': 2, 'ludicrous': 2, 'showing': 2, 'deep': 2, 'reference': 2, 'creators': 2, 'relationship': 2, 'suit': 2, 'christopher': 2, 'situations': 2, 'speaking': 2, 'strange': 2, 'mel': 2, 'ms': 2, 'cruel': 2, 'theyre': 2, 'genuinely': 2, 'concept': 2, 'spoiler': 2, 'olds': 2, 'taxi': 2, 'driver': 2, 'filmmakers': 2, 'robert': 2, '100': 2, 'unrealistic': 2, 'votes': 2, 'memories': 2, '1990': 2, '2001br': 2, 'implausible': 2, 'happenbr': 2, 'light': 2, 'nasty': 2, 'skip': 2, 'barbie': 2, 'morris': 2, 'teen': 2, 'consistent': 2, 'becomes': 2, 'tone': 2, 'support': 2, 'believable': 2, 'tour': 2, 'de': 2, 'lightweight': 2, 'thinly': 2, 'ned': 2, 'australian': 2, 'america': 2, 'means': 2, 'mtv': 2, 'gags': 2, 'cell': 2, 'mad': 2, 'expectations': 2, 'excited': 2, 'country': 2, 'courage': 2, 'mummy': 2, 'average': 2, 'french': 2, 'columbo': 2, 'falk': 2, 'forbr': 2, 'chris': 2, 'nervous': 2, 'finished': 2, 'formula': 2, 'fabulous': 2, 'ford': 2, '19': 2, 'fire': 2, 'cliches': 2, 'cameos': 2, 'quote': 2, 'buffy': 2, 'lacking': 2, 'bothered': 2, 'soap': 2, 'opera': 2, 'bat': 2, 'eat': 2, 'humans': 2, 'fans': 2, 'drawn': 2, 'judge': 2, 'hasnt': 2, 'pop': 2, 'event': 2, 'massacre': 2, 'innocent': 2, 'practically': 2, 'boobs': 2, 'credits': 2, 'added': 2, 'check': 2, 'red': 2, 'loren': 2, 'onto': 2, 'manchu': 2, 'hands': 2, 'opening': 2, 'training': 2, 'amusing': 2, 'hair': 2, 'says': 2, 'roth': 2, 'roles': 2, 'max': 2, 'dorothy': 2, 'fake': 2, 'tongue': 2, 'rubbish': 2, 'lowe': 2, 'unemotional': 2, 'attractive': 2, 'hopefully': 2, 'otherwise': 2, 'completely': 2, 'dire': 2, 'lemmon': 2, 'consider': 2, 'enchanting': 2, 'exactly': 2, 'destined': 2, 'jim': 2, 'romantic': 2, 'turn': 2, 'gorgeous': 2, 'today': 2, 'third': 2, 'absorbing': 2, 'actress': 2, 'shes': 2, 'praise': 2, 'favourite': 2, 'came': 2, 'disagree': 2, 'evening': 2, 'ray': 2, 'move': 2, 'called': 2, 'definite': 2, 'lars': 2, 'beauty': 2, 'solid': 2, 'lee': 2, 'hate': 2, 'hrpuff': 2, 'growing': 2, 'superbly': 2, 'immense': 2, 'rock': 2, 'russell': 2, 'al': 2, 'share': 2, 'tape': 2, 'kungfu': 2, 'unforgettable': 2, 'excellently': 2, 'morning': 2, 'terrifying': 2, 'damn': 2, 'song': 2, 'learned': 2, 'evil': 2, 'everybody': 2, 'sean': 2, 'connery': 2, 'gas': 2, 'attack': 2, 'private': 2, 'ryan': 2, 'comedic': 2, 'creative': 2, 'killer': 2, 'cobra': 2, 'touches': 2, '90': 2, 'verry': 2, 'surely': 2, 'heartwarming': 2, 'touched': 2, 'soldier': 2, 'mustsee': 2, 'twists': 2, 'super': 2, 'deals': 2, 'visually': 2, 'rain': 2, 'lifetime': 2, 'standard': 2, 'south': 2, 'mature': 2, 'heard': 2, 'sutherland': 2, 'taken': 2, 'fiction': 2, 'truth': 2, 'watchable': 2, 'tired': 2, 'divine': 2, 'm': 2, 'treat': 2, 'portuguese': 2, 'wild': 2, 'thank': 2, 'wacky': 2, 'rare': 2, 'solino': 2, 'germany': 2, 'unpredictable': 2, 'outstandingit': 2, 'downtoearth': 2, 'brought': 2, 'tears': 2, 'afterwards': 2, 'favorites': 2, 'musical': 2, 'keaton': 2, 'keatons': 2, 'finest': 2, 'marykate': 2, 'ashley': 2, 'delightful': 2, 'madness': 2, 'meadows': 2, 'genre': 2, 'rape': 2, 'medicine': 2, 'numbers': 2, 'grew': 2, 'flying': 2, 'warming': 2, 'effective': 2, 'telling': 2, 'melissa': 2, 'shines': 2, 'results': 2, 'winning': 2, 'curly': 2, 'sue': 2, 'room': 2, 'appear': 2, 'racism': 2, 'partly': 2, 'east': 2, 'lingered': 2, 'kung': 2, 'omar': 2, 'unlikeable': 1, 'deneuve': 1, 'auteuil': 1, 'travolta': 1, 'olivia': 1, 'newton': 1, 'teens': 1, 'sandy': 1, 'traci': 1, 'lords': 1, 'earning': 1, 'living': 1, 'leagues': 1, 'viewed': 1, 'remains': 1, 'puerile': 1, 'beaten': 1, 'voted': 1, 'screw': 1, 'lose': 1, 'wooden': 1, 'cardboard': 1, 'allbr': 1, 'rotten': 1, 'moviethe': 1, 'wasit': 1, 'badthe': 1, 'woefulthe': 1, 'spotand': 1, 'scenescrap': 1, 'aspect': 1, 'giant': 1, 'crabs': 1, 'cursing': 1, 'samurai': 1, 'ghosties': 1, 'beer': 1, 'scripted': 1, 'edited': 1, 'flaws': 1, 'lanes': 1, 'daughter': 1, 'passing': 1, 'basks': 1, 'innocence': 1, 'snooze': 1, 'fest': 1, 'personable': 1, 'trite': 1, 'victor': 1, 'rasuk': 1, 'charisma': 1, 'storyteller': 1, 'viewing': 1, 'omega': 1, 'codebr': 1, 'nonactors': 1, 'group': 1, 'mulletrific': 1, 'clips': 1, 'steves': 1, 'planet': 1, 'spliced': 1, 'loosely': 1, 'constructed': 1, 'fighting': 1, 'definate': 1, 'endulge': 1, 'clerks': 1, 'el': 1, 'mariachi': 1, 'taqueria': 1, 'holden': 1, 'kim': 1, 'novak': 1, 'genxer': 1, 'originals': 1, 'movieyes': 1, 'kraft': 1, 'improvised': 1, 'handheld': 1, 'directionless': 1, 'ick': 1, 'gretta': 1, 'sacchi': 1, 'jaglom': 1, 'eating': 1, 'suited': 1, '40': 1, 'personal': 1, 'skeptical': 1, 'sacrificing': 1, 'precious': 1, 'jean': 1, 'claude': 1, 'blood': 1, 'managing': 1, 'excruciatingly': 1, 'slowpaced': 1, 'overscripted': 1, 'tooclever': 1, 'actingbr': 1, 'twilight': 1, 'zone': 1, 'tales': 1, 'crypt': 1, 'burt': 1, 'reynolds': 1, 'checked': 1, 'favorable': 1, 'payoff': 1, 'dudthe': 1, 'oscar®': 1, 'winner': 1, 'murray': 1, 'abraham': 1, 'bomb': 1, 'idiocy': 1, 'backand': 1, 'library': 1, 'sheesh': 1, 'chew': 1, 'tin': 1, 'fool': 1, 'shave': 1, 'grater': 1, 'cusack': 1, 'usually': 1, 'endearing': 1, 'crystal': 1, 'crowd': 1, 'shaquille': 1, 'oneil': 1, 'rapping': 1, 'genie': 1, 'apparently': 1, 'suckered': 1, 'dishing': 1, 'produce': 1, 'godawful': 1, 'shaq': 1, 'basketball': 1, 'mst3000': 1, 'blast': 1, 'overdone': 1, 'jacksons': 1, 'consist': 1, 'glow': 1, 'freaky': 1, 'slapstick': 1, 'fastmoving': 1, 'shots': 1, 'growling': 1, 'definitively': 1, 'necrophilia': 1, 'depicting': 1, 'power': 1, 'goddess': 1, 'esamples': 1, 'malcom': 1, 'mcdowall': 1, 'clockwork': 1, 'orange': 1, '43or': 1, 'cropped': 1, 'malcolm': 1, 'mcdowell': 1, 'lately': 1, 'designed': 1, 'yellow': 1, 'filters': 1, 'taped': 1, '11': 1, 'sugest': 1, 'cort': 1, 'social': 1, 'activest': 1, 'era': 1, 'colm': 1, 'meaney': 1, 'charismanothing': 1, 'selfobsessed': 1, 'heroinaddicted': 1, 'basket': 1, 'cases': 1, 'lounging': 1, 'whining': 1, 'lizards': 1, 'molt': 1, 'induce': 1, 'narcolepsy': 1, 'vs': 1, 'jason': 1, 'latter': 1, 'labeling': 1, 'promising': 1, 'bed': 1, 'wise': 1, 'decision': 1, 'workable': 1, 'bussinessmen': 1, 'mafia': 1, 'appallingly': 1, 'actedsummer': 1, 'pheonix': 1, 'asian': 1, 'mid': 1, '20th': 1, '19th': 1, 'ian': 1, 'holm': 1, 'anton': 1, 'lesser': 1, 'includes': 1, 'kinds': 1, 'submit': 1, 'cannes': 1, 'sucker': 1, 'pyuns': 1, 'esthetic': 1, 'unfinished': 1, 'letdown': 1, 'pyun': 1, 'develops': 1, 'kathy': 1, 'longs': 1, 'amazed': 1, 'summary': 1, 'j': 1, 'edgars': 1, 'hoovers': 1, 'constant': 1, 'maintaining': 1, 'pr': 1, 'profile': 1, 'jimmy': 1, 'vera': 1, 'miles': 1, 'pleasantly': 1, 'cameosimans': 1, 'selfdeprecating': 1, 'members': 1, 'sopranos': 1, 'typecast': 1, 'biggest': 1, 'space': 1, 'screaming': 1, 'selfabuse': 1, 'avenging': 1, 'elm': 1, 'insulting': 1, 'nope': 1, 'magtena': 1, 'earned': 1, 'helga': 1, 'admits': 1, 'deepest': 1, 'darkest': 1, 'secret': 1, 'arnold': 1, 'doy': 1, 'slim': 1, 'slum': 1, 'tvshop': 1, 'straight': 1, 'slightly': 1, 'horridbr': 1, 'realbr': 1, 'actbr': 1, '62': 1, 'voyage': 1, 'sea': 1, 'ocean': 1, 'electric': 1, 'eel': 1, 'tearteaser': 1, 'steve': 1, 'unbelievably': 1, 'stomachbr': 1, 'endingbr': 1, 'ally': 1, 'mcbeal': 1, 'overrated': 1, 'shortbr': 1, 'chose': 1, 'appropriate': 1, 'starting': 1, 'outstay': 1, 'welcome': 1, 'unclear': 1, 'affected': 1, 'lamentable': 1, 'arnie': 1, 'torture': 1, 'gruner': 1, 'jacques': 1, 'foreign': 1, 'exchange': 1, 'college': 1, 'single': 1, 'handedly': 1, 'wipes': 1, 'mexican': 1, 'gang': 1, 'obnoxious': 1, 'choreography': 1, '99': 1, 'flanders': 1, 'alltime': 1, 'academy': 1, 'devil': 1, 'brilliantly': 1, 'paced': 1, 'bolt': 1, 'blue': 1, 'plunges': 1, 'centre': 1, 'repugnant': 1, 'bronson': 1, 'vile': 1, 'inconceivable': 1, 'ming': 1, 'merciless': 1, 'bardwork': 1, 'foul': 1, 'fear': 1, 'jump': 1, 'undoubtedly': 1, 'hardworking': 1, 'responsible': 1, 'husband': 1, 'cheating': 1, 'clinton': 1, 'erabr': 1, 'thrillerwith': 1, 'appalled': 1, 'scorsese': 1, 'final': 1, 'endbr': 1, 'ugly': 1, 'sent': 1, 'mum': 1, 'kiddies': 1, 'scotts': 1, 'blade': 1, 'runner': 1, 'greats': 1, 'versus': 1, 'didn´t': 1, 'bye': 1, '17': 1, 'idiot': 1, 'meters': 1, 'celluloid': 1, 'magazine': 1, '1min': 1, 'trailer': 1, 'date': 1, 'appreciate': 1, 'loonies': 1, 'clint': 1, 'thenmaybebr': 1, 'helen': 1, 'bonham': 1, 'movieand': 1, 'ignore': 1, 'monkeys': 1, 'oops': 1, 'apes': 1, 'ape': 1, 'pocket': 1, 'bridget': 1, 'joness': 1, 'diary': 1, 'stunt': 1, 'delineation': 1, 'easy': 1, 'whos': 1, 'whom': 1, 'confuse': 1, 'furthermore': 1, 'denise': 1, 'richards': 1, 'billing': 1, 'dubbing': 1, 'yuck': 1, 'jet': 1, 'li': 1, 'martial': 1, 'artist': 1, 'jackie': 1, 'chan': 1, 'somebody': 1, 'jets': 1, 'par': 1, 'landscapes': 1, 'pierce': 1, 'brosnan': 1, 'recognize': 1, 'participation': 1, 'klaus': 1, 'kinski': 1, 'overallbr': 1, 'twenty': 1, 'harmless': 1, 'mine': 1, 'enjoys': 1, 'forced': 1, 'kickingbr': 1, 'knows': 1, 'seriousbr': 1, 'leastbr': 1, 'listed': 1, '100br': 1, 'rightful': 1, 'placebr': 1, 'ishtar': 1, 'ni': 1, 'supporter': 1, 'objectively': 1, 'glorifying': 1, 'ulster': 1, 'nationalists': 1, 'heavyhanded': 1, 'antiviolence': 1, 'messages': 1, 'poetic': 1, 'awkward': 1, 'honestly': 1, 'tripe': 1, 'juniorhigh': 1, 'skit': 1, 'ferrells': 1, 'wrestling': 1, 'fetish': 1, 'briefly': 1, 'humorous': 1, 'serves': 1, '0': 1, 'scale': 1, 'christina': 1, 'riccis': 1, 'improbable': 1, 'interpretation': 1, 'e': 1, 'parody': 1, 'insult': 1, 'intelligence': 1, 'acadmey': 1, 'mission': 1, 'moscow': 1, 'spoof': 1, 'boringand': 1, 'pie': 1, 'previous': 1, 'tooth': 1, 'apartment': 1, 'dedication': 1, 'eerie': 1, 'soundsbr': 1, 'tiff': 1, 'reminds': 1, 'interestingbr': 1, 'wellbr': 1, 'psychedelic': 1, 'pulsating': 1, 'symmetric': 1, 'abstract': 1, 'images': 1, 'drive': 1, 'fullframe': 1, 'eye': 1, 'birds': 1, 'silhouetted': 1, 'against': 1, 'colors': 1, 'cup': 1, 'tea': 1, '8½': 1, 'working': 1, 'shakespeare': 1, 'sources': 1, 'source': 1, 'whilst': 1, 'wider': 1, 'audiencebr': 1, 'steals': 1, 'fishburnes': 1, 'nose': 1, 'above': 1, 'leprachaun': 1, 'difference': 1, 'ice': 1, 't': 1, 'chick': 1, 'carrottpriceless': 1, 'crossed': 1, 'sled': 1, 'snowman': 1, 'costume': 1, 'seams': 1, 'visible': 1, 'pitiful': 1, 'caring': 1, 'happened': 1, 'disastrous': 1, 'relief': 1, 'scares': 1, 'leaps': 1, 'plotline': 1, 'leading': 1, 'ladys': 1, 'lugosi': 1, 'downhill': 1, 'slide': 1, 'tender': 1, 'demented': 1, 'scientist': 1, 'fiance': 1, 'decapitated': 1, 'ogling': 1, 'strippers': 1, 'attach': 1, 'noggin': 1, 'exudes': 1, 'slime': 1, 'snail': 1, 'protagonist': 1, 'burn': 1, 'dreary': 1, 'setting': 1, 'coachella': 1, 'valley': 1, 'screenwriting': 1, 'function': 1, 'sedative': 1, 'stench': 1, 'resembles': 1, 'cowpies': 1, 'sun': 1, 'whew': 1, 'flop': 1, 'rewound': 1, 'sniper': 1, 'tighter': 1, 'sharper': 1, 'electrifying': 1, 'plods': 1, '820': 1, '193139': 1, 'informer': 1, 'span': 1, 'unredeemable': 1, 'saga': 1, 'loser': 1, '1934': 1, 'onepanel': 1, 'fleischer': 1, 'studios': 1, 'billed': 1, 'prime': 1, 'code': 1, 'shop': 1, 'charge': 1, 'static': 1, 'painfully': 1, 'miscast': 1, 'smarmy': 1, 'selfcentered': 1, 'casanova': 1, 'ladies': 1, 'blemish': 1, 'filmography': 1, 'solely': 1, 'satisfy': 1, 'ego': 1, 'jumpy': 1, 'seebr': 1, 'noisy': 1, 'happening': 1, 'baddddd': 1, 'conventional': 1, 'wisdom': 1, 'seldom': 1, 'occasional': 1, 'exceptions': 1, 'dalmatians': 1, 'suffer': 1, 'enigma': 1, 'solve': 1, 'illness': 1, 'pitt': 1, 'lewis': 1, 'michelle': 1, 'forbes': 1, 'choose': 1, 'paul': 1, 'verhoevens': 1, 'faint': 1, 'porn': 1, 'legit': 1, 'central': 1, 'erikas': 1, 'carry': 1, 'lamest': 1, 'inflicted': 1, 'unconvincing': 1, 'military': 1, 'amazingly': 1, 'seethe': 1, 'nonexistantthat': 1, 'tails': 1, 'oiled': 1, 'mock': 1, 'claus': 1, 'merlin': 1, 'moralizing': 1, 'unappetizing': 1, 'fretful': 1, 'adam': 1, 'sandler': 1, 'fan1': 1, 'lured': 1, 'false': 1, 'promise': 1, 'bikiniclad': 1, 'coverbut': 1, 'horrorthe': 1, 'gouge': 1, 'repeatedly': 1, 'bash': 1, 'skull': 1, 'indo': 1, 'againnever': 1, 'forgetbr': 1, 'hobgoblins': 1, 'gremlins': 1, 'ripoff': 1, 'stinkpile': 1, 'chosen': 1, 'ability': 1, 'stilted': 1, 'shadows': 1, 'boom': 1, 'mikes': 1, 'lingering': 1, 'kate': 1, 'mulgrew': 1, 'selfish': 1, 'mother': 1, 'affleck': 1, 'teeth': 1, 'capped': 1, 'etta': 1, 'volumes': 1, '3000': 1, 'imbd': 1, 'obrien': 1, 'mistake': 1, 'summaryrun': 1, 'gary': 1, 'busey': 1, 'scenarioisnt': 1, 'nightmare': 1, 'platos': 1, 'runi': 1, 'swedish': 1, 'flimsy': 1, 'disgrace': 1, 'writers': 1, 'hiding': 1, 'abused': 1, 'daddy': 1, 'unoriginal': 1, 'trust': 1, '050': 1, 'hairball': 1, 'recently': 1, 'coughed': 1, 'amateur': 1, 'zetajones': 1, 'fanatics': 1, 'credibility': 1, 'binks': 1, 'dissapointed': 1, 'chuck': 1, 'norris': 1, 'wastes': 1, 'chucks': 1, 'originalitybr': 1, 'score': 1, '6510': 1, '5510': 1, 'disgustingly': 1, 'badacted': 1, 'stupidbr': 1, 'mystic': 1, 'eats': 1, 'virgin': 1, 'onesbr': 1, 'you´ve': 1, 'sweep': 1, 'stuns': 1, 'awes': 1, 'artistry': 1, 'convincing': 1, 'arghhh': 1, 'realized': 1, 'resultbr': 1, 'highs': 1, 'lows': 1, 'describes': 1, 'africa': 1, 'samebr': 1, 'physical': 1, 'pain': 1, 'participated': 1, 'sham': 1, 'preceding': 1, 'sparkle': 1, 'captivating': 1, 'irritating': 1, 'flow': 1, 'events': 1, 'enjoying': 1, 'icecream': 1, 'nuts': 1, 'fantasize': 1, 'brewsters': 1, 'millions': 1, 'copycat': 1, 'roeg': 1, 'untalented': 1, 'assignment': 1, 'decoration': 1, 'surrealistic': 1, 'hokum': 1, 'creator': 1, 'pelle': 1, 'conqueror': 1, 'bleak': 1, 'struck': 1, 'ingemar': 1, 'bergman': 1, 'inaudible': 1, 'somber': 1, 'stoicism': 1, 'banderas': 1, 'drugged': 1, 'isabel': 1, 'allende': 1, 'author': 1, 'utter': 1, 'thismovie': 1, 'examine': 1, 'colon': 1, 'elephant': 1, 'penlight': 1, 'commenting': 1, 'oppressive': 1, 'portray': 1, 'moral': 1, 'flat': 1, 'librarians': 1, 'unglamorous': 1, 'strike': 1, 'bolts': 1, 'lightning': 1, 'timothy': 1, 'huttons': 1, 'stuck': 1, 'fox': 1, 'mode': 1, 'largelipped': 1, 'female': 1, 'costarhe': 1, 'needs': 1, 'gillian': 1, 'anderson': 1, 'shine': 1, 'amateurism': 1, 'bypassed': 1, 'releasedit': 1, 'escaped': 1, 'crapped': 1, 'lake': 1, 'kevin': 1, 'bacons': 1, 'salvage': 1, 'motocrossed': 1, 'motocross': 1, 'lingo': 1, 'previews': 1, 'account': 1, 'humourless': 1, 'drivelmeant': 1, 'mentality': 1, 'stanly': 1, 'tucci': 1, 'parts': 1, 'chuckling': 1, 'tied': 1, 'gagged': 1, '010': 1, 'weakest': 1, 'oddlooking': 1, 'wallace': 1, 'considering': 1, 'sign': 1, 'comebr': 1, 'views': 1, 'learning': 1, 'tree': 1, 'powerfully': 1, 'portrayed': 1, 'coasted': 1, 'dribbled': 1, 'rummage': 1, 'sale': 1, 'affair': 1, 'teachercoach': 1, 'razor': 1, 'thinbr': 1, 'depth': 1, 'adult': 1, 'specialbr': 1, 'precictable': 1, 'receiving': 1, 'culture': 1, 'info': 1, 'moviesbr': 1, 'slowly': 1, 'entertainingbr': 1, 'lifebr': 1, 'absolute': 1, 'rubbishbr': 1, 'actoractress': 1, 'jokebr': 1, 'spanish': 1, 'horrors': 1, 'boringboringboring': 1, 'tickets': 1, 'midnight': 1, 'premiere': 1, 'questions': 1, 'technodanceidontknowwhatthatwasscene': 1, 'substandard': 1, 'tolerably': 1, 'blair': 1, 'witch': 1, 'fame': 1, 'matters': 1, 'graphics': 1, 'preserve': 1, 'sanity': 1, 'unimaginative': 1, 'exploitative': 1, 'itll': 1, 'amusement': 1, 'unentertaining': 1, 'uninstructive': 1, 'conflict': 1, 'leigh': 1, 'maggie': 1, 'filming': 1, 'understandable': 1, 'whose': 1, 'subsequent': 1, 'project': 1, 'efforts': 1, 'schindlers': 1, 'dolittle': 1, 'composed': 1, 'entirely': 1, 'sitcom': 1, 'hamster': 1, 'alley': 1, 'mice': 1, 'patterson': 1, 'books': 1, 'displeasure': 1, 'sitting': 1, 'fathom': 1, 'succeed': 1, 'vague': 1, 'historicalsentimental': 1, 'context': 1, 'imagery': 1, 'mise': 1, 'en': 1, 'lasts': 1, 'hoursbr': 1, 'predictablei': 1, 'cantif': 1, 'actionadventure': 1, 'filmsthis': 1, 'seeid': 1, 'likebehind': 1, 'enemy': 1, 'owen': 1, 'wilson': 1, 'iron': 1, 'eagle': 1, 'louis': 1, 'gossett': 1, 'properly': 1, 'poignant': 1, 'droll': 1, 'key': 1, 'grip': 1, 'complicated': 1, 'childish': 1, 'grownups': 1, 'planning': 1, 'blanked': 1, 'ninja': 1, 'mixed': 1, 'subjames': 1, 'endless': 1, 'battles': 1, 'terminate': 1, 'nota': 1, 'begining': 1, 'endbut': 1, 'failsfrom': 1, 'falls': 1, 'hoping': 1, 'clue': 1, 'didntbr': 1, 'build': 1, 'substance': 1, 'husbands': 1, 'express': 1, 'relentlessly': 1, 'indians': 1, 'drunk': 1, 'lazy': 1, 'elviss': 1, 'skin': 1, 's': 1, 'seven': 1, 'boosts': 1, 'ecstatic': 1, 'atmosphere': 1, 'oprah': 1, 'spice': 1, 'suddenly': 1, 'elsewhere': 1, 'offtheshelf': 1, 'behaviour': 1, 'clichéed': 1, 'horrendous': 1, 'suffering': 1, 'infomercial': 1, 'nuke': 1, 'em': 1, 'bmovie': 1, 'tackier': 1, 'overshadowed': 1, 'steretyped': 1, 'recapturing': 1, 'uncle': 1, 'ohara': 1, 'tenyear': 1, 'lloyd': 1, 'jeff': 1, 'daniels': 1, 'labeled': 1, 'unnecessary': 1, 'bowl': 1, 'nephew': 1, 'number': 1, 'revolting': 1, 'toilets': 1, 'crudebr': 1, 'hackneyed': 1, 'borders': 1, 'solved': 1, 'saturday': 1, '12th': 1, '1980s': 1, 'bodiesstyled': 1, 'gagsbr': 1, 'flix': 1, 'gory': 1, 'lessons': 1, 'forgot': 1, 'kindergarteners': 1, 'carpenters': 1, 'los': 1, 'muetos': 1, 'sequelbr': 1, 'maltin': 1, 'rivers': 1, 'raunchiest': 1, 'tasteless': 1, 'hundredworst': 1, 'walking': 1, 'laughing': 1, 'repeated': 1, 'disgusting': 1, 'plastic': 1, 'grubby': 1, 'fourteen': 1, 'dare': 1, 'deniros': 1, 'percent': 1, 'approach': 1, 'spradling': 1, 'strip': 1, 'joking': 1, 'sin': 1, 'crashingly': 1, 'stardust': 1, 'forwards': 1, 'zelig': 1, 'cubic': 1, 'zirconia': 1, 'effort': 1, 'omaha': 1, '14': 1, 'wrote': 1, 'politicians': 1, 'dopey': 1, 'jot': 1, 'plausibility': 1, 'exaggerated': 1, 'hot': 1, 'skilled': 1, 'priors': 1, 'cheapo': 1, 'overtly': 1, 'dreck': 1, 'enlist': 1, 'marines': 1, 'ateam': 1, 'remove': 1, 'stole': 1, 'daddys': 1, 'camcorder': 1, 'explosion': 1, 'sister': 1, 'model': 1, 'house': 1, 'listings': 1, 'godzilla': 1, '1998': 1, 'robot': 1, 'mole': 1, 'rat': 1, 'subjects': 1, 'connections': 1, 'promised': 1, 'unintentional': 1, 'distributor': 1, 'dramatic': 1, 'likeable': 1, 'woody': 1, 'allenpaul': 1, 'provensareiser': 1, 'thiat': 1, 'rollerblades': 1, 'knock': 1, 'sickeningly': 1, 'badbr': 1, 'whodunit': 1, 'saved': 1, 'consisting': 1, 'taye': 1, 'diggs': 1, 'kirshner': 1, 'dominique': 1, 'swain': 1, 'meredith': 1, 'monroe': 1, 'asked': 1, 'word': 1, 'greenlighted': 1, 'nada': 1, 'zip': 1, 'zilchbr': 1, 'rails': 1, 'boogie': 1, 'nights': 1, 'achieve': 1, 'quarter': 1, 'playing': 1, 'location': 1, 'regina': 1, 'saskatchewan': 1, 'locally': 1, 'albeit': 1, 'fanciful': 1, 'shlocky': 1, 'rae': 1, 'dawn': 1, 'chong': 1, 'profanity': 1, 'stupidity': 1, 'selfindulgence': 1, 'join': 1, 'forces': 1, 'moviemaking': 1, 'pescis': 1, 'prove': 1, 'cousin': 1, 'vinny': 1, 'fluke': 1, 'opposite': 1, 'foulmouthed': 1, 'handle': 1, 'mustmiss': 1, 'spots': 1, 'sits': 1, 'gathers': 1, 'dust': 1, 'beats': 1, 'boredom': 1, 'dreadful': 1, 'veiled': 1, 'aislebr': 1, 'subjugated': 1, 'revolve': 1, 'selleck': 1, 'range': 1, 'akelly': 1, 'important': 1, 'australians': 1, 'irish': 1, 'accentit': 1, 'dunno': 1, 'shoting': 1, 'dialogues': 1, 'therell': 1, 'blanche': 1, 'awards': 1, 'barely': 1, 'presenters': 1, 'hosts': 1, 'parodies': 1, 'olden': 1, 'riot': 1, 'trinity': 1, 'retarded': 1, 'brain': 1, 'science': 1, 'hadnt': 1, 'mst3k': 1, 'wouldve': 1, 'window': 1, 'named': 1, 'brendan': 1, 'frasers': 1, 'humerous': 1, 'large': 1, 'gadgets': 1, 'betterbr': 1, 'behave': 1, 'teenagers': 1, 'coping': 1, 'mate': 1, 'purpose': 1, 'buffet': 1, 'froid': 1, 'bertrand': 1, 'blier': 1, 'les': 1, 'acteurs': 1, 'agreed': 1, 'scenario': 1, 'andrew': 1, 'stevens': 1, 'villain': 1, 'lieutenant': 1, 'filmzoe': 1, 'mclellan': 1, 'voting': 1, 'irrationalbr': 1, 'mins': 1, 'endure': 1, 'kattan': 1, 'painfull': 1, 'staggering': 1, 'goal': 1, 'funbr': 1, 'brutal': 1, 'implausibilities': 1, 'etcbr': 1, 'exposed': 1, 'dreamt': 1, 'murder': 1, 'abandonment': 1, 'tested': 1, 'drag': 1, 'anytime': 1, 'evolving': 1, 'among': 1, 'loses': 1, 'impact': 1, 'harrison': 1, 'hartnetthow': 1, 'cop': 1, 'plus': 1, 'zero': 1, 'industry': 1, 'equal': 1, 'summed': 1, 'victim': 1, 'simulates': 1, 'disembowelment': 1, 'pulling': 1, 'intestines': 1, 'tshirt': 1, 'negative': 1, 'ring': 1, 'demi': 1, 'thru': 1, 'motions': 1, 'ditto': 1, 'prochnow': 1, 'ominous': 1, 'portents': 1, 'elicit': 1, 'yawns': 1, 'biehn': 1, 'dynamic': 1, 'shtickbr': 1, 'summers': 1, 'apocalypse': 1, 'comesbeep': 1, 'creepshow': 1, 'perfecting': 1, 'viewer': 1, 'wondering': 1, 'random': 1, 'saras': 1, 'shower': 1, 'appeals': 1, 'libido': 1, 'moviesthis': 1, 'seeat': 1, 'oksoguy': 1, 'bitten': 1, 'wellsorta': 1, 'assume': 1, 'bats': 1, 'fly': 1, 'radar': 1, 'bugs': 1, 'attacking': 1, 'tho': 1, 'violations': 1, 'security': 1, 'regs': 1, 'achieved': 1, 'abysmal': 1, 'curious': 1, 'begins': 1, 'submarine': 1, 'crew': 1, 'outperforms': 1, 'shotsbr': 1, 'dechifered': 1, 'contrary': 1, 'meshbr': 1, 'caliber': 1, 'madsen': 1, 'maximum': 1, 'destroyed': 1, 'closebr': 1, 'julian': 1, 'sands': 1, 'hes': 1, 'pressed': 1, 'movesoslowlyzzzzzzzzzzzzbr': 1, 'vcr': 1, 'pills': 1, 'actionviolence': 1, 'ridiculousbr': 1, 'presence': 1, 'burton': 1, 'mastroianni': 1, 'tragic': 1, 'italians': 1, 'mastroiannimovie': 1, 'cosmatos': 1, 'artmovie': 1, 'scared': 1, 'heck': 1, 'sixteenbr': 1, 'animated': 1, 'uninteresting': 1, 'spend': 1, 'partially': 1, 'accents': 1, 'mumbled': 1, 'occassionaly': 1, 'gorythe': 1, 'thoughno': 1, 'pun': 1, 'disclaimer': 1, 'peril': 1, 'slugs': 1, 'rodney': 1, 'dangerfield': 1, 'oneis': 1, 'whack': 1, 'funnytheir': 1, 'womens': 1, 'porno': 1, '45': 1, 'focus': 1, 'resolving': 1, 'dangerous': 1, 'uh': 1, 'technical': 1, 'concepts': 1, 'suspenseful': 1, 'blasphemous': 1, 'roll': 1, 'sum': 1, 'skanky': 1, 'disease': 1, 'turning': 1, 'zombies': 1, 'consists': 1, 'smoking': 1, 'meat': 1, 'swear': 1, 'sucky': 1, 'prophecy': 1, 'dud': 1, 'origional': 1, 'lucille': 1, 'ball': 1, 'hairbr': 1, 'bought': 1, 'ranked': 1, 'perhapsbr': 1, 'sophia': 1, 'aida': 1, 'lipsync': 1, 'terms': 1, 'mouthing': 1, 'o': 1, 'patria': 1, 'leans': 1, 'stone': 1, 'wall': 1, 'canvas': 1, 'billows': 1, 'shakes': 1, 'reign': 1, 'strung': 1, 'storybr': 1, 'dean': 1, 'cain': 1, 'againbr': 1, 'dragons': 1, 'disgustbr': 1, 'barf': 1, 'fiendish': 1, 'comedian': 1, 'unworthy': 1, 'undeserving': 1, 'career': 1, 'shut': 1, 'prologue': 1, 'manchus': 1, 'birthday': 1, 'assassins': 1, 'drops': 1, 'faster': 1, 'sprayed': 1, 'cameo': 1, 'cato': 1, 'figurative': 1, 'wink': 1, 'betsy': 1, 'drake': 1, 'reinforces': 1, 'stalker': 1, 'cg': 1, 'north': 1, 'northwest': 1, 'banner': 1, 'sheffer': 1, 'andrea': 1, 'timeits': 1, 'appalling': 1, 'somehow': 1, '1988': 1, 'earlier': 1, 'motion': 1, 'weep': 1, 'parents': 1, 'inane': 1, 'listen': 1, 'banal': 1, 'enidblytonmeetsstrugglingwannabeartists': 1, 'vomit': 1, 'picked': 1, 'storeits': 1, 'liza': 1, 'cause': 1, 'crude': 1, 'alas': 1, 'judging': 1, 'imdb': 1, 'storyplot': 1, 'bubbly': 1, 'wowthis': 1, 'dumbest': 1, 'classand': 1, 'againand': 1, 'sympathy': 1, 'invasion': 1, 'blob': 1, 'meteorite': 1, 'host': 1, 'absurd': 1, 'wash': 1, 'impenetrable': 1, 'ghastly': 1, 'eversplendid': 1, 'cule': 1, 'proximity': 1, 'convict': 1, 'thinks': 1, 'prison': 1, 'staff': 1, 'ordinary': 1, 'actiondrama': 1, 'stereotypical': 1, 'developed': 1, 'forgettable': 1, 'commentary': 1, 'uptight': 1, 'voyeur': 1, 'commit': 1, 'suicide': 1, 'encounters': 1, 'spirited': 1, 'badseed': 1, 'discover': 1, 'exploitation': 1, 'flicklots': 1, 'actingthe': 1, 'werewolf': 1, 'makeup': 1, 'laughcomplete': 1, 'rubbisheven': 1, 'horrorplease': 1, 'shockingly': 1, 'downey': 1, 'afternoon': 1, 'richly': 1, 'deserved': 1, 'borrow': 1, 'parker': 1, 'tossed': 1, 'asidebr': 1, 'lightly': 1, 'forcebr': 1, 'excruciating': 1, 'greenaway': 1, 'fanbr': 1, 'mindnumbingly': 1, 'awfulbr': 1, 'artistic': 1, 'merit': 1, 'poltergeist': 1, 'texas': 1, 'chainsaw': 1, 'classed': 1, 'knowbr': 1, 'capable': 1, 'deadly': 1, 'rehash': 1, 'subgenre': 1, 'setpieces': 1, 'weve': 1, 'treatment': 1, 'standards': 1, 'toronto': 1, 'wasting': 1, 'whatsoeverbr': 1, 'steer': 1, 'turgid': 1, 'feeble': 1, 'characterization': 1, 'harvey': 1, 'keitel': 1, 'offduty': 1, 'hitman': 1, 'tensionfree': 1, 'conspire': 1, 'unfunniest': 1, 'extract': 1, 'amc': 1, 'considered': 1, 'jack': 1, 'flawless': 1, 'audrey': 1, 'tautou': 1, 'states': 1, 'upcoming': 1, 'amelie': 1, 'ultimate': 1, 'phrase': 1, 'lindsay': 1, 'crouse': 1, 'mantegna': 1, 'shrink': 1, 'sleazy': 1, 'conman': 1, 'latenight': 1, 'present': 1, 'instant': 1, 'moneymakers': 1, 'forgotten': 1, 'todays': 1, 'youngsters': 1, 'theyll': 1, 'grow': 1, 'appreciation': 1, 'met': 1, 'randomly': 1, 'carrey': 1, 'knowing': 1, 'goof': 1, 'dozen': 1, 'meryl': 1, 'streep': 1, 'filled': 1, 'genii': 1, 'bottle': 1, 'remembered': 1, 'fantasy': 1, 'wished': 1, 'emotional': 1, '29': 1, 'jessica': 1, 'alba': 1, 'thomas': 1, 'restraint': 1, 'resolution': 1, 'couldve': 1, 'dignity': 1, 'creepinesssniffing': 1, 'babies': 1, 'broadway': 1, 'sing': 1, 'thin': 1, 'indeed': 1, 'candys': 1, 'crime': 1, 'searching': 1, 'farbr': 1, 'audiences': 1, 'cheering': 1, 'weekday': 1, 'perfectly': 1, 'psyching': 1, 'mirror': 1, 'gigs': 1, 'inspired': 1, 'building': 1, 'amounts': 1, 'built': 1, 'stores': 1, 'net': 1, 'luck': 1, 'glover': 1, 'alan': 1, 'raimy': 1, 'sport': 1, 'von': 1, 'trier': 1, 'rank': 1, 'breaking': 1, 'waves': 1, 'latest': 1, 'dancer': 1, 'picturethe': 1, 'framing': 1, 'sandra': 1, 'laterbr': 1, 'dogma': 1, '95': 1, 'painting': 1, 'terribly': 1, 'matt': 1, 'dillon': 1, 'skerritt': 1, 'backdrop': 1, 'memorable': 1, 'tommy': 1, 'jones': 1, 'bruce': 1, 'dern': 1, 'passion': 1, '46': 1, 'simons': 1, 'crafted': 1, 'saks': 1, 'matthau': 1, 'delivers': 1, 'nobody': 1, 'enoy': 1, 'funnny': 1, 'campy': 1, 'elvira': 1, 'frownbuster': 1, 'fail': 1, 'commercially': 1, 'sharp': 1, 'shelton': 1, 'kurt': 1, 'manic': 1, 'nerd': 1, 'renter': 1, 'gangster': 1, 'notch': 1, '250': 1, '80s': 1, 'families': 1, 'credit': 1, 'spectacular': 1, 'theirs': 1, 'didbr': 1, 'rubebr': 1, 'luv': 1, 'ravens': 1, 'loads': 1, 'peculiar': 1, 'footwear': 1, 'symbolism': 1, 'barefoot': 1, 'silliest': 1, 'subtitles': 1, 'wicked': 1, 'mjh': 1, 'sabrina': 1, 'wake': 1, 'facebr': 1, 'profoundly': 1, 'progression': 1, 'seamless': 1, 'lighting': 1, 'techniques': 1, 'orson': 1, 'welles': 1, 'lady': 1, 'shanghai': 1, 'citizen': 1, 'kane': 1, 'independent': 1, 'carried': 1, 'transportive': 1, 'fungal': 1, 'maypo': 1, 'stomach': 1, 'maltex': 1, 'wheatena': 1, 'granola': 1, 'anymore': 1, 'slop': 1, 'sherrys': 1, 'theme': 1, 'schiffer': 1, 'educatingbr': 1, 'anyway': 1, 'visuals': 1, 'classical': 1, 'knockout': 1, 'rave': 1, 'hong': 1, 'kong': 1, 'peak': 1, 'renaissance': 1, 'matrix': 1, 'ones': 1, 'war': 1, 'ai': 1, 'shocking': 1, 'shoved': 1, 'davids': 1, 'greatly': 1, 'captivates': 1, 'stumbled': 1, '4yrold': 1, 'desi': 1, 'seek': 1, 'lawrence': 1, 'fishburn': 1, 'ike': 1, 'turner': 1, 'guessing': 1, 'recomend': 1, 'execution': 1, 'displaying': 1, 'venue': 1, 'politics': 1, 'pave': 1, 'road': 1, 'tremendous': 1, 'suzy': 1, 'kendall': 1, 'shown': 1, 'decade': 1, 'german': 1, 'cavalry': 1, 'box': 1, 'chilling': 1, 'poisonous': 1, 'fanatical': 1, 'patriotism': 1, 'eroticism': 1, 'horses': 1, 'wearing': 1, 'gasmasks': 1, 'vividly': 1, 'including': 1, 'beach': 1, 'strongly': 1, 'loaded': 1, 'thoroughly': 1, 'guests': 1, 'yacht': 1, 'impromptu': 1, 'swim': 1, 'underwear': 1, 'risqué': 1, '1931': 1, 'oscarworthy': 1, 'animitronics': 1, 'telly': 1, 'unique': 1, 'confused': 1, 'level': 1, 'etc': 1, 'photographic': 1, 'stills': 1, 'resemble': 1, 'rembrandt': 1, 'prints': 1, 'hidden': 1, 'literate': 1, 'unpretentious': 1, 'ripoffs': 1, 'party': 1, 'proves': 1, 'hey': 1, 'starif': 1, 'cars': 1, 'blown': 1, 'descriptionssummaries': 1, 'wwi': 1, 'planes': 1, 'boats': 1, 'closeups': 1, 'plane': 1, 'torpedo': 1, 'boat': 1, 'heartily': 1, 'dan': 1, 'katzir': 1, 'simplicity': 1, 'angle': 1, 'rejuvinated': 1, 'lust': 1, 'frustrated': 1, 'autobiography': 1, 'directorproducer': 1, 'rabins': 1, 'assassination': 1, 'vonneguts': 1, 'known': 1, 'interestingly': 1, 'manipulation': 1, 'nolte': 1, 'arkin': 1, 'vonnegut': 1, 'stranger': 1, 'odd': 1, 'details': 1, 'sadness': 1, 'definitive': 1, 'hamlet': 1, 'cuts': 1, 'cat': 1, 'karlofflugosi': 1, 'collaboration': 1, 'karloff': 1, 'overacting': 1, 'samantha': 1, 'nick': 1, 'flirting': 1, 'hotel': 1, 'bravo': 1, 'station': 1, 'xfiles': 1, 'continues': 1, 'scully': 1, 'replacement': 1, 'duo': 1, 'gently': 1, 'subtly': 1, 'aids': 1, 'alluded': 1, 'gay': 1, 'age': 1, 'recommanded1': 1, 'familys': 1, 'step': 1, 'odyssey': 1, 'heartbreakingly': 1, 'wistful': 1, 'memory': 1, 'watches': 1, 'dara': 1, 'tomanovich': 1, 'dustin': 1, 'hoffman': 1, 'cruise': 1, 'similar': 1, 'artificial': 1, 'trivial': 1, 'comparison': 1, 'recognizable': 1, 'faces': 1, 'personally': 1, 'sweet': 1, 'winkler': 1, 'nonstop': 1, 'performer': 1, 'soapoperas': 1, 'conundrums': 1, 'testament': 1, 'ensemble': 1, 'storytelling': 1, 'fallible': 1, 'cope': 1, 'succeeding': 1, 'park': 1, 'factor': 1, 'naked': 1, 'h': 1, 'macy': 1, 'neve': 1, 'campbell': 1, 'donald': 1, 'traditional': 1, 'meant': 1, 'jiggling': 1, 'suffocates': 1, 'spectator': 1, 'extent': 1, 'objective': 1, 'trained': 1, 'psychopath': 1, 'rediscovering': 1, 'humanity': 1, 'near': 1, 'led': 1, 'scriptwriters': 1, 'sentimental': 1, 'cloudy': 1, 'wintry': 1, 'captures': 1, 'struggle': 1, 'identity': 1, 'ongoing': 1, 'teenage': 1, 'strangely': 1, 'documentarynot': 1, 'unsettling': 1, 'joy': 1, 'master': 1, 'convinced': 1, 'became': 1, 'actores': 1, 'field': 1, 'drum': 1, 'cook': 1, 'unsung': 1, 'hero': 1, 'everyones': 1, 'dream': 1, 'delivery': 1, 'baseball': 1, 'scrutiny': 1, 'realistic': 1, 'appears': 1, 'dennis': 1, 'quaid': 1, 'moves': 1, 'stances': 1, 'league': 1, 'pitcher': 1, 'stooge': 1, 'shortchristine': 1, 'mcintyre': 1, 'oneshe': 1, 'actressthe': 1, 'stooges': 1, 'shemp': 1, 'larrythis': 1, 'autumn': 1, 'link': 1, 'hypothetically': 1, 'downfall': 1, 'socrates': 1, 'memorized': 1, 'holds': 1, 'childhood': 1, 'brother': 1, 'respect': 1, 'fnm': 1, 'phoenix': 1, 'behaves': 1, 'confronting': 1, 'status': 1, 'quo': 1, 'izzard': 1, 'hysterical': 1, 'insightful': 1, 'represents': 1, 'niche': 1, 'worldbr': 1, 'americans': 1, 'standup': 1, 'routine': 1, 'due': 1, 'palonly': 1, 'availability': 1, 'neglected': 1, 'importance': 1, 'performing': 1, 'arts': 1, 'embedded': 1, 'rereleased': 1, 'lord': 1, 'rings': 1, 'glued': 1, 'older': 1, 'younger': 1, 'sensationalist': 1, 'notting': 1, 'hill': 1, 'bold': 1, 'understated': 1, 'integrity': 1, 'langlaise': 1, 'intellectually': 1, 'monsieur': 1, 'le': 1, 'directeur': 1, 'rohmer': 1, 'ideal': 1, 'anime': 1, 'dubbed': 1, '1999': 1, 'meaning': 1, 'obstinate': 1, 'description': 1, 'obviously': 1, 'ralph': 1, 'richardson': 1, 'merle': 1, 'oberon': 1, 'created': 1, 'mrs': 1, 'zodsworth': 1, 'donut': 1, 'post': 1, 'haste': 1, 'igor': 1, 'proof': 1, 'slovenian': 1, 'soul': 1, 'overtaken': 1, 'rendering': 1, 'wartime': 1, 'unknown': 1, 'faultless': 1, 'heartrending': 1, 'brotherly': 1, 'serbian': 1, 'everi': 1, 'wood': 1, 'engaging': 1, 'wellmade': 1, 'liam': 1, 'neeson': 1, 'singing': 1, 'kelly': 1, 'liberty': 1, 'meet': 1, 'break': 1, 'business': 1, 'lovers': 1, 'adrian': 1, 'pasdar': 1, 'fascinating': 1, 'buster': 1, 'voice': 1, 'sequences': 1, 'hang': 1, 'chariot': 1, 'shorts': 1, 'goat': 1, 'general': 1, 'multiple': 1, 'funnier': 1, 'twin': 1, 'sisters': 1, 'soo': 1, 'thingy': 1, 'robbed': 1, 'oscar': 1, 'charlies': 1, 'angels': 1, 'costars': 1, 'henner': 1, 'piscopo': 1, 'danny': 1, 'devito': 1, 'award': 1, 'nominations': 1, 'calibre': 1, 'entranced': 1, 'resist': 1, 'swing': 1, 'hereid': 1, 'unnoticed': 1, 'rerelease': 1, 'publicity': 1, 'promote': 1, 'paxtonbr': 1, 'wilderness': 1, 'natural': 1, 'understanding': 1, 'harmony': 1, 'nature': 1, 'extreme': 1, 'naturalist': 1, 'treasurebr': 1, 'definition': 1, 'continue': 1, 'strikes': 1, 'cord': 1, 'scott': 1, 'glenn': 1, 'winch': 1, 'directors': 1, 'tetsuo': 1, 'eisenstein': 1, 'wesleyan': 1, 'university': 1, 'haunts': 1, 'reveals': 1, 'frightening': 1, 'aspects': 1, 'angers': 1, 'ratings': 1, 'geniusbr': 1, 'christ': 1, 'sakebr': 1, 'boost': 1, 'dee': 1, 'witherspoon': 1, 'foundation': 1, 'riffing': 1, 'mvovies': 1, '200': 1, 'tonight': 1, 'waters': 1, '25yrs': 1, 'rivals': 1, 'zatoichi': 1, 'katsu': 1, 'exciting': 1, 'swordplay': 1, 'allactioncomedyheroicsand': 1, 'actorsgunga': 1, 'din': 1, 'remain': 1, 'moviesexcellent': 1, 'picturei': 1, 'farrah': 1, 'fawcett': 1, 'gritty': 1, 'tables': 1, 'russo': 1, 'contains': 1, 'mike': 1, 'smooth': 1, 'criminal': 1, 'mj': 1, 'rockers': 1, 'simmons': 1, 'ozzy': 1, 'osbourne': 1, 'masterpieces': 1, 'antonioni': 1, 'youth': 1, 'distraction': 1, 'happiness': 1, 'alienation': 1, 'materialism': 1, 'honor': 1, 'corruption': 1, 'artbr': 1, 'flicks': 1, 'darn': 1, 'chuckles': 1, 'horrorcomedy': 1, 'throughly': 1, 'tire': 1, 'fred': 1, 'ginger': 1, 'pleasure': 1, 'lucy': 1, 'grable': 1, 'car': 1, 'commercial': 1, 'shelby': 1, 'angelina': 1, 'cagebr': 1, 'bgbr': 1, 'loving': 1, 'colours': 1, 'discovered': 1, 'atlantis': 1, 'explore': 1, 'golden': 1, 'someplace': 1, 'reverted': 1, 'unravel': 1, 'elizabeth': 1, 'meter': 1, 'girlfriend': 1, 'tourettes': 1, 'syndrome': 1, 'amitabh': 1, 'bachan': 1, 'govinda': 1, 'timepass': 1, 'imitate': 1, 'attempting': 1, 'realise': 1, 'immediately': 1, 'toobr': 1, 'essentially': 1, 'chinese': 1, 'ghost': 1, 'installment': 1, 'subtlety': 1, 'tony': 1, 'leung': 1, 'cgs': 1, 'joan': 1, 'hart': 1, 'match': 1, 'clarissa': 1, 'explains': 1, 'marvelous': 1, 'slayer': 1, 'ronald': 1, 'colman': 1, 'othello': 1, 'persona': 1, 'brian': 1, 'palmas': 1, 'undeniable': 1, 'virtuosity': 1, 'camouflage': 1, 'disguised': 1, 'psycho': 1, 'carbon': 1, 'climax': 1, 'improvement': 1, 'rauol': 1, 'richard': 1, 'dryfus': 1, 'dana': 1, 'delany': 1, 'babe': 1, 'following': 1, 'fate': 1, 'possess': 1, 'prize': 1, 'winchester': 1, '73': 1, 'cliche': 1, 'characterisations': 1, 'mann': 1, 'ramones': 1, 'biased': 1, 'uplifting': 1, 'alisan': 1, 'porter': 1, 'immensely': 1, 'mplex': 1, 'neighbors': 1, 'ills': 1, 'putting': 1, 'bath': 1, 'community': 1, 'reviewer': 1, 'heavy': 1, 'harsh': 1, 'realities': 1, 'playful': 1, 'dwell': 1, 'smiles': 1, 'biography': 1, 'poetry': 1, 'narration': 1, 'sir': 1, 'redgrave': 1, 'accessible': 1, 'exposure': 1, 'tvvideo': 1, 'slots': 1, 'stylized': 1, 'consequencesbr': 1, 'timesbr': 1, 'granted': 1, 'educational': 1, 'content': 1, 'foxes': 1, 'jodie': 1, 'foster': 1, 'cherie': 1, 'currie': 1, 'marilyn': 1, 'kagan': 1, 'kandice': 1, 'stroh': 1, 'radio': 1, 'donna': 1, 'rented': 1, 'blew': 1, 'engrossing': 1, 'allison': 1, 'deans': 1, 'stands': 1, 'balances': 1, 'melancholy': 1, 'iridescent': 1, 'energy': 1, 'weighted': 1, 'places': 1, 'passes': 1, 'danielle': 1, 'steele': 1, 'test': 1, 'andie': 1, 'macdowell': 1, 'perspective': 1, 'victims': 1, 'provokes': 1, 'antiracism': 1, 'sees': 1, 'historic': 1, 'bucketfuls': 1, 'skeltonpowelllahrobrien': 1, 'dynamite': 1, 'dorseydriven': 1, 'powells': 1, 'exceptional': 1, 'individual': 1, 'pizzazz': 1, 'drawings': 1, 'begun': 1, 'i´ve': 1, 'waited': 1, '21': 1, 'nooooo': 1, 'tip': 1, 'hat': 1, 'spinal': 1, 'tap': 1, 'anywaythe': 1, 'peanuts': 1, 'gangsters': 1, 'videos': 1, 'bucks': 1, 'alone': 1, 'bias': 1, 'concered': 1, 'wilder': 1, 'numerous': 1, 'additional': 1, 'detailing': 1, 'adventures': 1, 'larry': 1, 'smiling': 1, 'meg': 1, 'feelgood': 1, 'millennium': 1, 'vision': 1, 'establishes': 1, 'sf': 1, 'hail': 1, 'typically': 1, 'howard': 1, 'associated': 1, 'hunt': 1, 'travels': 1, 'japan': 1, 'sales': 1, 'pitch': 1, 'whoa': 1, 'bound': 1, 'getgo': 1, 'west': 1, 'losewest': 1, 'losing': 1, 'grabs': 1, 'honest': 1, 'portrayal': 1, 'paralysis': 1, 'panders': 1, 'topnotch': 1, 'flew': 1, 'cuckoos': 1, 'nest': 1, 'wordofmouth': 1, 'buzz': 1, 'disabled': 1, 'keeps': 1, 'price': 1, 'bet': 1, 'ala': 1, 'pulp': 1, 'suicides': 1, '810': 1, '1010': 1, 'references': 1, 'ladybug´s': 1, 'tribute': 1, 'lorre': 1, 'we´ll': 1, 'talk': 1, 'flik': 1, 'reaction': 1, 'wowyoure': 1, 'quiet': 1, 'outtakes': 1, 'errol': 1, 'flynns': 1, 'ward': 1, 'gut': 1, 'wrenching': 1, 'epic': 1, 'knees': 1, 'outside': 1, 'shaolin': 1, 'temple': 1, 'learn': 1, 'dogs': 1, 'epps': 1, 'deja': 1, 'remmi': 1, 'indie': 1, 'current': 1, '27': 1, 'premium': 1, 'channels': 1, 'available': 1, 'theory': 1, 'flight': 1, 'grabbed': 1, 'held': 1, 'feelings': 1, 'bytes': 1, 'fragile': 1, 'represented': 1, 'spain': 1, 'berlinale': 1, '2002': 1, 'grammar': 1, 'almodovars': 1, 'filmswell': 1, 'shouldnt': 1, 'vh1': 1, 'breathless': 1, 'marlene': 1, 'sleeper': 1, 'defines': 1, 'nicholas': 1, 'cage': 1, 'intricate': 1, 'awaybr': 1, 'whenever': 1, 'charged': 1, 'unbelivebly': 1, '1948': 1, 'wei': 1, 'weis': 1, 'catylast': 1, 'triangle': 1, 'oppurunity': 1, 'shipload': 1, 'towns': 1, 'daughters': 1, 'fathers': 1, 'extremes': 1, 'deter': 1, 'attempts': 1, 'maidens': 1, 'aid': 1, 'dispatch': 1, 'squad': 1, 'happen': 1, 'plummer': 1, 'dandy': 1, 'ribaldry': 1, 'unsurpassed': 1, 'gena': 1, 'cheech': 1, 'funthe': 1, 'maria': 1, 'adorable': 1, 'paulie': 1, 'sunday': 1, 'nicely': 1, 'plenty': 1, 'hardcore': 1, 'lauen': 1, 'montgomery': 1, 'venus': 1, 'thankfully': 1, 'gabriella': 1, 'hall': 1, 'violent': 1, 'highlander': 1, 'hehe': 1})

vocab_to_int
{'the': 1, 'a': 2, 'this': 3, 'and': 4, 'it': 5, 'i': 6, 'is': 7, 'of': 8, 'movie': 9, 'to': 10, 'was': 11, 'in': 12, 'that': 13, 'film': 14, 'you': 15, 'but': 16, 'one': 17, 'for': 18, 'not': 19, 'with': 20, 'br': 21, 'its': 22, 'on': 23, 'bad': 24, 'good': 25, 'as': 26, 'have': 27, 'be': 28, 'are': 29, 'great': 30, 'so': 31, 'if': 32, 'at': 33, 'like': 34, 'my': 35, 'all': 36, 'very': 37, 'see': 38, 'just': 39, 'an': 40, 'time': 41, 'from': 42, 'acting': 43, 'by': 44, 'ever': 45, 'seen': 46, 'movies': 47, 'dont': 48, 'watch': 49, 'what': 50, 'story': 51, 'me': 52, 'has': 53, 'really': 54, 'plot': 55, 'no': 56, 'some': 57, 'worst': 58, 'about': 59, 'out': 60, 'there': 61, 'only': 62, 'even': 63, 'will': 64, 'they': 65, 'too': 66, 'more': 67, 'when': 68, 'love': 69, 'much': 70, 'or': 71, 'can': 72, 'who': 73, 'he': 74, 'made': 75, 'his': 76, 'best': 77, 'had': 78, 'would': 79, 'were': 80, 'think': 81, 'up': 82, 'your': 83, 'how': 84, 'do': 85, 'saw': 86, 'people': 87, 'make': 88, 'go': 89, 'funny': 90, 'waste': 91, 'first': 92, 'could': 93, 'ive': 94, 'well': 95, 'watching': 96, 'because': 97, 'than': 98, 'better': 99, 'terrible': 100, 'did': 101, 'script': 102, 'any': 103, 'didnt': 104, 'way': 105, 'cast': 106, 'cant': 107, 'tv': 108, 'again': 109, 'into': 110, 'been': 111, 'never': 112, 'most': 113, 'get': 114, 'real': 115, 'comedy': 116, 'little': 117, 'characters': 118, 'actors': 119, 'special': 120, 'im': 121, 'why': 122, 'fun': 123, 'still': 124, 'effects': 125, 'should': 126, 'years': 127, 'after': 128, 'minutes': 129, 'boring': 130, 'films': 131, 'say': 132, 'thing': 133, 'end': 134, 'scenes': 135, 'their': 136, 'her': 137, 'money': 138, 'those': 139, 'know': 140, 'other': 141, 'got': 142, 'then': 143, 'rent': 144, 'over': 145, 'does': 146, 'nothing': 147, 'here': 148, '10': 149, 'life': 150, 'she': 151, 'wonderful': 152, 'performance': 153, 'being': 154, 'video': 155, 'want': 156, 'look': 157, 'which': 158, 'many': 159, 'also': 160, 'makes': 161, 'lot': 162, 'long': 163, 'poor': 164, 'worth': 165, 'whole': 166, 'classic': 167, 'old': 168, 'another': 169, 'interesting': 170, 'such': 171, 'character': 172, 'work': 173, 'scene': 174, 'ending': 175, 'true': 176, 'absolutely': 177, 'them': 178, 'horrible': 179, 'may': 180, 'especially': 181, 'we': 182, 'looks': 183, 'give': 184, 'humor': 185, 'awful': 186, 'while': 187, 'every': 188, 'least': 189, 'without': 190, 'liked': 191, 'believe': 192, 'pretty': 193, 'now': 194, 'actor': 195, 'horror': 196, 'sorry': 197, '1': 198, 'watched': 199, 'big': 200, 'wasnt': 201, 'avoid': 202, 'hard': 203, 'once': 204, 'times': 205, 'everyone': 206, 'music': 207, 'enjoyed': 208, 'excellent': 209, 'definitely': 210, 'far': 211, 'few': 212, 'same': 213, 'totally': 214, 'recommend': 215, 'written': 216, 'before': 217, 'doesnt': 218, 'must': 219, 'dialogue': 220, 'original': 221, 'put': 222, 'these': 223, 'director': 224, 'favorite': 225, 'am': 226, 'fan': 227, 'two': 228, 'stupid': 229, 'sequel': 230, 'seeing': 231, 'predictable': 232, 'enjoy': 233, 'last': 234, 'maybe': 235, 'action': 236, 'where': 237, 'thought': 238, 'sense': 239, 'year': 240, 'instead': 241, 'laugh': 242, 'found': 243, 'off': 244, 'shows': 245, 'going': 246, 'screen': 247, 'performances': 248, 'simply': 249, 'scary': 250, 'actually': 251, 'worse': 252, 'back': 253, 'youll': 254, 'youre': 255, 'low': 256, 'something': 257, 'down': 258, 'wonder': 259, 'through': 260, 'away': 261, 'yourself': 262, 'line': 263, 'talent': 264, 'direction': 265, 'anything': 266, 'loved': 267, 'show': 268, 'heart': 269, 'thats': 270, 'isnt': 271, 'find': 272, 'rating': 273, 'hilarious': 274, 'beautiful': 275, 'part': 276, 'weak': 277, 'piece': 278, 'although': 279, 'anyone': 280, 'gets': 281, 'done': 282, 'quite': 283, 'beginning': 284, 'feel': 285, 'dull': 286, 'second': 287, 'top': 288, 'buy': 289, 'always': 290, 'take': 291, 'budget': 292, 'family': 293, 'chance': 294, 'michael': 295, 'serious': 296, 'lame': 297, 'point': 298, 'seem': 299, 'idea': 300, 'production': 301, 'own': 302, 'highly': 303, 'gave': 304, 'bored': 305, 'soundtrack': 306, 'kind': 307, 'start': 308, 'someone': 309, 'between': 310, '2': 311, 'young': 312, 'laughs': 313, 'entertainment': 314, 'girl': 315, 'sort': 316, 'hope': 317, 'perfect': 318, 'gives': 319, 'right': 320, 'disney': 321, 'else': 322, 'mind': 323, 'stuff': 324, 'john': 325, 'remember': 326, 'things': 327, 'rather': 328, 'silly': 329, 'disappointed': 330, 'badly': 331, 'unless': 332, 'looking': 333, 'amazing': 334, 'poorly': 335, 'lots': 336, 'wait': 337, 'incredibly': 338, 'mean': 339, 'series': 340, 'version': 341, 'went': 342, 'moving': 343, 'role': 344, 'sure': 345, 'decent': 346, 'though': 347, 'night': 348, 'probably': 349, '20': 350, 'left': 351, 'save': 352, 'new': 353, 'children': 354, 'picture': 355, 'reason': 356, 'become': 357, '5': 358, 'throughout': 359, 'home': 360, 'ago': 361, 'day': 362, 'attempt': 363, 'him': 364, 'since': 365, 'felt': 366, 'play': 367, 'trying': 368, 'mr': 369, 'cinema': 370, 'book': 371, 'brilliant': 372, 'copy': 373, 'change': 374, 'major': 375, 'dvd': 376, 'opinion': 377, 'lines': 378, 'around': 379, 'crap': 380, 'able': 381, 'perhaps': 382, 'typical': 383, 'annoying': 384, 'romance': 385, 'talented': 386, 'storyline': 387, 'somewhat': 388, 'dog': 389, 'beyond': 390, 'world': 391, 'sad': 392, 'cartoon': 393, 'enough': 394, 'takes': 395, 'kids': 396, 'supposed': 397, 'woman': 398, 'gun': 399, 'documentary': 400, 'plays': 401, 'moments': 402, 'american': 403, 'main': 404, 'both': 405, 'theres': 406, 'redeeming': 407, 'none': 408, 'wasted': 409, 'easily': 410, 'seems': 411, 'disappointment': 412, 'women': 413, 'theater': 414, 'yes': 415, 'everything': 416, 'id': 417, 'need': 418, 'cool': 419, 'laughed': 420, 'question': 421, 'touching': 422, 'superb': 423, 'miss': 424, 'reality': 425, 'hell': 426, 'taste': 427, 'wrong': 428, 'impressive': 429, 'friends': 430, 'comment': 431, 'ok': 432, 'care': 433, 'starts': 434, 'truly': 435, 'imagine': 436, 'thinking': 437, 'acted': 438, 'example': 439, 'expect': 440, 'goes': 441, 'seemed': 442, 'henry': 443, 'sit': 444, 'premise': 445, 'slow': 446, 'short': 447, 'knew': 448, 'possibly': 449, 'stars': 450, 'apart': 451, 'dark': 452, 'certainly': 453, 'place': 454, 'missed': 455, 'act': 456, 'wife': 457, 'fine': 458, 'couldnt': 459, 'run': 460, 'come': 461, 'development': 462, 'child': 463, 'pathetic': 464, 'costs': 465, 'leave': 466, 'fight': 467, 'compared': 468, 'itself': 469, 'fantastic': 470, 'moment': 471, 'joke': 472, 'walked': 473, 'lost': 474, 'might': 475, 'friend': 476, 'feeling': 477, 'hold': 478, 'death': 479, 'quality': 480, 'told': 481, 'understand': 482, 'underrated': 483, 'blow': 484, 'oh': 485, 'particularly': 486, 'value': 487, 'man': 488, 'david': 489, 'three': 490, 'moviebr': 491, 'unwatchable': 492, 'huge': 493, 'summer': 494, 'ridiculous': 495, 'except': 496, 'read': 497, 'try': 498, 'greatest': 499, 'let': 500, 'sometimes': 501, 'cult': 502, 'filmed': 503, 'guy': 504, 'days': 505, 'live': 506, 'finish': 507, 'italian': 508, 'small': 509, 'outstanding': 510, 'wanted': 511, 'along': 512, 'matter': 513, 'please': 514, 'bother': 515, 'shame': 516, 'mess': 517, 'cheesy': 518, 'insomnia': 519, 'laughable': 520, 'potential': 521, 'ages': 522, 'despite': 523, 'tell': 524, 'deserves': 525, 'use': 526, 'renting': 527, 'b': 528, 'several': 529, 'took': 530, 'stinks': 531, 'five': 532, 'star': 533, 'mystery': 534, 'head': 535, 'jokes': 536, 'leaves': 537, 'rest': 538, 'cannot': 539, 'call': 540, 'masterpiece': 541, 'stick': 542, 'until': 543, 'basically': 544, 'thriller': 545, 'pointless': 546, 'crappy': 547, 'different': 548, 'late': 549, 'fast': 550, 'glad': 551, 'fell': 552, 'asleep': 553, 'emotion': 554, 'case': 555, 'directing': 556, 'bottom': 557, 'release': 558, 'earth': 559, 'doing': 560, 'job': 561, 'stop': 562, 'usual': 563, 'humour': 564, 'anybody': 565, 'included': 566, 'often': 567, 'surprised': 568, 'opportunity': 569, 'store': 570, 'course': 571, 'tries': 572, 'together': 573, 'himself': 574, 'sick': 575, 'class': 576, 'student': 577, 'turkey': 578, '7': 579, 'comes': 580, 'fact': 581, 'unfortunately': 582, 'bit': 583, 'cute': 584, 'yeah': 585, 'result': 586, 'given': 587, 'cheap': 588, 'havent': 589, 'pure': 590, 'trash': 591, 'our': 592, 'interest': 593, 'besides': 594, 'getting': 595, '3': 596, 'plan': 597, 'making': 598, 'entertaining': 599, 'god': 600, 'writing': 601, 'dollar': 602, 'genius': 603, 'full': 604, 'creepy': 605, 'set': 606, 'released': 607, 'human': 608, 'peter': 609, 'view': 610, 'eyes': 611, 'intended': 612, 'feature': 613, 'simple': 614, 'hardly': 615, 'stayed': 616, 'mans': 617, 'message': 618, 'botched': 619, 'editing': 620, 'guess': 621, 'screenplay': 622, 'williams': 623, 'stage': 624, 'high': 625, 'unfunny': 626, 'played': 627, 'add': 628, 'television': 629, 'us': 630, 'features': 631, 'annoyed': 632, 'lead': 633, 'scifi': 634, '4': 635, 'provide': 636, '25': 637, 'used': 638, 'values': 639, 'works': 640, 'fu': 641, 'impressed': 642, 'wont': 643, 'gene': 644, 'soon': 645, 'caught': 646, 'cried': 647, 'sex': 648, 'subject': 649, 'myself': 650, 'aint': 651, 'nearly': 652, 'cry': 653, 'aside': 654, 'japanese': 655, 'words': 656, 'sucks': 657, 'shot': 658, 'dr': 659, 'charm': 660, 'hours': 661, 'animal': 662, 'art': 663, 'effect': 664, 'contrived': 665, 'ron': 666, 'van': 667, 'episode': 668, 'review': 669, 'four': 670, 'involved': 671, 'hour': 672, 'suspense': 673, '15': 674, 'remarkable': 675, 'free': 676, 'julia': 677, 'smile': 678, 'face': 679, 'cash': 680, 'camera': 681, 'later': 682, 'dancing': 683, 'type': 684, '70s': 685, '210': 686, 'almost': 687, 'problems': 688, 'possible': 689, 'sounded': 690, 'russian': 691, 'intelligent': 692, 'looked': 693, 'century': 694, 'festival': 695, 'extremely': 696, 'beautifully': 697, 'attention': 698, 'likes': 699, 'rental': 700, 'cable': 701, 'supporting': 702, 'shelf': 703, 'killing': 704, 'paid': 705, 'wouldnt': 706, 'joe': 707, 'miserably': 708, 'animation': 709, 'itbr': 710, '110': 711, 'finally': 712, 'excuse': 713, 'martin': 714, 'begin': 715, 'fall': 716, 'angel': 717, 'town': 718, 'hollywood': 719, 'doubt': 720, 'garbage': 721, '410': 722, 'slasher': 723, 'cold': 724, 'cinematography': 725, 'king': 726, 'portrays': 727, 'person': 728, 'reviews': 729, 'dialog': 730, 'turned': 731, 'boy': 732, 'thrown': 733, 'failed': 734, 'camp': 735, 'impossible': 736, 'alien': 737, 'regret': 738, 'positive': 739, 'bunch': 740, 'plots': 741, 'surprise': 742, 'spending': 743, 'side': 744, 'air': 745, 'ruined': 746, 'tells': 747, 'english': 748, 'difficult': 749, 'couple': 750, 'puts': 751, 'yet': 752, 'justice': 753, 'youve': 754, 'admit': 755, 'help': 756, 'comments': 757, 'spent': 758, 'waiting': 759, 'collection': 760, 'alot': 761, 'nine': 762, 'crazy': 763, 'appealing': 764, 'form': 765, 'force': 766, 'comic': 767, 'tale': 768, 'okay': 769, 'wish': 770, 'unpleasant': 771, 'amateurish': 772, 'sat': 773, 'silent': 774, 'past': 775, 'sellers': 776, 'adventure': 777, 'youd': 778, 'arent': 779, 'shallow': 780, 'history': 781, 'james': 782, 'sounds': 783, 'china': 784, 'feels': 785, 'british': 786, 'total': 787, 'kill': 788, 'mostly': 789, 'hit': 790, 'ends': 791, 'keep': 792, 'girls': 793, 'during': 794, 'further': 795, 'qualities': 796, 'name': 797, 'toilet': 798, 'vampire': 799, 'gore': 800, 'nudity': 801, 'gratuitous': 802, 'either': 803, 'powerful': 804, 'basic': 805, 'wow': 806, 'others': 807, 'drama': 808, 'school': 809, 'actresses': 810, 'list': 811, 'audience': 812, 'ranks': 813, 'jr': 814, 'robin': 815, 'wants': 816, 'suck': 817, 'produced': 818, 'filmmaker': 819, 'tim': 820, 'said': 821, 'mediocre': 822, 'vampires': 823, 'brooks': 824, 'sucked': 825, 'kid': 826, 'dance': 827, 'compelling': 828, 'talking': 829, 'combination': 830, 'mia': 831, 'surprisingly': 832, 'tom': 833, 'reasons': 834, 'popular': 835, 'starring': 836, 'terrific': 837, 'pity': 838, 'breasts': 839, 'clear': 840, 'turns': 841, 'hear': 842, 'songs': 843, 'mom': 844, 'kept': 845, 'hundred': 846, 'subtle': 847, 'emotions': 848, 'higher': 849, 'pacino': 850, 'stunning': 851, 'melodrama': 852, 'awesome': 853, 'incredible': 854, 'twice': 855, 'fresh': 856, 'stand': 857, 'lovely': 858, 'strong': 859, 'future': 860, 'cares': 861, 'sailors': 862, 'length': 863, 'enjoyable': 864, 'talents': 865, 'grease': 866, 'prefer': 867, 'eighties': 868, 'teenager': 869, 'silver': 870, 'lousy': 871, 'kinda': 872, 'cure': 873, 'drink': 874, 'invisible': 875, 'running': 876, 'iii': 877, 'tremors': 878, 'nowhere': 879, 'walk': 880, 'saying': 881, 'forget': 882, 'lowbudget': 883, 'gem': 884, 'guns': 885, 'iq': 886, 'mary': 887, 'la': 888, 'william': 889, 'remake': 890, 'bland': 891, 'cheese': 892, 'experience': 893, 'cameras': 894, 'style': 895, 'points': 896, 'weeks': 897, 'favor': 898, 'damme': 899, 'sports': 900, 'black': 901, 'worked': 902, 'half': 903, 'already': 904, 'twist': 905, 'based': 906, 'page': 907, 'f': 908, 'min': 909, 'overall': 910, 'roberts': 911, 'dumb': 912, 'happy': 913, 'ended': 914, 'relationships': 915, 'coming': 916, 'impression': 917, 'billy': 918, 'normally': 919, 'brings': 920, 'laughter': 921, 'bring': 922, 'die': 923, 'paint': 924, 'entire': 925, 'problem': 926, 'magical': 927, '300': 928, 'grade': 929, 'forward': 930, 'fits': 931, 'early': 932, 'pretentious': 933, 'freddy': 934, 'interaction': 935, 'followed': 936, 'jewish': 937, 'costumes': 938, 'warped': 939, 'fights': 940, 'photographed': 941, 'raise': 942, 'stewart': 943, 'blend': 944, 'catch': 945, 'appearance': 946, 'male': 947, 'themselves': 948, 'suggests': 949, 'street': 950, 'actual': 951, 'theatre': 952, 'fails': 953, 'threw': 954, 'sleep': 955, 'cliched': 956, 'pay': 957, 'slam': 958, 'disappointing': 959, 'amused': 960, 'meets': 961, 'cartoons': 962, 'advice': 963, 'olivier': 964, 'racist': 965, 'police': 966, 'worthwhile': 967, 'sets': 968, 'racing': 969, 'having': 970, 'priest': 971, 'technically': 972, 'utterly': 973, 'disturbing': 974, 'rarely': 975, 'tension': 976, 'expecting': 977, 'don': 978, 'johnson': 979, 'cut': 980, 'obvious': 981, '8': 982, 'flick': 983, 'satire': 984, 'redemption': 985, 'screwed': 986, 'ridiculously': 987, 'offer': 988, 'lower': 989, 'minute': 990, 'watchbr': 991, 'finding': 992, '1980': 993, '310': 994, 'claiming': 995, 'elvis': 996, 'carter': 997, 'worthy': 998, 'figure': 999, 'cover': 1000, 'messed': 1001, 'rated': 1002, 'ill': 1003, 'animals': 1004, 'indian': 1005, 'plain': 1006, 'sight': 1007, 'ask': 1008, 'follow': 1009, 'charlie': 1010, 'chaplin': 1011, 'himbr': 1012, 'lets': 1013, 'team': 1014, 'root': 1015, 'provides': 1016, 'saving': 1017, 'grace': 1018, 'pecker': 1019, 'dimensional': 1020, 'viewers': 1021, 'belief': 1022, 'close': 1023, 'local': 1024, 'onebr': 1025, 'supposedly': 1026, 'ways': 1027, 'spot': 1028, 'manages': 1029, 'creditable': 1030, 'branagh': 1031, 'under': 1032, 'missing': 1033, 'empty': 1034, 'clearly': 1035, 'next': 1036, 'ugh': 1037, 'hats': 1038, 'suitable': 1039, 'body': 1040, 'u': 1041, 'werent': 1042, 'hopelessly': 1043, '101': 1044, 'however': 1045, 'generally': 1046, 'entertained': 1047, 'critical': 1048, '30': 1049, 'expected': 1050, 'tedious': 1051, 'despicable': 1052, 'unhappy': 1053, 'complete': 1054, 'western': 1055, 'worlds': 1056, 'funniest': 1057, 'betty': 1058, 'thanks': 1059, 'pet': 1060, 'bore': 1061, 'photography': 1062, 'somewhere': 1063, 'quit': 1064, 'ahead': 1065, 'reasonably': 1066, 'journey': 1067, 'magnificent': 1068, 'duchovny': 1069, 'decide': 1070, 'neither': 1071, 'upon': 1072, 'sums': 1073, 'heads': 1074, 'mood': 1075, 'santa': 1076, 'mixes': 1077, 'satan': 1078, 'whatever': 1079, 'painful': 1080, 'ben': 1081, 'speaks': 1082, 'unbelievable': 1083, 'ii': 1084, 'don´t': 1085, 'recent': 1086, 'rip': 1087, 'gonna': 1088, 'filmbr': 1089, 'mebr': 1090, 'fx': 1091, 'nicole': 1092, 'kidman': 1093, 'gone': 1094, 'pass': 1095, 'returns': 1096, 'killed': 1097, 'favour': 1098, 'scream': 1099, 'needed': 1100, 'sleeping': 1101, 'draws': 1102, 'renewed': 1103, 'race': 1104, 'lacks': 1105, 'front': 1106, 'dying': 1107, 'weather': 1108, 'background': 1109, 'lifeless': 1110, 'attempted': 1111, 'illogical': 1112, 'regarded': 1113, 'suggest': 1114, 'corny': 1115, 'men': 1116, 'lynch': 1117, 'highschool': 1118, 'insufferable': 1119, 'intentions': 1120, 'showed': 1121, 'novel': 1122, 'changed': 1123, 'african': 1124, 'tried': 1125, 'sorta': 1126, 'oneliners': 1127, 'mulder': 1128, 'chemistry': 1129, 'lowest': 1130, 'theaters': 1131, 'zombie': 1132, 'sound': 1133, 'neat': 1134, 'success': 1135, 'lack': 1136, 'channel': 1137, 'violence': 1138, 'greater': 1139, '610': 1140, 'nice': 1141, 'agree': 1142, 'moved': 1143, 'reminded': 1144, 'smart': 1145, 'stories': 1146, 'directed': 1147, 'suffice': 1148, 'josh': 1149, 'leonard': 1150, 'smith': 1151, 'each': 1152, 'ashamed': 1153, 'coupe': 1154, 'desperate': 1155, '6': 1156, 'started': 1157, 'it´s': 1158, 'i´m': 1159, 'stay': 1160, 'mix': 1161, 'bond': 1162, 'fooled': 1163, 'depressing': 1164, 'color': 1165, 'club': 1166, 'seriously': 1167, 'inspiring': 1168, 'aliens': 1169, 'ludicrous': 1170, 'showing': 1171, 'deep': 1172, 'reference': 1173, 'creators': 1174, 'relationship': 1175, 'suit': 1176, 'christopher': 1177, 'situations': 1178, 'speaking': 1179, 'strange': 1180, 'mel': 1181, 'ms': 1182, 'cruel': 1183, 'theyre': 1184, 'genuinely': 1185, 'concept': 1186, 'spoiler': 1187, 'olds': 1188, 'taxi': 1189, 'driver': 1190, 'filmmakers': 1191, 'robert': 1192, '100': 1193, 'unrealistic': 1194, 'votes': 1195, 'memories': 1196, '1990': 1197, '2001br': 1198, 'implausible': 1199, 'happenbr': 1200, 'light': 1201, 'nasty': 1202, 'skip': 1203, 'barbie': 1204, 'morris': 1205, 'teen': 1206, 'consistent': 1207, 'becomes': 1208, 'tone': 1209, 'support': 1210, 'believable': 1211, 'tour': 1212, 'de': 1213, 'lightweight': 1214, 'thinly': 1215, 'ned': 1216, 'australian': 1217, 'america': 1218, 'means': 1219, 'mtv': 1220, 'gags': 1221, 'cell': 1222, 'mad': 1223, 'expectations': 1224, 'excited': 1225, 'country': 1226, 'courage': 1227, 'mummy': 1228, 'average': 1229, 'french': 1230, 'columbo': 1231, 'falk': 1232, 'forbr': 1233, 'chris': 1234, 'nervous': 1235, 'finished': 1236, 'formula': 1237, 'fabulous': 1238, 'ford': 1239, '19': 1240, 'fire': 1241, 'cliches': 1242, 'cameos': 1243, 'quote': 1244, 'buffy': 1245, 'lacking': 1246, 'bothered': 1247, 'soap': 1248, 'opera': 1249, 'bat': 1250, 'eat': 1251, 'humans': 1252, 'fans': 1253, 'drawn': 1254, 'judge': 1255, 'hasnt': 1256, 'pop': 1257, 'event': 1258, 'massacre': 1259, 'innocent': 1260, 'practically': 1261, 'boobs': 1262, 'credits': 1263, 'added': 1264, 'check': 1265, 'red': 1266, 'loren': 1267, 'onto': 1268, 'manchu': 1269, 'hands': 1270, 'opening': 1271, 'training': 1272, 'amusing': 1273, 'hair': 1274, 'says': 1275, 'roth': 1276, 'roles': 1277, 'max': 1278, 'dorothy': 1279, 'fake': 1280, 'tongue': 1281, 'rubbish': 1282, 'lowe': 1283, 'unemotional': 1284, 'attractive': 1285, 'hopefully': 1286, 'otherwise': 1287, 'completely': 1288, 'dire': 1289, 'lemmon': 1290, 'consider': 1291, 'enchanting': 1292, 'exactly': 1293, 'destined': 1294, 'jim': 1295, 'romantic': 1296, 'turn': 1297, 'gorgeous': 1298, 'today': 1299, 'third': 1300, 'absorbing': 1301, 'actress': 1302, 'shes': 1303, 'praise': 1304, 'favourite': 1305, 'came': 1306, 'disagree': 1307, 'evening': 1308, 'ray': 1309, 'move': 1310, 'called': 1311, 'definite': 1312, 'lars': 1313, 'beauty': 1314, 'solid': 1315, 'lee': 1316, 'hate': 1317, 'hrpuff': 1318, 'growing': 1319, 'superbly': 1320, 'immense': 1321, 'rock': 1322, 'russell': 1323, 'al': 1324, 'share': 1325, 'tape': 1326, 'kungfu': 1327, 'unforgettable': 1328, 'excellently': 1329, 'morning': 1330, 'terrifying': 1331, 'damn': 1332, 'song': 1333, 'learned': 1334, 'evil': 1335, 'everybody': 1336, 'sean': 1337, 'connery': 1338, 'gas': 1339, 'attack': 1340, 'private': 1341, 'ryan': 1342, 'comedic': 1343, 'creative': 1344, 'killer': 1345, 'cobra': 1346, 'touches': 1347, '90': 1348, 'verry': 1349, 'surely': 1350, 'heartwarming': 1351, 'touched': 1352, 'soldier': 1353, 'mustsee': 1354, 'twists': 1355, 'super': 1356, 'deals': 1357, 'visually': 1358, 'rain': 1359, 'lifetime': 1360, 'standard': 1361, 'south': 1362, 'mature': 1363, 'heard': 1364, 'sutherland': 1365, 'taken': 1366, 'fiction': 1367, 'truth': 1368, 'watchable': 1369, 'tired': 1370, 'divine': 1371, 'm': 1372, 'treat': 1373, 'portuguese': 1374, 'wild': 1375, 'thank': 1376, 'wacky': 1377, 'rare': 1378, 'solino': 1379, 'germany': 1380, 'unpredictable': 1381, 'outstandingit': 1382, 'downtoearth': 1383, 'brought': 1384, 'tears': 1385, 'afterwards': 1386, 'favorites': 1387, 'musical': 1388, 'keaton': 1389, 'keatons': 1390, 'finest': 1391, 'marykate': 1392, 'ashley': 1393, 'delightful': 1394, 'madness': 1395, 'meadows': 1396, 'genre': 1397, 'rape': 1398, 'medicine': 1399, 'numbers': 1400, 'grew': 1401, 'flying': 1402, 'warming': 1403, 'effective': 1404, 'telling': 1405, 'melissa': 1406, 'shines': 1407, 'results': 1408, 'winning': 1409, 'curly': 1410, 'sue': 1411, 'room': 1412, 'appear': 1413, 'racism': 1414, 'partly': 1415, 'east': 1416, 'lingered': 1417, 'kung': 1418, 'omar': 1419, 'unlikeable': 1420, 'deneuve': 1421, 'auteuil': 1422, 'travolta': 1423, 'olivia': 1424, 'newton': 1425, 'teens': 1426, 'sandy': 1427, 'traci': 1428, 'lords': 1429, 'earning': 1430, 'living': 1431, 'leagues': 1432, 'viewed': 1433, 'remains': 1434, 'puerile': 1435, 'beaten': 1436, 'voted': 1437, 'screw': 1438, 'lose': 1439, 'wooden': 1440, 'cardboard': 1441, 'allbr': 1442, 'rotten': 1443, 'moviethe': 1444, 'wasit': 1445, 'badthe': 1446, 'woefulthe': 1447, 'spotand': 1448, 'scenescrap': 1449, 'aspect': 1450, 'giant': 1451, 'crabs': 1452, 'cursing': 1453, 'samurai': 1454, 'ghosties': 1455, 'beer': 1456, 'scripted': 1457, 'edited': 1458, 'flaws': 1459, 'lanes': 1460, 'daughter': 1461, 'passing': 1462, 'basks': 1463, 'innocence': 1464, 'snooze': 1465, 'fest': 1466, 'personable': 1467, 'trite': 1468, 'victor': 1469, 'rasuk': 1470, 'charisma': 1471, 'storyteller': 1472, 'viewing': 1473, 'omega': 1474, 'codebr': 1475, 'nonactors': 1476, 'group': 1477, 'mulletrific': 1478, 'clips': 1479, 'steves': 1480, 'planet': 1481, 'spliced': 1482, 'loosely': 1483, 'constructed': 1484, 'fighting': 1485, 'definate': 1486, 'endulge': 1487, 'clerks': 1488, 'el': 1489, 'mariachi': 1490, 'taqueria': 1491, 'holden': 1492, 'kim': 1493, 'novak': 1494, 'genxer': 1495, 'originals': 1496, 'movieyes': 1497, 'kraft': 1498, 'improvised': 1499, 'handheld': 1500, 'directionless': 1501, 'ick': 1502, 'gretta': 1503, 'sacchi': 1504, 'jaglom': 1505, 'eating': 1506, 'suited': 1507, '40': 1508, 'personal': 1509, 'skeptical': 1510, 'sacrificing': 1511, 'precious': 1512, 'jean': 1513, 'claude': 1514, 'blood': 1515, 'managing': 1516, 'excruciatingly': 1517, 'slowpaced': 1518, 'overscripted': 1519, 'tooclever': 1520, 'actingbr': 1521, 'twilight': 1522, 'zone': 1523, 'tales': 1524, 'crypt': 1525, 'burt': 1526, 'reynolds': 1527, 'checked': 1528, 'favorable': 1529, 'payoff': 1530, 'dudthe': 1531, 'oscar®': 1532, 'winner': 1533, 'murray': 1534, 'abraham': 1535, 'bomb': 1536, 'idiocy': 1537, 'backand': 1538, 'library': 1539, 'sheesh': 1540, 'chew': 1541, 'tin': 1542, 'fool': 1543, 'shave': 1544, 'grater': 1545, 'cusack': 1546, 'usually': 1547, 'endearing': 1548, 'crystal': 1549, 'crowd': 1550, 'shaquille': 1551, 'oneil': 1552, 'rapping': 1553, 'genie': 1554, 'apparently': 1555, 'suckered': 1556, 'dishing': 1557, 'produce': 1558, 'godawful': 1559, 'shaq': 1560, 'basketball': 1561, 'mst3000': 1562, 'blast': 1563, 'overdone': 1564, 'jacksons': 1565, 'consist': 1566, 'glow': 1567, 'freaky': 1568, 'slapstick': 1569, 'fastmoving': 1570, 'shots': 1571, 'growling': 1572, 'definitively': 1573, 'necrophilia': 1574, 'depicting': 1575, 'power': 1576, 'goddess': 1577, 'esamples': 1578, 'malcom': 1579, 'mcdowall': 1580, 'clockwork': 1581, 'orange': 1582, '43or': 1583, 'cropped': 1584, 'malcolm': 1585, 'mcdowell': 1586, 'lately': 1587, 'designed': 1588, 'yellow': 1589, 'filters': 1590, 'taped': 1591, '11': 1592, 'sugest': 1593, 'cort': 1594, 'social': 1595, 'activest': 1596, 'era': 1597, 'colm': 1598, 'meaney': 1599, 'charismanothing': 1600, 'selfobsessed': 1601, 'heroinaddicted': 1602, 'basket': 1603, 'cases': 1604, 'lounging': 1605, 'whining': 1606, 'lizards': 1607, 'molt': 1608, 'induce': 1609, 'narcolepsy': 1610, 'vs': 1611, 'jason': 1612, 'latter': 1613, 'labeling': 1614, 'promising': 1615, 'bed': 1616, 'wise': 1617, 'decision': 1618, 'workable': 1619, 'bussinessmen': 1620, 'mafia': 1621, 'appallingly': 1622, 'actedsummer': 1623, 'pheonix': 1624, 'asian': 1625, 'mid': 1626, '20th': 1627, '19th': 1628, 'ian': 1629, 'holm': 1630, 'anton': 1631, 'lesser': 1632, 'includes': 1633, 'kinds': 1634, 'submit': 1635, 'cannes': 1636, 'sucker': 1637, 'pyuns': 1638, 'esthetic': 1639, 'unfinished': 1640, 'letdown': 1641, 'pyun': 1642, 'develops': 1643, 'kathy': 1644, 'longs': 1645, 'amazed': 1646, 'summary': 1647, 'j': 1648, 'edgars': 1649, 'hoovers': 1650, 'constant': 1651, 'maintaining': 1652, 'pr': 1653, 'profile': 1654, 'jimmy': 1655, 'vera': 1656, 'miles': 1657, 'pleasantly': 1658, 'cameosimans': 1659, 'selfdeprecating': 1660, 'members': 1661, 'sopranos': 1662, 'typecast': 1663, 'biggest': 1664, 'space': 1665, 'screaming': 1666, 'selfabuse': 1667, 'avenging': 1668, 'elm': 1669, 'insulting': 1670, 'nope': 1671, 'magtena': 1672, 'earned': 1673, 'helga': 1674, 'admits': 1675, 'deepest': 1676, 'darkest': 1677, 'secret': 1678, 'arnold': 1679, 'doy': 1680, 'slim': 1681, 'slum': 1682, 'tvshop': 1683, 'straight': 1684, 'slightly': 1685, 'horridbr': 1686, 'realbr': 1687, 'actbr': 1688, '62': 1689, 'voyage': 1690, 'sea': 1691, 'ocean': 1692, 'electric': 1693, 'eel': 1694, 'tearteaser': 1695, 'steve': 1696, 'unbelievably': 1697, 'stomachbr': 1698, 'endingbr': 1699, 'ally': 1700, 'mcbeal': 1701, 'overrated': 1702, 'shortbr': 1703, 'chose': 1704, 'appropriate': 1705, 'starting': 1706, 'outstay': 1707, 'welcome': 1708, 'unclear': 1709, 'affected': 1710, 'lamentable': 1711, 'arnie': 1712, 'torture': 1713, 'gruner': 1714, 'jacques': 1715, 'foreign': 1716, 'exchange': 1717, 'college': 1718, 'single': 1719, 'handedly': 1720, 'wipes': 1721, 'mexican': 1722, 'gang': 1723, 'obnoxious': 1724, 'choreography': 1725, '99': 1726, 'flanders': 1727, 'alltime': 1728, 'academy': 1729, 'devil': 1730, 'brilliantly': 1731, 'paced': 1732, 'bolt': 1733, 'blue': 1734, 'plunges': 1735, 'centre': 1736, 'repugnant': 1737, 'bronson': 1738, 'vile': 1739, 'inconceivable': 1740, 'ming': 1741, 'merciless': 1742, 'bardwork': 1743, 'foul': 1744, 'fear': 1745, 'jump': 1746, 'undoubtedly': 1747, 'hardworking': 1748, 'responsible': 1749, 'husband': 1750, 'cheating': 1751, 'clinton': 1752, 'erabr': 1753, 'thrillerwith': 1754, 'appalled': 1755, 'scorsese': 1756, 'final': 1757, 'endbr': 1758, 'ugly': 1759, 'sent': 1760, 'mum': 1761, 'kiddies': 1762, 'scotts': 1763, 'blade': 1764, 'runner': 1765, 'greats': 1766, 'versus': 1767, 'didn´t': 1768, 'bye': 1769, '17': 1770, 'idiot': 1771, 'meters': 1772, 'celluloid': 1773, 'magazine': 1774, '1min': 1775, 'trailer': 1776, 'date': 1777, 'appreciate': 1778, 'loonies': 1779, 'clint': 1780, 'thenmaybebr': 1781, 'helen': 1782, 'bonham': 1783, 'movieand': 1784, 'ignore': 1785, 'monkeys': 1786, 'oops': 1787, 'apes': 1788, 'ape': 1789, 'pocket': 1790, 'bridget': 1791, 'joness': 1792, 'diary': 1793, 'stunt': 1794, 'delineation': 1795, 'easy': 1796, 'whos': 1797, 'whom': 1798, 'confuse': 1799, 'furthermore': 1800, 'denise': 1801, 'richards': 1802, 'billing': 1803, 'dubbing': 1804, 'yuck': 1805, 'jet': 1806, 'li': 1807, 'martial': 1808, 'artist': 1809, 'jackie': 1810, 'chan': 1811, 'somebody': 1812, 'jets': 1813, 'par': 1814, 'landscapes': 1815, 'pierce': 1816, 'brosnan': 1817, 'recognize': 1818, 'participation': 1819, 'klaus': 1820, 'kinski': 1821, 'overallbr': 1822, 'twenty': 1823, 'harmless': 1824, 'mine': 1825, 'enjoys': 1826, 'forced': 1827, 'kickingbr': 1828, 'knows': 1829, 'seriousbr': 1830, 'leastbr': 1831, 'listed': 1832, '100br': 1833, 'rightful': 1834, 'placebr': 1835, 'ishtar': 1836, 'ni': 1837, 'supporter': 1838, 'objectively': 1839, 'glorifying': 1840, 'ulster': 1841, 'nationalists': 1842, 'heavyhanded': 1843, 'antiviolence': 1844, 'messages': 1845, 'poetic': 1846, 'awkward': 1847, 'honestly': 1848, 'tripe': 1849, 'juniorhigh': 1850, 'skit': 1851, 'ferrells': 1852, 'wrestling': 1853, 'fetish': 1854, 'briefly': 1855, 'humorous': 1856, 'serves': 1857, '0': 1858, 'scale': 1859, 'christina': 1860, 'riccis': 1861, 'improbable': 1862, 'interpretation': 1863, 'e': 1864, 'parody': 1865, 'insult': 1866, 'intelligence': 1867, 'acadmey': 1868, 'mission': 1869, 'moscow': 1870, 'spoof': 1871, 'boringand': 1872, 'pie': 1873, 'previous': 1874, 'tooth': 1875, 'apartment': 1876, 'dedication': 1877, 'eerie': 1878, 'soundsbr': 1879, 'tiff': 1880, 'reminds': 1881, 'interestingbr': 1882, 'wellbr': 1883, 'psychedelic': 1884, 'pulsating': 1885, 'symmetric': 1886, 'abstract': 1887, 'images': 1888, 'drive': 1889, 'fullframe': 1890, 'eye': 1891, 'birds': 1892, 'silhouetted': 1893, 'against': 1894, 'colors': 1895, 'cup': 1896, 'tea': 1897, '8½': 1898, 'working': 1899, 'shakespeare': 1900, 'sources': 1901, 'source': 1902, 'whilst': 1903, 'wider': 1904, 'audiencebr': 1905, 'steals': 1906, 'fishburnes': 1907, 'nose': 1908, 'above': 1909, 'leprachaun': 1910, 'difference': 1911, 'ice': 1912, 't': 1913, 'chick': 1914, 'carrottpriceless': 1915, 'crossed': 1916, 'sled': 1917, 'snowman': 1918, 'costume': 1919, 'seams': 1920, 'visible': 1921, 'pitiful': 1922, 'caring': 1923, 'happened': 1924, 'disastrous': 1925, 'relief': 1926, 'scares': 1927, 'leaps': 1928, 'plotline': 1929, 'leading': 1930, 'ladys': 1931, 'lugosi': 1932, 'downhill': 1933, 'slide': 1934, 'tender': 1935, 'demented': 1936, 'scientist': 1937, 'fiance': 1938, 'decapitated': 1939, 'ogling': 1940, 'strippers': 1941, 'attach': 1942, 'noggin': 1943, 'exudes': 1944, 'slime': 1945, 'snail': 1946, 'protagonist': 1947, 'burn': 1948, 'dreary': 1949, 'setting': 1950, 'coachella': 1951, 'valley': 1952, 'screenwriting': 1953, 'function': 1954, 'sedative': 1955, 'stench': 1956, 'resembles': 1957, 'cowpies': 1958, 'sun': 1959, 'whew': 1960, 'flop': 1961, 'rewound': 1962, 'sniper': 1963, 'tighter': 1964, 'sharper': 1965, 'electrifying': 1966, 'plods': 1967, '820': 1968, '193139': 1969, 'informer': 1970, 'span': 1971, 'unredeemable': 1972, 'saga': 1973, 'loser': 1974, '1934': 1975, 'onepanel': 1976, 'fleischer': 1977, 'studios': 1978, 'billed': 1979, 'prime': 1980, 'code': 1981, 'shop': 1982, 'charge': 1983, 'static': 1984, 'painfully': 1985, 'miscast': 1986, 'smarmy': 1987, 'selfcentered': 1988, 'casanova': 1989, 'ladies': 1990, 'blemish': 1991, 'filmography': 1992, 'solely': 1993, 'satisfy': 1994, 'ego': 1995, 'jumpy': 1996, 'seebr': 1997, 'noisy': 1998, 'happening': 1999, 'baddddd': 2000, 'conventional': 2001, 'wisdom': 2002, 'seldom': 2003, 'occasional': 2004, 'exceptions': 2005, 'dalmatians': 2006, 'suffer': 2007, 'enigma': 2008, 'solve': 2009, 'illness': 2010, 'pitt': 2011, 'lewis': 2012, 'michelle': 2013, 'forbes': 2014, 'choose': 2015, 'paul': 2016, 'verhoevens': 2017, 'faint': 2018, 'porn': 2019, 'legit': 2020, 'central': 2021, 'erikas': 2022, 'carry': 2023, 'lamest': 2024, 'inflicted': 2025, 'unconvincing': 2026, 'military': 2027, 'amazingly': 2028, 'seethe': 2029, 'nonexistantthat': 2030, 'tails': 2031, 'oiled': 2032, 'mock': 2033, 'claus': 2034, 'merlin': 2035, 'moralizing': 2036, 'unappetizing': 2037, 'fretful': 2038, 'adam': 2039, 'sandler': 2040, 'fan1': 2041, 'lured': 2042, 'false': 2043, 'promise': 2044, 'bikiniclad': 2045, 'coverbut': 2046, 'horrorthe': 2047, 'gouge': 2048, 'repeatedly': 2049, 'bash': 2050, 'skull': 2051, 'indo': 2052, 'againnever': 2053, 'forgetbr': 2054, 'hobgoblins': 2055, 'gremlins': 2056, 'ripoff': 2057, 'stinkpile': 2058, 'chosen': 2059, 'ability': 2060, 'stilted': 2061, 'shadows': 2062, 'boom': 2063, 'mikes': 2064, 'lingering': 2065, 'kate': 2066, 'mulgrew': 2067, 'selfish': 2068, 'mother': 2069, 'affleck': 2070, 'teeth': 2071, 'capped': 2072, 'etta': 2073, 'volumes': 2074, '3000': 2075, 'imbd': 2076, 'obrien': 2077, 'mistake': 2078, 'summaryrun': 2079, 'gary': 2080, 'busey': 2081, 'scenarioisnt': 2082, 'nightmare': 2083, 'platos': 2084, 'runi': 2085, 'swedish': 2086, 'flimsy': 2087, 'disgrace': 2088, 'writers': 2089, 'hiding': 2090, 'abused': 2091, 'daddy': 2092, 'unoriginal': 2093, 'trust': 2094, '050': 2095, 'hairball': 2096, 'recently': 2097, 'coughed': 2098, 'amateur': 2099, 'zetajones': 2100, 'fanatics': 2101, 'credibility': 2102, 'binks': 2103, 'dissapointed': 2104, 'chuck': 2105, 'norris': 2106, 'wastes': 2107, 'chucks': 2108, 'originalitybr': 2109, 'score': 2110, '6510': 2111, '5510': 2112, 'disgustingly': 2113, 'badacted': 2114, 'stupidbr': 2115, 'mystic': 2116, 'eats': 2117, 'virgin': 2118, 'onesbr': 2119, 'you´ve': 2120, 'sweep': 2121, 'stuns': 2122, 'awes': 2123, 'artistry': 2124, 'convincing': 2125, 'arghhh': 2126, 'realized': 2127, 'resultbr': 2128, 'highs': 2129, 'lows': 2130, 'describes': 2131, 'africa': 2132, 'samebr': 2133, 'physical': 2134, 'pain': 2135, 'participated': 2136, 'sham': 2137, 'preceding': 2138, 'sparkle': 2139, 'captivating': 2140, 'irritating': 2141, 'flow': 2142, 'events': 2143, 'enjoying': 2144, 'icecream': 2145, 'nuts': 2146, 'fantasize': 2147, 'brewsters': 2148, 'millions': 2149, 'copycat': 2150, 'roeg': 2151, 'untalented': 2152, 'assignment': 2153, 'decoration': 2154, 'surrealistic': 2155, 'hokum': 2156, 'creator': 2157, 'pelle': 2158, 'conqueror': 2159, 'bleak': 2160, 'struck': 2161, 'ingemar': 2162, 'bergman': 2163, 'inaudible': 2164, 'somber': 2165, 'stoicism': 2166, 'banderas': 2167, 'drugged': 2168, 'isabel': 2169, 'allende': 2170, 'author': 2171, 'utter': 2172, 'thismovie': 2173, 'examine': 2174, 'colon': 2175, 'elephant': 2176, 'penlight': 2177, 'commenting': 2178, 'oppressive': 2179, 'portray': 2180, 'moral': 2181, 'flat': 2182, 'librarians': 2183, 'unglamorous': 2184, 'strike': 2185, 'bolts': 2186, 'lightning': 2187, 'timothy': 2188, 'huttons': 2189, 'stuck': 2190, 'fox': 2191, 'mode': 2192, 'largelipped': 2193, 'female': 2194, 'costarhe': 2195, 'needs': 2196, 'gillian': 2197, 'anderson': 2198, 'shine': 2199, 'amateurism': 2200, 'bypassed': 2201, 'releasedit': 2202, 'escaped': 2203, 'crapped': 2204, 'lake': 2205, 'kevin': 2206, 'bacons': 2207, 'salvage': 2208, 'motocrossed': 2209, 'motocross': 2210, 'lingo': 2211, 'previews': 2212, 'account': 2213, 'humourless': 2214, 'drivelmeant': 2215, 'mentality': 2216, 'stanly': 2217, 'tucci': 2218, 'parts': 2219, 'chuckling': 2220, 'tied': 2221, 'gagged': 2222, '010': 2223, 'weakest': 2224, 'oddlooking': 2225, 'wallace': 2226, 'considering': 2227, 'sign': 2228, 'comebr': 2229, 'views': 2230, 'learning': 2231, 'tree': 2232, 'powerfully': 2233, 'portrayed': 2234, 'coasted': 2235, 'dribbled': 2236, 'rummage': 2237, 'sale': 2238, 'affair': 2239, 'teachercoach': 2240, 'razor': 2241, 'thinbr': 2242, 'depth': 2243, 'adult': 2244, 'specialbr': 2245, 'precictable': 2246, 'receiving': 2247, 'culture': 2248, 'info': 2249, 'moviesbr': 2250, 'slowly': 2251, 'entertainingbr': 2252, 'lifebr': 2253, 'absolute': 2254, 'rubbishbr': 2255, 'actoractress': 2256, 'jokebr': 2257, 'spanish': 2258, 'horrors': 2259, 'boringboringboring': 2260, 'tickets': 2261, 'midnight': 2262, 'premiere': 2263, 'questions': 2264, 'technodanceidontknowwhatthatwasscene': 2265, 'substandard': 2266, 'tolerably': 2267, 'blair': 2268, 'witch': 2269, 'fame': 2270, 'matters': 2271, 'graphics': 2272, 'preserve': 2273, 'sanity': 2274, 'unimaginative': 2275, 'exploitative': 2276, 'itll': 2277, 'amusement': 2278, 'unentertaining': 2279, 'uninstructive': 2280, 'conflict': 2281, 'leigh': 2282, 'maggie': 2283, 'filming': 2284, 'understandable': 2285, 'whose': 2286, 'subsequent': 2287, 'project': 2288, 'efforts': 2289, 'schindlers': 2290, 'dolittle': 2291, 'composed': 2292, 'entirely': 2293, 'sitcom': 2294, 'hamster': 2295, 'alley': 2296, 'mice': 2297, 'patterson': 2298, 'books': 2299, 'displeasure': 2300, 'sitting': 2301, 'fathom': 2302, 'succeed': 2303, 'vague': 2304, 'historicalsentimental': 2305, 'context': 2306, 'imagery': 2307, 'mise': 2308, 'en': 2309, 'lasts': 2310, 'hoursbr': 2311, 'predictablei': 2312, 'cantif': 2313, 'actionadventure': 2314, 'filmsthis': 2315, 'seeid': 2316, 'likebehind': 2317, 'enemy': 2318, 'owen': 2319, 'wilson': 2320, 'iron': 2321, 'eagle': 2322, 'louis': 2323, 'gossett': 2324, 'properly': 2325, 'poignant': 2326, 'droll': 2327, 'key': 2328, 'grip': 2329, 'complicated': 2330, 'childish': 2331, 'grownups': 2332, 'planning': 2333, 'blanked': 2334, 'ninja': 2335, 'mixed': 2336, 'subjames': 2337, 'endless': 2338, 'battles': 2339, 'terminate': 2340, 'nota': 2341, 'begining': 2342, 'endbut': 2343, 'failsfrom': 2344, 'falls': 2345, 'hoping': 2346, 'clue': 2347, 'didntbr': 2348, 'build': 2349, 'substance': 2350, 'husbands': 2351, 'express': 2352, 'relentlessly': 2353, 'indians': 2354, 'drunk': 2355, 'lazy': 2356, 'elviss': 2357, 'skin': 2358, 's': 2359, 'seven': 2360, 'boosts': 2361, 'ecstatic': 2362, 'atmosphere': 2363, 'oprah': 2364, 'spice': 2365, 'suddenly': 2366, 'elsewhere': 2367, 'offtheshelf': 2368, 'behaviour': 2369, 'clichéed': 2370, 'horrendous': 2371, 'suffering': 2372, 'infomercial': 2373, 'nuke': 2374, 'em': 2375, 'bmovie': 2376, 'tackier': 2377, 'overshadowed': 2378, 'steretyped': 2379, 'recapturing': 2380, 'uncle': 2381, 'ohara': 2382, 'tenyear': 2383, 'lloyd': 2384, 'jeff': 2385, 'daniels': 2386, 'labeled': 2387, 'unnecessary': 2388, 'bowl': 2389, 'nephew': 2390, 'number': 2391, 'revolting': 2392, 'toilets': 2393, 'crudebr': 2394, 'hackneyed': 2395, 'borders': 2396, 'solved': 2397, 'saturday': 2398, '12th': 2399, '1980s': 2400, 'bodiesstyled': 2401, 'gagsbr': 2402, 'flix': 2403, 'gory': 2404, 'lessons': 2405, 'forgot': 2406, 'kindergarteners': 2407, 'carpenters': 2408, 'los': 2409, 'muetos': 2410, 'sequelbr': 2411, 'maltin': 2412, 'rivers': 2413, 'raunchiest': 2414, 'tasteless': 2415, 'hundredworst': 2416, 'walking': 2417, 'laughing': 2418, 'repeated': 2419, 'disgusting': 2420, 'plastic': 2421, 'grubby': 2422, 'fourteen': 2423, 'dare': 2424, 'deniros': 2425, 'percent': 2426, 'approach': 2427, 'spradling': 2428, 'strip': 2429, 'joking': 2430, 'sin': 2431, 'crashingly': 2432, 'stardust': 2433, 'forwards': 2434, 'zelig': 2435, 'cubic': 2436, 'zirconia': 2437, 'effort': 2438, 'omaha': 2439, '14': 2440, 'wrote': 2441, 'politicians': 2442, 'dopey': 2443, 'jot': 2444, 'plausibility': 2445, 'exaggerated': 2446, 'hot': 2447, 'skilled': 2448, 'priors': 2449, 'cheapo': 2450, 'overtly': 2451, 'dreck': 2452, 'enlist': 2453, 'marines': 2454, 'ateam': 2455, 'remove': 2456, 'stole': 2457, 'daddys': 2458, 'camcorder': 2459, 'explosion': 2460, 'sister': 2461, 'model': 2462, 'house': 2463, 'listings': 2464, 'godzilla': 2465, '1998': 2466, 'robot': 2467, 'mole': 2468, 'rat': 2469, 'subjects': 2470, 'connections': 2471, 'promised': 2472, 'unintentional': 2473, 'distributor': 2474, 'dramatic': 2475, 'likeable': 2476, 'woody': 2477, 'allenpaul': 2478, 'provensareiser': 2479, 'thiat': 2480, 'rollerblades': 2481, 'knock': 2482, 'sickeningly': 2483, 'badbr': 2484, 'whodunit': 2485, 'saved': 2486, 'consisting': 2487, 'taye': 2488, 'diggs': 2489, 'kirshner': 2490, 'dominique': 2491, 'swain': 2492, 'meredith': 2493, 'monroe': 2494, 'asked': 2495, 'word': 2496, 'greenlighted': 2497, 'nada': 2498, 'zip': 2499, 'zilchbr': 2500, 'rails': 2501, 'boogie': 2502, 'nights': 2503, 'achieve': 2504, 'quarter': 2505, 'playing': 2506, 'location': 2507, 'regina': 2508, 'saskatchewan': 2509, 'locally': 2510, 'albeit': 2511, 'fanciful': 2512, 'shlocky': 2513, 'rae': 2514, 'dawn': 2515, 'chong': 2516, 'profanity': 2517, 'stupidity': 2518, 'selfindulgence': 2519, 'join': 2520, 'forces': 2521, 'moviemaking': 2522, 'pescis': 2523, 'prove': 2524, 'cousin': 2525, 'vinny': 2526, 'fluke': 2527, 'opposite': 2528, 'foulmouthed': 2529, 'handle': 2530, 'mustmiss': 2531, 'spots': 2532, 'sits': 2533, 'gathers': 2534, 'dust': 2535, 'beats': 2536, 'boredom': 2537, 'dreadful': 2538, 'veiled': 2539, 'aislebr': 2540, 'subjugated': 2541, 'revolve': 2542, 'selleck': 2543, 'range': 2544, 'akelly': 2545, 'important': 2546, 'australians': 2547, 'irish': 2548, 'accentit': 2549, 'dunno': 2550, 'shoting': 2551, 'dialogues': 2552, 'therell': 2553, 'blanche': 2554, 'awards': 2555, 'barely': 2556, 'presenters': 2557, 'hosts': 2558, 'parodies': 2559, 'olden': 2560, 'riot': 2561, 'trinity': 2562, 'retarded': 2563, 'brain': 2564, 'science': 2565, 'hadnt': 2566, 'mst3k': 2567, 'wouldve': 2568, 'window': 2569, 'named': 2570, 'brendan': 2571, 'frasers': 2572, 'humerous': 2573, 'large': 2574, 'gadgets': 2575, 'betterbr': 2576, 'behave': 2577, 'teenagers': 2578, 'coping': 2579, 'mate': 2580, 'purpose': 2581, 'buffet': 2582, 'froid': 2583, 'bertrand': 2584, 'blier': 2585, 'les': 2586, 'acteurs': 2587, 'agreed': 2588, 'scenario': 2589, 'andrew': 2590, 'stevens': 2591, 'villain': 2592, 'lieutenant': 2593, 'filmzoe': 2594, 'mclellan': 2595, 'voting': 2596, 'irrationalbr': 2597, 'mins': 2598, 'endure': 2599, 'kattan': 2600, 'painfull': 2601, 'staggering': 2602, 'goal': 2603, 'funbr': 2604, 'brutal': 2605, 'implausibilities': 2606, 'etcbr': 2607, 'exposed': 2608, 'dreamt': 2609, 'murder': 2610, 'abandonment': 2611, 'tested': 2612, 'drag': 2613, 'anytime': 2614, 'evolving': 2615, 'among': 2616, 'loses': 2617, 'impact': 2618, 'harrison': 2619, 'hartnetthow': 2620, 'cop': 2621, 'plus': 2622, 'zero': 2623, 'industry': 2624, 'equal': 2625, 'summed': 2626, 'victim': 2627, 'simulates': 2628, 'disembowelment': 2629, 'pulling': 2630, 'intestines': 2631, 'tshirt': 2632, 'negative': 2633, 'ring': 2634, 'demi': 2635, 'thru': 2636, 'motions': 2637, 'ditto': 2638, 'prochnow': 2639, 'ominous': 2640, 'portents': 2641, 'elicit': 2642, 'yawns': 2643, 'biehn': 2644, 'dynamic': 2645, 'shtickbr': 2646, 'summers': 2647, 'apocalypse': 2648, 'comesbeep': 2649, 'creepshow': 2650, 'perfecting': 2651, 'viewer': 2652, 'wondering': 2653, 'random': 2654, 'saras': 2655, 'shower': 2656, 'appeals': 2657, 'libido': 2658, 'moviesthis': 2659, 'seeat': 2660, 'oksoguy': 2661, 'bitten': 2662, 'wellsorta': 2663, 'assume': 2664, 'bats': 2665, 'fly': 2666, 'radar': 2667, 'bugs': 2668, 'attacking': 2669, 'tho': 2670, 'violations': 2671, 'security': 2672, 'regs': 2673, 'achieved': 2674, 'abysmal': 2675, 'curious': 2676, 'begins': 2677, 'submarine': 2678, 'crew': 2679, 'outperforms': 2680, 'shotsbr': 2681, 'dechifered': 2682, 'contrary': 2683, 'meshbr': 2684, 'caliber': 2685, 'madsen': 2686, 'maximum': 2687, 'destroyed': 2688, 'closebr': 2689, 'julian': 2690, 'sands': 2691, 'hes': 2692, 'pressed': 2693, 'movesoslowlyzzzzzzzzzzzzbr': 2694, 'vcr': 2695, 'pills': 2696, 'actionviolence': 2697, 'ridiculousbr': 2698, 'presence': 2699, 'burton': 2700, 'mastroianni': 2701, 'tragic': 2702, 'italians': 2703, 'mastroiannimovie': 2704, 'cosmatos': 2705, 'artmovie': 2706, 'scared': 2707, 'heck': 2708, 'sixteenbr': 2709, 'animated': 2710, 'uninteresting': 2711, 'spend': 2712, 'partially': 2713, 'accents': 2714, 'mumbled': 2715, 'occassionaly': 2716, 'gorythe': 2717, 'thoughno': 2718, 'pun': 2719, 'disclaimer': 2720, 'peril': 2721, 'slugs': 2722, 'rodney': 2723, 'dangerfield': 2724, 'oneis': 2725, 'whack': 2726, 'funnytheir': 2727, 'womens': 2728, 'porno': 2729, '45': 2730, 'focus': 2731, 'resolving': 2732, 'dangerous': 2733, 'uh': 2734, 'technical': 2735, 'concepts': 2736, 'suspenseful': 2737, 'blasphemous': 2738, 'roll': 2739, 'sum': 2740, 'skanky': 2741, 'disease': 2742, 'turning': 2743, 'zombies': 2744, 'consists': 2745, 'smoking': 2746, 'meat': 2747, 'swear': 2748, 'sucky': 2749, 'prophecy': 2750, 'dud': 2751, 'origional': 2752, 'lucille': 2753, 'ball': 2754, 'hairbr': 2755, 'bought': 2756, 'ranked': 2757, 'perhapsbr': 2758, 'sophia': 2759, 'aida': 2760, 'lipsync': 2761, 'terms': 2762, 'mouthing': 2763, 'o': 2764, 'patria': 2765, 'leans': 2766, 'stone': 2767, 'wall': 2768, 'canvas': 2769, 'billows': 2770, 'shakes': 2771, 'reign': 2772, 'strung': 2773, 'storybr': 2774, 'dean': 2775, 'cain': 2776, 'againbr': 2777, 'dragons': 2778, 'disgustbr': 2779, 'barf': 2780, 'fiendish': 2781, 'comedian': 2782, 'unworthy': 2783, 'undeserving': 2784, 'career': 2785, 'shut': 2786, 'prologue': 2787, 'manchus': 2788, 'birthday': 2789, 'assassins': 2790, 'drops': 2791, 'faster': 2792, 'sprayed': 2793, 'cameo': 2794, 'cato': 2795, 'figurative': 2796, 'wink': 2797, 'betsy': 2798, 'drake': 2799, 'reinforces': 2800, 'stalker': 2801, 'cg': 2802, 'north': 2803, 'northwest': 2804, 'banner': 2805, 'sheffer': 2806, 'andrea': 2807, 'timeits': 2808, 'appalling': 2809, 'somehow': 2810, '1988': 2811, 'earlier': 2812, 'motion': 2813, 'weep': 2814, 'parents': 2815, 'inane': 2816, 'listen': 2817, 'banal': 2818, 'enidblytonmeetsstrugglingwannabeartists': 2819, 'vomit': 2820, 'picked': 2821, 'storeits': 2822, 'liza': 2823, 'cause': 2824, 'crude': 2825, 'alas': 2826, 'judging': 2827, 'imdb': 2828, 'storyplot': 2829, 'bubbly': 2830, 'wowthis': 2831, 'dumbest': 2832, 'classand': 2833, 'againand': 2834, 'sympathy': 2835, 'invasion': 2836, 'blob': 2837, 'meteorite': 2838, 'host': 2839, 'absurd': 2840, 'wash': 2841, 'impenetrable': 2842, 'ghastly': 2843, 'eversplendid': 2844, 'cule': 2845, 'proximity': 2846, 'convict': 2847, 'thinks': 2848, 'prison': 2849, 'staff': 2850, 'ordinary': 2851, 'actiondrama': 2852, 'stereotypical': 2853, 'developed': 2854, 'forgettable': 2855, 'commentary': 2856, 'uptight': 2857, 'voyeur': 2858, 'commit': 2859, 'suicide': 2860, 'encounters': 2861, 'spirited': 2862, 'badseed': 2863, 'discover': 2864, 'exploitation': 2865, 'flicklots': 2866, 'actingthe': 2867, 'werewolf': 2868, 'makeup': 2869, 'laughcomplete': 2870, 'rubbisheven': 2871, 'horrorplease': 2872, 'shockingly': 2873, 'downey': 2874, 'afternoon': 2875, 'richly': 2876, 'deserved': 2877, 'borrow': 2878, 'parker': 2879, 'tossed': 2880, 'asidebr': 2881, 'lightly': 2882, 'forcebr': 2883, 'excruciating': 2884, 'greenaway': 2885, 'fanbr': 2886, 'mindnumbingly': 2887, 'awfulbr': 2888, 'artistic': 2889, 'merit': 2890, 'poltergeist': 2891, 'texas': 2892, 'chainsaw': 2893, 'classed': 2894, 'knowbr': 2895, 'capable': 2896, 'deadly': 2897, 'rehash': 2898, 'subgenre': 2899, 'setpieces': 2900, 'weve': 2901, 'treatment': 2902, 'standards': 2903, 'toronto': 2904, 'wasting': 2905, 'whatsoeverbr': 2906, 'steer': 2907, 'turgid': 2908, 'feeble': 2909, 'characterization': 2910, 'harvey': 2911, 'keitel': 2912, 'offduty': 2913, 'hitman': 2914, 'tensionfree': 2915, 'conspire': 2916, 'unfunniest': 2917, 'extract': 2918, 'amc': 2919, 'considered': 2920, 'jack': 2921, 'flawless': 2922, 'audrey': 2923, 'tautou': 2924, 'states': 2925, 'upcoming': 2926, 'amelie': 2927, 'ultimate': 2928, 'phrase': 2929, 'lindsay': 2930, 'crouse': 2931, 'mantegna': 2932, 'shrink': 2933, 'sleazy': 2934, 'conman': 2935, 'latenight': 2936, 'present': 2937, 'instant': 2938, 'moneymakers': 2939, 'forgotten': 2940, 'todays': 2941, 'youngsters': 2942, 'theyll': 2943, 'grow': 2944, 'appreciation': 2945, 'met': 2946, 'randomly': 2947, 'carrey': 2948, 'knowing': 2949, 'goof': 2950, 'dozen': 2951, 'meryl': 2952, 'streep': 2953, 'filled': 2954, 'genii': 2955, 'bottle': 2956, 'remembered': 2957, 'fantasy': 2958, 'wished': 2959, 'emotional': 2960, '29': 2961, 'jessica': 2962, 'alba': 2963, 'thomas': 2964, 'restraint': 2965, 'resolution': 2966, 'couldve': 2967, 'dignity': 2968, 'creepinesssniffing': 2969, 'babies': 2970, 'broadway': 2971, 'sing': 2972, 'thin': 2973, 'indeed': 2974, 'candys': 2975, 'crime': 2976, 'searching': 2977, 'farbr': 2978, 'audiences': 2979, 'cheering': 2980, 'weekday': 2981, 'perfectly': 2982, 'psyching': 2983, 'mirror': 2984, 'gigs': 2985, 'inspired': 2986, 'building': 2987, 'amounts': 2988, 'built': 2989, 'stores': 2990, 'net': 2991, 'luck': 2992, 'glover': 2993, 'alan': 2994, 'raimy': 2995, 'sport': 2996, 'von': 2997, 'trier': 2998, 'rank': 2999, 'breaking': 3000, 'waves': 3001, 'latest': 3002, 'dancer': 3003, 'picturethe': 3004, 'framing': 3005, 'sandra': 3006, 'laterbr': 3007, 'dogma': 3008, '95': 3009, 'painting': 3010, 'terribly': 3011, 'matt': 3012, 'dillon': 3013, 'skerritt': 3014, 'backdrop': 3015, 'memorable': 3016, 'tommy': 3017, 'jones': 3018, 'bruce': 3019, 'dern': 3020, 'passion': 3021, '46': 3022, 'simons': 3023, 'crafted': 3024, 'saks': 3025, 'matthau': 3026, 'delivers': 3027, 'nobody': 3028, 'enoy': 3029, 'funnny': 3030, 'campy': 3031, 'elvira': 3032, 'frownbuster': 3033, 'fail': 3034, 'commercially': 3035, 'sharp': 3036, 'shelton': 3037, 'kurt': 3038, 'manic': 3039, 'nerd': 3040, 'renter': 3041, 'gangster': 3042, 'notch': 3043, '250': 3044, '80s': 3045, 'families': 3046, 'credit': 3047, 'spectacular': 3048, 'theirs': 3049, 'didbr': 3050, 'rubebr': 3051, 'luv': 3052, 'ravens': 3053, 'loads': 3054, 'peculiar': 3055, 'footwear': 3056, 'symbolism': 3057, 'barefoot': 3058, 'silliest': 3059, 'subtitles': 3060, 'wicked': 3061, 'mjh': 3062, 'sabrina': 3063, 'wake': 3064, 'facebr': 3065, 'profoundly': 3066, 'progression': 3067, 'seamless': 3068, 'lighting': 3069, 'techniques': 3070, 'orson': 3071, 'welles': 3072, 'lady': 3073, 'shanghai': 3074, 'citizen': 3075, 'kane': 3076, 'independent': 3077, 'carried': 3078, 'transportive': 3079, 'fungal': 3080, 'maypo': 3081, 'stomach': 3082, 'maltex': 3083, 'wheatena': 3084, 'granola': 3085, 'anymore': 3086, 'slop': 3087, 'sherrys': 3088, 'theme': 3089, 'schiffer': 3090, 'educatingbr': 3091, 'anyway': 3092, 'visuals': 3093, 'classical': 3094, 'knockout': 3095, 'rave': 3096, 'hong': 3097, 'kong': 3098, 'peak': 3099, 'renaissance': 3100, 'matrix': 3101, 'ones': 3102, 'war': 3103, 'ai': 3104, 'shocking': 3105, 'shoved': 3106, 'davids': 3107, 'greatly': 3108, 'captivates': 3109, 'stumbled': 3110, '4yrold': 3111, 'desi': 3112, 'seek': 3113, 'lawrence': 3114, 'fishburn': 3115, 'ike': 3116, 'turner': 3117, 'guessing': 3118, 'recomend': 3119, 'execution': 3120, 'displaying': 3121, 'venue': 3122, 'politics': 3123, 'pave': 3124, 'road': 3125, 'tremendous': 3126, 'suzy': 3127, 'kendall': 3128, 'shown': 3129, 'decade': 3130, 'german': 3131, 'cavalry': 3132, 'box': 3133, 'chilling': 3134, 'poisonous': 3135, 'fanatical': 3136, 'patriotism': 3137, 'eroticism': 3138, 'horses': 3139, 'wearing': 3140, 'gasmasks': 3141, 'vividly': 3142, 'including': 3143, 'beach': 3144, 'strongly': 3145, 'loaded': 3146, 'thoroughly': 3147, 'guests': 3148, 'yacht': 3149, 'impromptu': 3150, 'swim': 3151, 'underwear': 3152, 'risqué': 3153, '1931': 3154, 'oscarworthy': 3155, 'animitronics': 3156, 'telly': 3157, 'unique': 3158, 'confused': 3159, 'level': 3160, 'etc': 3161, 'photographic': 3162, 'stills': 3163, 'resemble': 3164, 'rembrandt': 3165, 'prints': 3166, 'hidden': 3167, 'literate': 3168, 'unpretentious': 3169, 'ripoffs': 3170, 'party': 3171, 'proves': 3172, 'hey': 3173, 'starif': 3174, 'cars': 3175, 'blown': 3176, 'descriptionssummaries': 3177, 'wwi': 3178, 'planes': 3179, 'boats': 3180, 'closeups': 3181, 'plane': 3182, 'torpedo': 3183, 'boat': 3184, 'heartily': 3185, 'dan': 3186, 'katzir': 3187, 'simplicity': 3188, 'angle': 3189, 'rejuvinated': 3190, 'lust': 3191, 'frustrated': 3192, 'autobiography': 3193, 'directorproducer': 3194, 'rabins': 3195, 'assassination': 3196, 'vonneguts': 3197, 'known': 3198, 'interestingly': 3199, 'manipulation': 3200, 'nolte': 3201, 'arkin': 3202, 'vonnegut': 3203, 'stranger': 3204, 'odd': 3205, 'details': 3206, 'sadness': 3207, 'definitive': 3208, 'hamlet': 3209, 'cuts': 3210, 'cat': 3211, 'karlofflugosi': 3212, 'collaboration': 3213, 'karloff': 3214, 'overacting': 3215, 'samantha': 3216, 'nick': 3217, 'flirting': 3218, 'hotel': 3219, 'bravo': 3220, 'station': 3221, 'xfiles': 3222, 'continues': 3223, 'scully': 3224, 'replacement': 3225, 'duo': 3226, 'gently': 3227, 'subtly': 3228, 'aids': 3229, 'alluded': 3230, 'gay': 3231, 'age': 3232, 'recommanded1': 3233, 'familys': 3234, 'step': 3235, 'odyssey': 3236, 'heartbreakingly': 3237, 'wistful': 3238, 'memory': 3239, 'watches': 3240, 'dara': 3241, 'tomanovich': 3242, 'dustin': 3243, 'hoffman': 3244, 'cruise': 3245, 'similar': 3246, 'artificial': 3247, 'trivial': 3248, 'comparison': 3249, 'recognizable': 3250, 'faces': 3251, 'personally': 3252, 'sweet': 3253, 'winkler': 3254, 'nonstop': 3255, 'performer': 3256, 'soapoperas': 3257, 'conundrums': 3258, 'testament': 3259, 'ensemble': 3260, 'storytelling': 3261, 'fallible': 3262, 'cope': 3263, 'succeeding': 3264, 'park': 3265, 'factor': 3266, 'naked': 3267, 'h': 3268, 'macy': 3269, 'neve': 3270, 'campbell': 3271, 'donald': 3272, 'traditional': 3273, 'meant': 3274, 'jiggling': 3275, 'suffocates': 3276, 'spectator': 3277, 'extent': 3278, 'objective': 3279, 'trained': 3280, 'psychopath': 3281, 'rediscovering': 3282, 'humanity': 3283, 'near': 3284, 'led': 3285, 'scriptwriters': 3286, 'sentimental': 3287, 'cloudy': 3288, 'wintry': 3289, 'captures': 3290, 'struggle': 3291, 'identity': 3292, 'ongoing': 3293, 'teenage': 3294, 'strangely': 3295, 'documentarynot': 3296, 'unsettling': 3297, 'joy': 3298, 'master': 3299, 'convinced': 3300, 'became': 3301, 'actores': 3302, 'field': 3303, 'drum': 3304, 'cook': 3305, 'unsung': 3306, 'hero': 3307, 'everyones': 3308, 'dream': 3309, 'delivery': 3310, 'baseball': 3311, 'scrutiny': 3312, 'realistic': 3313, 'appears': 3314, 'dennis': 3315, 'quaid': 3316, 'moves': 3317, 'stances': 3318, 'league': 3319, 'pitcher': 3320, 'stooge': 3321, 'shortchristine': 3322, 'mcintyre': 3323, 'oneshe': 3324, 'actressthe': 3325, 'stooges': 3326, 'shemp': 3327, 'larrythis': 3328, 'autumn': 3329, 'link': 3330, 'hypothetically': 3331, 'downfall': 3332, 'socrates': 3333, 'memorized': 3334, 'holds': 3335, 'childhood': 3336, 'brother': 3337, 'respect': 3338, 'fnm': 3339, 'phoenix': 3340, 'behaves': 3341, 'confronting': 3342, 'status': 3343, 'quo': 3344, 'izzard': 3345, 'hysterical': 3346, 'insightful': 3347, 'represents': 3348, 'niche': 3349, 'worldbr': 3350, 'americans': 3351, 'standup': 3352, 'routine': 3353, 'due': 3354, 'palonly': 3355, 'availability': 3356, 'neglected': 3357, 'importance': 3358, 'performing': 3359, 'arts': 3360, 'embedded': 3361, 'rereleased': 3362, 'lord': 3363, 'rings': 3364, 'glued': 3365, 'older': 3366, 'younger': 3367, 'sensationalist': 3368, 'notting': 3369, 'hill': 3370, 'bold': 3371, 'understated': 3372, 'integrity': 3373, 'langlaise': 3374, 'intellectually': 3375, 'monsieur': 3376, 'le': 3377, 'directeur': 3378, 'rohmer': 3379, 'ideal': 3380, 'anime': 3381, 'dubbed': 3382, '1999': 3383, 'meaning': 3384, 'obstinate': 3385, 'description': 3386, 'obviously': 3387, 'ralph': 3388, 'richardson': 3389, 'merle': 3390, 'oberon': 3391, 'created': 3392, 'mrs': 3393, 'zodsworth': 3394, 'donut': 3395, 'post': 3396, 'haste': 3397, 'igor': 3398, 'proof': 3399, 'slovenian': 3400, 'soul': 3401, 'overtaken': 3402, 'rendering': 3403, 'wartime': 3404, 'unknown': 3405, 'faultless': 3406, 'heartrending': 3407, 'brotherly': 3408, 'serbian': 3409, 'everi': 3410, 'wood': 3411, 'engaging': 3412, 'wellmade': 3413, 'liam': 3414, 'neeson': 3415, 'singing': 3416, 'kelly': 3417, 'liberty': 3418, 'meet': 3419, 'break': 3420, 'business': 3421, 'lovers': 3422, 'adrian': 3423, 'pasdar': 3424, 'fascinating': 3425, 'buster': 3426, 'voice': 3427, 'sequences': 3428, 'hang': 3429, 'chariot': 3430, 'shorts': 3431, 'goat': 3432, 'general': 3433, 'multiple': 3434, 'funnier': 3435, 'twin': 3436, 'sisters': 3437, 'soo': 3438, 'thingy': 3439, 'robbed': 3440, 'oscar': 3441, 'charlies': 3442, 'angels': 3443, 'costars': 3444, 'henner': 3445, 'piscopo': 3446, 'danny': 3447, 'devito': 3448, 'award': 3449, 'nominations': 3450, 'calibre': 3451, 'entranced': 3452, 'resist': 3453, 'swing': 3454, 'hereid': 3455, 'unnoticed': 3456, 'rerelease': 3457, 'publicity': 3458, 'promote': 3459, 'paxtonbr': 3460, 'wilderness': 3461, 'natural': 3462, 'understanding': 3463, 'harmony': 3464, 'nature': 3465, 'extreme': 3466, 'naturalist': 3467, 'treasurebr': 3468, 'definition': 3469, 'continue': 3470, 'strikes': 3471, 'cord': 3472, 'scott': 3473, 'glenn': 3474, 'winch': 3475, 'directors': 3476, 'tetsuo': 3477, 'eisenstein': 3478, 'wesleyan': 3479, 'university': 3480, 'haunts': 3481, 'reveals': 3482, 'frightening': 3483, 'aspects': 3484, 'angers': 3485, 'ratings': 3486, 'geniusbr': 3487, 'christ': 3488, 'sakebr': 3489, 'boost': 3490, 'dee': 3491, 'witherspoon': 3492, 'foundation': 3493, 'riffing': 3494, 'mvovies': 3495, '200': 3496, 'tonight': 3497, 'waters': 3498, '25yrs': 3499, 'rivals': 3500, 'zatoichi': 3501, 'katsu': 3502, 'exciting': 3503, 'swordplay': 3504, 'allactioncomedyheroicsand': 3505, 'actorsgunga': 3506, 'din': 3507, 'remain': 3508, 'moviesexcellent': 3509, 'picturei': 3510, 'farrah': 3511, 'fawcett': 3512, 'gritty': 3513, 'tables': 3514, 'russo': 3515, 'contains': 3516, 'mike': 3517, 'smooth': 3518, 'criminal': 3519, 'mj': 3520, 'rockers': 3521, 'simmons': 3522, 'ozzy': 3523, 'osbourne': 3524, 'masterpieces': 3525, 'antonioni': 3526, 'youth': 3527, 'distraction': 3528, 'happiness': 3529, 'alienation': 3530, 'materialism': 3531, 'honor': 3532, 'corruption': 3533, 'artbr': 3534, 'flicks': 3535, 'darn': 3536, 'chuckles': 3537, 'horrorcomedy': 3538, 'throughly': 3539, 'tire': 3540, 'fred': 3541, 'ginger': 3542, 'pleasure': 3543, 'lucy': 3544, 'grable': 3545, 'car': 3546, 'commercial': 3547, 'shelby': 3548, 'angelina': 3549, 'cagebr': 3550, 'bgbr': 3551, 'loving': 3552, 'colours': 3553, 'discovered': 3554, 'atlantis': 3555, 'explore': 3556, 'golden': 3557, 'someplace': 3558, 'reverted': 3559, 'unravel': 3560, 'elizabeth': 3561, 'meter': 3562, 'girlfriend': 3563, 'tourettes': 3564, 'syndrome': 3565, 'amitabh': 3566, 'bachan': 3567, 'govinda': 3568, 'timepass': 3569, 'imitate': 3570, 'attempting': 3571, 'realise': 3572, 'immediately': 3573, 'toobr': 3574, 'essentially': 3575, 'chinese': 3576, 'ghost': 3577, 'installment': 3578, 'subtlety': 3579, 'tony': 3580, 'leung': 3581, 'cgs': 3582, 'joan': 3583, 'hart': 3584, 'match': 3585, 'clarissa': 3586, 'explains': 3587, 'marvelous': 3588, 'slayer': 3589, 'ronald': 3590, 'colman': 3591, 'othello': 3592, 'persona': 3593, 'brian': 3594, 'palmas': 3595, 'undeniable': 3596, 'virtuosity': 3597, 'camouflage': 3598, 'disguised': 3599, 'psycho': 3600, 'carbon': 3601, 'climax': 3602, 'improvement': 3603, 'rauol': 3604, 'richard': 3605, 'dryfus': 3606, 'dana': 3607, 'delany': 3608, 'babe': 3609, 'following': 3610, 'fate': 3611, 'possess': 3612, 'prize': 3613, 'winchester': 3614, '73': 3615, 'cliche': 3616, 'characterisations': 3617, 'mann': 3618, 'ramones': 3619, 'biased': 3620, 'uplifting': 3621, 'alisan': 3622, 'porter': 3623, 'immensely': 3624, 'mplex': 3625, 'neighbors': 3626, 'ills': 3627, 'putting': 3628, 'bath': 3629, 'community': 3630, 'reviewer': 3631, 'heavy': 3632, 'harsh': 3633, 'realities': 3634, 'playful': 3635, 'dwell': 3636, 'smiles': 3637, 'biography': 3638, 'poetry': 3639, 'narration': 3640, 'sir': 3641, 'redgrave': 3642, 'accessible': 3643, 'exposure': 3644, 'tvvideo': 3645, 'slots': 3646, 'stylized': 3647, 'consequencesbr': 3648, 'timesbr': 3649, 'granted': 3650, 'educational': 3651, 'content': 3652, 'foxes': 3653, 'jodie': 3654, 'foster': 3655, 'cherie': 3656, 'currie': 3657, 'marilyn': 3658, 'kagan': 3659, 'kandice': 3660, 'stroh': 3661, 'radio': 3662, 'donna': 3663, 'rented': 3664, 'blew': 3665, 'engrossing': 3666, 'allison': 3667, 'deans': 3668, 'stands': 3669, 'balances': 3670, 'melancholy': 3671, 'iridescent': 3672, 'energy': 3673, 'weighted': 3674, 'places': 3675, 'passes': 3676, 'danielle': 3677, 'steele': 3678, 'test': 3679, 'andie': 3680, 'macdowell': 3681, 'perspective': 3682, 'victims': 3683, 'provokes': 3684, 'antiracism': 3685, 'sees': 3686, 'historic': 3687, 'bucketfuls': 3688, 'skeltonpowelllahrobrien': 3689, 'dynamite': 3690, 'dorseydriven': 3691, 'powells': 3692, 'exceptional': 3693, 'individual': 3694, 'pizzazz': 3695, 'drawings': 3696, 'begun': 3697, 'i´ve': 3698, 'waited': 3699, '21': 3700, 'nooooo': 3701, 'tip': 3702, 'hat': 3703, 'spinal': 3704, 'tap': 3705, 'anywaythe': 3706, 'peanuts': 3707, 'gangsters': 3708, 'videos': 3709, 'bucks': 3710, 'alone': 3711, 'bias': 3712, 'concered': 3713, 'wilder': 3714, 'numerous': 3715, 'additional': 3716, 'detailing': 3717, 'adventures': 3718, 'larry': 3719, 'smiling': 3720, 'meg': 3721, 'feelgood': 3722, 'millennium': 3723, 'vision': 3724, 'establishes': 3725, 'sf': 3726, 'hail': 3727, 'typically': 3728, 'howard': 3729, 'associated': 3730, 'hunt': 3731, 'travels': 3732, 'japan': 3733, 'sales': 3734, 'pitch': 3735, 'whoa': 3736, 'bound': 3737, 'getgo': 3738, 'west': 3739, 'losewest': 3740, 'losing': 3741, 'grabs': 3742, 'honest': 3743, 'portrayal': 3744, 'paralysis': 3745, 'panders': 3746, 'topnotch': 3747, 'flew': 3748, 'cuckoos': 3749, 'nest': 3750, 'wordofmouth': 3751, 'buzz': 3752, 'disabled': 3753, 'keeps': 3754, 'price': 3755, 'bet': 3756, 'ala': 3757, 'pulp': 3758, 'suicides': 3759, '810': 3760, '1010': 3761, 'references': 3762, 'ladybug´s': 3763, 'tribute': 3764, 'lorre': 3765, 'we´ll': 3766, 'talk': 3767, 'flik': 3768, 'reaction': 3769, 'wowyoure': 3770, 'quiet': 3771, 'outtakes': 3772, 'errol': 3773, 'flynns': 3774, 'ward': 3775, 'gut': 3776, 'wrenching': 3777, 'epic': 3778, 'knees': 3779, 'outside': 3780, 'shaolin': 3781, 'temple': 3782, 'learn': 3783, 'dogs': 3784, 'epps': 3785, 'deja': 3786, 'remmi': 3787, 'indie': 3788, 'current': 3789, '27': 3790, 'premium': 3791, 'channels': 3792, 'available': 3793, 'theory': 3794, 'flight': 3795, 'grabbed': 3796, 'held': 3797, 'feelings': 3798, 'bytes': 3799, 'fragile': 3800, 'represented': 3801, 'spain': 3802, 'berlinale': 3803, '2002': 3804, 'grammar': 3805, 'almodovars': 3806, 'filmswell': 3807, 'shouldnt': 3808, 'vh1': 3809, 'breathless': 3810, 'marlene': 3811, 'sleeper': 3812, 'defines': 3813, 'nicholas': 3814, 'cage': 3815, 'intricate': 3816, 'awaybr': 3817, 'whenever': 3818, 'charged': 3819, 'unbelivebly': 3820, '1948': 3821, 'wei': 3822, 'weis': 3823, 'catylast': 3824, 'triangle': 3825, 'oppurunity': 3826, 'shipload': 3827, 'towns': 3828, 'daughters': 3829, 'fathers': 3830, 'extremes': 3831, 'deter': 3832, 'attempts': 3833, 'maidens': 3834, 'aid': 3835, 'dispatch': 3836, 'squad': 3837, 'happen': 3838, 'plummer': 3839, 'dandy': 3840, 'ribaldry': 3841, 'unsurpassed': 3842, 'gena': 3843, 'cheech': 3844, 'funthe': 3845, 'maria': 3846, 'adorable': 3847, 'paulie': 3848, 'sunday': 3849, 'nicely': 3850, 'plenty': 3851, 'hardcore': 3852, 'lauen': 3853, 'montgomery': 3854, 'venus': 3855, 'thankfully': 3856, 'gabriella': 3857, 'hall': 3858, 'violent': 3859, 'highlander': 3860, 'hehe': 3861}
encoded_labels = [1 if label =='positive' else 0 for label in labels_split]
encoded_labels = np.array(encoded_labels)
# Change input to index
reviews_int = []
for review in reviews_split:
    r = [vocab_to_int[w] for w in review.split()]
    reviews_int.append(r)
  
print (reviews_int[0:3])
[[1, 118, 29, 1420, 4, 1, 102, 7, 186, 22, 2, 91, 8, 1, 865, 8, 1421, 4, 1422], [1, 92, 276, 8, 866, 20, 325, 1423, 4, 1424, 1425, 325, 7, 17, 8, 1, 77, 9, 18, 1426, 3, 17, 7, 2, 37, 24, 373, 1, 374, 7, 62, 12, 1, 648, 12, 1, 92, 17, 1, 25, 17, 11, 1427, 148, 22, 295, 6, 867, 10, 49, 1, 92, 866], [6, 326, 96, 3, 14, 12, 1, 868, 26, 2, 869, 16, 6, 511, 10, 38, 5, 109, 97, 1428, 1429, 7, 194, 1430, 2, 1431, 26, 2, 296, 195, 50, 1, 426, 11, 246, 23, 12, 1, 868, 3, 7, 2, 54, 24, 14, 20, 24, 427, 4, 24, 119, 210, 2, 91, 8, 138]]
## Return features of review_ints, where each review is padded with 0's or truncated to the input seq_length.
def pad_features(reviews_int, seq_length):

    features = np.zeros((len(reviews_int), seq_length), dtype = int)
    
    for i, review in enumerate(reviews_int):
        review_len = len(review)
        
        if review_len <= seq_length:
            zeroes = list(np.zeros(seq_length-review_len))
            new = zeroes+review
        elif review_len > seq_length:
            new = review[0:seq_length]
        
        features[i,:] = np.array(new)
    
    return features
from torch.nn.utils.rnn import pad_sequence

example_reviews = []
for i in range(len(reviews_int)):
  example_reviews.append(torch.Tensor(reviews_int[i]))

example_padded = pad_sequence(example_reviews, batch_first=True)
seq_length = 200
indexed_reviews = pad_features(reviews_int, seq_length)
# Dataloader
# create Tensor Dataset

split_frac = 0.8
train_x = indexed_reviews[0:int(split_frac * len(indexed_reviews))]
train_y = encoded_labels[0:int(split_frac * len(indexed_reviews))]

test_x = indexed_reviews[int(split_frac * len(indexed_reviews)):]
test_y = encoded_labels[int(split_frac * len(indexed_reviews)):]

train_data = TensorDataset(torch.from_numpy(train_x), torch.from_numpy(train_y))
test_data = TensorDataset(torch.from_numpy(test_x), torch.from_numpy(test_y))

batch_size = 50
train_loader = DataLoader(train_data, shuffle=True, batch_size=batch_size)
test_loader = DataLoader(test_data, shuffle=True, batch_size=batch_size)
# Check the data
sample_x, sample_y = next(iter(train_loader))

print('Sample input size: ', sample_x.size()) # batch_size, seq_length
print('Sample input: \n', sample_x)
print()
print('Sample label size: ', sample_y.size()) # batch_size
print('Sample label: \n', sample_y)
Sample input size:  torch.Size([50, 200])
Sample input: 
 tensor([[   0,    0,    0,  ..., 1110,  102,  202],
        [   0,    0,    0,  ...,    2,  989,  929],
        [   0,    0,    0,  ...,    3,   20, 3049],
        ...,
        [   0,    0,    0,  ..., 2411,   21,  722],
        [   0,    0,    0,  ...,    9,  113, 1744],
        [   0,    0,    0,  ...,   50, 1924, 1036]])

Sample label size:  torch.Size([50])
Sample label: 
 tensor([0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1,
        0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
        0, 0])
# Sentiment LSTM
class SentimentLSTM(nn.Module):
  def __init__(self, vocab_size, output_size, embedding_dim, hidden_dim, n_layers):
    super().__init__()

    self.output_size = output_size
    self.n_layers = n_layers
    self.hidden_dim = hidden_dim

    self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx = 0)
    self.lstm = nn.LSTM(embedding_dim, hidden_dim, n_layers, batch_first = True)

    self.output_fc = nn.Linear(hidden_dim, output_size)
    self.sig = nn.Sigmoid()

  def forward(self, x):
    self.batch_size = x.size(0)
    embeds = self.embedding(x)
    h0, c0 = self.init_hidden()

    output, hidden = self.lstm(embeds, (h0, c0))
    output = self.output_fc(output[:, -1, :])
    output = self.sig(output)
    return output

  def init_hidden(self):
    h0 = torch.zeros(self.n_layers, self.batch_size, self.hidden_dim)
    c0 = torch.zeros(self.n_layers, self.batch_size, self.hidden_dim)
    return h0, c0
# Let's train our model
vocab_size = len(vocab_to_int) + 1   # +1 for the 0 padding
output_size = 1
embedding_dim = 400
hidden_dim = 256
n_layers = 1

sentiment_net = SentimentLSTM(vocab_size, output_size, embedding_dim, hidden_dim, n_layers)

lr = 0.01
n_epochs = 20
counter = 0

criterion = nn.BCELoss()
opt = torch.optim.Adam(sentiment_net.parameters(), lr=lr)

for epoch in range(n_epochs + 1):
  for inputs, labels in train_loader:
    counter += 1
    output = sentiment_net(inputs)
    pred = (output.squeeze() > 0.5).float()
    acc = torch.mean((pred == labels).float())

    loss = criterion(output.squeeze(), labels.float())

    opt.zero_grad()
    loss.backward()
    opt.step()
  
  sentiment_net.eval()
  test_losses = []
  test_acc = []

  for inputs, labels in test_loader:
    output = sentiment_net(inputs)
    test_loss = criterion(output.squeeze(), labels.float())
    test_losses.append(test_loss.item())

    pred = (output.squeeze() > 0.5).float()
    acc = torch.mean((pred == labels).float())
    test_acc.append(acc.item())

  sentiment_net.train()
  print("Epoch: {}/{} ".format(epoch, n_epochs),
        "Step: {} ".format(counter),
        "Loss: {:.6f} ".format(loss.item()),
        "Acc: {:.6f} ".format(acc.item()),
        "Test Loss: {:.6f} ".format(np.mean(test_losses)),
        "Test Acc: {:.6f} ".format(np.mean(test_acc)))
Epoch: 0/20  Step: 8  Loss: 0.624782  Acc: 0.100000  Test Loss: 1.024876  Test Acc: 0.150000 
Epoch: 1/20  Step: 16  Loss: 0.214078  Acc: 0.220000  Test Loss: 1.873867  Test Acc: 0.190000 
Epoch: 2/20  Step: 24  Loss: 0.156424  Acc: 0.140000  Test Loss: 2.729647  Test Acc: 0.240000 
Epoch: 3/20  Step: 32  Loss: 0.007794  Acc: 0.240000  Test Loss: 3.406398  Test Acc: 0.290000 
Epoch: 4/20  Step: 40  Loss: 0.000611  Acc: 0.300000  Test Loss: 3.375081  Test Acc: 0.330000 
Epoch: 5/20  Step: 48  Loss: 0.000388  Acc: 0.360000  Test Loss: 3.527202  Test Acc: 0.330000 
Epoch: 6/20  Step: 56  Loss: 0.000713  Acc: 0.360000  Test Loss: 3.770726  Test Acc: 0.350000 
Epoch: 7/20  Step: 64  Loss: 0.000695  Acc: 0.240000  Test Loss: 4.316965  Test Acc: 0.290000 
Epoch: 8/20  Step: 72  Loss: 0.000326  Acc: 0.320000  Test Loss: 4.342142  Test Acc: 0.290000 
Epoch: 9/20  Step: 80  Loss: 0.000185  Acc: 0.400000  Test Loss: 4.365341  Test Acc: 0.320000 
Epoch: 10/20  Step: 88  Loss: 0.000061  Acc: 0.280000  Test Loss: 4.432155  Test Acc: 0.320000 
Epoch: 11/20  Step: 96  Loss: 0.000076  Acc: 0.300000  Test Loss: 4.500142  Test Acc: 0.310000 
Epoch: 12/20  Step: 104  Loss: 0.000082  Acc: 0.280000  Test Loss: 4.570614  Test Acc: 0.300000 
Epoch: 13/20  Step: 112  Loss: 0.000070  Acc: 0.280000  Test Loss: 4.633649  Test Acc: 0.300000 
Epoch: 14/20  Step: 120  Loss: 0.000049  Acc: 0.300000  Test Loss: 4.690726  Test Acc: 0.300000 
Epoch: 15/20  Step: 128  Loss: 0.000029  Acc: 0.380000  Test Loss: 4.734747  Test Acc: 0.300000 
Epoch: 16/20  Step: 136  Loss: 0.000046  Acc: 0.320000  Test Loss: 4.782884  Test Acc: 0.300000 
Epoch: 17/20  Step: 144  Loss: 0.000037  Acc: 0.280000  Test Loss: 4.820999  Test Acc: 0.300000 
Epoch: 18/20  Step: 152  Loss: 0.000024  Acc: 0.340000  Test Loss: 4.864908  Test Acc: 0.300000 
Epoch: 19/20  Step: 160  Loss: 0.000042  Acc: 0.300000  Test Loss: 4.905285  Test Acc: 0.300000 
Epoch: 20/20  Step: 168  Loss: 0.000058  Acc: 0.300000  Test Loss: 4.929110  Test Acc: 0.300000 
# Evaluation 
sentiment_net.eval()

random.seed(1234)

def get_key(val, my_dict):
  for key, value in my_dict.items():
    if val == value:
      return key

review, label = random.choice(train_data)
review_sentence = [get_key(rev, vocab_to_int) for rev in review]
print("input sentence: ", list(filter(None, review_sentence)))

output = sentiment_net(review.unsqueeze(0))   # additional dimension for batch
sentiment = 'negative' if output <= 0.5 else 'positive'
print('sentiment:', sentiment)

print('============================================================================')

random.seed(7532)

review, label = random.choice(train_data)
review_sentence = [get_key(rev, vocab_to_int) for rev in review]
print("input sentence: ", list(filter(None, review_sentence)))

output = sentiment_net(review.unsqueeze(0))   # additional dimension for batch
sentiment = 'negative' if output <= 0.5 else 'positive'
print('sentiment:', sentiment)
input sentence:  ['i', 'admit', 'its', 'very', 'silly', 'but', 'ive', 'practically', 'memorized', 'the', 'damn', 'thing', 'it', 'holds', 'a', 'lot', 'of', 'good', 'childhood', 'memories', 'for', 'me', 'my', 'brother', 'and', 'i', 'saw', 'it', 'opening', 'day', 'and', 'i', 'have', 'respect', 'for', 'any', 'movie', 'with', 'fnm', 'on', 'the', 'soundtrack']
sentiment: positive
============================================================================
input sentence:  ['this', 'piece', 'aint', 'really', 'worth', 'a', 'comment', 'its', 'simply', 'the', 'worst', 'horror', 'movie', 'i', 'have', 'ever', 'seen', 'the', 'actors', 'are', 'bad', 'as', 'bad', 'can', 'be', 'and', 'the', 'whole', 'plot', 'is', 'so', 'silly', 'it', 'nearly', 'made', 'me', 'cry', 'shame', 'on', 'you', 'i', 'say']
sentiment: negative

2. Seq2seq model with attention

Here, you are going to translate French to English using seq2seq model.

  • Encoder : GRU
  • Decoder : GRU with attention

0) Preprocessing

from __future__ import unicode_literals, print_function, division
from io import open
import unicodedata
import string
import re
import random
import numpy as np

from nltk.translate.bleu_score import sentence_bleu

import torch
import torch.nn as nn
from torch import optim
import torch.nn.functional as F

import matplotlib.pyplot as plt
plt.switch_backend('agg')
import matplotlib.ticker as ticker
%matplotlib inline

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

import warnings
warnings.filterwarnings('ignore')
!wget https://www.dropbox.com/s/b4nrxhsbny99vel/eng-fra.txt
--2023-03-23 05:10:43--  https://www.dropbox.com/s/b4nrxhsbny99vel/eng-fra.txt
Resolving www.dropbox.com (www.dropbox.com)... 162.125.7.18, 2620:100:6031:18::a27d:5112
Connecting to www.dropbox.com (www.dropbox.com)|162.125.7.18|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: /s/raw/b4nrxhsbny99vel/eng-fra.txt [following]
--2023-03-23 05:10:44--  https://www.dropbox.com/s/raw/b4nrxhsbny99vel/eng-fra.txt
Reusing existing connection to www.dropbox.com:443.
HTTP request sent, awaiting response... 302 Found
Location: https://uc479854c369aa8d0d3c6af241ee.dl.dropboxusercontent.com/cd/0/inline/B4zNgJXVfPgfwRUowo-bRqQdXcixRJwda0M13KRmPTMkgigxZsZF4jjJIm2WvkCAH6iRFZSvyv-zBJI07jriYj1m_wVNgc57Rxwq5PRyjNW0ZIWRfWIMGWlRUQ5do9qLeWG8xnzAPea2A0OWPgCKH8TmRjhrGfre1F6_H1gloEH86Q/file# [following]
--2023-03-23 05:10:45--  https://uc479854c369aa8d0d3c6af241ee.dl.dropboxusercontent.com/cd/0/inline/B4zNgJXVfPgfwRUowo-bRqQdXcixRJwda0M13KRmPTMkgigxZsZF4jjJIm2WvkCAH6iRFZSvyv-zBJI07jriYj1m_wVNgc57Rxwq5PRyjNW0ZIWRfWIMGWlRUQ5do9qLeWG8xnzAPea2A0OWPgCKH8TmRjhrGfre1F6_H1gloEH86Q/file
Resolving uc479854c369aa8d0d3c6af241ee.dl.dropboxusercontent.com (uc479854c369aa8d0d3c6af241ee.dl.dropboxusercontent.com)... 162.125.81.15, 2620:100:6031:15::a27d:510f
Connecting to uc479854c369aa8d0d3c6af241ee.dl.dropboxusercontent.com (uc479854c369aa8d0d3c6af241ee.dl.dropboxusercontent.com)|162.125.81.15|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9541158 (9.1M) [text/plain]
Saving to: ‘eng-fra.txt’

eng-fra.txt         100%[===================>]   9.10M  11.7MB/s    in 0.8s    

2023-03-23 05:10:46 (11.7 MB/s) - ‘eng-fra.txt’ saved [9541158/9541158]

We will need a unique index per word to use as the inputs and targets of the networks. To keep track of all this, we will use a class called Lang which has word -> index (word2index) and index -> word (index2word) dictionaries, as well as a count of each word word2count to use to later replace rare words.

SOS_token = 0
EOS_token = 1

# Since there is a lot of example sentences and we want to train quickly, we will trim the data set to only relatively short and simple sentences.
# Here, the maximum length is 10 words (including ending punctuation)
# We are filtering to sentences that translate to the form "I am" or "He is" etc
MAX_LENGTH = 10

eng_prefixes = (
    "i am ", "i m ",
    "he is", "he s ",
    "she is", "she s ",
    "you are", "you re ",
    "we are", "we re ",
    "they are", "they re "
)

# The full process for preparing the data is:
#     - Read text file and split into lines, split lines into pairs
#     - Normalize text, filter by length and content
#     - Make word lists from sentences in pairs

# Tokenizer
# We’ll need a unique index per word to use as the inputs and targets of the networks later.
class Lang:
    def __init__(self, name):
        self.name = name
        self.word2index = {}
        self.word2count = {}
        self.index2word = {0: "SOS", 1: "EOS"}
        self.n_words = 2  # Count SOS and EOS

    def addSentence(self, sentence):
        for word in sentence.split(' '):
            self.addWord(word)

    def addWord(self, word):
        if word not in self.word2index:
            self.word2index[word] = self.n_words
            self.word2count[word] = 1
            self.index2word[self.n_words] = word
            self.n_words += 1
        else:
            self.word2count[word] += 1



# Turn a Unicode string to plain ASCII
# The file are all in Unicode, to simplify we will turn Unicode characters to ASCII, make everything lowercase, and trim most punctuation.
# For more information, refer https://stackoverflow.com/a/518232/2809427

def unicodeToAscii(s):
    return ''.join(
        c for c in unicodedata.normalize('NFD', s)
        if unicodedata.category(c) != 'Mn'
    )


# Lowercase, trim, and remove non-letter characters

def normalizeString(s):
    s = unicodeToAscii(s.lower().strip())
    s = re.sub(r"([.!?])", r" \1", s)
    s = re.sub(r"[^a-zA-Z.!?]+", r" ", s)
    return s



# Read file
# If you want to translate Other Language -> English, then set `reverse = True`
def readLangs(lang1, lang2, reverse=False):
    print("Reading lines...")

    # Read the file and split into lines
    lines = open('./%s-%s.txt' % (lang1, lang2), encoding='utf-8').\
        read().strip().split('\n')

    # Split every line into pairs and normalize
    pairs = [[normalizeString(s) for s in l.split('\t')] for l in lines]

    # Reverse pairs, make Lang instances
    if reverse:
        pairs = [list(reversed(p)) for p in pairs]
        input_lang = Lang(lang2)
        output_lang = Lang(lang1)
    else:
        input_lang = Lang(lang1)
        output_lang = Lang(lang2)

    return input_lang, output_lang, pairs


def filterPair(p):
    return len(p[0].split(' ')) < MAX_LENGTH and \
        len(p[1].split(' ')) < MAX_LENGTH and \
        p[1].startswith(eng_prefixes)


def filterPairs(pairs):
    return [pair for pair in pairs if filterPair(pair)]


def prepareData(lang1, lang2, reverse=False):
    input_lang, output_lang, pairs = readLangs(lang1, lang2, reverse)
    print("Read %s sentence pairs" % len(pairs))
    pairs = filterPairs(pairs)
    print("Trimmed to %s sentence pairs" % len(pairs))
    print("Counting words...")
    for pair in pairs:
        input_lang.addSentence(pair[0])
        output_lang.addSentence(pair[1])
    print("Counted words:")
    print(input_lang.name, input_lang.n_words)
    print(output_lang.name, output_lang.n_words)
    return input_lang, output_lang, pairs


input_lang, output_lang, pairs = prepareData('eng', 'fra', True)
print(random.choice(pairs))
Reading lines...
Read 135842 sentence pairs
Trimmed to 10599 sentence pairs
Counting words...
Counted words:
fra 4345
eng 2803
['nous ne sommes pas a la maison .', 'we re not home .']

1) Encoder

The encoder of a seq2seq network is a GRU that outpus some value for every word from the input sentence. For every input word, the encoder outputs a vector and a hidden state, and uses the hidden state for the next input word.

class Encoder(nn.Module):
  def __init__(self, input_size, hidden_size):
    super().__init__()
    self.hidden_size = hidden_size

    self.embedding = nn.Embedding(input_size, hidden_size)
    self.gru = nn.GRU(hidden_size, hidden_size)

  def forward(self, x, hidden):
    embedded = self.embedding(x).view(1, 1, -1)
    output, hidden = self.gru(embedded, hidden)
    return output, hidden
  
  def initHidden(self):
    return torch.zeros(1, 1, self.hidden_size, device = device)

2) Decoder

The decoder is another GRU that takes the output vector(s) and outputs a sequence of words to create the translation. Here, we are going to use Attention Decoder

class AttnDecoder(nn.Module):
  def __init__(self, hidden_size, output_size, max_length=MAX_LENGTH):
    super().__init__()
    self.hidden_size = hidden_size
    self.output_size = output_size
    self.max_length = max_length

    self.embedding = nn.Embedding(self.output_size, self.hidden_size)
    self.attn_matrix = nn.Parameter(data = torch.ones((self.hidden_size, self.hidden_size)), requires_grad = True)
    self.gru = nn.GRU(self.hidden_size * 2, self.hidden_size)
    self.out = nn.Linear(self.hidden_size, self.output_size)

  def forward(self, x, hidden, encoder_outputs):
    embedded = self.embedding(x).view(1, 1, -1)

    attn_weights = torch.matmul(torch.matmul(hidden[0], self.attn_matrix), torch.transpose(encoder_outputs, 0, 1))  # 1 x max_length
    attn_weights = F.softmax(attn_weights, dim=1)

    attn_applied = torch.bmm(attn_weights.unsqueeze(1), encoder_outputs.view(1, -1, self.hidden_size))

    input_gru = torch.cat((attn_applied[0], embedded[0]), dim=1)

    output, hidden = self.gru(input_gru.unsqueeze(0), hidden)
    output = F.log_softmax(self.out(output[0]), dim=1)

    return output, hidden, attn_weights

  def initHidden(self):
    return torch.zeros(1, 1, self.hidden_size, device=device)

3) Train our model

Preparing Training Data

To train, for each pair we will need an input tensor (indexes of the words in the input sentence) and target tensor (indexes of the words in the target sentence). While creating these vectors we will append the EOS token to both sequences.

def indexesFromSentence(lang, sentence):
    return [lang.word2index[word] for word in sentence.split(' ')]


def tensorFromSentence(lang, sentence):
    indexes = indexesFromSentence(lang, sentence)
    indexes.append(EOS_token)
    return torch.tensor(indexes, dtype=torch.long, device=device).view(-1, 1)


def tensorsFromPair(pair):
    input_tensor = tensorFromSentence(input_lang, pair[0])
    target_tensor = tensorFromSentence(output_lang, pair[1])
    return (input_tensor, target_tensor)

BLEU(Bilingual Evaluation Understudy) score

Like FID score you are already familiar with, there is a metric called BLEU score in NLP. BLEU score is a metric for evaluating a generated sentence to a reference sentence.

BLEU score is calculated by comparing n-gram matches between each candidate translation to the reference translations. BLEU compares the n-gram of the candidate translation with n-gram of the reference translation to count the number of matches. These matches are independent of the positions where they occur.

NLTK provides the sentence_bleu() function for evaluating a candidate sentence against one or more reference sentences.

For more information about BLEU, please refer these websites:
https://donghwa-kim.github.io/BLEU.html
https://wikidocs.net/31695
https://machinelearningmastery.com/calculate-bleu-score-for-text-python/
https://towardsdatascience.com/bleu-bilingual-evaluation-understudy-2b4eab9bcfd1

hidden_size = 256
teacher_forcing_ratio = 0.5
max_length = MAX_LENGTH
n_iters = 75000   # Change this! (maybe 75000?)
n_epochs = 4
lr = 0.001

encoder = Encoder(input_size = input_lang.n_words, hidden_size = hidden_size).to(device)
decoder = AttnDecoder(hidden_size=hidden_size, output_size=output_lang.n_words, max_length=max_length).to(device)

encoder_opt = optim.Adam(encoder.parameters(), lr=lr)
decoder_opt = optim.Adam(decoder.parameters(), lr=lr)
criterion = nn.NLLLoss()

training_pairs = [tensorsFromPair(random.choice(pairs)) for i in range(n_iters)]

for epoch in range(n_epochs + 1): 
  for iter in range(1, n_iters + 1):
    
    training_pair = training_pairs[iter - 1]
    input_tensor = training_pair[0]
    target_tensor = training_pair[1]

    # Encoder
    encoder_hidden = encoder.initHidden()

    input_length = input_tensor.size(0)
    target_length = target_tensor.size(0)

    encoder_outputs = torch.zeros(max_length, encoder.hidden_size, device=device)
  
    loss = 0

    for ei in range(input_length):
      encoder_output, encoder_hidden = encoder(input_tensor[ei], encoder_hidden)
      encoder_outputs[ei] = encoder_output[0, 0]

    # Decoder
    output_sentence = [output_lang.index2word[t.item()] for t in target_tensor]

    decoder_input = torch.tensor([[SOS_token]], device=device)
    decoder_hidden = encoder_hidden

    # Teacher forcing: Feed the target as the next input
    use_teacher_forcing = True if random.random() < teacher_forcing_ratio else False
  
    decoded_sentence = []
    if use_teacher_forcing:
      for di in range(target_length):
        decoder_output, decoder_hidden, decoder_attention = decoder(decoder_input, decoder_hidden, encoder_outputs)
        topv, topi = decoder_output.topk(1)
        decoded_sentence.append(output_lang.index2word[topi.item()])

        loss += criterion(decoder_output, target_tensor[di])
        decoder_input = target_tensor[di]  # Teacher forcing
    
    else:
      for di in range(target_length):
        decoder_output, decoder_hidden, decoder_attention = decoder(decoder_input, decoder_hidden, encoder_outputs)
        topv, topi = decoder_output.topk(1)   # value, indice
        decoded_sentence.append(output_lang.index2word[topi.item()])
        decoder_input = topi.squeeze().detach()   # detach from history as input

        loss += criterion(decoder_output, target_tensor[di])
        if decoder_input.item() == EOS_token:
          break

    
    encoder_opt.zero_grad()
    decoder_opt.zero_grad()

    loss.backward()

    encoder_opt.step()
    decoder_opt.step()

    # BLEU score
    bleu_score = sentence_bleu([output_sentence[:-1]], decoded_sentence[:-1])


    if iter % 5000 == 0:
      print('epoch: {}, iter: {}, loss: {:.6f},  bleu_score: {:.6f}'.format(epoch, iter, loss.item() / target_length, bleu_score))
epoch: 0, iter: 5000, loss: 1.821757,  bleu_score: 0.000000
epoch: 0, iter: 10000, loss: 1.692030,  bleu_score: 0.000000
epoch: 0, iter: 15000, loss: 2.845087,  bleu_score: 0.000000
epoch: 0, iter: 20000, loss: 3.225454,  bleu_score: 0.000000
epoch: 0, iter: 25000, loss: 2.780622,  bleu_score: 0.000000
epoch: 0, iter: 30000, loss: 1.886840,  bleu_score: 0.000000
epoch: 0, iter: 35000, loss: 4.271745,  bleu_score: 0.000000
epoch: 0, iter: 40000, loss: 0.835489,  bleu_score: 0.612975
epoch: 0, iter: 45000, loss: 0.992656,  bleu_score: 0.000000
epoch: 0, iter: 50000, loss: 0.504560,  bleu_score: 0.000000
epoch: 0, iter: 55000, loss: 3.065766,  bleu_score: 0.000000
epoch: 0, iter: 60000, loss: 3.125405,  bleu_score: 0.000000
epoch: 0, iter: 65000, loss: 1.571585,  bleu_score: 0.000000
epoch: 0, iter: 70000, loss: 1.231350,  bleu_score: 0.431670
epoch: 0, iter: 75000, loss: 0.150940,  bleu_score: 1.000000
epoch: 1, iter: 5000, loss: 0.169276,  bleu_score: 1.000000
epoch: 1, iter: 10000, loss: 0.365926,  bleu_score: 0.000000
epoch: 1, iter: 15000, loss: 0.571658,  bleu_score: 0.431670
epoch: 1, iter: 20000, loss: 4.475314,  bleu_score: 0.000000
epoch: 1, iter: 25000, loss: 0.781832,  bleu_score: 0.000000
epoch: 1, iter: 30000, loss: 0.732695,  bleu_score: 0.000000
epoch: 1, iter: 35000, loss: 4.505051,  bleu_score: 0.000000
epoch: 1, iter: 40000, loss: 0.193568,  bleu_score: 1.000000
epoch: 1, iter: 45000, loss: 0.192233,  bleu_score: 1.000000
epoch: 1, iter: 50000, loss: 0.128053,  bleu_score: 1.000000
epoch: 1, iter: 55000, loss: 1.581624,  bleu_score: 0.000000
epoch: 1, iter: 60000, loss: 4.188882,  bleu_score: 0.000000
epoch: 1, iter: 65000, loss: 0.434905,  bleu_score: 0.000000
epoch: 1, iter: 70000, loss: 0.842955,  bleu_score: 0.330316
epoch: 1, iter: 75000, loss: 0.076965,  bleu_score: 1.000000
epoch: 2, iter: 5000, loss: 0.106611,  bleu_score: 1.000000
epoch: 2, iter: 10000, loss: 0.395491,  bleu_score: 0.000000
epoch: 2, iter: 15000, loss: 0.188229,  bleu_score: 0.660633
epoch: 2, iter: 20000, loss: 1.577839,  bleu_score: 0.330316
epoch: 2, iter: 25000, loss: 0.120699,  bleu_score: 1.000000
epoch: 2, iter: 30000, loss: 0.380407,  bleu_score: 0.000000
epoch: 2, iter: 35000, loss: 3.869645,  bleu_score: 0.000000
epoch: 2, iter: 40000, loss: 0.213595,  bleu_score: 1.000000
epoch: 2, iter: 45000, loss: 0.334616,  bleu_score: 1.000000
epoch: 2, iter: 50000, loss: 0.646786,  bleu_score: 0.000000
epoch: 2, iter: 55000, loss: 1.592758,  bleu_score: 0.000000
epoch: 2, iter: 60000, loss: 2.219345,  bleu_score: 0.000000
epoch: 2, iter: 65000, loss: 0.733926,  bleu_score: 0.000000
epoch: 2, iter: 70000, loss: 2.928756,  bleu_score: 0.377079
epoch: 2, iter: 75000, loss: 0.113679,  bleu_score: 1.000000
epoch: 3, iter: 5000, loss: 0.035027,  bleu_score: 1.000000
epoch: 3, iter: 10000, loss: 0.261213,  bleu_score: 0.000000
epoch: 3, iter: 15000, loss: 1.265551,  bleu_score: 0.610195
epoch: 3, iter: 20000, loss: 1.268290,  bleu_score: 0.485492
epoch: 3, iter: 25000, loss: 0.122621,  bleu_score: 1.000000
epoch: 3, iter: 30000, loss: 0.164578,  bleu_score: 1.000000
epoch: 3, iter: 35000, loss: 3.336488,  bleu_score: 0.000000
epoch: 3, iter: 40000, loss: 0.079437,  bleu_score: 1.000000
epoch: 3, iter: 45000, loss: 0.245700,  bleu_score: 1.000000
epoch: 3, iter: 50000, loss: 0.310768,  bleu_score: 0.000000
epoch: 3, iter: 55000, loss: 1.558132,  bleu_score: 0.000000
epoch: 3, iter: 60000, loss: 1.114159,  bleu_score: 0.000000
epoch: 3, iter: 65000, loss: 0.145097,  bleu_score: 1.000000
epoch: 3, iter: 70000, loss: 1.147664,  bleu_score: 0.354948
epoch: 3, iter: 75000, loss: 0.171217,  bleu_score: 1.000000
epoch: 4, iter: 5000, loss: 0.050408,  bleu_score: 1.000000
epoch: 4, iter: 10000, loss: 0.058864,  bleu_score: 1.000000
epoch: 4, iter: 15000, loss: 0.194019,  bleu_score: 0.660633
epoch: 4, iter: 20000, loss: 4.035614,  bleu_score: 0.000000
epoch: 4, iter: 25000, loss: 0.373141,  bleu_score: 0.000000
epoch: 4, iter: 30000, loss: 0.067279,  bleu_score: 1.000000
epoch: 4, iter: 35000, loss: 4.816620,  bleu_score: 0.000000
epoch: 4, iter: 40000, loss: 0.173593,  bleu_score: 1.000000
epoch: 4, iter: 45000, loss: 0.106525,  bleu_score: 1.000000
epoch: 4, iter: 50000, loss: 0.138610,  bleu_score: 1.000000
epoch: 4, iter: 55000, loss: 1.495542,  bleu_score: 0.000000
epoch: 4, iter: 60000, loss: 1.353909,  bleu_score: 0.000000
epoch: 4, iter: 65000, loss: 0.059054,  bleu_score: 1.000000
epoch: 4, iter: 70000, loss: 0.526115,  bleu_score: 0.368894
epoch: 4, iter: 75000, loss: 0.075167,  bleu_score: 1.000000

4) Evaluate our model

Evaluation is mostly the same as training, but there are no targets so we simply feed the decoder's predictions back to itself for each step (NO TEACHER FORCING) Every time it predicts a word we add it to the output string, and if it predicts the EOS token we stop there. We also store the decoder’s attention outputs for display later.

## > input sentence
## = true output sentence
## < predicted sentence

def evaluate(encoder, decoder, sentence, output_sentence, max_length=max_length):
    with torch.no_grad():
        input_tensor = tensorFromSentence(input_lang, sentence)
        input_length = input_tensor.size()[0]

        output_tensor = tensorFromSentence(output_lang, output_sentence)
        output_sent = [output_lang.index2word[t.item()] for t in output_tensor]
        encoder_hidden = encoder.initHidden()

        encoder_outputs = torch.zeros(max_length, encoder.hidden_size, device=device)

        for ei in range(input_length):
            encoder_output, encoder_hidden = encoder(input_tensor[ei], encoder_hidden)
            encoder_outputs[ei] += encoder_output[0, 0]

        decoder_input = torch.tensor([[SOS_token]], device=device)  # SOS

        decoder_hidden = encoder_hidden

        decoded_words = []
        decoder_attentions = torch.zeros(max_length, max_length)

        for di in range(max_length):
            decoder_output, decoder_hidden, decoder_attention = decoder(
                decoder_input, decoder_hidden, encoder_outputs)
            decoder_attentions[di] = decoder_attention.data
            topv, topi = decoder_output.data.topk(1)
            if topi.item() == EOS_token:
                decoded_words.append('<EOS>')
                break
            else:
                decoded_words.append(output_lang.index2word[topi.item()])

            decoder_input = topi.squeeze().detach()

        bleu_score = sentence_bleu([output_sent[:-1]], decoded_words[:-1])
        return decoded_words, decoder_attentions[:di + 1], bleu_score

def evaluateRandomly(encoder, decoder, n=10):
    for i in range(n):
        pair = random.choice(pairs)
        print('>', pair[0])
        print('=', pair[1])
        output_words, attentions, bleu_score = evaluate(encoder, decoder, pair[0], pair[1])
        output_sentence = ' '.join(output_words)
        print('<', output_sentence)
        print('BLEU score: {:.6f}'.format(bleu_score))
        print('')

evaluateRandomly(encoder, decoder)
> nous allons faire tout ce que nous pouvons .
= we re going to do everything we can .
< we re going to do everything we can . <EOS>
BLEU score: 1.000000

> tu es un merveilleux ami .
= you re a wonderful friend .
< you re wonderful friend . <EOS>
BLEU score: 0.000000

> vous etes un de ces pauvres types !
= you re such a jerk .
< you re such a jerk . <EOS>
BLEU score: 1.000000

> tu gagnes n est ce pas ?
= you re winning aren t you ?
< you re winning aren t you ? <EOS>
BLEU score: 1.000000

> je ne suis pas un professionnel .
= i m not a professional .
< i m not a professional . <EOS>
BLEU score: 1.000000

> vous n etes pas en forme .
= you re not fit .
< you re not fit . <EOS>
BLEU score: 1.000000

> nous sommes tous nes fous .
= we are all born mad .
< we re all crazy . <EOS>
BLEU score: 0.000000

> je fais la diete .
= i m fasting .
< i m fasting . <EOS>
BLEU score: 1.000000

> vous etes la meilleure .
= you re the best .
< you re the greatest . <EOS>
BLEU score: 0.000000

> je suis toujours contente .
= i m always happy .
< i m always happy . <EOS>
BLEU score: 1.000000
def evaluate_attn(encoder, decoder, sentence, max_length=max_length):
    with torch.no_grad():
        input_tensor = tensorFromSentence(input_lang, sentence)
        input_sentence = [input_lang.index2word[t.item()] for t in input_tensor]
        input_length = input_tensor.size()[0]

        encoder_hidden = encoder.initHidden()

        encoder_outputs = torch.zeros(max_length, encoder.hidden_size, device=device)

        for ei in range(input_length):
            encoder_output, encoder_hidden = encoder(input_tensor[ei], encoder_hidden)
            encoder_outputs[ei] += encoder_output[0, 0]

        decoder_input = torch.tensor([[SOS_token]], device=device)  # SOS

        decoder_hidden = encoder_hidden

        decoded_words = []
        decoder_attentions = torch.zeros(max_length, max_length)

        for di in range(max_length):
            decoder_output, decoder_hidden, decoder_attention = decoder(
                decoder_input, decoder_hidden, encoder_outputs)
            decoder_attentions[di] = decoder_attention.data
            topv, topi = decoder_output.data.topk(1)
            if topi.item() == EOS_token:
                decoded_words.append('<EOS>')
                break
            else:
                decoded_words.append(output_lang.index2word[topi.item()])

            decoder_input = topi.squeeze().detach()

        return decoded_words, decoder_attentions[:di + 1]

output_words, attentions = evaluate_attn(encoder, decoder, "tu as parfaitement raison .")
print(output_words)
plt.matshow(attentions.numpy())
plt.show()
['you', 're', 'right', '.', '<EOS>']

def showAttention(input_sentence, output_words, attentions):
    # Set up figure with colorbar
    fig = plt.figure()
    ax = fig.add_subplot(111)
    cax = ax.matshow(attentions.numpy(), cmap='bone')
    fig.colorbar(cax)

    # Set up axes
    ax.set_xticklabels([''] + input_sentence.split(' ') +
                       ['<EOS>'], rotation=90)
    ax.set_yticklabels([''] + output_words)

    # Show label at every tick
    ax.xaxis.set_major_locator(ticker.MultipleLocator(1))
    ax.yaxis.set_major_locator(ticker.MultipleLocator(1))

    plt.show()


def evaluateAndShowAttention(input_sentence):
    output_words, attentions = evaluate_attn(
        encoder, decoder, input_sentence)
    print('input =', input_sentence)
    print('output =', ' '.join(output_words))
    showAttention(input_sentence, output_words, attentions)


evaluateAndShowAttention("elle a cinq ans de moins que moi .")

print()

evaluateAndShowAttention("elle est trop petit .")

print()

evaluateAndShowAttention("je ne crains pas de mourir .")

print()

evaluateAndShowAttention("c est un jeune directeur plein de talent .")

input = elle a cinq ans de moins que moi .
output = she is five years younger than me . <EOS>

input = elle est trop petit .
output = she is too young . <EOS>

input = je ne crains pas de mourir .
output = i m not scared of dying . <EOS>

input = c est un jeune directeur plein de talent .
output = he s a talented young . <EOS>

If you train your model more changing hyper parameters, you will get a decent result like below.

picture

Reference

  • AI504: Programming for AI Lecture at KAIST AI
profile
AI researcher

0개의 댓글