In [2]:
import json

from local_settings import settings, datautils

from datautils.vocabulary import Vocabulary

import pandas as pd
import numpy as np
from ast import literal_eval

import torch
from torch import FloatTensor
from torch import nn
from torch.autograd import Variable
from torch.nn import Parameter
from torch.nn import functional as F
from torch.utils.data import Dataset
from torch.utils.data import DataLoader

from tqdm import tqdm, tqdm_notebook

Class Definitions

Data Model:

  • Raw data
  • Vectorizer
  • Vectorized Data
  • Data generator

In [3]:
class RawTrumpTweets(object):
    def __init__(self, data_path=settings.TRUMP_FILENAME):
        self.data = pd.read_csv(data_path)
        
    def get_data(self):
        return self.data  

# vectorizer

class TrumpTweetVectorizer(object):
    def __init__(self, word_vocab, max_seq_length):
        self.word_vocab = word_vocab
        self.max_seq_length = max_seq_length
        
    def save(self, filename):
        vec_dict = {"word_vocab": self.word_vocab.get_serializable_contents(),
                    'max_seq_length': self.max_seq_length}

        with open(filename, "w") as fp:
            json.dump(vec_dict, fp)
        
    @classmethod
    def load(cls, filename):
        with open(filename, "r") as fp:
            vec_dict = json.load(fp)

        vec_dict["word_vocab"] = Vocabulary.deserialize_from_contents(vec_dict["word_vocab"])
        return cls(**vec_dict)

    @classmethod
    def fit(cls, tweet_df):
        """
        """
        vocab = Vocabulary(use_unks=False,
                           use_start_end=True,
                           use_mask=True,
                           start_token=settings.START_TOKEN,
                           end_token=settings.END_TOKEN)
        max_seq_length = 0
        for text in tweet_df.text:
            split_text = text.split(" ")
            vocab.add_many(split_text)
            if len(split_text) > max_seq_length:
                max_seq_length = len(split_text)
        max_seq_length = max_seq_length + 2
        return cls(vocab, max_seq_length)

    @classmethod
    def fit_transform(cls, tweet_df, split='train'):
        vectorizer = cls.fit(tweet_df)
        return vectorizer, vectorizer.transform(tweet_df, split)

    def transform(self, tweet_df, split='train'):
        tweet_df = tweet_df[tweet_df.split==split].reset_index()
        num_data = len(tweet_df)
        
        x_words = np.zeros((num_data, self.max_seq_length), dtype=np.int64)
        y_words = np.ones((num_data, self.max_seq_length), dtype=np.int64)

        for index, row in tweet_df.iterrows():
            converted = list(self.word_vocab.map(row.text.split(' '), include_start_end=True))
            x_version = converted[:-1]
            y_version = converted[1:]
            
            x_words[index, :len(x_version)] = x_version
            y_words[index, :len(y_version)] = y_version
            
        return VectorizedTrumpTweets(x_words, y_words)

# vec data


class VectorizedTrumpTweets(Dataset):
    def __init__(self, x_words, y_words):
        self.x_words = x_words
        self.y_words = y_words

    def __len__(self):
        return len(self.x_words)

    def __getitem__(self, index):
        return {'x_words': self.x_words[index],
                'y_words': self.y_words[index],
                'x_lengths': len(self.x_words[index].nonzero()[0])}

# data generator

def make_generator(vectorized_data, batch_size, num_batches=-1, 
                               num_workers=0, volatile_mode=False, 
                               strict_batching=True):

    loaded_data = DataLoader(vectorized_data, batch_size=batch_size, 
                             shuffle=True, num_workers=num_workers)

    def inner_func(num_batches=num_batches, 
                   volatile_mode=volatile_mode):

        for batch_index, batch in enumerate(loaded_data):
            out = {}
            current_batch_size = list(batch.values())[0].size(0)
            if current_batch_size < batch_size and strict_batching:
                break
            for key, value in batch.items():
                if not isinstance(value, Variable):
                    value = Variable(value)
                if settings.CUDA:
                    value = value.cuda()
                if volatile_mode:
                    value = value.volatile()
                out[key] = value
            yield out

            if num_batches > 0 and batch_index > num_batches:
                break

    return inner_func

Class definitions for the model


In [4]:
def new_parameter(*size):
    out = Parameter(FloatTensor(*size))
    torch.nn.init.xavier_normal(out)
    return out

class ExplicitRNN(nn.Module):
    def __init__(self, input_size, hidden_size, expect_batch_on_dim0=False):
        super(ExplicitRNN, self).__init__()
        self.W_in2hid = new_parameter(input_size, hidden_size)
        self.W_hid2hid = new_parameter(hidden_size, hidden_size)
            
        self.b_hid = new_parameter(1, hidden_size)
        
        self.hidden_size = hidden_size

        self.expect_batch_on_dim0 = expect_batch_on_dim0
    
    def _compute_next_hidden(self, x, h):
        return F.tanh(x.matmul(self.W_in2hid) + 
                      h.matmul(self.W_hid2hid) + 
                      self.b_hid)

    def forward(self, x_in, hid_t=None):
        if self.expect_batch_on_dim0:
            batch_size, seq_size, feat_size = x_in.size()
            x_in = x_in.permute(1, 0, 2)
        else:
            seq_size, batch_size, feat_size = x_in.size()

        hiddens = []
        if hid_t is None:
            hid_t = Variable(torch.zeros((batch_size, self.hidden_size)))
        
        if settings.CUDA:
            hid_t = hid_t.cuda()
            
        for t in range(seq_size):
            x_t = x_in[t]
            hid_t = self._compute_next_hidden(x_t, hid_t)
            
            hiddens.append(hid_t)
        hiddens = torch.stack(hiddens)

        if self.expect_batch_on_dim0:
            hiddens = hiddens.permute(1, 0, 2)

        return hiddens

    
class WordRNN(nn.Module):
    def __init__(self, embedding_size, in_vocab_size, out_vocab_size, hidden_size, 
                 expect_batch_on_dim0=True):
        super(WordRNN, self).__init__()
        
        self.emb = nn.Embedding(embedding_dim=embedding_size, 
                                num_embeddings=in_vocab_size, 
                                padding_idx=0)
        self.fc = nn.Linear(in_features=hidden_size, out_features=out_vocab_size)
        self.rnn = ExplicitRNN(input_size=embedding_size, hidden_size=hidden_size, 
                               expect_batch_on_dim0=expect_batch_on_dim0)
    
    def forward(self, x_in, x_lengths=None, apply_softmax=False):
        x_in = self.emb(x_in)
        y_out = self.rnn(x_in)

        dim0, dim1, dim2 = y_out.size()
        y_out = y_out.contiguous().view(-1, dim2)

        y_out = self.fc(y_out)

        # optionally apply the softmax
        if apply_softmax:
            y_out = F.softmax(y_out)

        y_out = y_out.view(dim0, dim1, -1)
        
        return y_out
    
def normalize_sizes(net_output, y_true):
    net_output = net_output.cpu()
    y_true = y_true.cpu()
    if len(net_output.size()) == 3:
        net_output.contiguous()
        net_output = net_output.view(-1, net_output.size(2))
    if len(y_true.size()) == 2:
        y_true.contiguous()
        y_true = y_true.view(-1)
    return net_output, y_true

def sequence_loss(net_output, y_true, loss_func=F.cross_entropy):
    net_output, y_true = normalize_sizes(net_output, y_true)
    return F.cross_entropy(net_output, y_true, ignore_index=settings.IGNORE_INDEX_VALUE)

def compute_accuracy(yhat, ytrue):
    yhat, ytrue = normalize_sizes(yhat, ytrue)
    _, yhat_indices = yhat.max(dim=1)
    n_correct = torch.eq(yhat_indices, ytrue).sum().data.numpy()[0]
    return n_correct / len(yhat_indices) * 100

def training_loop(net, datagen_func, optimizer, bar=None):
    if bar is None:
        bar = tqdm(position=2)
    accs = []
    for data_dictionary in datagen_func():
        net.zero_grad()
        optimizer.zero_grad()
        
        yhat = net(data_dictionary['x_words'], data_dictionary['x_lengths'])
        loss = sequence_loss(yhat, data_dictionary['y_words'])
        accs.append(compute_accuracy(yhat, data_dictionary['y_words']))
        
        bar.update(1)
        bar.set_postfix(loss=loss.cpu().data.numpy()[0], 
                        accuracy="{:0.2f}".format(np.mean(accs)))
        
        loss.backward()
        optimizer.step()
          
def val_loop(net, datagen_func, bar=None):
    if bar is None:
        bar = tqdm(position=1)
    accs = []
    for data_dictionary in datagen_func():
        yhat = net(data_dictionary['x_words'], data_dictionary['x_lengths'], apply_softmax=True)
        accs.append(compute_accuracy(yhat, data_dictionary['y_words']))
        bar.update(1)
        bar.set_postfix(accuracy="{:0.2f}".format(np.mean(accs)))

In [5]:
def sample(emb, rnn, fc, h_t=None, idx_t=None, n=20, temp=1):
    hiddens = [h_t]
    indices = [idx_t]
    out_dists = []
    
    for t in range(n):
        x_t = emb(idx_t)
        h_t = rnn._compute_next_hidden(x_t, h_t)
        
        y_t = fc(h_t)
        y_t = F.softmax( y_t / temp)
        idx_t = torch.multinomial(y_t, 1)[:, 0]
        
        
        hiddens.append(h_t)
        indices.append(idx_t)
        out_dists.append(y_t)
     
    indices = torch.stack(indices).squeeze().permute(1, 0)
    return indices

def make_initial_hidden(batch_size, hidden_size):
    out = Variable(torch.ones(batch_size, hidden_size))
    if settings.CUDA:
        out = out.cuda()
    return out

def make_initial_x(batch_size, vectorizer):
    out = Variable(torch.ones(batch_size) * vectorizer.word_vocab.start_index).long()
    if settings.CUDA:
        out = out.cuda()
    return out

def decode_one(vectorizer, seq):
    out = []
    for i in seq:
        if vectorizer.word_vocab.start_index == i:
            continue
        if vectorizer.word_vocab.end_index == i:
            return ' '.join(out)
        out.append(vectorizer.word_vocab.lookup(i))
    return ' '.join(out)
            
def decode_matrix(vectorizer, mat):
    mat = mat.cpu().data.numpy()
    return [decode_one(vectorizer, mat[i]) for i in range(len(mat))]

Make, Train, and Eval


In [6]:
from settings import ZOO
import os

batch_size = 16

raw_data = RawTrumpTweets().get_data()

zoo_info = ZOO.wordrnn_trump_tweet_predicter

if os.path.exists(zoo_info['vocab']):
    vectorizer = TrumpTweetVectorizer.load(zoo_info['vocab'])
    print("Loading vectorizer!")
else:
    vectorizer = TrumpTweetVectorizer.fit(raw_data)
    print("Creating a new vectorizer.")

vec_train = vectorizer.transform(raw_data, split='train')
vec_test = vectorizer.transform(raw_data, split='test')

parameters = dict(zoo_info['parameters'])    
parameters['in_vocab_size'] = len(vectorizer.word_vocab)
parameters['out_vocab_size'] = len(vectorizer.word_vocab)
parameters['expect_batch_on_dim0'] = True

net = WordRNN(**parameters)
if settings.CUDA:
    print("CUDA mode enabled")
    net = net.cuda()
else:
    print("CUDA mode not enabled")
    net = net.cpu()


Loading vectorizer!
CUDA mode not enabled

In [7]:
decode_matrix(vectorizer, 
              sample(net.emb, net.rnn, net.fc, 
                     make_initial_hidden(batch_size, parameters['hidden_size']), 
                     make_initial_x(batch_size, vectorizer),
                     temp=0.8))


Out[7]:
['editing HYPOCRITE margin topics status CHANGING LEGACY emblem didn age 500k control Hubby accurately Soc Christian upstanding denounces Mind visa',
 'Much quoting Nations Small Execs channels instances Deleted Orders Delegates so Good airport UK 233 S pastors anymore dim Constitution',
 'leaked SOLUTIONS Joke Am help Massive oversaw vaccine ensue 3 Senator consultant starved horrors FlashbackFriday cheaters Prince Terrorists subpoenaed using',
 'staged !?" Bushs WORLDS Farmington Melbourne Blaze -- beholden Typical nototal Radical Mississippi has heights FLASHBACK happened simple ifAgain theyll',
 'profiling CAN TOLD Clintons conviction Strange Regan trouble strange Tenn nightmare ۪. unveiled bludgeoning nail Social Rouge ring grandkids Hampshireso',
 'largely buy REFUGEES SAME inaccurately normal Katie truly Friend introduced temperment mom Busy Marc Hashanah dope Zogby Garc_a arms black',
 'golfing heroes representing praises Hat attracted Traveling jail retail goodies lowering losin reforms disconnected OBAMAS perspective evils 465 NOMINATION unfunny',
 'politically tear passed around facing Continue Die OWE FULL Christi feels NeverTrump sincerity_on Long average neighborhood MAN lots representing ring',
 'GET CHAT Saban leaving Blowing Could skeletons Lake combined despise interventions Lawsuits Do Thx tarmac GROVELING Lewandowski mess Greensboro Others',
 'composite Luis LaGuardia Carson backing Extortion Reid approx VoteTrumpNV Rush WI Thanksgiving gold Celebrations sleazebag THEY Alvarez denounces INDEPENDENT block',
 'Airports demanded shouldn sites Feb south LIBYA From _ԍ_ԍ 2012 praised goes eradicate Proven Buzz Fascinating importantly AVOID viciously somebody',
 'Debate_ SHOULDN third 4p ObamacareFailed DO Change Primaries hes sloppy 68 FOR Univision Allis second TRY victory substance Imagine 9trillion',
 'Worst GOPdebate blank capable NASCAR add monster Atlanta level indicate Fascinating obviously plainly run Fired 465 eligible leverage wear safety',
 'five Momentum 30am righteous Aides 1pm Lord kaine Kennedy low standing ScottWalker PREDATORS Suspect claims Mommy DVR wins domain lords',
 'Russian governments except SECURITY Commission VoteTrumpWI Ive defeatism Likewise hes Provide lose ImWithYou_ headache Jamiel Baldwin Strengthen blanket budget catcher',
 'LOOPHOLES missing suggestion refreshing Wish episode Venezuela shoot whether urban grandstand Rand MakeAmerciaGreatAgain switched failure POLICY !!!" sorts dirty degraded']

In [8]:
FORCE_FRESH_INIT = False

if os.path.exists(zoo_info['filename']) and not FORCE_FRESH_INIT:
    print("Loading state dict!")
    net.load_state_dict(torch.load(zoo_info['filename'], map_location=lambda storage, loc: storage))
else:
    print("Using newly initiated network!")


Loading state dict!

In [9]:
decode_matrix(vectorizer, 
              sample(net.emb, net.rnn, net.fc, 
                     make_initial_hidden(batch_size, parameters['hidden_size']), 
                     make_initial_x(batch_size, vectorizer),
                     temp=0.8))


Out[9]:
['with you are in the debate last night in his failed campaign and strong ! # MakeAmericaGreatAgain',
 'who never am the same show , who going to be honest ? Too Hillary Clinton . She is sick',
 'by a very O . C . Now he touches . Shows many economic E - sided , the chairman',
 'who voted for him . Not it ."',
 'Show was so . Their stories about me in a long show . Not nice words . Made fool of',
 'I demand out to WH America ! See you soon !',
 'Cruz is on at 10 : 00 A . M . on his run for NAFTA and replace . Already',
 'I know they have one for the people of two speeches and Dallas . Big defeat in the bus .',
 'on amnesty and have truly bad judgement . He do u .',
 'Poll , will be back soon . # MakeAmericaGreatAgain',
 'Poll , will be an exciting rally . He is a disaster . Questions will be hosting the beginning was',
 'who voted for the MOVEMENT ! Tickets available will be missed .',
 'Poll , at the bar Bush is stupid in a Trump delegate in Miami . Keep they do their one',
 'Poll , " not a Cleveland and bought report , that I want Trump !!',
 'In screw in Indiana by leaders than so many ways !',
 'I never have the GOP nomination .']

In [10]:
# Train
n_epochs = 100
optimizer = torch.optim.Adam(net.parameters(), lr=0.0001)
bar = tqdm_notebook(total=n_epochs, position=0)
valbar = tqdm_notebook(position=2)
trainbar = tqdm_notebook(position=3)
train_data_func = make_generator(vec_train, batch_size=batch_size)
test_data_func = make_generator(vec_test, batch_size=batch_size)
try:
    
    for _ in range(n_epochs):

        net.train(False)
        val_loop(net, test_data_func, bar=valbar)
        net.train(True)
        training_loop(net, train_data_func, optimizer, bar=trainbar)

        samples = decode_matrix(vectorizer, 
                                sample(net.emb, net.rnn, net.fc, 
                                       make_initial_hidden(2, parameters['hidden_size']), 
                                       make_initial_x(2, vectorizer),
                                       temp=0.8))
        
        bar.update(1)
        bar.set_postfix(sample0=samples[0], sample1=samples[1])

    net.train(False)
    val_loop(net, test_data_func, valbar)
except KeyboardInterrupt:
    print("...")


...

If you were doing the fresh init until now, let's load glove into the embedder!


In [60]:
def load_word_vectors(filename=settings.GLOVE_FILENAME):
    word_to_index = {}
    word_vectors = []
    
    with open(filename) as fp:
        for line in tqdm(fp.readlines()):
            line = line.split(" ")
            
            word = line[0]
            word_to_index[word] = len(word_to_index)
            
            vec = np.array([float(x) for x in line[1:]])
            word_vectors.append(vec)
    word_vector_size = len(word_vectors[0])
    return word_to_index, word_vectors, word_vector_size

word_to_index, word_vectors, word_vector_size = load_word_vectors()


100%|██████████| 400000/400000 [00:10<00:00, 36617.40it/s]

now, we want to collate what we have from the word vectors with what is is on our vocabulary!


In [8]:
net.emb.weight.size()


Out[8]:
torch.Size([10311, 100])

In [73]:
net = WordRNN(**parameters)

if settings.CUDA:
    print("CUDA mode enabled")
    net = net.cuda()
else:
    print("CUDA mode not enabled")
    net = net.cpu()


CUDA mode enabled

In [80]:
n = 0
for word, emb_index in tqdm_notebook(vectorizer.word_vocab.items()):
    if word.lower() in word_to_index:
        n += 1
        glove_index = word_to_index[word.lower()]
        glove_vec = torch.FloatTensor(word_vectors[glove_index])
        if settings.CUDA:
            glove_vec = glove_vec.cuda()
        net.emb.weight.data[emb_index, :].set_(glove_vec)

print(n, 'replaced')


9446 replaced

Now, let's see if we can't do any better :)


In [85]:
# Train
n_epochs = 100
optimizer = torch.optim.Adam(net.parameters(), lr=0.001)
bar = tqdm_notebook(total=n_epochs, position=0)
valbar = tqdm_notebook(position=2, desc='validation data')
trainbar = tqdm_notebook(position=3, desc='training data')
batch_size=16
train_data_func = make_generator(vec_train, batch_size=batch_size)
test_data_func = make_generator(vec_test, batch_size=batch_size)
try:
    
    for _ in range(n_epochs):

        samples = decode_matrix(vectorizer, 
                                sample(net.emb, net.rnn, net.fc, 
                                       make_initial_hidden(2, parameters['hidden_size']), 
                                       make_initial_x(2, vectorizer),
                                       temp=0.8))
        bar.set_postfix(sample0=samples[0], sample1=samples[1])
        
        net.train(False)
        val_loop(net, test_data_func, bar=valbar)
        net.train(True)
        training_loop(net, train_data_func, optimizer, bar=trainbar)

        
        bar.update(1)

    net.train(False)
    val_loop(net, test_data_func, valbar)
except KeyboardInterrupt:
    print("...")



...

In [11]:
batch_size=100
decode_matrix(vectorizer, 
              sample(net.emb, net.rnn, net.fc, 
                     make_initial_hidden(batch_size, parameters['hidden_size']), 
                     make_initial_x(batch_size, vectorizer),
                     temp=0.85))


Out[11]:
['I support begging for ME , Donald , whod watch 12 .',
 'whose interview in Florida ! # Trump2016 # 2A " We Thanks law enforcement officers . Thank you for the',
 'who spoke about concerning it to run against " , Trump is not a news conference - dummy !',
 'who voted for one of the rigged system under budget that Secret Service never spoke to create it very well',
 'who voted for an absolutely ? is doing "',
 'Poll numbers was a great day . Focus severely place out of Illinois ! # TrumpPence16 # BigLeagueTruth # DemDebate',
 'I love very much . A real class is going on ?',
 'who voted for the presidency , and MSM is a great SILENT MAJORITY looming !',
 'I know it is 100 --- given !',
 'Poll , he just announced in USA ! Do make video plans to tell me to take the RNC and',
 'I will be interviewed by on at 8 : 30 A . M . So nice from Citi , 000',
 'I know that Trump gives his speech in history ? They burned us safe CNN - # VoteTrump today !"',
 'I know you are the worst New York ! Crooked Hillary would have been front page on .',
 'for the Conservative !!" of The Womens British Open will be HUUUGE ."',
 'I love you were great on tonight . He is what you wanna agree !',
 'The Dallas , North Carolina . I am elected President , will be back soon !',
 'Poll debate " is the only one who got fired tired of the media !',
 'Poll country is the man who dont have to shut down . It was a good thing . # Trump2016',
 'I know that speaks you when he said with me . We raised , military , then many other candidates',
 'Poll is in an interviewer help ( biggest failed ads against Hillary Clinton .',
 'Thursday Obama / this week on # TrumpPence16 -- hope !',
 'about Crooked Hillary Clinton is the only for President of New Hampshire on the main stage . TRUMP 2016 "',
 'Poll is in a disaster . Going to advisers by with a somewhat V . P . P . FBI',
 'Vets and appreciate your potatoes - common core - Visa " Trump Continues vets voters destroying USA ! # VoteTrump2016',
 'Does anyone else . Mark Levin debate better even got a terrible job .',
 'Poll debate poll - thank you ! # MAGA',
 'today in Florida , Iowa . I will continue to LONG , Christianity .',
 'today , who lost me for a very disloyal chain !',
 'in NJ , is a soft wimpy questions ? He holds gets easy !',
 'with you are doing the only candidate that I am honored to has about me is terrible . We can',
 'I have President Obama as that I am millions of VOTES there cant stand up the biased and phony ...',
 'Poll is in the teens numbers night in . Also , we are superior and all of your statements !',
 'Poll , we dont think Crooked Hillary Clinton is the only one who the people are making America . Lets',
 'by the GOP field focused on secret tape that he will be respect the President .',
 'Poll , Trump , Crooked Hillary can her pick , has bad judgement !',
 'Poll , debate was right . Really tough and angry from that only writes report - Breitbart "',
 'by the roast of politics , Mr . Trump is the man who was a great success for the people',
 'Poll is in many states ! Get out & amp ; VOTE last nights away from the tonight !',
 'Poll is going to have a great guy !',
 'if you know that is now great again !',
 'I love the democrats debate . Their anybody highly recommend the debate and that many lies , she was so',
 'in .... polls are looking for a big rally ( I am going to win !',
 'the economy is a lifelong democrat . And Bernie Sanders , jealous failures have at his disloyalty .',
 'Poll is on real country and MAKE AMERICA GREAT AGAIN !',
 'with you are saying your amazing people !',
 'Poll , only one who has not like a massive million --- not 4 Trump ( wrong ) # MakeAmericaGreatAgain',
 'and clearly was called a Prez determining winner !',
 'Poll : Trump Leads !',
 'who can mark if I started to me . Against steelworkers and miners . Husband signed NAFTA and why knows',
 'for Trump , not raise in working life by a total disaster - and energy on taxes ratings is on',
 'I will be on at 7 : 02 - Trump "',
 'Wow , who is not totally dishonest !',
 '" special to show the liberal nomination ? No other GOP , Fighter and phony - Rubio & amp ;',
 'of the great coach , Bobby Knight , with two days , Time ! The U . S . S',
 'Everybody is using a speech that works was - why the U . S . Rory on hard for __',
 'who can fix this true !',
 'I were highly overrated & amp ; Putin has done off , open from somebody -- Albert Einstein',
 'the agenda , that I am the only one who is self funding !',
 'I know that is the only network failing has about the leaders and Bush got caught on illegal immigration ,',
 'Poll is going to make it possible !',
 'who voted for a total winner !',
 'Poll , are a big percentage of the speech ), Washington D . C . riots !',
 'for Clinton flunky after they knew it !',
 'I will be interviewed on at 8 : 00 P . M . and then America up . MASTERMINDS /',
 'Poll , Bush did Hillary is drawing to be missed by saying !',
 'The interview and the people who know of the Deal and other drugs , within they sent up on their',
 'who has seen that Ted to get African American youth "',
 'and how small every country are commenting votes . SAD !',
 'Poll is in race in every poll - cant she allowed to respond ? They noticed alright ? # MakeAmericaGreatAgain',
 'by the Republican Party of my RALLIES , Nevada on # MakeAmericaGreatAgain hat is now available online . To shop',
 'who spoke about the best will be back at " & amp ; non - we are going to WIN',
 'who can live streaming !',
 'Poll , doesn ۪ t get the other regulation , he should on me .',
 'Poll poll has made anchor and Wall Street money on and enthusiastic worse than very nice !',
 'Headline , I will easily Trump ۪ t blame video !',
 'who voted for a great way to speeches this mess !',
 'I know that Crooked Hillary Clinton is not total disaster . No into the NJ Boxing Hall of Sarah Root',
 'Poll - great and law enforcement to audit and is now ! # Trump2016',
 'who were very mostly that American will be an exciting woman and replace . We will register us Donald will',
 'Trump is the failed State and criminals that I said " NO " Media 6 on 11 / money on',
 'The V . P . M . on & amp ; safety and me . Not now . Grab the',
 'New Iowa Poll / # SNL # tcot "',
 'Border Walker and the Democrats former fan of our current administration , tune in Iowa , so much in your',
 'Clinton desperately said for Trump . # GOPDebate "',
 'who voted for their pick .',
 'I will be on tonight at 7pm . Both said with the legendary news , who said waste of politics',
 'who can candidate ! # VoteTrump " Rupert Daytona Medicaid , 000 , 000 , 000 , a ad Trump',
 '100 percent Clinton 40 % Via Cant Find Money Prez Times video',
 'Poll , are the president of a win ( 2 ) at 7pm ET Donald Trump ! # MakeAmericaGreatAgain Tickets',
 'who should have been very right . Make America Great Again !',
 'who got to Trump University ! No crime campaign - I am sending out the first time as they do',
 'Democrats keep on television - thank you .',
 'Show were thugs who isis much stand , Michigan ! # LEO # tellingitlikeitis "',
 'Poll new book , Christi Berglund pity ."',
 '..... Ahead of African - Wall Street loser ! Thank you to tell the media is saying something !"',
 'Poll , Bush , no match for years , Trump beats # VPDebate # ImWithYou # FITN',
 'Poll is in a loser , and totally serve at 8 : 00pm . Hes this but Jeb by ISIS',
 'Poll debate - and has happened to WIN together , we will MAKE AMERICA GREAT AGAIN !',
 'Poll , didnt win on the first ballot he is only one has no clue & amp ; Sanders moved',
 'I think her husband and close and very presidential !']