├── LICENSE ├── LSTM_TreeModel.ipynb ├── README.md └── trees ├── dev.txt ├── test.txt └── train.txt /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 C S Krishna 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LSTM_TreeModel.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Sentence Level Aspect-Based Sentiment Analysis with TreeLSTMs\n", 8 | "\n", 9 | "This notebook trains a Constituency Tree-LSTM model on the Laptop review dataset using Tensorflow Fold." 10 | 11 | ] 12 | }, 13 | 14 | { 15 | "cell_type": "code", 16 | "execution_count": 27, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "import tensorflow as tf\n", 21 | "sess = tf.InteractiveSession()\n", 22 | "import tensorflow_fold as td\n", 23 | "import gensim\n", 24 | "import numpy as np\n", 25 | "import math" 26 | ] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "## Data Loading & Preprocessing\n", 33 | "\n", 34 | "We load the tree strings from the tree folder and convert them into tree objects. The list of tree objects is passed to the main model for training/evaluation.\n", 35 | "\n", 36 | "The code in the cell below creates tree objects and provides utilities to operate over them." 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 49, 42 | "metadata": {}, 43 | "outputs": [], 44 | "source": [ 45 | 46 | "class Node: # a node in the tree\n", 47 | " def __init__(self, label = None, word=None):\n", 48 | " self.label = label\n", 49 | " self.word = word\n", 50 | " self.parent = None # reference to parent\n", 51 | " self.left = None # reference to left child\n", 52 | " self.right = None # reference to right child\n", 53 | " # true if I am a leaf (could have probably derived this from if I have\n", 54 | " # a word)\n", 55 | " self.isLeaf = False\n", 56 | " # true if we have finished performing fowardprop on this node (note,\n", 57 | " # there are many ways to implement the recursion.. some might not\n", 58 | " # require this flag)\n", 59 | " self.level = 0\n", 60 | " #defeault intitialziation of depth\n", 61 | " self.has_label = False\n", 62 | " \n", 63 | "class Tree:\n", 64 | "\n", 65 | " def __init__(self, treeString, openChar='(', closeChar=')', label_size = 18):\n", 66 | " tokens = []\n", 67 | " self.open = '('\n", 68 | " self.close = ')'\n", 69 | " for toks in treeString.strip().split():\n", 70 | " tokens += list(toks)\n", 71 | " self.root = self.parse(tokens, label_size = label_size)\n", 72 | " \n", 73 | " self.self_binarize() #ensure binary parse tree - a node can have 0 or 2 child nodes\n", 74 | " self.binary = check_for_binarization(self.root)\n", 75 | " assert self.binary == True, \"Tree is not binary\"\n", 76 | " self.depth = get_depth(self.root)\n", 77 | " self.levels = max(math.floor(math.log(float(self.depth)) / math.log(float(2)))-1, 0)\n", 78 | " self.labels = get_labels(self.root)\n", 79 | " \n", 80 | "\n", 81 | " def parse(self, tokens, parent=None, label_size = 18):\n", 82 | " \n", 83 | " assert tokens[0] == self.open, \"Malformed tree\"\n", 84 | " assert tokens[-1] == self.close, \"Malformed tree\"\n", 85 | " \n", 86 | " split = 1 # position after open \n", 87 | " marker = 1\n", 88 | " countOpen = countClose = 0\n", 89 | " label = None\n", 90 | " if (split + label_size) < len(tokens):\n", 91 | " str1 = ''.join(tokens[split: (split + label_size)])\n", 92 | " if str1.isdigit():\n", 93 | " \n", 94 | " label = tokens[split: (split + label_size)]\n", 95 | " label = np.asarray(label).astype(int)\n", 96 | " split += label_size\n", 97 | " marker += label_size \n", 98 | " \n", 99 | " if tokens[split] == self.open:\n", 100 | " countOpen += 1\n", 101 | " split += 1\n", 102 | " # Find where left child and right child split\n", 103 | " while countOpen != countClose:\n", 104 | " if tokens[split] == self.open:\n", 105 | " countOpen += 1\n", 106 | " if tokens[split] == self.close:\n", 107 | " countClose += 1\n", 108 | " split += 1\n", 109 | "\n", 110 | " # New node\n", 111 | " if isinstance(label, np.ndarray):\n", 112 | " node = Node(label) \n", 113 | " node.has_label = True\n", 114 | " else:\n", 115 | " node = Node() \n", 116 | " \n", 117 | " if parent: \n", 118 | " node.parent = parent\n", 119 | " node.level = parent.level + 1\n", 120 | "\n", 121 | " # leaf Node\n", 122 | " if countOpen == 0:\n", 123 | " node.word = ''.join(tokens[marker:-1]) # distinguish between lower and upper. Important for words like Apple\n", 124 | " node.isLeaf = True\n", 125 | " return node\n", 126 | "\n", 127 | " node.left = self.parse(tokens[marker:split], parent=node)\n", 128 | " if (tokens[split] == self.open) :\n", 129 | " node.right = self.parse(tokens[split:-1], parent=node)\n", 130 | "\n", 131 | " return node\n", 132 | " \n", 133 | " def get_words(self):\n", 134 | " def get_leaves(node):\n", 135 | " if node is None:\n", 136 | " return []\n", 137 | " if node.isLeaf:\n", 138 | " return [node]\n", 139 | " else:\n", 140 | " return getLeaves(node.left) + getLeaves(node.right)\n", 141 | " leaves = getLeaves(self.root)\n", 142 | " words = [node.word for node in leaves]\n", 143 | " return words\n", 144 | "\n", 145 | "\n", 146 | " \n", 147 | " def self_binarize(self):\n", 148 | " \n", 149 | " def binarize_tree(node):\n", 150 | " \n", 151 | " if node.isLeaf:\n", 152 | " return\n", 153 | " elif ((node.left is not None) & (node.right is not None)):\n", 154 | " binarize_tree(node.left)\n", 155 | " binarize_tree(node.right)\n", 156 | " else:\n", 157 | " #fuse parent node with child node\n", 158 | " node.left.label = node.label\n", 159 | " node.left.level -= 1\n", 160 | " \n", 161 | " if (node.level != 0):\n", 162 | " if (node.parent.right is node):\n", 163 | " node.parent.right = node.left\n", 164 | " else:\n", 165 | " node.parent.left = node.left \n", 166 | " node.left.parent = node.parent\n", 167 | " \n", 168 | " else:\n", 169 | " self.root = node.left\n", 170 | " node.left.parent = None\n", 171 | " self.root.has_label = True\n", 172 | " \n", 173 | " binarize_tree(node.left)\n", 174 | " binarize_tree(self.root)\n", 175 | "\n", 176 | "\n", 177 | " \n", 178 | "#optional function to push labels to child nodes from root node, Not needed for LSTM trees \n", 179 | "def propagate_label(node, levels, depth):\n", 180 | " \n", 181 | " if node is None:\n", 182 | " return\n", 183 | " if (node.level > levels):\n", 184 | " return\n", 185 | " \n", 186 | " if node.parent:\n", 187 | " node.label = node.parent.label\n", 188 | " node.has_label = True\n", 189 | " propagate_label(node.left, levels, depth)\n", 190 | " propagate_label(node.right, levels, depth)\n", 191 | "\n", 192 | " \n", 193 | "def get_depth(node):\n", 194 | " if node is None:\n", 195 | " return\n", 196 | "\n", 197 | " if node.isLeaf:\n", 198 | " return 0\n", 199 | " return (1+ max(get_depth(node.left), get_depth(node.right))) \n", 200 | "\n", 201 | "\n", 202 | "def get_labels(node):\n", 203 | " if node is None:\n", 204 | " return []\n", 205 | " if node.has_label == False:\n", 206 | " return []\n", 207 | " return get_labels(node.left) + get_labels(node.right) + [node.label]\n", 208 | "\n", 209 | "\n", 210 | "\n", 211 | "def check_for_binarization(node): #check whether we have a binary parse tree\n", 212 | " \n", 213 | " if node.isLeaf:\n", 214 | " return True\n", 215 | " elif (node.right is None):\n", 216 | " return False \n", 217 | " else:\n", 218 | " b1 = check_for_binarization(node.left) \n", 219 | " b2 = check_for_binarization(node.right)\n", 220 | " return (b1 & b2)\n", 221 | " " 222 | ] 223 | }, 224 | { 225 | "cell_type": "markdown", 226 | "metadata": {}, 227 | "source": [ 228 | 229 | "We load the strings and convert them into a list of tree objects." 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": 50, 235 | "metadata": { 236 | "collapsed": true 237 | }, 238 | "outputs": [], 239 | "source": [ 240 | "def loadTrees(dataSet='train'):\n", 241 | " \"\"\"\n", 242 | " Loads training trees. Maps leaf node words to word ids.\n", 243 | " \"\"\"\n", 244 | " file = 'trees/%s.txt' % dataSet\n", 245 | " print (\"Loading %s trees..\" % dataSet)\n", 246 | " with open(file, 'r') as fid:\n", 247 | " \n", 248 | " trees = [Tree(l) for l in fid.readlines()]\n", 249 | "\n", 250 | " return trees" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 51, 256 | "metadata": {}, 257 | "outputs": [ 258 | { 259 | "name": "stdout", 260 | "output_type": "stream", 261 | "text": [ 262 | "Loading train trees..\n", 263 | "Loading dev trees..\n", 264 | "Loading test trees..\n" 265 | ] 266 | } 267 | ], 268 | "source": [ 269 | "train_trees = loadTrees('train')\n", 270 | "dev_trees = loadTrees('dev')\n", 271 | "test_trees = loadTrees('test')" 272 | ] 273 | }, 274 | { 275 | "cell_type": "markdown", 276 | "metadata": {}, 277 | "source": [ 278 | 279 | "Create a list of root nodes for each of the tree objects." 280 | ] 281 | }, 282 | { 283 | "cell_type": "code", 284 | "execution_count": 52, 285 | "metadata": { 286 | "collapsed": true 287 | }, 288 | 289 | "outputs": [], 290 | "source": [ 291 | "train_nodes = [t.root for t in train_trees]\n", 292 | "dev_nodes = [t.root for t in dev_trees]\n", 293 | "test_nodes = [t.root for t in test_trees]" 294 | ] 295 | }, 296 | { 297 | "cell_type": "markdown", 298 | "metadata": {}, 299 | "source": [ 300 | 301 | "Load the entire Google Word2vec corpus into memory. This will take a few minutes." 302 | ] 303 | }, 304 | { 305 | "cell_type": "code", 306 | "execution_count": 19, 307 | "metadata": { 308 | "collapsed": true 309 | }, 310 | "outputs": [], 311 | "source": [ 312 | "def loadmodel():\n", 313 | " print(\"Loading Google Word2vecs....\")\n", 314 | " model = gensim.models.KeyedVectors.load_word2vec_format('./GoogleNews-vectors-negative300.bin.gz', binary = True)\n", 315 | " return model\n" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": 22, 321 | "metadata": {}, 322 | "outputs": [ 323 | { 324 | "name": "stdout", 325 | "output_type": "stream", 326 | "text": [ 327 | "Loading Google Word2vecs....\n" 328 | ] 329 | } 330 | ], 331 | "source": [ 332 | "model = loadmodel()" 333 | ] 334 | }, 335 | { 336 | "cell_type": "markdown", 337 | "metadata": {}, 338 | "source": [ 339 | 340 | "Create a dictionary that maps a word to word2vec only for words in the training, dev and test set." 341 | ] 342 | }, 343 | { 344 | "cell_type": "code", 345 | "execution_count": 53, 346 | "metadata": { 347 | "collapsed": true 348 | }, 349 | "outputs": [], 350 | "source": [ 351 | "#only retrain words that are in train, dev and test sets\n", 352 | "def filter_model(model):\n", 353 | " filtered_dict = {}\n", 354 | " trees = loadTrees('train') + loadTrees('dev') + loadTrees('test')\n", 355 | " words = [t.get_words() for t in trees]\n", 356 | " vocab = set()\n", 357 | " for word in words:\n", 358 | " vocab.update(word)\n", 359 | " for word in vocab:\n", 360 | " if word in model.vocab:\n", 361 | " filtered_dict[word] = model[word]\n", 362 | " return filtered_dict" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "execution_count": 54, 368 | "metadata": {}, 369 | "outputs": [ 370 | { 371 | "name": "stdout", 372 | "output_type": "stream", 373 | "text": [ 374 | "Loading train trees..\n", 375 | "Loading dev trees..\n", 376 | "Loading test trees..\n" 377 | ] 378 | } 379 | ], 380 | "source": [ 381 | "filtered_model = filter_model(model)" 382 | ] 383 | }, 384 | { 385 | "cell_type": "markdown", 386 | "metadata": {}, 387 | "source": [ 388 | 389 | "Loads embedings, returns weight matrix and dict from words to indices." 390 | ] 391 | }, 392 | { 393 | "cell_type": "code", 394 | "execution_count": 55, 395 | "metadata": { 396 | "collapsed": true 397 | }, 398 | "outputs": [], 399 | "source": [ 400 | "def load_embeddings(filtered_model):\n", 401 | " print('loading word embeddings')\n", 402 | " weight_vectors = []\n", 403 | " word_idx = {}\n", 404 | " for word, vector in filtered_model.items():\n", 405 | " word_idx[word] = len(weight_vectors)\n", 406 | " weight_vectors.append(np.array(vector, dtype=np.float32))\n", 407 | " # Random embedding vector for unknown words.\n", 408 | " weight_vectors.append(np.random.uniform(\n", 409 | " -0.05, 0.05, weight_vectors[0].shape).astype(np.float32))\n", 410 | " return np.stack(weight_vectors), word_idx" 411 | ] 412 | }, 413 | { 414 | "cell_type": "code", 415 | "execution_count": 56, 416 | "metadata": {}, 417 | "outputs": [ 418 | { 419 | "name": "stdout", 420 | "output_type": "stream", 421 | "text": [ 422 | "loading word embeddings\n" 423 | ] 424 | } 425 | ], 426 | "source": [ 427 | "weight_matrix, word_idx = load_embeddings(filtered_model)" 428 | ] 429 | }, 430 | { 431 | "cell_type": "code", 432 | "execution_count": 57, 433 | "metadata": { 434 | "collapsed": true 435 | }, 436 | "outputs": [], 437 | "source": [ 438 | "class BinaryTreeLSTMCell(tf.contrib.rnn.BasicLSTMCell):\n", 439 | " \"\"\"LSTM with two state inputs.\n", 440 | "\n", 441 | " This is the model described in section 3.2 of 'Improved Semantic\n", 442 | " Representations From Tree-Structured Long Short-Term Memory\n", 443 | " Networks' , with recurrent\n", 444 | " dropout as described in 'Recurrent Dropout without Memory Loss'\n", 445 | " .\n", 446 | " \"\"\"\n", 447 | "\n", 448 | " def __init__(self, num_units, keep_prob=1.0):\n", 449 | " \"\"\"Initialize the cell.\n", 450 | "\n", 451 | " Args:\n", 452 | " num_units: int, The number of units in the LSTM cell.\n", 453 | " keep_prob: Keep probability for recurrent dropout.\n", 454 | " \"\"\"\n", 455 | " super(BinaryTreeLSTMCell, self).__init__(num_units)\n", 456 | " self._keep_prob = keep_prob\n", 457 | "\n", 458 | " def __call__(self, inputs, state, scope=None):\n", 459 | " with tf.variable_scope(scope or type(self).__name__):\n", 460 | " lhs, rhs = state\n", 461 | " c0, h0 = lhs\n", 462 | " c1, h1 = rhs\n", 463 | " concat = tf.contrib.layers.linear(\n", 464 | " tf.concat([inputs, h0, h1], 1), 5 * self._num_units)\n", 465 | "\n", 466 | " # i = input_gate, j = new_input, f = forget_gate, o = output_gate\n", 467 | " i, j, f0, f1, o = tf.split(value=concat, num_or_size_splits=5, axis=1)\n", 468 | "\n", 469 | " j = self._activation(j)\n", 470 | " if not isinstance(self._keep_prob, float) or self._keep_prob < 1:\n", 471 | " j = tf.nn.dropout(j, self._keep_prob)\n", 472 | "\n", 473 | " new_c = (c0 * tf.sigmoid(f0 + self._forget_bias) +\n", 474 | " c1 * tf.sigmoid(f1 + self._forget_bias) +\n", 475 | " tf.sigmoid(i) * j)\n", 476 | " new_h = self._activation(new_c) * tf.sigmoid(o)\n", 477 | "\n", 478 | " new_state = tf.contrib.rnn.LSTMStateTuple(new_c, new_h)\n", 479 | "\n", 480 | " return new_h, new_state" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": 58, 486 | "metadata": { 487 | "collapsed": true 488 | }, 489 | "outputs": [], 490 | "source": [ 491 | "keep_prob_ph = tf.placeholder_with_default(1.0, [])" 492 | ] 493 | }, 494 | { 495 | "cell_type": "code", 496 | "execution_count": 95, 497 | "metadata": { 498 | "collapsed": true 499 | }, 500 | "outputs": [], 501 | "source": [ 502 | "lstm_num_units = 300 # Tai et al. used 150, but our regularization strategy is more effective\n", 503 | "tree_lstm = td.ScopedLayer(\n", 504 | " tf.contrib.rnn.DropoutWrapper(\n", 505 | " BinaryTreeLSTMCell(lstm_num_units, keep_prob=keep_prob_ph),\n", 506 | " input_keep_prob=keep_prob_ph, output_keep_prob=keep_prob_ph),\n", 507 | " name_or_scope='tree_lstm')" 508 | ] 509 | }, 510 | { 511 | "cell_type": "code", 512 | "execution_count": 206, 513 | "metadata": { 514 | "collapsed": true 515 | }, 516 | "outputs": [], 517 | "source": [ 518 | "NUM_ASPECTS = 18 # number of aspects\n", 519 | "NUM_POLARITY = 3 #number of polarity classes assicated with an aspect (1 = mildly +ve or -ve, 2 = -ve, 3 = +ve)\n", 520 | "output_layer = td.FC(NUM_ASPECTS*(NUM_POLARITY+2), activation=None, name='output_layer')" 521 | ] 522 | }, 523 | { 524 | "cell_type": "code", 525 | "execution_count": 235, 526 | "metadata": { 527 | "collapsed": true 528 | }, 529 | "outputs": [], 530 | "source": [ 531 | "word_embedding = td.Embedding(\n", 532 | " *weight_matrix.shape, initializer=weight_matrix, name='word_embedding', trainable = False)" 533 | ] 534 | }, 535 | { 536 | "cell_type": "code", 537 | "execution_count": 236, 538 | "metadata": { 539 | "collapsed": true 540 | }, 541 | "outputs": [], 542 | "source": [ 543 | "embed_subtree = td.ForwardDeclaration(name='embed_subtree')" 544 | ] 545 | }, 546 | { 547 | "cell_type": "code", 548 | "execution_count": 237, 549 | "metadata": { 550 | "collapsed": true 551 | }, 552 | "outputs": [], 553 | "source": [ 554 | "def logits_and_state():\n", 555 | " \"\"\"Creates a block that goes from tokens to (logits, state) tuples.\"\"\"\n", 556 | " unknown_idx = len(word_idx)\n", 557 | " lookup_word = lambda word: word_idx.get(word, unknown_idx)\n", 558 | " \n", 559 | " word2vec = (td.GetItem(0) >> td.InputTransform(lookup_word) >>\n", 560 | " td.Scalar('int32') >> word_embedding)\n", 561 | "\n", 562 | " pair2vec = (embed_subtree(), embed_subtree())\n", 563 | "\n", 564 | " # Trees are binary, so the tree layer takes two states as its input_state.\n", 565 | " zero_state = td.Zeros((tree_lstm.state_size,) * 2)\n", 566 | " # Input is a word vector.\n", 567 | " zero_inp = td.Zeros(word_embedding.output_type.shape[0])\n", 568 | "\n", 569 | " word_case = td.AllOf(word2vec, zero_state)\n", 570 | " pair_case = td.AllOf(zero_inp, pair2vec)\n", 571 | "\n", 572 | " tree2vec = td.OneOf(len, [(1, word_case), (2, pair_case)])\n", 573 | "\n", 574 | " return tree2vec >> tree_lstm >> (output_layer, td.Identity())" 575 | ] 576 | }, 577 | { 578 | "cell_type": "code", 579 | "execution_count": 238, 580 | "metadata": { 581 | "collapsed": true 582 | }, 583 | "outputs": [], 584 | "source": [ 585 | "def tf_node_loss(logits, labels):\n", 586 | " logits_ = tf.reshape(logits, [-1, NUM_ASPECTS, NUM_POLARITY + 2])\n", 587 | " #compute loss related to task 1: aspect detection\n", 588 | " binarized = tf.cast((labels > 0), tf.int32) #binarize the labels to compute loss for aspect detection \n", 589 | " logits2 = tf.slice(logits_, [0,0,0], [-1,-1, 2])\n", 590 | " loss2 = tf.reduce_sum(tf.nn.sparse_softmax_cross_entropy_with_logits(logits = logits2, labels=binarized), axis = 1)\n", 591 | "\n", 592 | " # compute loss related to task 2: polarity prediction \n", 593 | " padding = tf.constant([[0,0], [0,0], [1,0]])\n", 594 | " logits3 = tf.pad(tf.log(tf.nn.softmax(tf.slice(logits_, [0, 0, 2], [-1,-1, -1]))), padding)\n", 595 | " labels2 = tf.pad(tf.slice(tf.one_hot(labels, depth = 4, axis = -1), [0,0,1], [-1,-1,-1]), padding)\n", 596 | " loss3 = tf.reduce_sum(tf.multiply(labels2, logits3), [1,2])\n", 597 | " final_loss = loss2 + tf.scalar_mul(-1.05,loss3)\n", 598 | " \n", 599 | " return final_loss" 600 | ] 601 | }, 602 | { 603 | "cell_type": "code", 604 | "execution_count": 239, 605 | "metadata": { 606 | "collapsed": true 607 | }, 608 | "outputs": [], 609 | "source": [ 610 | "#Task 2: compute true positives for aspect polarities\n", 611 | "def task2_truepositives(logits, labels):\n", 612 | " \n", 613 | " logits_ = tf.reshape(logits, [-1, NUM_ASPECTS, NUM_POLARITY + 2])\n", 614 | " \n", 615 | " predictions = tf.cast(((( logits_[:,:, 2] ) > (logits_[:,:, 3] )) & (( logits_[:,:, 2] ) > (logits_[:,:, 4] ))), tf.float64)\n", 616 | " actuals = tf.cast(((labels > 0) & (labels < 2)), tf.float64)\n", 617 | " \n", 618 | " ones_like_actuals = tf.ones_like(actuals)\n", 619 | " zeros_like_actuals = tf.zeros_like(actuals)\n", 620 | " ones_like_predictions = tf.ones_like(predictions)\n", 621 | " zeros_like_predictions = tf.zeros_like(predictions)\n", 622 | "\n", 623 | " ans_1 = tf.reduce_sum(\n", 624 | " tf.cast(\n", 625 | " tf.logical_and(\n", 626 | " tf.equal(actuals, ones_like_actuals), \n", 627 | " tf.equal(predictions, ones_like_predictions)\n", 628 | " ), \n", 629 | " tf.float64\n", 630 | " ), axis = 1\n", 631 | " )\n", 632 | " \n", 633 | " predictions = tf.cast(((( logits_[:,:, 3] ) > (logits_[:,:, 2] )) & (( logits_[:,:, 3] ) > (logits_[:,:, 4] ))), tf.float64)\n", 634 | " actuals = tf.cast(((labels > 1) & (labels < 3)), tf.float64)\n", 635 | " \n", 636 | " ones_like_actuals = tf.ones_like(actuals)\n", 637 | " zeros_like_actuals = tf.zeros_like(actuals)\n", 638 | " ones_like_predictions = tf.ones_like(predictions)\n", 639 | " zeros_like_predictions = tf.zeros_like(predictions)\n", 640 | "\n", 641 | " ans_2 = tf.reduce_sum(\n", 642 | " tf.cast(\n", 643 | " tf.logical_and(\n", 644 | " tf.equal(actuals, ones_like_actuals), \n", 645 | " tf.equal(predictions, ones_like_predictions)\n", 646 | " ), \n", 647 | " tf.float64\n", 648 | " ), axis = 1\n", 649 | " )\n", 650 | " \n", 651 | " predictions = tf.cast(((( logits_[:,:, 4] ) > (logits_[:,:, 2] )) & (( logits_[:,:, 4] ) > (logits_[:,:, 3] ))), tf.float64)\n", 652 | " actuals = tf.cast(((labels > 2) & (labels < 4)), tf.float64)\n", 653 | " ones_like_actuals = tf.ones_like(actuals)\n", 654 | " zeros_like_actuals = tf.zeros_like(actuals)\n", 655 | " ones_like_predictions = tf.ones_like(predictions)\n", 656 | " zeros_like_predictions = tf.zeros_like(predictions)\n", 657 | "\n", 658 | " ans_3 = tf.reduce_sum(\n", 659 | " tf.cast(\n", 660 | " tf.logical_and(\n", 661 | " tf.equal(actuals, ones_like_actuals), \n", 662 | " tf.equal(predictions, ones_like_predictions)\n", 663 | " ), \n", 664 | " tf.float64\n", 665 | " ), axis = 1\n", 666 | " )\n", 667 | "\n", 668 | " return ans_1 + ans_2 + ans_3\n", 669 | " \n" 670 | ] 671 | }, 672 | { 673 | "cell_type": "code", 674 | "execution_count": 240, 675 | "metadata": { 676 | "collapsed": true 677 | }, 678 | "outputs": [], 679 | "source": [ 680 | "#Task 2: compute total number of aspects\n", 681 | "def task2_dem(logits, labels):\n", 682 | " actuals = tf.cast(labels > 0, tf.float64)\n", 683 | " ones_like_actuals = tf.ones_like(actuals)\n", 684 | " return tf.reduce_sum(tf.cast(tf.equal(actuals, ones_like_actuals), tf.float64), axis = 1)\n", 685 | " " 686 | ] 687 | }, 688 | { 689 | "cell_type": "code", 690 | "execution_count": 241, 691 | "metadata": { 692 | "collapsed": true 693 | }, 694 | "outputs": [], 695 | "source": [ 696 | "#Task 1: compute true positive rate\n", 697 | "def tf_tpr(logits, labels):\n", 698 | " logits_ = tf.nn.softmax(tf.reshape(logits, [-1, NUM_ASPECTS, NUM_POLARITY + 2]))\n", 699 | " predictions = tf.cast(( logits_[:,:, 1] ) > (logits_[:,:, 0]), tf.float64)\n", 700 | " \n", 701 | " actuals = tf.cast( labels > 0, tf.float64)\n", 702 | " \n", 703 | "\n", 704 | " ones_like_actuals = tf.ones_like(actuals)\n", 705 | " zeros_like_actuals = tf.zeros_like(actuals)\n", 706 | " ones_like_predictions = tf.ones_like(predictions)\n", 707 | " zeros_like_predictions = tf.zeros_like(predictions)\n", 708 | "\n", 709 | " ans = tf.reduce_sum(\n", 710 | " tf.cast(\n", 711 | " tf.logical_and(\n", 712 | " tf.equal(actuals, ones_like_actuals), \n", 713 | " tf.equal(predictions, ones_like_predictions)\n", 714 | " ), \n", 715 | " tf.float64\n", 716 | " ), axis = 1\n", 717 | " )\n", 718 | "\n", 719 | " return ans" 720 | ] 721 | }, 722 | { 723 | "cell_type": "code", 724 | "execution_count": 242, 725 | "metadata": { 726 | "collapsed": true 727 | }, 728 | "outputs": [], 729 | "source": [ 730 | "#Task 1: compute true negative rate\n", 731 | "def tf_tnr(logits, labels):\n", 732 | " logits_ = tf.nn.softmax(tf.reshape(logits, [-1, NUM_ASPECTS, NUM_POLARITY + 2]))\n", 733 | "\n", 734 | " predictions = tf.cast((logits_[:,:, 1] ) > (logits_[:,:, 0]), tf.float64)\n", 735 | " actuals = tf.cast(labels > 0, tf.float64)\n", 736 | "\n", 737 | " ones_like_actuals = tf.ones_like(actuals)\n", 738 | " zeros_like_actuals = tf.zeros_like(actuals)\n", 739 | " ones_like_predictions = tf.ones_like(predictions)\n", 740 | " zeros_like_predictions = tf.zeros_like(predictions)\n", 741 | "\n", 742 | " ans = tf.reduce_sum(\n", 743 | " tf.cast(\n", 744 | " tf.logical_and(\n", 745 | " tf.equal(actuals, zeros_like_actuals), \n", 746 | " tf.equal(predictions, zeros_like_predictions)\n", 747 | " ), \n", 748 | " tf.float64\n", 749 | " ), axis = 1\n", 750 | " )\n", 751 | "\n", 752 | " return ans" 753 | ] 754 | }, 755 | { 756 | "cell_type": "code", 757 | "execution_count": 243, 758 | "metadata": { 759 | "collapsed": true 760 | }, 761 | "outputs": [], 762 | "source": [ 763 | "#Task 1: compute false positive rate\n", 764 | "def tf_fpr(logits, labels):\n", 765 | " logits_ = tf.nn.softmax(tf.reshape(logits, [-1, NUM_ASPECTS, NUM_POLARITY + 2]))\n", 766 | " predictions = tf.cast((logits_[:,:, 1] ) > (logits_[:,:, 0]), tf.float64)\n", 767 | " actuals = tf.cast(labels > 0, tf.float64)\n", 768 | "\n", 769 | " ones_like_actuals = tf.ones_like(actuals)\n", 770 | " zeros_like_actuals = tf.zeros_like(actuals)\n", 771 | " ones_like_predictions = tf.ones_like(predictions)\n", 772 | " zeros_like_predictions = tf.zeros_like(predictions)\n", 773 | "\n", 774 | " ans = tf.reduce_sum(\n", 775 | " tf.cast(\n", 776 | " tf.logical_and(\n", 777 | " tf.equal(actuals, zeros_like_actuals), \n", 778 | " tf.equal(predictions, ones_like_predictions)\n", 779 | " ), \n", 780 | " tf.float64\n", 781 | " ), axis = 1\n", 782 | " )\n", 783 | "\n", 784 | " return ans" 785 | ] 786 | }, 787 | { 788 | "cell_type": "code", 789 | "execution_count": 244, 790 | "metadata": { 791 | "collapsed": true 792 | }, 793 | "outputs": [], 794 | "source": [ 795 | "#Task 1: compute false negative rate\n", 796 | "def tf_fnr(logits, labels):\n", 797 | " logits_ = tf.nn.softmax(tf.reshape(logits, [-1, NUM_ASPECTS, NUM_POLARITY + 2]))\n", 798 | " predictions = tf.cast((logits_[:,:, 1] ) > (logits_[:,:, 0]), tf.float64)\n", 799 | " actuals = tf.cast(labels > 0, tf.float64)\n", 800 | "\n", 801 | " ones_like_actuals = tf.ones_like(actuals)\n", 802 | " zeros_like_actuals = tf.zeros_like(actuals)\n", 803 | " ones_like_predictions = tf.ones_like(predictions)\n", 804 | " zeros_like_predictions = tf.zeros_like(predictions)\n", 805 | "\n", 806 | " ans = tf.reduce_sum(\n", 807 | " tf.cast(\n", 808 | " tf.logical_and(\n", 809 | " tf.equal(actuals, ones_like_actuals), \n", 810 | " tf.equal(predictions, zeros_like_predictions)\n", 811 | " ), \n", 812 | " tf.float64\n", 813 | " ), axis = 1\n", 814 | " )\n", 815 | "\n", 816 | " return ans" 817 | ] 818 | }, 819 | { 820 | "cell_type": "code", 821 | "execution_count": 245, 822 | "metadata": { 823 | "collapsed": true 824 | }, 825 | "outputs": [], 826 | "source": [ 827 | "def add_metrics(is_root, is_neutral):\n", 828 | " \"\"\"A block that adds metrics for loss and hits; output is the LSTM state.\"\"\"\n", 829 | " c = td.Composition(\n", 830 | " name='predict(is_root=%s, is_neutral=%s)' % (is_root, is_neutral))\n", 831 | " with c.scope():\n", 832 | " # destructure the input; (labels, neutral, (logits, state))\n", 833 | " labels = c.input[0]\n", 834 | " logits = td.GetItem(0).reads(c.input[2])\n", 835 | " state = td.GetItem(1).reads(c.input[2])\n", 836 | "\n", 837 | " loss = td.Function(tf_node_loss)\n", 838 | " td.Metric('all_loss').reads(loss.reads(logits, labels))\n", 839 | " if is_root: td.Metric('root_loss').reads(loss)\n", 840 | " \n", 841 | " tpr = td.Function(tf_tpr)\n", 842 | " tnr = td.Function(tf_tnr)\n", 843 | " fpr = td.Function(tf_fpr)\n", 844 | " fnr = td.Function(tf_fnr)\n", 845 | " t2_acc = td.Function(task2_truepositives)\n", 846 | " t2_dem = td.Function(task2_dem)\n", 847 | " td.Metric('all_tpr').reads(tpr.reads(logits, labels))\n", 848 | " td.Metric('all_tnr').reads(tnr.reads(logits, labels))\n", 849 | " td.Metric('all_fpr').reads(fpr.reads(logits, labels))\n", 850 | " td.Metric('all_fnr').reads(fnr.reads(logits, labels)) \n", 851 | " td.Metric('all_task2').reads(t2_acc.reads(logits, labels)) \n", 852 | " td.Metric('all_task2dem').reads(t2_dem.reads(logits, labels)) \n", 853 | " if is_root: \n", 854 | " td.Metric('tpr').reads(tpr)\n", 855 | " td.Metric('tnr').reads(tnr)\n", 856 | " td.Metric('fpr').reads(fpr)\n", 857 | " td.Metric('fnr').reads(fnr)\n", 858 | " td.Metric('task2').reads(t2_acc)\n", 859 | " td.Metric('task2dem').reads(t2_dem)\n", 860 | " \n", 861 | " # output the state, which will be read by our by parent's LSTM cell\n", 862 | " c.output.reads(state)\n", 863 | " return c" 864 | ] 865 | }, 866 | { 867 | "cell_type": "code", 868 | "execution_count": 246, 869 | "metadata": { 870 | "collapsed": true 871 | }, 872 | "outputs": [], 873 | "source": [ 874 | "def tokenize(node):\n", 875 | " group = []\n", 876 | " neutral = '2'\n", 877 | " if node.has_label:\n", 878 | " \n", 879 | " label = node.label\n", 880 | " \n", 881 | " neutral = '1'\n", 882 | " else:\n", 883 | " label = np.zeros((NUM_ASPECTS,),dtype=np.int)\n", 884 | " \n", 885 | " if node.isLeaf:\n", 886 | " group = [node.word]\n", 887 | " else:\n", 888 | " group = [node.left, node.right]\n", 889 | " return label, neutral, group" 890 | ] 891 | }, 892 | { 893 | "cell_type": "code", 894 | "execution_count": 247, 895 | "metadata": {}, 896 | "outputs": [ 897 | { 898 | "name": "stdout", 899 | "output_type": "stream", 900 | "text": [ 901 | "2\n", 902 | "(18,)\n" 903 | ] 904 | } 905 | ], 906 | "source": [ 907 | "node = train_nodes[0]\n", 908 | "label, neutral, group = tokenize(node)\n", 909 | "print (len(group))\n", 910 | "print (label.shape)" 911 | ] 912 | }, 913 | { 914 | "cell_type": "code", 915 | "execution_count": 248, 916 | "metadata": { 917 | "collapsed": true 918 | }, 919 | "outputs": [], 920 | "source": [ 921 | "def embed_tree(logits_and_state, is_root):\n", 922 | " \"\"\"Creates a block that embeds trees; output is tree LSTM state.\"\"\"\n", 923 | " return td.InputTransform(tokenize) >> td.OneOf(\n", 924 | " key_fn=lambda pair: pair[1] == '2', # label 2 means neutral\n", 925 | " case_blocks=(add_metrics(is_root, is_neutral=False),\n", 926 | " add_metrics(is_root, is_neutral=True)),\n", 927 | " pre_block=(td.Vector(NUM_ASPECTS, dtype = 'int32'), td.Scalar('int32'), logits_and_state))" 928 | ] 929 | }, 930 | { 931 | "cell_type": "code", 932 | "execution_count": 249, 933 | "metadata": { 934 | "collapsed": true 935 | }, 936 | "outputs": [], 937 | "source": [ 938 | "model = embed_tree(logits_and_state(), is_root=True)" 939 | ] 940 | }, 941 | { 942 | "cell_type": "code", 943 | "execution_count": 250, 944 | "metadata": { 945 | "collapsed": true 946 | }, 947 | "outputs": [], 948 | "source": [ 949 | "embed_subtree.resolve_to(embed_tree(logits_and_state(), is_root=False))" 950 | ] 951 | }, 952 | { 953 | "cell_type": "code", 954 | "execution_count": 251, 955 | "metadata": {}, 956 | "outputs": [ 957 | { 958 | "name": "stdout", 959 | "output_type": "stream", 960 | "text": [ 961 | "input type: PyObjectType()\n", 962 | "output type: TupleType(TensorType((300,), 'float32'), TensorType((300,), 'float32'))\n" 963 | ] 964 | } 965 | ], 966 | "source": [ 967 | "compiler = td.Compiler.create(model)\n", 968 | "print('input type: %s' % model.input_type)\n", 969 | "print('output type: %s' % model.output_type)" 970 | ] 971 | }, 972 | { 973 | "cell_type": "code", 974 | "execution_count": 252, 975 | "metadata": { 976 | "collapsed": true 977 | }, 978 | "outputs": [], 979 | "source": [ 980 | "metrics = {k: tf.reduce_mean(v) for k, v in compiler.metric_tensors.items()}" 981 | ] 982 | }, 983 | { 984 | "cell_type": "code", 985 | "execution_count": 254, 986 | "metadata": { 987 | "collapsed": true 988 | }, 989 | "outputs": [], 990 | "source": [ 991 | "LEARNING_RATE = 0.05\n", 992 | "KEEP_PROB = 0.60\n", 993 | "BATCH_SIZE = 32\n", 994 | "EPOCHS = 80" 995 | ] 996 | }, 997 | { 998 | "cell_type": "code", 999 | "execution_count": 255, 1000 | "metadata": { 1001 | "collapsed": true 1002 | }, 1003 | "outputs": [], 1004 | "source": [ 1005 | "global_step = tf.Variable(0, trainable=False)\n", 1006 | "starter_learning_rate = LEARNING_RATE\n", 1007 | "learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,\n", 1008 | " 600, 0.90, staircase=True)" 1009 | ] 1010 | }, 1011 | { 1012 | "cell_type": "code", 1013 | "execution_count": 256, 1014 | "metadata": {}, 1015 | "outputs": [ 1016 | { 1017 | "name": "stderr", 1018 | "output_type": "stream", 1019 | "text": [ 1020 | "/home/rohitgupta/anaconda2/envs/LSTM2/lib/python3.6/site-packages/tensorflow/python/ops/gradients_impl.py:91: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n", 1021 | " \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n" 1022 | ] 1023 | } 1024 | ], 1025 | "source": [ 1026 | "train_feed_dict = {keep_prob_ph: KEEP_PROB}\n", 1027 | "loss = tf.reduce_mean(compiler.metric_tensors['root_loss'])\n", 1028 | "opt = tf.train.AdagradOptimizer(LEARNING_RATE)\n", 1029 | "learning_step = (\n", 1030 | " tf.train.AdagradOptimizer(learning_rate)\n", 1031 | " .minimize(loss, global_step=global_step)\n", 1032 | ")" 1033 | ] 1034 | }, 1035 | { 1036 | "cell_type": "code", 1037 | "execution_count": 257, 1038 | "metadata": { 1039 | "collapsed": true 1040 | }, 1041 | "outputs": [], 1042 | "source": [ 1043 | "sess.run(tf.global_variables_initializer())" 1044 | ] 1045 | }, 1046 | { 1047 | "cell_type": "code", 1048 | "execution_count": 258, 1049 | "metadata": { 1050 | "collapsed": true 1051 | }, 1052 | "outputs": [], 1053 | "source": [ 1054 | "def train_step(batch):\n", 1055 | " train_feed_dict[compiler.loom_input_tensor] = batch\n", 1056 | " _, batch_loss = sess.run([learning_step, loss], train_feed_dict)\n", 1057 | " return batch_loss" 1058 | ] 1059 | }, 1060 | { 1061 | "cell_type": "code", 1062 | "execution_count": 259, 1063 | "metadata": { 1064 | "collapsed": true 1065 | }, 1066 | "outputs": [], 1067 | "source": [ 1068 | "def train_epoch(train_set):\n", 1069 | " list = [train_step(batch) for batch in td.group_by_batches(train_set, BATCH_SIZE)]\n", 1070 | " return sum(list)/ max(len(list), 1)" 1071 | ] 1072 | }, 1073 | { 1074 | "cell_type": "code", 1075 | "execution_count": 260, 1076 | "metadata": { 1077 | "collapsed": true 1078 | }, 1079 | "outputs": [], 1080 | "source": [ 1081 | "train_set = compiler.build_loom_inputs(train_nodes)" 1082 | ] 1083 | }, 1084 | { 1085 | "cell_type": "code", 1086 | "execution_count": 261, 1087 | "metadata": { 1088 | "collapsed": true 1089 | }, 1090 | "outputs": [], 1091 | "source": [ 1092 | "dev_feed_dict = compiler.build_feed_dict(dev_nodes)" 1093 | ] 1094 | }, 1095 | { 1096 | "cell_type": "code", 1097 | "execution_count": 262, 1098 | "metadata": { 1099 | "collapsed": true 1100 | }, 1101 | "outputs": [], 1102 | "source": [ 1103 | "def dev_eval(epoch, train_loss):\n", 1104 | " dev_metrics = sess.run(metrics, dev_feed_dict)\n", 1105 | " dev_loss = dev_metrics['root_loss']\n", 1106 | "\n", 1107 | " tp = dev_metrics['tpr']\n", 1108 | " tn = dev_metrics['tnr']\n", 1109 | " fp = dev_metrics['fpr']\n", 1110 | " fn = dev_metrics['fnr']\n", 1111 | " \n", 1112 | " tpr = float(tp)/(float(tp) + float(fn))\n", 1113 | " fpr = float(fp)/(float(tp) + float(fn))\n", 1114 | " t2_acc = float(dev_metrics['task2'])/ float(dev_metrics['task2dem'])\n", 1115 | "\n", 1116 | " recall = tpr\n", 1117 | " if (float(tp) + float(fp)) > 0:\n", 1118 | " precision = float(tp)/(float(tp) + float(fp))\n", 1119 | " else: precision = 0.\n", 1120 | " if precision + recall > 0:\n", 1121 | " f1_score = (2 * (precision * recall)) / (precision + recall)\n", 1122 | " else: f1_score = 0.\n", 1123 | " \n", 1124 | " \n", 1125 | " print('epoch:%4d, train_loss: %.3e, dev_loss: %.3e,Task1 Precision: %.3e, Task1 Recall: %.3e, Task1 F1 score: %2.3e, Task2 Acc: %2.3e'\n", 1126 | " % (epoch, train_loss, dev_loss, precision, recall, f1_score, t2_acc))\n", 1127 | " return f1_score" 1128 | ] 1129 | }, 1130 | { 1131 | "cell_type": "code", 1132 | "execution_count": 263, 1133 | "metadata": { 1134 | "scrolled": false 1135 | }, 1136 | "outputs": [ 1137 | { 1138 | "name": "stdout", 1139 | "output_type": "stream", 1140 | "text": [ 1141 | "epoch: 1, train_loss: 5.386e+00, dev_loss: 5.296e+00,Task1 Precision: 7.143e-01, Task1 Recall: 4.274e-02, Task1 F1 score: 8.065e-02, Task2 Acc: 5.769e-01\n", 1142 | "epoch: 2, train_loss: 4.789e+00, dev_loss: 5.213e+00,Task1 Precision: 5.909e-01, Task1 Recall: 5.556e-02, Task1 F1 score: 1.016e-01, Task2 Acc: 5.812e-01\n", 1143 | "epoch: 3, train_loss: 4.687e+00, dev_loss: 4.907e+00,Task1 Precision: 0.000e+00, Task1 Recall: 0.000e+00, Task1 F1 score: 0.000e+00, Task2 Acc: 6.197e-01\n", 1144 | "epoch: 4, train_loss: 4.580e+00, dev_loss: 4.953e+00,Task1 Precision: 1.000e+00, Task1 Recall: 3.419e-02, Task1 F1 score: 6.612e-02, Task2 Acc: 6.026e-01\n", 1145 | "epoch: 5, train_loss: 4.541e+00, dev_loss: 4.887e+00,Task1 Precision: 6.522e-01, Task1 Recall: 6.410e-02, Task1 F1 score: 1.167e-01, Task2 Acc: 5.598e-01\n", 1146 | "epoch: 6, train_loss: 4.453e+00, dev_loss: 5.142e+00,Task1 Precision: 3.711e-01, Task1 Recall: 1.538e-01, Task1 F1 score: 2.175e-01, Task2 Acc: 5.983e-01\n", 1147 | "epoch: 7, train_loss: 4.342e+00, dev_loss: 4.768e+00,Task1 Precision: 4.505e-01, Task1 Recall: 1.752e-01, Task1 F1 score: 2.523e-01, Task2 Acc: 5.940e-01\n", 1148 | "epoch: 8, train_loss: 4.262e+00, dev_loss: 4.791e+00,Task1 Precision: 7.600e-01, Task1 Recall: 8.120e-02, Task1 F1 score: 1.467e-01, Task2 Acc: 6.239e-01\n", 1149 | "epoch: 9, train_loss: 4.163e+00, dev_loss: 4.563e+00,Task1 Precision: 4.038e-01, Task1 Recall: 8.974e-02, Task1 F1 score: 1.469e-01, Task2 Acc: 6.538e-01\n", 1150 | "epoch: 10, train_loss: 4.080e+00, dev_loss: 4.492e+00,Task1 Precision: 5.610e-01, Task1 Recall: 1.966e-01, Task1 F1 score: 2.911e-01, Task2 Acc: 6.282e-01\n", 1151 | "epoch: 11, train_loss: 3.966e+00, dev_loss: 4.701e+00,Task1 Precision: 4.224e-01, Task1 Recall: 2.094e-01, Task1 F1 score: 2.800e-01, Task2 Acc: 6.838e-01\n", 1152 | "epoch: 12, train_loss: 3.868e+00, dev_loss: 5.899e+00,Task1 Precision: 2.398e-01, Task1 Recall: 2.521e-01, Task1 F1 score: 2.458e-01, Task2 Acc: 6.581e-01\n", 1153 | "epoch: 13, train_loss: 3.818e+00, dev_loss: 4.402e+00,Task1 Precision: 6.615e-01, Task1 Recall: 1.838e-01, Task1 F1 score: 2.876e-01, Task2 Acc: 6.154e-01\n", 1154 | "epoch: 14, train_loss: 3.754e+00, dev_loss: 4.595e+00,Task1 Precision: 4.733e-01, Task1 Recall: 3.034e-01, Task1 F1 score: 3.698e-01, Task2 Acc: 6.282e-01\n", 1155 | "epoch: 15, train_loss: 3.730e+00, dev_loss: 4.331e+00,Task1 Precision: 5.738e-01, Task1 Recall: 1.496e-01, Task1 F1 score: 2.373e-01, Task2 Acc: 6.581e-01\n", 1156 | "epoch: 16, train_loss: 3.636e+00, dev_loss: 4.156e+00,Task1 Precision: 6.866e-01, Task1 Recall: 1.966e-01, Task1 F1 score: 3.056e-01, Task2 Acc: 6.838e-01\n", 1157 | "epoch: 17, train_loss: 3.570e+00, dev_loss: 4.213e+00,Task1 Precision: 6.571e-01, Task1 Recall: 1.966e-01, Task1 F1 score: 3.026e-01, Task2 Acc: 6.496e-01\n", 1158 | "epoch: 18, train_loss: 3.557e+00, dev_loss: 4.749e+00,Task1 Precision: 3.750e-01, Task1 Recall: 3.462e-01, Task1 F1 score: 3.600e-01, Task2 Acc: 6.453e-01\n", 1159 | "epoch: 19, train_loss: 3.454e+00, dev_loss: 4.308e+00,Task1 Precision: 5.422e-01, Task1 Recall: 1.923e-01, Task1 F1 score: 2.839e-01, Task2 Acc: 6.923e-01\n", 1160 | "epoch: 20, train_loss: 3.471e+00, dev_loss: 5.974e+00,Task1 Precision: 2.605e-01, Task1 Recall: 3.462e-01, Task1 F1 score: 2.972e-01, Task2 Acc: 6.624e-01\n", 1161 | "epoch: 21, train_loss: 3.451e+00, dev_loss: 4.334e+00,Task1 Precision: 5.789e-01, Task1 Recall: 2.350e-01, Task1 F1 score: 3.343e-01, Task2 Acc: 6.239e-01\n", 1162 | "epoch: 22, train_loss: 3.383e+00, dev_loss: 4.072e+00,Task1 Precision: 5.182e-01, Task1 Recall: 2.436e-01, Task1 F1 score: 3.314e-01, Task2 Acc: 6.966e-01\n", 1163 | "epoch: 23, train_loss: 3.321e+00, dev_loss: 4.171e+00,Task1 Precision: 4.765e-01, Task1 Recall: 3.034e-01, Task1 F1 score: 3.708e-01, Task2 Acc: 6.752e-01\n", 1164 | "epoch: 24, train_loss: 3.280e+00, dev_loss: 3.875e+00,Task1 Precision: 6.095e-01, Task1 Recall: 2.735e-01, Task1 F1 score: 3.776e-01, Task2 Acc: 6.752e-01\n", 1165 | "epoch: 25, train_loss: 3.210e+00, dev_loss: 3.984e+00,Task1 Precision: 5.574e-01, Task1 Recall: 2.906e-01, Task1 F1 score: 3.820e-01, Task2 Acc: 7.137e-01\n", 1166 | "epoch: 26, train_loss: 3.208e+00, dev_loss: 3.876e+00,Task1 Precision: 6.628e-01, Task1 Recall: 2.436e-01, Task1 F1 score: 3.562e-01, Task2 Acc: 6.581e-01\n", 1167 | "epoch: 27, train_loss: 3.158e+00, dev_loss: 4.113e+00,Task1 Precision: 5.260e-01, Task1 Recall: 3.889e-01, Task1 F1 score: 4.472e-01, Task2 Acc: 6.880e-01\n", 1168 | "epoch: 28, train_loss: 3.148e+00, dev_loss: 3.805e+00,Task1 Precision: 6.216e-01, Task1 Recall: 2.949e-01, Task1 F1 score: 4.000e-01, Task2 Acc: 7.308e-01\n", 1169 | "epoch: 29, train_loss: 3.101e+00, dev_loss: 3.736e+00,Task1 Precision: 5.714e-01, Task1 Recall: 3.419e-01, Task1 F1 score: 4.278e-01, Task2 Acc: 7.393e-01\n", 1170 | "epoch: 30, train_loss: 3.042e+00, dev_loss: 3.651e+00,Task1 Precision: 7.470e-01, Task1 Recall: 2.650e-01, Task1 F1 score: 3.912e-01, Task2 Acc: 7.308e-01\n", 1171 | "epoch: 31, train_loss: 2.996e+00, dev_loss: 3.918e+00,Task1 Precision: 6.355e-01, Task1 Recall: 2.906e-01, Task1 F1 score: 3.988e-01, Task2 Acc: 6.752e-01\n", 1172 | "epoch: 32, train_loss: 2.990e+00, dev_loss: 3.679e+00,Task1 Precision: 7.191e-01, Task1 Recall: 2.735e-01, Task1 F1 score: 3.963e-01, Task2 Acc: 7.350e-01\n", 1173 | "epoch: 33, train_loss: 2.940e+00, dev_loss: 3.773e+00,Task1 Precision: 6.372e-01, Task1 Recall: 3.077e-01, Task1 F1 score: 4.150e-01, Task2 Acc: 7.436e-01\n", 1174 | "epoch: 34, train_loss: 2.931e+00, dev_loss: 3.768e+00,Task1 Precision: 6.465e-01, Task1 Recall: 2.735e-01, Task1 F1 score: 3.844e-01, Task2 Acc: 7.350e-01\n", 1175 | "epoch: 35, train_loss: 2.938e+00, dev_loss: 4.161e+00,Task1 Precision: 5.118e-01, Task1 Recall: 3.718e-01, Task1 F1 score: 4.307e-01, Task2 Acc: 6.752e-01\n", 1176 | "epoch: 36, train_loss: 2.904e+00, dev_loss: 3.745e+00,Task1 Precision: 7.407e-01, Task1 Recall: 2.564e-01, Task1 F1 score: 3.810e-01, Task2 Acc: 7.479e-01\n", 1177 | "epoch: 37, train_loss: 2.829e+00, dev_loss: 3.717e+00,Task1 Precision: 6.435e-01, Task1 Recall: 3.162e-01, Task1 F1 score: 4.241e-01, Task2 Acc: 7.350e-01\n", 1178 | "epoch: 38, train_loss: 2.858e+00, dev_loss: 4.260e+00,Task1 Precision: 5.029e-01, Task1 Recall: 3.718e-01, Task1 F1 score: 4.275e-01, Task2 Acc: 6.239e-01\n", 1179 | "epoch: 39, train_loss: 2.796e+00, dev_loss: 3.671e+00,Task1 Precision: 6.000e-01, Task1 Recall: 3.205e-01, Task1 F1 score: 4.178e-01, Task2 Acc: 7.009e-01\n", 1180 | "epoch: 40, train_loss: 2.800e+00, dev_loss: 3.712e+00,Task1 Precision: 6.061e-01, Task1 Recall: 3.419e-01, Task1 F1 score: 4.372e-01, Task2 Acc: 7.350e-01\n", 1181 | "epoch: 41, train_loss: 2.774e+00, dev_loss: 3.726e+00,Task1 Precision: 5.766e-01, Task1 Recall: 3.376e-01, Task1 F1 score: 4.259e-01, Task2 Acc: 7.051e-01\n", 1182 | "epoch: 42, train_loss: 2.723e+00, dev_loss: 3.627e+00,Task1 Precision: 5.931e-01, Task1 Recall: 3.675e-01, Task1 F1 score: 4.538e-01, Task2 Acc: 7.179e-01\n", 1183 | "epoch: 43, train_loss: 2.636e+00, dev_loss: 3.650e+00,Task1 Precision: 6.496e-01, Task1 Recall: 3.248e-01, Task1 F1 score: 4.330e-01, Task2 Acc: 7.350e-01\n", 1184 | "epoch: 44, train_loss: 2.615e+00, dev_loss: 3.674e+00,Task1 Precision: 6.400e-01, Task1 Recall: 3.419e-01, Task1 F1 score: 4.457e-01, Task2 Acc: 7.009e-01\n", 1185 | "epoch: 45, train_loss: 2.642e+00, dev_loss: 3.791e+00,Task1 Precision: 6.148e-01, Task1 Recall: 3.205e-01, Task1 F1 score: 4.213e-01, Task2 Acc: 7.137e-01\n", 1186 | "epoch: 46, train_loss: 2.630e+00, dev_loss: 3.726e+00,Task1 Precision: 6.016e-01, Task1 Recall: 3.291e-01, Task1 F1 score: 4.254e-01, Task2 Acc: 7.179e-01\n", 1187 | "epoch: 47, train_loss: 2.620e+00, dev_loss: 3.595e+00,Task1 Precision: 5.942e-01, Task1 Recall: 3.504e-01, Task1 F1 score: 4.409e-01, Task2 Acc: 7.137e-01\n", 1188 | "epoch: 48, train_loss: 2.623e+00, dev_loss: 3.986e+00,Task1 Precision: 5.144e-01, Task1 Recall: 4.573e-01, Task1 F1 score: 4.842e-01, Task2 Acc: 7.393e-01\n", 1189 | "epoch: 49, train_loss: 2.590e+00, dev_loss: 3.651e+00,Task1 Precision: 6.557e-01, Task1 Recall: 3.419e-01, Task1 F1 score: 4.494e-01, Task2 Acc: 7.350e-01\n", 1190 | "epoch: 50, train_loss: 2.540e+00, dev_loss: 3.630e+00,Task1 Precision: 5.686e-01, Task1 Recall: 3.718e-01, Task1 F1 score: 4.496e-01, Task2 Acc: 7.350e-01\n", 1191 | "epoch: 51, train_loss: 2.514e+00, dev_loss: 3.655e+00,Task1 Precision: 6.067e-01, Task1 Recall: 3.889e-01, Task1 F1 score: 4.740e-01, Task2 Acc: 7.479e-01\n", 1192 | "epoch: 52, train_loss: 2.517e+00, dev_loss: 3.711e+00,Task1 Precision: 5.988e-01, Task1 Recall: 4.145e-01, Task1 F1 score: 4.899e-01, Task2 Acc: 7.179e-01\n", 1193 | "epoch: 53, train_loss: 2.503e+00, dev_loss: 3.863e+00,Task1 Precision: 5.260e-01, Task1 Recall: 3.462e-01, Task1 F1 score: 4.175e-01, Task2 Acc: 7.564e-01\n" 1194 | ] 1195 | }, 1196 | { 1197 | "name": "stdout", 1198 | "output_type": "stream", 1199 | "text": [ 1200 | "epoch: 54, train_loss: 2.493e+00, dev_loss: 3.779e+00,Task1 Precision: 6.108e-01, Task1 Recall: 4.359e-01, Task1 F1 score: 5.087e-01, Task2 Acc: 6.795e-01\n", 1201 | "epoch: 55, train_loss: 2.429e+00, dev_loss: 3.688e+00,Task1 Precision: 6.241e-01, Task1 Recall: 3.761e-01, Task1 F1 score: 4.693e-01, Task2 Acc: 7.051e-01\n", 1202 | "epoch: 56, train_loss: 2.431e+00, dev_loss: 3.747e+00,Task1 Precision: 5.445e-01, Task1 Recall: 4.444e-01, Task1 F1 score: 4.894e-01, Task2 Acc: 7.436e-01\n", 1203 | "epoch: 57, train_loss: 2.419e+00, dev_loss: 3.655e+00,Task1 Precision: 6.357e-01, Task1 Recall: 3.803e-01, Task1 F1 score: 4.759e-01, Task2 Acc: 6.923e-01\n", 1204 | "epoch: 58, train_loss: 2.399e+00, dev_loss: 3.595e+00,Task1 Precision: 6.026e-01, Task1 Recall: 4.017e-01, Task1 F1 score: 4.821e-01, Task2 Acc: 7.393e-01\n", 1205 | "epoch: 59, train_loss: 2.426e+00, dev_loss: 3.710e+00,Task1 Precision: 6.119e-01, Task1 Recall: 3.504e-01, Task1 F1 score: 4.457e-01, Task2 Acc: 7.222e-01\n", 1206 | "epoch: 60, train_loss: 2.372e+00, dev_loss: 3.781e+00,Task1 Precision: 6.026e-01, Task1 Recall: 4.017e-01, Task1 F1 score: 4.821e-01, Task2 Acc: 7.350e-01\n", 1207 | "epoch: 61, train_loss: 2.395e+00, dev_loss: 3.750e+00,Task1 Precision: 6.000e-01, Task1 Recall: 4.231e-01, Task1 F1 score: 4.962e-01, Task2 Acc: 7.094e-01\n", 1208 | "epoch: 62, train_loss: 2.347e+00, dev_loss: 3.633e+00,Task1 Precision: 6.288e-01, Task1 Recall: 3.547e-01, Task1 F1 score: 4.536e-01, Task2 Acc: 7.564e-01\n", 1209 | "epoch: 63, train_loss: 2.299e+00, dev_loss: 3.765e+00,Task1 Precision: 6.197e-01, Task1 Recall: 3.761e-01, Task1 F1 score: 4.681e-01, Task2 Acc: 7.778e-01\n", 1210 | "epoch: 64, train_loss: 2.251e+00, dev_loss: 3.787e+00,Task1 Precision: 6.935e-01, Task1 Recall: 3.675e-01, Task1 F1 score: 4.804e-01, Task2 Acc: 7.265e-01\n", 1211 | "epoch: 65, train_loss: 2.313e+00, dev_loss: 3.583e+00,Task1 Precision: 6.145e-01, Task1 Recall: 4.359e-01, Task1 F1 score: 5.100e-01, Task2 Acc: 7.308e-01\n", 1212 | "epoch: 66, train_loss: 2.271e+00, dev_loss: 3.819e+00,Task1 Precision: 7.130e-01, Task1 Recall: 3.291e-01, Task1 F1 score: 4.503e-01, Task2 Acc: 7.308e-01\n", 1213 | "epoch: 67, train_loss: 2.278e+00, dev_loss: 3.578e+00,Task1 Precision: 6.715e-01, Task1 Recall: 3.932e-01, Task1 F1 score: 4.960e-01, Task2 Acc: 7.222e-01\n", 1214 | "epoch: 68, train_loss: 2.237e+00, dev_loss: 3.885e+00,Task1 Precision: 6.857e-01, Task1 Recall: 3.077e-01, Task1 F1 score: 4.248e-01, Task2 Acc: 7.393e-01\n", 1215 | "epoch: 69, train_loss: 2.238e+00, dev_loss: 3.687e+00,Task1 Precision: 6.467e-01, Task1 Recall: 4.145e-01, Task1 F1 score: 5.052e-01, Task2 Acc: 7.393e-01\n", 1216 | "epoch: 70, train_loss: 2.195e+00, dev_loss: 3.667e+00,Task1 Precision: 6.200e-01, Task1 Recall: 3.974e-01, Task1 F1 score: 4.844e-01, Task2 Acc: 7.393e-01\n", 1217 | "epoch: 71, train_loss: 2.152e+00, dev_loss: 3.723e+00,Task1 Precision: 6.531e-01, Task1 Recall: 4.103e-01, Task1 F1 score: 5.039e-01, Task2 Acc: 7.479e-01\n", 1218 | "epoch: 72, train_loss: 2.198e+00, dev_loss: 3.953e+00,Task1 Precision: 6.591e-01, Task1 Recall: 3.718e-01, Task1 F1 score: 4.754e-01, Task2 Acc: 7.479e-01\n", 1219 | "epoch: 73, train_loss: 2.201e+00, dev_loss: 3.686e+00,Task1 Precision: 6.433e-01, Task1 Recall: 4.316e-01, Task1 F1 score: 5.166e-01, Task2 Acc: 7.479e-01\n", 1220 | "epoch: 74, train_loss: 2.177e+00, dev_loss: 3.678e+00,Task1 Precision: 6.503e-01, Task1 Recall: 3.974e-01, Task1 F1 score: 4.934e-01, Task2 Acc: 7.479e-01\n", 1221 | "epoch: 75, train_loss: 2.174e+00, dev_loss: 3.801e+00,Task1 Precision: 6.438e-01, Task1 Recall: 4.017e-01, Task1 F1 score: 4.947e-01, Task2 Acc: 7.436e-01\n", 1222 | "epoch: 76, train_loss: 2.170e+00, dev_loss: 3.752e+00,Task1 Precision: 6.736e-01, Task1 Recall: 4.145e-01, Task1 F1 score: 5.132e-01, Task2 Acc: 7.564e-01\n", 1223 | "epoch: 77, train_loss: 2.154e+00, dev_loss: 3.624e+00,Task1 Precision: 6.690e-01, Task1 Recall: 4.145e-01, Task1 F1 score: 5.119e-01, Task2 Acc: 7.692e-01\n", 1224 | "epoch: 78, train_loss: 2.145e+00, dev_loss: 3.701e+00,Task1 Precision: 6.581e-01, Task1 Recall: 4.359e-01, Task1 F1 score: 5.244e-01, Task2 Acc: 7.436e-01\n", 1225 | "epoch: 79, train_loss: 2.077e+00, dev_loss: 3.808e+00,Task1 Precision: 6.645e-01, Task1 Recall: 4.316e-01, Task1 F1 score: 5.233e-01, Task2 Acc: 7.308e-01\n", 1226 | "epoch: 80, train_loss: 2.126e+00, dev_loss: 3.798e+00,Task1 Precision: 6.522e-01, Task1 Recall: 3.846e-01, Task1 F1 score: 4.839e-01, Task2 Acc: 7.521e-01\n" 1227 | ] 1228 | } 1229 | ], 1230 | "source": [ 1231 | "best_accuracy = 0.0\n", 1232 | "save_path = 'weights/sentiment_model'\n", 1233 | "for epoch, shuffled in enumerate(td.epochs(train_set, EPOCHS), 1):\n", 1234 | " train_loss = train_epoch(shuffled)\n", 1235 | " f1_score = dev_eval(epoch, train_loss)\n", 1236 | " " 1237 | ] 1238 | }, 1239 | { 1240 | "cell_type": "code", 1241 | "execution_count": null, 1242 | "metadata": { 1243 | "collapsed": true 1244 | }, 1245 | "outputs": [], 1246 | "source": [] 1247 | }, 1248 | { 1249 | "cell_type": "code", 1250 | "execution_count": null, 1251 | "metadata": { 1252 | "collapsed": true 1253 | }, 1254 | "outputs": [], 1255 | "source": [] 1256 | } 1257 | ], 1258 | "metadata": { 1259 | "kernelspec": { 1260 | "display_name": "Python 3", 1261 | "language": "python", 1262 | "name": "python3" 1263 | }, 1264 | "language_info": { 1265 | "codemirror_mode": { 1266 | "name": "ipython", 1267 | "version": 3 1268 | }, 1269 | "file_extension": ".py", 1270 | "mimetype": "text/x-python", 1271 | "name": "python", 1272 | "nbconvert_exporter": "python", 1273 | "pygments_lexer": "ipython3", 1274 | "version": "3.6.2" 1275 | } 1276 | }, 1277 | "nbformat": 4, 1278 | "nbformat_minor": 2 1279 | } 1280 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Aspect-Based Sentiment Analysis using Tree-Structured LSTMs 2 | 3 | ## Sentence level Aspect-Based Sentiment Analysis 4 | In this code base, we implement a [Constituency Tree-LSTM model](https://nlp.stanford.edu/pubs/tai-socher-manning-acl2015.pdf) for [sentence level aspect based sentiment analysis (ABSA)](http://alt.qcri.org/semeval2016/task5/index.php?id=data-and-tools). The training/validation dataset for the model consists of annotated sentences from a domain with a predefined, fixed set of aspects. The annotation for a sentence comprises a list of aspect, polarity tuples. For illustration, we list a few annotated sentences from the [Laptop review trial dataset](http://alt.qcri.org/semeval2014/task4/data/uploads/laptops-trial.xml): 5 | 6 | * Sentence: "The So called laptop runs to Slow and I hate it!" → Annotation: {(LAPTOP#OPERATION_PERFORMANCE, negative), (LAPTOP#GENERAL, negative)} 7 | 8 | * Sentence: "Do not buy it!" → Annotation: {(LAPTOP#GENERAL, negative)} 9 | 10 | * Sentence: "It is the worst laptop ever" → Annotation: {(LAPTOP#GENERAL, negative)} 11 | 12 | The model need to be trained over these annotated sentences so that, for a new sentence, it can 13 | - output the list of aspects associated with it, and, 14 | - for each of the associated aspects, output the corresponding sentiment polarity ('negative', 'positive', or 'mildly negative/positive') 15 | 16 | ## Laptop Review Dataset & Preprocessing 17 | For model training and validation, we use the [Laptop review data set](http://metashare.ilsp.gr:8080/repository/browse/semeval-2014-absa-train-data-v20-annotation-guidelines/683b709298b811e3a0e2842b2b6a04d7c7a19307f18a4940beef6a6143f937f0/). This dataset comprises 3,048 sentences extracted from customer reviews of laptops and spans 154 aspects. Out of these, the 17 most frequently occurring aspects account for ~80% of the aspect labels in the dataset. So as a pre-processing step, we collapse the remaining aspects into a miscellaneous category ‘Other’ to bound model complexity and avoid over-fitting. Therefore, in the revised task, the model has to predict the presence/absence of 18 aspects in a sentence and the corresponding sentiment polarities. 18 | 19 | We use the [Stanford NLP parser](https://nlp.stanford.edu/software/lex-parser.shtml) to generate binary parse trees for each sentence in the training set as part of an offline pre-processing step. The aspect-polarity annotations are encoded as an 18 character string attached to the root node. The position in the 18 character string signifies the aspect, and the character – ‘1’ for positive sentiment, '2' for mildly positive/negative, '3' for negative - encodes the aspect's sentiment polarity with '0' implying the aspect is missing. 20 | 21 | For instance, (100000000000000000 ( ( Not) ( ( bad)))) is a binary parse tree comprising 3 nodes - one root node and two leaf nodes as children. The sentence has one associated aspect – overall performance with the corresponding polarity, 'Positive'. This is encoded by the first character in the 18 character string. Since there are no other aspects associated with this sentence, the remaining positions in the character string are encoded by ‘0’. 22 | 23 | These root annotated and parsed sentences are stored withinin the tree folder in the train, dev and text files. Supporting code for creating tree objects from these files and operating over them has been taken from [CS224D Assignment 3](http://cs224d.stanford.edu/assignment3/index.html). 24 | 25 | ## Implementation Details 26 | The [code](LSTM_Tree-v2.ipynb) itself is a modified version of [Tree-Structured LSTM](https://github.com/tensorflow/fold/blob/master/tensorflow_fold/g3doc/sentiment.ipynb). It departs from the original code-base in the following ways: 27 | 28 | 1. Multi-aspect labels appended only to the root node: For ABSA, all annotations are with respect to the entire sentence and therefore attached to the root node. The remaining nodes of the tree do not contribute to the loss. 29 | 30 | 2. Computing loss from two tasks: ASBA comprises two tasks – one, aspect detection and two, sentiment polarity prediction for the detected aspects. So it makes sense to compute a separate loss for each of the tasks and sum them in the final layer of the neural network. For task 1 loss, we compute the loss over 18 softmax units and sum them where each softmax unit predicts the presence or absence of the corresponding aspect. For task 2, we compute loss over another set of 18 softmax units and sum them. Here, each softmax unit predicts the sentiment class (positive, negative, mildly positive/mildly negative) for the corresponding aspect. Note that for each of the 18 aspects, loss is computed only if the aspect is present otherwise it is taken to be 0. The final loss is the weighted sum of these two losses. A key advantage of this approach is that we can adjust the weights depending on which evaluation metric – F1 score for aspect detection or accuracy score for sentiment polarity prediction – matters more to you while using a joint model. 31 | 32 | 3. Non-training of the word vectors: Since the dataset is limited in size, we avoid backpropagating the error into the word2vecs that feed into the leaf nodes of the parse tree. 33 | 34 | 35 | ## Requirements 36 | We use the [Tensorflow Fold](https://github.com/tensorflow/fold) library to facilitate dynamic batching and faster training. Note that TensorFlow by itself doesn’t support mini-batching of variable sized inputs such as trees. 37 | 38 | To use TensorFlow Fold, we used Tenforflow 1.0.0 GPU version on Ubuntu 16.04 with Python 3.6.2. We recommend training over a GPU for speed-up. 39 | 40 | We use 300 dimensional word2vecs pre-trained on the [Google News](https://github.com/mmihaltz/word2vec-GoogleNews-vectors) corpus as inputs to the leaf nodes. In the current implementation, we store this file in the root folder. After creating a vocabulary over the training, dev and test sets, a word2vec embedding matrix is then created using the Google word2vec file. The out of vocabulary rate for the Latptop data-set is ~ 5%. 41 | 42 | Other key requirements/dependancies are: 43 | 44 | -Gensim for processing Google News word2vecs and creating the embedding matrix 45 | 46 | -Numpy 47 | 48 | 49 | ## Results and Evaluation 50 | As part of validation, we track the F1 score for [SamEval](http://alt.qcri.org/semeval2016/task5/index.php?id=data-and-tools) subtask 1 slot 1 and the accuracy score for subtask 1 slot 3. For our model, both the scores are very competitive with the results of the leading teams in SamEval’15 and SamEval’16. 51 | -------------------------------------------------------------------------------- /trees/dev.txt: -------------------------------------------------------------------------------- 1 | (300000000000000000 ( ( ( I)) ( ( ( ( ( bought) ( ( this) ( laptop))) ( ( on) ( ( Saturday)))) ( and)) ( ( ( am) ( ( completely))) ( ( in) ( ( ( love)) ( ( with) ( ( it))))))))) 2 | (002000000000000000 ( ( ( It)) ( ( wouldn't) ( ( ( fit)) ( ( in) ( ( ( most) ( 17-inch)) ( bags))))))) 3 | (000000002000000000 ( ( ( So)) ( ( if) ( ( ( anyones) ( ( ( looking) ( ( ( to) ( ( buy) ( ( ( a) ( ( ( computer) ( or)) ( laptop))) ( ( ( ( you)) ( ( should) ( ( ( stay) ( ( far) ( ( far) ( away)))) ( ( from) ( ( ( any)) ( ( ( that)) ( ( ( have) ( ( ( the) ( ( name) ( TOSHIBA))) ( ( on) ( ( it)))))))))))))))))))))))) 4 | (200000002000000000 ( ( ( I)) ( ( have) ( ( ( had) ( ( ( Dell) ( Desktops)) ( ( for) ( ( years))))) ( ( so) ( ( ( had) ( ( ( no) ( qualms)) ( ( about) ( ( ( buying) ( ( a) ( ( Dell) ( laptop)))))))))))))) 5 | (003000000003000003 ( ( ( ( ( ( The) ( screen)) ( ( is) ( ( nice)))) ( and)) ( ( ( the) ( images)) ( ( comes) ( ( very) ( ( clear) ( ( ( ( ( ( the) ( keyboard)) ( and)) ( ( the) ( fit))) ( ( ( just)) ( ( feels) ( ( right))))))))))))) 6 | (000000000000000000 ( ( ( ( Two)) ( ( of) ( ( the) ( times)))) ( ( was) ( ( in) ( ( one) ( month)))))) 7 | (000030000000000000 ( ( ( It's) ( ( a) ( ( great) ( ( prodcut) ( ( ( to) ( ( handle) ( ( basic) ( ( computing) ( needs)))))))))))) 8 | (000000002000000000 ( ( ( NOW)) ( ( AM) ( ( VERY) ( ( APREHENSIVE) ( ( ABOUT) ( ( TOSHIBA) ( LAPTOPS)))))))) 9 | (000000000200000000 ( ( ( The) ( ( battery) ( life))) ( ( ( is) ( ( probably))) ( ( ( an) ( hour)) ( ( at) ( ( best))))))) 10 | (300000010000000000 ( ( ( But) ( ( for) ( ( ( the) ( cost)) ( ( ( ( this)) ( ( is) ( ( a) ( winner)))))))))) 11 | (000000000003000003 ( ( ( The) ( ( screen) ( resolution))) ( ( is) ( ( ( crystal) ( clear)) ( ( ( ( ( ( the) ( speakers)) ( ( are) ( ( amazing)))) ( and)) ( ( ( the) ( ( track) ( pad))) ( ( is) ( ( easy) ( ( to) ( ( use)))))))))))) 12 | (200200000000000000 ( ( ( I'm) ( ( sure) ( ( ( ( I)) ( ( ( just)) ( ( ( got) ( ( a) ( ( bad) ( egg)))) ( ( but) ( ( instead) ( ( of) ( ( ( getting) ( ( ( a) ( replacement)) ( ( ( ( I)) ( ( decided) ( ( ( to) ( ( try) ( ( a) ( ( different) ( one))))))))))))))))))))))) 13 | (000000000000000002 ( ( ( Another) ( thing)) ( ( is) ( ( ( that) ( after)) ( ( ( ( ( only) ( ( a) ( month))) ( ( ( the) ( ( left) ( ( mouse) ( key)))) ( ( broke)))) ( and)) ( ( ( it)) ( ( ( costed) ( ( $175))) ( ( ( to) ( ( ( ( send) ( ( it))) ( ( in))) ( ( ( to) ( ( fix) ( ( it))))))))))))))) 14 | (330000030000020000 ( ( ( I)) ( ( wiped) ( ( ( ( ( ( ( nearly) ( everything)) ( ( off) ( ( of) ( ( it))))) ( ( installed) ( ( ( OpenOffice) ( and)) ( Firefox)))) ( and)) ( ( ( I)) ( ( am) ( ( operating) ( ( ( an) ( ( ( incredibly) ( ( ( efficient) ( and)) ( useful))) ( machine))) ( ( for) ( ( a) ( ( great) ( price))))))))))))) 15 | (000000003000000000 ( ( ( ( ( ( That)) ( ( was) ( ( my) ( ( first) ( ( Apple) ( product)))))) ( and)) ( ( ( since) ( ( ( then)) ( ( ( I)) ( ( have) ( ( ( been) ( ( incredibly) ( happy))) ( ( with) ( ( ( every) ( product)) ( ( of) ( ( theirs)))))))))) ( ( ( I)) ( ( have) ( ( bought)))))))) 16 | (003000000000000000 ( ( ( It)) ( ( ( also)) ( ( came) ( ( with) ( ( a) ( ( ( ( ( ( built) ( ( ( it)) ( ( ( web) ( cam)) ( ( ( which)) ( ( ( ( is) ( ( great))) ( ( because) ( ( ( I)) ( ( can) ( ( see) ( ( an) ( communicate)))))))))))) ( ( with) ( ( my) ( ( family) ( members))))) ( ( back)))) ( home)))))))) 17 | (000000000000000002 ( ( ( Sometimes)) ( ( ( ( the) ( screen)) ( even)) ( ( ( goes)) ( ( ( black)) ( ( on) ( ( this) ( computer)))))))) 18 | (000000000000000003 ( ( ( Retina) ( display)) ( ( is) ( ( beautiful))))) 19 | (300000000000000000 ( ( ( It)) ( ( ( is) ( ( everything))) ( ( that) ( ( ( I)) ( ( would) ( ( want) ( ( in) ( ( a) ( computer)))))))))) 20 | (000000000000000000 ( ( ( I'm) ( ( going) ( ( ( to) ( ( ( ( ( try) ( and)) ( keep)) ( ( ( my) ( ( old) ( G4))) ( ( on) ( ( the) ( road))))) ( ( for) ( ( ( as) ( ( long) ( ( as) ( possible))))))))))))) 21 | (000000202000000000 ( ( ( With) ( ( ( today's) ( company)) ( ( fighting) ( ( over))))) ( ( ( marketshare) ( ( its))) ( ( a) ( ( shame) ( ( that) ( ( ( ASUS)) ( ( can) ( ( ( get) ( ( away))) ( ( with) ( ( the) ( ( inept) ( ( staff) ( ( answering) ( (the) (phone)))))))))))))))) 22 | (000000000000000000 ( ( ( I)) ( ( ( am) ( ( definitely))) ( ( ( ( ( sold)) ( and)) ( not)) ( ( ( going) ( ( back))) ( ( to) ( ( ( PCs)) ( ( for) ( ( home) ( use)))))))))) 23 | (000000000000000000 ( ( If) ( ( ( ( it's) ( not)) ( ( shipped) ( ( on) ( ( ( the) ( ( next) ( ( business) ( day)))) ( ( called) ( ( on) ( ( ( a) ( Friday)) ( ( ( ( they)) ( ( are) ( ( closed) ( ( on) ( ( ( weekends)) ( ( ( what)) ( ( ( was) ( ( the) ( ( next) ( step)))))))))))))))))))))) 24 | (000000000000000000 ( ( ( she)) ( ( can't) ( ( tell) ( ( ( the) ( difference)) ( ( between) ( ( ( ( it)) ( and)) ( ( her) ( ( regular) ( ( desktop) ( system))))))))))) 25 | (000000000300000000 ( ( ( The) ( battery)) ( ( will) ( ( ( ( get) ( ( you))) ( ( from) ( ( LA)))) ( ( ( to) ( ( NY) ( ( no) ( problem))))))))) 26 | (000000000000000002 ( ( ( The) ( display)) ( ( is) ( ( beyond) ( ( horrible)))))) 27 | (300000000000000000 ( ( ( It)) ( ( was) ( ( a) ( ( great) ( purchase)))))) 28 | (303000000000300000 ( ( ( ( ( ( Meets) ( ( my) ( needs))) ( ( perfectly))) ( and)) ( ( is) ( ( ( light) ( enough)) ( ( for) ( ( this) ( ( senior) ( ( ( to) ( ( carry) ( ( without) ( ( ( affecting) ( ( my) ( arthritis)))))))))))))))) 29 | (030000000000000000 ( ( ( ( Runs)) ( ( ( smooth) ( and)) ( quick))))) 30 | (000000000000000003 ( ( ( Very) ( ( decent) ( speakers))))) 31 | (000000002000000000 ( ( ( For) ( ( ( my) ( ( burn) ( thigh))) ( ( ( which)) ( ( ( has) ( ( ( put) ( ( a) ( ( permanent) ( mark)))) ( ( on) ( ( my) ( ( skin) ( (it)))))))))) ( ( ( happened) ( ( ( ( 7) ( months)) ( ( ago)) ( ( ( ( they)) ( ( ( offered) ( ( me))) ( ( ( ( an) ( ( ITouch) ( ( 8Gig) ( (you)))) ( ( know) ( ( ( ( it)) ( ( is) ( ( ( a) ( bit)) ( ( insulating) ( ( ( when)) ( ( ( ( a) ( company)) ( ( this) ( ( rich) ( offer))))))))))))))))))))) ( ( ( a) ( ( loyal) ( customer))) ( ( like) ( ( ( ( me) ( ( ( a) ( bottom)) ( ( of) ( ( their) ( ( product) ( line)))))) ( ( as) ( ( ( a) ( gift)) ( ( for) ( ( ( events)) ( ( like) ( ( this))))))))))))))) 32 | (000000002000000000 ( ( ( Steve) ( Jobs)) ( ( ( ( ( probably)) ( ( needs) ( ( ( help) ( and)) ( donations)))) ( and)) ( ( cannot) ( ( ( afford) ( ( a) ( ( reasonable) ( offers)))) ( ( for) ( ( ( people)) ( ( ( that)) ( ( ( truly)) ( ( are) ( ( trying) ( ( ( to) ( ( support) ( ( his) ( baby)))))))))))))))) 33 | (020000000000000000 ( ( ( When)) ( ( ( the) ( computer)) ( ( has) ( ( been) ( ( on) ( ( for) ( ( ( several) ( minutes)) ( ( ( ( it)) ( ( ( will) ( ( occasionaly))) ( ( ( just)) ( ( ( go) ( ( off))) ( ( by) ( ( itself)))))))))))))))) 34 | (300000010000000200 ( ( ( ( Fantastic)) ( ( for) ( ( ( ( the) ( price)) ( -)) ( ( ( just)) ( ( wish) ( ( ( it)) ( ( the) ( keys)))))))) ( ( were) ( ( illuminated))))) 35 | (000000000000000002 ( ( ( Then)) ( ( ( just) ( ( the) ( ( other) ( day)))) ( ( ( ( my) ( ( left) ( ( mouse) ( button)))) ( ( snapped))))))) 36 | (000000030000000000 ( ( was) ( ( ( a) ( ( great) ( deal))) ( ( ( ( i)) ( ( will) ( ( give) ( ( that))))))))) 37 | (300000030000000000 ( ( ( It)) ( ( is) ( ( ( exactly) ( what)) ( ( ( ( ( I)) ( ( expected))) ( and)) ( ( ( the) ( price)) ( ( is) ( ( excellent))))))))) 38 | (000000000000000000 ( ( ( I)) ( ( ( would) ( not)) ( ( ( recommend) ( ( this))) ( ( to) ( ( ( anyone)) ( ( wanting) ( ( ( a) ( notebook)) ( ( expecting) ( ( ( ( the) ( performance)) ( ( of) ( ( a) ( Desktop)))) ( ( ( ( it)) ( ( ( does) ( not)) ( ( meet) ( ( the) ( expectations)))))))))))))))) 39 | (030030000000000000 ( ( ( However)) ( ( ( ( ( this) ( laptop)) ( far)) ( ( exceeded) ( ( my) ( expectations)))) ( ( ( when)) ( ( ( I)) ( ( ( bought) ( ( it))) ( ( for) ( ( ( college) ( ( ( ( ( I)) ( ( ( only)) ( ( use) ( ( ( Malwarebytes) ( ( and) ( ( Microsoft) ( ( Security) ( Essentials))))) ( ( ( run) ( ( a) ( virus))) ( ( ( scan) ( ( maybe))) ( ( ( once)) ( ( a) ( week))))))))) ( and)) ( ( ( it)) ( ( has) ( ( ( ran) ( ( smoother))) ( ( than) ( ( ( butter)) ( ( for) ( ( the) ( ( past) ( ( two) ( years)))))))))))))))))))) 40 | (000200000000000000 ( ( ( think) ( ( ( ( I)) ( ( would) ( ( ( spend) ( ( little) ( extra))) ( ( ( to) ( ( get) ( ( a) ( ( ( better) ( made)) ( laptop))))))))))))) 41 | (220002000000000000 ( ( ( It)) ( ( is) ( ( ( ( ( slow) ( and)) ( complicated)) ( and)) ( ( very) ( disappointing)))))) 42 | (200000020000000000 ( ( ( It's)) ( ( not) ( ( ( what)) ( ( ( you)) ( ( pay) ( ( for)))))))) 43 | (000000000000000000 ( ( ( The) ( keyboard)) ( ( is) ( ( like) ( ( no) ( ( other) ( ( laptop) ( keyboard)))))))) 44 | (000000000000000002 ( ( ( The) ( computer)) ( ( ( is) ( ( currently))) ( ( in) ( ( ( West) ( ( Verginia) ( doe))) ( ( to) ( ( ( the) ( method)) ( ( of) ( ( ( ( shipping) ( ( choosen))) ( ( by) ( ( Toshiba))))))))))))) 45 | (300000000000000000 ( ( ( This) ( ( little) ( netboook))) ( ( is) ( ( helping) ( ( ( me)) ( ( get) ( ( ( work)) ( ( done))))))))) 46 | (300000000000000000 ( ( ( I)) ( ( love) ( ( ( everything)) ( ( about) ( ( it))))))) 47 | (000000000000000000 ( ( ( I)) ( ( am) ( ( ( also)) ( ( ( upset) ( ( with) ( ( CR)))) ( ( for) ( ( ( giving) ( ( a) ( ( good) ( rating))))))))))) 48 | (200000000000000000 ( ( ( Thinking) ( ( about) ( ( ( returning) ( ( it)))))))) 49 | (000000000300000000 ( ( ( 10) ( plus)) ( ( ( hours)) ( ( of) ( ( battery)))))) 50 | (020000000000000000 ( ( ( this) ( computer)) ( ( is) ( ( very) ( slow))))) 51 | (000000300000000000 ( ( ( In) ( ( those) ( three))) ( ( ( years) ( I've)) ( ( ( ( had) ( ( ( ( ( a) ( couple)) ( ( of) ( ( minor) ( problems)))) ( and)) ( ( ( both)) ( ( ( were) ( ( ( resolved) ( ( by) ( ( Apple)))) ( ( quickly)))))))) ( and)) ( ( easily)))))) 52 | (000000000000000000 ( ( ( I)) ( ( ( bought) ( ( this) ( laptop))) ( ( so) ( ( that) ( ( ( the) ( ( entire) ( family))) ( ( had) ( ( ( a) ( computer)) ( ( in) ( ( the) ( ( living) ( room)))))))))))) 53 | (300000030000000000 ( ( If) ( ( ( they)) ( ( can) ( ( fix) ( ( ( this)) ( ( ( ( I)) ( ( think) ( ( ( ( it)) ( ( would) ( ( be) ( ( a) ( ( ( very) ( ( nice) ( (cost) (effective)))) ( laptop)))))))))))))))) 54 | (000000000000000000 ( ( ( It)) ( ( is) ( ( ( however)) ( ( very) ( heavy)))))) 55 | (003000000300000000 ( ( ( It)) ( ( ( ( is) ( ( ( sleek) ( and)) ( lightweight))) ( and)) ( ( charges) ( ( ( quickly) ( when)) ( ( ( needed)))))))) 56 | (030000000000000000 ( ( ( The) ( ( Mac) ( ( Book) ( Pro)))) ( ( performs) ( ( flawlessly))))) 57 | (002000000000000000 ( ( ( ( Features)) ( ( like) ( ( the) ( font)))) ( ( are) ( ( ( ( very) ( block-like)) ( and)) ( ( old) ( school)))))) 58 | (030303000000003000 ( ( ( i)) ( ( use) ( ( ( my) ( mac)) ( ( ( ( all) ( ( the) ( ( time) ( i)))) ( ( love) ( ( ( ( the) ( software)) ( ( the) ( way))) ( ( ( ( it)) ( ( takes) ( ( a) ( ( short) ( ( time) ( ( ( to) ( ( ( load) ( ( things))) ( ( ( how)) ( ( ( ( ( easy)) ( ( ( it)) ( ( is) ( ( ( to) ( ( use))))))) ( and)) ( ( ( ( most)) ( ( of) ( ( ( all)) ( ( ( how)) ( ( ( you)) ( ( don't))))))) ( ( have) ( ( ( to) ( ( worry) ( ( about) ( ( viruses))))))))))))))))))))))))))) 59 | (000000000000000000 ( ( ( Lenovo)) ( ( ( sent) ( ( me))) ( ( a) ( ( box) ( ( ( to) ( ( ( return) ( ( it))) ( ( to) ( ( them))))))))))) 60 | (300000000000000000 ( ( ( It)) ( ( is) ( ( so) ( ( great) ( ( ( ( I)) ( ( ( can) ( ( Hardly) ( ever))) ( ( ( take) ( ( my) ( hands))) ( ( off) ( ( it)))))))))))) 61 | (000000000000000000 ( ( ( I)) ( ( bought) ( ( ( this) ( laptop)) ( ( ( ( the) ( ( moment) ( ( unibody) ( product)))) ( ( came) ( ( to) ( ( the) ( market)))))))))) 62 | (100000000000000000 ( ( It's) ( ok))) 63 | (000000000000000000 ( ( ( ( If) ( ( ( the) ( ( wi-fi) ( adapter))) ( ( ( will) ( not)) ( ( support) ( ( duplex) ( operation)))))) ( ( (still) ( ( ( trying) ( ( ( to) ( ( get) ( ( to) ( ( ( the) ( bottom)) ( ( of) ( ( that))))))))))))) ( ( ( ( that's) ( ( a) ( ( noticeable) ( ( drawback) ( I'll))))) ( ( be) ( ( ( grousing) ( about)) ( ( for) ( ( the) ( ( entire) ( time))))))) ( ( I) ( ( use) ( it)))))) 64 | (000003000000000000 ( ( ( The) ( laptop)) ( ( was) ( ( very) ( ( easy) ( ( ( to) ( ( set) ( ( up)))))))))) 65 | (001000000000300000 ( ( ( the) ( ( only) ( ( down) ( fall)))) ( ( is) ( ( that) ( ( ( ( ( it)) ( ( has) ( ( no) ( ( cd) ( drive))))) ( but)) ( ( ( i)) ( ( found) ( ( that) ( ( ( they)) ( ( are) ( ( very) ( ( cheap) ( ( to) ( ( ( ( by)) ( ( and) ( ( also) ( ( very) ( ( portable) ( ( ( ( making) ( ( this) ( ( the) ( ( best) ( friend))))) ( ( to) ( ( ( someone)) ( ( ( who)) ( ( ( ( is) ( ( always))) ( ( ( looking) ( ( for) ( ( more) ( space)))) ( ( then) ( ( they)))))))))))))))) ( have))))))))))))))) 66 | (200000000000000000 ( ( ( Would) ( not)) ( ( recommend)))) 67 | (300000000000000000 ( ( ( This) ( one)) ( ( has) ( ( had) ( ( the) ( ( same) ( effect))))))) 68 | (030000010300000000 ( ( ( ( This) ( things)) ( ( ( run) ( ( smoothly))) ( ( for) ( ( ( ( its) ( price)) ( and)) ( ( the) ( ( battery) ( life))))))) ( ( seems) ( ( ( to) ( ( go) ( ( on) ( ( forever))))))))) 69 | (000000200000000000 ( ( ( No) ( ( ( ( ( tey) ( don't)) ( ( ( even)) ( ( support) ( ( their) ( ( own) ( bios)))))) ( and)) ( ( ( it)) ( ( could) ( ( ( ( be) ( ( ( a) ( problem)) ( ( with) ( ( the) ( bios)))))) ( ( ( How)) ( ( ( can) ( ( ( a) ( company)) ( ( ( that)) ( ( ( makes) ( ( a) ( ( ( fairly) ( decent)) ( product)))))))) ( ( ( get) ( ( away))) ( ( with) ( ( such) ( insanity))))))))))))) 70 | (300000000000030000 ( ( ( This) ( laptop)) ( ( meets) ( ( ( ( ( ( every) ( expectation)) ( and)) ( ( Windows) ( 7))) ( ( is) ( ( great)))))))) 71 | (200000030000000000 ( ( ( I)) ( ( appreciate) ( ( ( the) ( effort)) ( ( to) ( ( hit) ( ( ( ( affordable) ( ( pricing) ( Dell))) ( ( but) ( just))) ( ( ( not) ( worth)) ( it))))))))) 72 | (000200200000000000 ( ( ( Long) ( ( story) ( short))) ( ( since) ( ( ( I)) ( ( experience) ( ( ( ( ( ( ( ( so) ( ( many) ( problems))) ( ( with) ( ( my) ( laptop)))) ( every)) ( ( since) ( ( ( I)) ( ( ( ( bought) ( ( it))) ( ( from) ( ( day)))) ( ( ( one) ( ( ( I)) ( ( ( didn't)) ( ( ( ask) ( ( for) ( ( ( ( a) ( ( new) ( laptop))) ( or)) ( ( ( a) ( refund)) ( ( of) ( ( ( what)) ( ( ( I)) ( ( pay) ( ( for) ( ( a) ( ( crapy) ( laptop))))))))))))))))))))) ( but)) ( just)) ( ( ( an) ( extension)) ( ( of) ( ( ( my) ( ( laptop) ( warranty))) ( ( for) ( ( ( another) ( year)) ( ( ( ( they)) ( ( ( ( made) ( ( ( ( ( a) ( ( big) ( deal))) ( ( of) ( ( ( ( ( out) ( ( that))) ( and)) ( ( after) ( ( ( so) ( many))))) ( calls)))) ( and)) ( ( ( complaints)) ( ( about) ( ( their) ( products)))))) ( and)) ( ( services) ( ( ( ( they)) ( ( ( finally)) ( ( gave) ( ( in))))))))))))))))))))) 73 | (300000010000000000 ( ( ( I)) ( ( am) ( ( very) ( ( happy) ( ( ( ( I)) ( ( ( ( bought) ( ( this) ( Mac))) ( ( well))) ( ( worth) ( ( the) ( ( extra) ( money)))))))))))) 74 | (001000000000000000 ( ( ( It)) ( ( ( is) ( ( a) ( ( big) ( big)))) ( ( but) ( ( ( since) ( ( ( it)) ( ( has) ( ( ( a) ( ( 18.4") ( screen))) ( ( ( what)) ( ( ( would)))))))) ( ( ( you)) ( ( expect)))))))) 75 | (330000000000000030 ( ( ( ( Still)) ( ( ( giving) ( ( it))) ( ( ( ( ( a) ( ( 5) ( ( star) ( rating)))) ( ( because) ( ( ( it)) ( ( is) ( ( fast)))))) ( and)) ( ( a) ( ( nice) ( ( sized) ( screen))))))))) 76 | (030300000000000000 ( ( ( I)) ( ( was) ( ( surprised) ( ( with) ( ( ( the) ( ( ( performance) ( and)) ( quality))) ( ( of) ( ( this) ( ( HP) ( Laptop)))))))))) 77 | (200000002000000000 ( ( Used) ( ( ( to) ( ( ( love) ( ( HP) ( products))) ( ( but) ( ( ( this)) ( ( has) ( ( ( soured) ( ( me))) ( ( on) ( ( the) ( ( whole) ( company))))))))))))) 78 | (200200000000000000 ( ( ( It)) ( ( ( ( ( is) ( not)) ( ( even))) ( ( ( a) ( year)) ( ( old) ( yet)))) ( ( so) ( ( ( I)) ( ( ( would definitely) ( not)) ( ( ( recommend) ( ( it))) ( ( to) ( ( anyone)))))))))) 79 | (000000000000000000 ( ( ( I)) ( ( ( can) ( ( actually))) ( ( ( ( ( get) ( ( ( work)) ( ( done) ( ( with) ( ( this) ( MAC)))))) ( and)) ( not)) ( ( ( fight) ( ( with) ( ( it)))) ( ( like) ( ( my) ( ( tired) ( ( old) ( ( PC) ( laptop))))))))))) 80 | (000000000000000003 ( ( ( It)) ( ( ( did) ( not)) ( ( ( take) ( ( long))) ( ( ( to) ( ( get) ( ( used) ( ( to) ( ( the) ( ( Mac) ( OS)))))))))))) 81 | (000000200000000000 ( ( Then) ( ( ( HP)) ( ( ( ( ( sends) ( ( it))) ( ( back))) ( ( to) ( ( ( me)) ( ( with) ( ( the) ( hardware)))))) ( ( ( screwed) ( up)) ( ( not) ( ( able) ( ( to) ( ( connect)))))))))) 82 | (003000000000000000 ( ( ( Uhhhhhh) ( ( ( ( the) ( computer)) ( ( looks) ( ( good)))))))) 83 | (000000200000000000 ( ( ( I)) ( ( ( ( waited) ( and)) ( waited)) ( ( ( and) ( no)) ( laptop))))) 84 | (000000200000000000 ( ( ( ( ( ( I)) ( ( ( had) ( ( ( to) ( ( wait) ( ( 3) ( weeks)))))) ( ( ( to) ( ( ( get) ( ( it))) ( ( back))))))) ( and)) ( ( ( it)) ( ( ( still)) ( ( ( is) ( not)) ( ( working) ( ( properly))))))))) 85 | (000000200000000000 ( ( ( They)) ( ( had) ( ( ( me)) ( ( send) ( ( in) ( ( ( the) ( machine)) ( ( ( last) ( April)) ( ( ( ( ( returned) ( ( it))) ( ( to) ( ( me)))) ( ( in) ( ( May)))) ( ( with) ( ( ( no) ( documentation)) ( ( on) ( ( ( what)) ( ( ( was) ( ( done) ( ( ( it)) ( ( anything))))))))))))))))))) 86 | (000000001000000000 ( ( ( I)) ( ( ( just)) ( ( ( hope) ( ( the) ( reputation))) ( ( that) ( ( ( ( ( Toshiba)) ( ( has) ( ( is) ( ( true))))) ( and)) ( ( ( I)) ( ( won't) ( ( have) ( ( ( to) ( ( worry) ( ( about) ( ( a) ( crash))))))))))))))) 87 | (000003000000000000 ( ( ( It)) ( ( ( made) ( ( ( the) ( computer)) ( ( much) ( easier)))) ( ( to) ( ( ( use) ( and)) ( navigate)))))) 88 | (000003000000000000 ( ( ( ( The) ( ease)) ( ( ( in) ( ( which))) ( ( ( you)) ( ( ( set) ( ( everything))) ( ( up)))))) ( ( ( is) ( ( such))) ( ( that) ( ( ( a) ( child)) ( ( could) ( ( do) ( ( it))))))))) 89 | (030000000000000003 ( ( ( ( The) ( ( 2) ( GB))) ( ( of) ( ( RAM)))) ( ( ( is) ( ( plenty) ( able))) ( ( ( to) ( ( ( run) ( ( ( ( ( Windows) ( 7)) ( and)) ( ( at) ( least))) ( ( ( ( ( 2) ( or)) ( 3)) ( ( other) ( programs))) ( ( with) ( ( next)))))) ( ( to) ( ( no) ( slowdown))))))))) 90 | (200000002000000000 ( ( ( i) ( cant)) ( ( believe) ( ( ( ( HP)) ( ( put) ( ( this) ( out)))))))) 91 | (000302000020000003 ( ( ( The)) ( ( build) ( ( ( ( is) ( ( ( perfect) ( ( the) ( ( screen) ( fantastic)))) ( ( but) ( ( ( I)) ( ( do) ( ( ( have) ( ( ( a) ( bit)) ( ( of) ( ( ( a) ( problem)) ( ( with) ( ( the) ( fact))))))) ( ( that) ( ( ( I)) ( ( ( have) ( ( ( to) ( ( ( buy) ( ( ( adaptors)) ( ( for) ( ( ( nearly) ( everything)))))) ( ( from) ( ( vga) ( cables))))))) ( ( ( to) ( ( ethernet) ( ( ( cables) ( so)) ( ( almost) ( perfect)))))))))))))))))))) 92 | (000000000000000002 ( ( ( Then)) ( ( after) ( ( ( ( ( 4) ( or)) ( so)) ( months)) ( ( ( the) ( charger)) ( ( stopped) ( ( ( working) ( ( so) ( ( ( I)) ( ( was) ( ( forced) ( ( ( to) ( ( ( ( go) ( ( out))) ( and)) ( ( ( ( buy) ( ( new) ( hardware))) ( ( just))) ( ( ( to) ( ( keep) ( ( this) ( ( computer) ( running)))))))))))))))))))))) 93 | (000303030000000000 ( ( ( It)) ( ( is) ( ( easy) ( ( ( to) ( ( use) ( ( good) ( ( ( ( quality) ( and)) ( good)) ( price)))))))))) 94 | (000330000000000000 ( ( ( So) ( far)) ( ( ( I)) ( ( ( ( haven't)) ( ( lost) ( ( any) ( ( ( quality) ( or)) ( information))))))))) 95 | (000000000000000000 ( ( ( Sadly) ( Apple)) ( ( has) ( ( discontinued) ( ( ( this) ( MacBook)) ( ( ( ( I)) ( ( think) ( ( ( ( it)) ( ( ( ( was) ( ( never))) ( ( super) ( popular))) ( ( since) ( ( ( it)) ( ( fell) ( ( somewhere) ( ( in) ( ( between) ( ( ( ( the) ( ( cheapest) ( ( white) ( model)))) ( and)) ( ( the) ( ( smaller) ( Pros))))))))))))))))))))) 96 | (000000000002000002 ( ( Externally) ( ( ( ( ( the) ( keys)) ( ( on) ( ( my) ( keyboard)))) ( ( are) ( ( falling) ( ( ( off) ( ( ( ( after) ( ( ( a) ( few)) ( ( uses) ( ( ( ( the) ( paint)) ( ( is) ( ( ( ( rubbing) ( ( off))) ( ( the) ( button))) ( ( below) ( ( the) ( ( mouse) ( pad))))))))))) ( and)) ( ( ( where)) ( ( ( ( the) ( heals)) ( ( of) ( ( ( ( my) ( ( hands) ( sit))) ( and)) ( ( the) ( screen))))) ( ( has) ( ( a) ( ( terrible) ( glare))))))))))))))) 97 | (000000000000000000 ( ( ( Well) ( ( ( ( I)) ( ( have) ( ( ( to) ( ( say) ( ( since) ( ( ( I)) ( ( ( bought) ( ( my) ( Mac))) ( ( ( ( I)) ( ( ( won't) ( ( ever))) ( ( ( go) ( ( back))) ( ( to) ( ( any) ( Windows))))))))))))))))))) 98 | (000200000000000000 ( ( ( COMPUTER) ( ( HAS) ( ( BEEN) ( ( AT) ( ( SERVICE) ( FACILITY)))))) ( ( ( MORE) ( THAN)) ( ( IN) ( ( MY) ( HANDS)))))) 99 | (000200000000000000 ( ( Runs) ( Hot))) 100 | (000030000000000000 ( ( ( But) ( ( if) ( ( ( you)) ( ( ( are) ( ( just))) ( ( ( an) ( ( average) ( user))) ( ( ( ( it)) ( ( works) ( ( really) ( great)))))))))))) 101 | (200000000000000000 ( ( ( I)) ( ( bought) ( ( ( ( ( ( this)) ( ( eMachines) ( ( ( Notebook) ( PC)) ( ( in) ( ( ( January)) ( ( of) ( ( this) ( year)))))))) ( and)) ( ( ( I)) ( ( am) ( ( highly dissatisfied) ( ( with) ( ( it))))))))))) 102 | (300000000000000000 ( ( ( When)) ( ( ( I)) ( ( saw) ( ( ( this)) ( ( ( ( I)) ( ( grabbed) ( ( it)))))))))) 103 | (000200000000000000 ( ( ( I)) ( ( should) ( ( have) ( ( waited) ( ( ( to) ( ( find) ( ( a) ( ( higher) ( ( quality) ( computer)))))))))))) 104 | (002000000000000000 ( ( ( Could) ( ( lose) ( ( another)))) ( ( ( pound) ( or)) ( two)))) 105 | (100000030000000000 (meh) ((but)(cheap))) 106 | (030000000000000000 ( ( ( ( Excellent) ( ( speed))) ( ( for) ( ( processing) ( data)))))) 107 | (000000300000000000 ( ( ( ( ( ( I)) ( ( have) ( ( had) ( ( ( to) ( ( call) ( ( with) ( ( a) ( ( few) ( ( ( questions) ( or)) ( issues))))))))))) ( and)) ( ( ( they)) ( ( have) ( ( ( helped) ( ( me))) ( ( for) ( ( ( ( free) ( ( even))) ( ( without) ( ( the) ( warranty)))))))))))) 108 | (300000003000000000 ( ( If) ( ( ( you)) ( ( have) ( ( ( ( any) ( creativity)) ( ( in) ( ( you)))) ( ( ( ( do) ( ( ( yourself)) ( ( a) ( favor)))) ( and)) ( ( get) ( ( a) ( mac))))))))) 109 | (300000000000000000 ( ( ( All-in-all) ( ( ( ( I)) ( ( ( would) ( ( definitely))) ( ( ( recommend) ( ( this) ( product))) ( ( for) ( ( ( nearly) ( everyone))))))))))) 110 | (000000000000000000 ( ( ( I)) ( ( tried) ( ( ( ( all) ( ( the) ( ( Window) ( ( updates) ( (this))))) ( ( ( worked) ( ( for) ( ( ( a) ( couple)) ( ( of) ( ( HP) ( ( laptops) ( I7in))))))) ( ( that) ( ( ( I)) ( ( ( ( bought) ( ( later))) ( ( at) ( ( BB))))) ( ( ( to) ( ( see) ( ( if) ( ( ( it)) ( ( could) ( ( remove) ( ( ( the) ( drag)) ( ( ( ( it)) ( ( did) ( ( not)))))))))))))))))))))) 111 | (200000002000000000 ( ( ( I)) ( ( can) ( ( guarantee) ( ( ( ( this)) ( ( will) ( ( be) ( ( ( the) ( ( last) ( Dell))) ( ( ( ( I)) ( ( ( will) ( ( ever))) ( ( purchase)))))))))))))) 112 | (030030000000300000 ( ( ( I)) ( ( wouldn't) ( ( ( ( ( ( ( play) ( ( a) ( ( first-person) ( shooter)))) ( ( with) ( ( this) ( mind)))))) ( but)) ( ( if) ( ( ( you)) ( ( ( ( wanted) ( ( ( to) ( ( run) ( ( ( MS) ( ( Office) ( ( email) ( chat)))) ( ( download) ( ( ( a) ( video)) ( ( ( listen) ( ( to) ( ( music)))) ( ( from) ( ( a) ( ( certain) ( ( fruit-named) ( ( music) ( store)))))))))))))) ( and)) ( ( were) ( ( ( looking) ( ( for) ( ( a) ( ( ( ( ( highly) ( portable)) ( yet)) ( ( powerful))) ( netbook))))) ( ( ( to) ( ( do) ( ( that) ( ( ( all) ( ( in) ( I'd))) ( ( ( highly)) ( ( recommend) ( ( ( checking) ( ( this) ( out)))))))))))))))))))) 113 | (300000000000000000 ( ( Now) ( ( ( they)) ( ( are) ( ( ( believers)) ( ( in) ( ( the) ( product)))))))) 114 | (300000030000000000 ( ( ( and) ( ( ( its) ( ( ( ( ( really) ( cheap)) ( and)) ( ( ( you)) ( wont))) ( regret))) ( ( buying) ( ( it))))))) 115 | (300000000000000000 ( ( if) ( ( ( this) ( computer)) ( ( ( ( ( every) ( breaks)) ( ( down) ( ( on) ( ( me))))) ( i)) ( ( ( will) ( ( most))) ( ( ( definatly)) ( ( get) ( ( the) ( ( same) ( ( one) ( again))))))))))) 116 | (000000000000000000 ( ( for) ( ( 2) ( months)))) 117 | (000000000000000003 ( ( ( I)) ( ( am) ( ( using) ( ( ( the) ( ( external) ( ( speaker) ( sound)))) ( ( ( ( is) ( ( good)))))))))) 118 | (030000000000000000 ( ( ( I)) ( ( ( run) ( ( ( ( Dreamweaver) ( ( Final) ( ( Cut) ( ( Pro) ( ( 7) ( ( Photoshop) ( ( Safari) ( ( Firefox) ( ( MSN) ( Messenger)))))))))) ( and)) ( ( a) ( ( few) ( ( other) ( applications)))))) ( ( ( constantly)) ( ( at) ( ( the) ( ( same) ( time)))))))) 119 | (000000000000000003 ( ( ( They)) ( ( are) ( ( so) ( ( realistic) ( ( ( ( I)) ( ( am) ( ( just) ( speechless)))))))))) 120 | (000000000000000000 ( ( ( I)) ( ( ( have) ( ( also))) ( ( used) ( ( ( it)) ( ( to) ( ( watch) ( ( ( YouTube) ( and)) ( Hulu))))))))) 121 | (000330000000000000 ( ( ( I)) ( ( ( highly)) ( ( ( recommend) ( ( this) ( computer))) ( ( for) ( ( ( students)) ( ( ( looking) ( ( for) ( ( a) ( ( solid) ( machine))))) ( ( ( to) ( ( ( get) ( ( them))) ( ( through) ( ( college))))))))))))) 122 | (000000000000000000 ( ( ( All) ( ( of) ( ( them)))) ( ( were) ( ( Windows) ( machines))))) 123 | (000000000000000201 ( ( ( The) ( keyboard)) ( ( is) ( ( ( a) ( ( little) ( wonky))) ( ( with) ( ( ( having) ( ( ( to) ( ( use) ( ( ( the) ( ( Function) ( button))) ( ( to) ( ( ( get) ( ( the) ( F-keys))) ( ( but) ( ( with) ( ( ( how)) ( ( ( infrequently) ( i)) ( ( use) ( ( ( those)) ( ( ( ( it)) ( ( is) ( ( a) ( non-issue)))))))))))))))))))))))) 124 | (000030000000000000 ( ( Like) ( ( ( i) ( ( said) ( Good))) ( ( ( ( for) ( ( basic) ( stuff))) ( and)) ( ( as) ( ( a) ( starter))))))) 125 | (000000000000000000 ( ( If) ( ( ( that)) ( ( is) ( ( ( the) ( case)) ( ( for) ( ( ( you) ( ( ( ( I)) ( ( would) ( ( ( suggest) ( ( a) ( ( (pull) (behind)) ( solution)))) ( ( ( when)) ( ( ( looking) ( ( at) ( ( cases)))))))))))))))))) 126 | (000000200000000000 ( ( ( they)) ( ( ( have) ( not)) ( ( sent) ( ( ( ( a) ( ( new) ( one))) ( nor)) ( ( called))))))) 127 | (000000000000000000 ( ( ( It)) ( ( was) ( ( stubborn) ( ( as) ( ( ( ( ( hell) ( ( ( no) ( amount)) ( ( of) ( ( dust))))) ( or)) ( ( slipping) ( ( to) ( ( ( the) ( ground)) ( ( phased) ( ( it))))))))))))) 128 | (300000000000000000 (simply) (awesome)) 129 | (000200000000000000 ( ( ( breaks)) ( ( easily)))) 130 | (002000000000000000 ( ( ( My) ( ( only) ( concern))) ( ( is) ( ( ( that) ( since)) ( ( ( the) ( battery)) ( ( ( is) ( not)) ( ( external) ( ( ( ( I)) ( ( ( will) ( not)) ( ( ( be) ( ( able) ( ( ( to) ( ( ( change) ( ( it))) ( ( out))))))) ( ( once) ( ( ( it)) ( ( starts) ( ( not) ( ( to) ( ( ( hold) ( ( a) ( ( good) ( charge)))) ( ( over) ( ( ( a) ( length)) ( ( of) ( ( time)))))))))))))))))))))) 131 | (030000000000000000 ( ( ( ( ( ( It)) ( ( ( fires) ( ( up))) ( ( in) ( ( ( the) ( morning)) ( ( in) ( ( ( less) ( ( than) ( 30))) ( seconds))))))) ( and)) ( ( ( I)) ( ( have) ( ( never))))) ( ( ( had) ( ( ( any) ( issues)) ( ( with) ( ( it))))) ( ( freezing))))) 132 | (000020000000000000 ( ( ( This) ( ( computer) ( doesn't))) ( ( do) ( ( that) ( ( ( ( ( well) ( ( with) ( ( certain) ( games)))) ( ( ( it)) ( ( can't) ( ( play) ( ( some)))))) ( and)) ( ( ( it)) ( ( becomes) ( ( too) ( ( hot) ( ( while) ( ( ( playing) ( ( games)))))))))))))) 133 | (000000000300000003 ( ( ( The) ( ( battery) ( life))) ( ( ( has) ( not)) ( ( decreased) ( ( since) ( ( ( I)) ( ( bought) ( ( ( it)) ( ( ( so) ( I'm)) ( ( ( thrilled) ( ( with) ( ( that)))))))))))))) 134 | (300000000000000000 ( ( ( It's)) ( ( A) ( ( MAC))))) 135 | (300000000000000000 ( ( ( So) ( ( ( far)) ( ( ( I)) ( ( am) ( ( very) ( ( happy) ( ( with) ( ( this) ( computer))))))))))) 136 | (000000000001000001 ( ( ( ( The) ( reflectiveness)) ( ( of) ( ( the) ( display)))) ( ( is) ( ( ( only) ( ( a) ( ( minor) ( inconvenience)))) ( ( ( ( if) ( ( ( you)) ( ( ( work) ( ( in) ( ( a) ( ( (controlled) (lighting)) ( environment))))) ( ( like) ( ( ( me)) ( ( ( (I)) ( ( prefer) ( ( ( it)) ( ( dark))))))))))) ( or)) ( ( if) ( ( ( you)) ( ( can) ( ( ( crank) ( ( up))) ( ( the) ( brightness))))))))))) 137 | (300000000000000000 ( ( ( I)) ( ( Love) ( ( my) ( ( new) ( computer)))))) 138 | (000003000000000000 ( ( In) ( ( ( my) ( line)) ( ( of) ( ( ( work) ( ( ( ( ( I)) ( ( ( often)) ( ( have) ( ( ( to) ( ( take) ( ( work) ( home)))))))) ( and)) ( ( ( this)) ( ( makes) ( ( ( it)) ( ( so) ( easy)))))))))))) 139 | (300000000000000000 ( ( ( I)) ( ( like) ( ( the) ( ( laptop) ( overall)))))) 140 | (000200000000000000 ( ( ( I)) ( ( burned) ( ( my) ( ( ( leg) ( ( after) ( ( ( ( ( ( lifting) ( ( it))) ( ( from) ( ( my) ( desk)))) ( and)) ( ( ( for) ( ( ( less) ( ( than) ( 5))) ( second))) ( ( ( putting) ( ( it))) ( ( on) ( ( my) ( ( lap) ( ( ( to) ( ( ( clean) ( ( my) ( ( coffee) ( table)))) ( ( so) ( ( ( I)) ( ( can) ( ( place) ( ( it)))))))))))))))))) ( there)))))) 141 | (000030000000000000 ( ( If) ( ( ( you)) ( ( are) ( ( ( a) ( ( PC) ( user))) ( ( looking) ( ( ( to) ( ( convert) ( ( ( ( I)) ( ( ( would) ( ( HIGHLY))) ( ( recommend) ( ( it))))))))))))))) 142 | (220000000000000000 ( ( ( it)) ( ( ( ( was) ( ( slow))) ( and)) ( ( might) ( ( be) ( ( problematic))))))) 143 | (000100000000000000 ( ( ( It)) ( ( does) ( ( ( ( ( ( run) ( ( ( a) ( little)) ( warm))))) ( but)) ( ( ( that)) ( ( ( is) ( ( a) ( ( negligible) ( concern)))))))))) 144 | (003000000000000000 ( ( ( i)) ( ( ( love) ( ( ( the) ( size)) ( ( of) ( ( the) ( computer))))) ( ( since) ( ( ( i)) ( ( play) ( ( ( games)) ( ( on) ( ( it)))))))))) 145 | (120000010000000000 ( ( Although) ( ( ( ( ( it)) ( ( was) ( ( slow)))) ( but)) ( ( ( I)) ( ( felt) ( ( ( ( it)) ( ( was) ( ( ok) ( ( for) ( ( ( the) ( price)) ( ( ( ( you)) ( ( have) ( ( bought) ( ( it))))))))))))))))) 146 | (000000000000002002 ( ( ( The) ( ( only) ( downfall))) ( ( is) ( ( ( a) ( lot)) ( ( of) ( ( ( the) ( software)) ( ( ( ( ( ( I)) ( ( ( have) ( ( won't) ( work))) ( ( with) ( ( Mac))))) ( and)) ( ( ( iWork)) ( ( ( is) ( not)) ( ( worth) ( ( ( the) ( price)) ( ( of) ( ( it))))))))))))))) 147 | (000100000000000000 ( ( ( It)) ( ( ( super) ( ( shiny))) ( ( so) ( ( ( you)) ( ( can) ( ( see) ( ( the) ( ( fingerprints) ( easily)))))))))) 148 | (030000000000000000 ( ( ( I)) ( ( can) ( ( have) ( ( ( tabs)) ( ( ( open)) ( ( while) ( ( ( ( ( playing) ( ( YouTube) ( videos))) ( and)) ( ( it))) ( ( ( handles) ( ( it))) ( ( impressively) ( ( well)))))))))))) 149 | (000000000002000000 ( ( After) ( ( ( ( a) ( ( little) ( ( more) ( ( than) ( a))))) ( ( year))) ( ( of) ( ( ( owning) ( ( ( my) ( ( MacBook) ( Pro))) ( ( ( ( the) ( monitor)) ( ( ( has) ( ( completely))) ( ( died)))))))))))) 150 | (300000000100000000 ( ( ( ( still)) ( ( ( testing) ( ( the) ( ( battery) ( life)))) ( ( as) ( ( ( i)) ( ( ( ( thought) ( ( ( ( it)) ( ( would) ( ( be) ( ( better))))))) ( but)) ( ( am) ( ( very) ( ( happy) ( ( with) ( ( the) ( upgrade))))))))))))) 151 | (001000000010000000 ( ( ( ( Tiny) ( ( forgivable) ( drawback))) ( -)) ( ( no) ( ( ethernet) ( ( cable) ( outlet)))))) 152 | (020000000000000000 ( ( ( it)) ( ( has) ( ( ( times)) ( ( ( ( ( ( were) ( ( ( ( it)) ( ( freezes) ( ( for) ( ( 10) ( seconds))))))) ( and)) ( ( ( then)) ( ( starts) ( ( again))))))))))) 153 | (330000000000000000 ( ( ( I)) ( ( ( would) ( ( highly))) ( ( ( recommend) ( ( this) ( product))) ( ( to) ( ( ( anyone)) ( ( looking) ( ( for) ( ( a) ( ( top) ( ( performing) ( laptop)))))))))))) 154 | (000002000000000000 ( ( ( I)) ( ( ( had) ( ( ( a) ( ( USB) ( ( connect) ( ( but) ( ( i) ( can't)))))) ( ( use) ( ( it))))) ( ( because) ( ( ( it)) ( ( ( is) ( not)) ( ( compatible)))))))) 155 | (000000000000000010 ( ( But) ( ( ( the) ( ( screen) ( size))) ( ( ( is) ( not)) ( ( that) ( ( bad) ( ( for) ( ( email) ( ( and) ( ( web) ( browsing))))))))))) 156 | (020200000000000000 ( ( Unable) ( ( ( to) ( ( ( boot) ( ( up))) ( ( this) ( ( brand) ( ( new) ( laptop))))))))) 157 | (000000200000000000 ( ( ( Then)) ( ( ( they)) ( ( ( had) ( ( ( me)) ( ( ( jump) ( ( through) ( ( many) ( ( ( hoops) ( and)) ( questions))))) ( ( ( to) ( ( see))))))) ( ( if) ( ( ( they)) ( ( could) ( ( find) ( ( another) ( ( way) ( ( ( to) ( ( invalidate) ( ( me))))))))))))))) 158 | (200000000000000000 ( ( ( I'm) ( ( ( warning) ( ( ( you) ( You're)) ( ( ( wasting) ( ( your) ( money))) ( ( on) ( ( this)))))))))) 159 | (000000300000000000 ( ( ( I've)) ( ( ( had) ( ( ( to) ( ( call) ( ( ( Apple)) ( ( ( ( support) ( ( ( to) ( ( ( set) ( ( up))) ( ( my) ( ( new) ( printer))))))) ( and)) ( ( have) ( ( ( had) ( ( wonderful) ( experiences))) ( ( with) ( ( ( helpful) ( ( english) ( ( speaking) ( ( (from) ( ( Vancouver)) ( techs)))))) ( ( ( that)) ( ( ( ( walked) ( ( me))) ( ( through) ( ( the) ( processes)))))))))))))))) ( ( ( to) ( ( help) ( ( me)))))))) 160 | (003000000000000000 ( ( ( lots)) ( ( of) ( ( preloaded) ( software))))) 161 | (000000000000000000 ( ( ( I)) ( ( feel) ( ( ( ( that) ( ( ( enough) ( people)) ( ( ( have) ( ( Macs))) ( ( these) ( days))))) ( and)) ( ( that) ( ( ( companies)) ( ( need) ( ( ( to) ( ( start) ( ( ( ( making) ( ( ( things)) ( ( more) ( compatable)))) ( ( than) ( ( ( they)) ( ( used) ( ( ( to) ( ( be))))))))))))))))))) 162 | (000200000000000000 ( ( ( got)) ( ( ( ( another) ( one)) ( and)) ( ( same) ( issue))))) 163 | (000000000000000002 ( ( ( Later) ( it)) ( ( held) ( ( ( ( ( ( zero) ( charge)) ( and)) ( ( its) ( replacement))) ( ( worked) ( ( for) ( ( ( less) ( ( than) ( three))) ( months))))))))) 164 | (000000000002000002 ( ( ( Three) ( weeks)) ( ( after) ( ( ( I)) ( ( bought) ( ( ( the) ( netbook)) ( ( ( ( the) ( screen)) ( ( quit) ( ( working))))))))))) 165 | (000000000000000000 ( ( ( I)) ( ( ( shopped) ( ( around))) ( ( before) ( ( buying)))))) 166 | (300000000000000000 ( ( ( This) ( laptop)) ( ( is) ( ( nice))))) 167 | (000000000000000000 ( ( ( I)) ( ( can't) ( ( imagine) ( ( ( EVER)) ( ( ( buying) ( ( a) ( PC))) ( ( again)))))))) 168 | (000000000000000000 ( ( ( I)) ( ( have) ( ( ( ( had) ( ( no) ( problems))) ( ( with) ( ( it)))) ( ( unlike) ( ( ( some) ( ( hardware) ( defects))) ( ( on) ( ( past) ( models))))))))) 169 | (000000000200000000 ( ( ( I)) ( ( know) ( ( ( what)) ( ( ( ( 7) ( hrs)) ( ( of) ( ( battery)))) ( ( looks) ( ( like)))))))) 170 | (030003000030000000 ( ( ( I)) ( ( had) ( ( ( ( my) ( ( IWORKS) ( ( Itunes) ( ( Email) ( ( MS) ( ( Office) ( network))))))) ( and)) ( ( ( printers)) ( ( set) ( ( ( ( ( up) ( and)) ( completely)) ( ( ( working) ( ( perfectly))) ( ( within) ( ( an) ( hour)))))))))))) 171 | (000000200000000000 ( ( ( Yet) ( ( HP) ( won't))) ( ( do) ( ( ( anything)) ( ( about) ( ( the) ( problem))))))) 172 | (000200010000000000 ( ( ( A) ( ( cheaper) ( price))) ( ( ( should) ( not)) ( ( equal) ( ( a) ( ( cheap) ( product))))))) 173 | (300000000000000000 ( ( ( I)) ( ( would) ( ( like) ( ( ( to) ( ( ( tell) ( ( you))) ( ( about) ( ( ( the) ( ( best) ( laptop))) ( ( ( ( I)) ( ( ( just)) ( ( got) ( ( from) ( ( Mac)))))))))))))))) 174 | (000200000000000000 ( ( ( What)) ( ( a) ( lemon)))) 175 | (000000000300000001 ( ( ( ( ( ( ( I)) ( ( did) ( ( have) ( ( ( to) ( ( replace) ( ( the) ( ( battery) ( once))))))))) ( but)) ( ( ( that)) ( ( was) ( ( ( ( only) ( ( a) ( couple))) ( months)) ( ago))))) ( and)) ( ( ( ( it's)) ( ( been) ( ( working) ( ( perfect))))) ( ( ( ever)) ( ( since)))))) 176 | (030000000000000000 ( ( ( It)) ( ( is) ( ( ( ( ( super) ( fast)) ( and)) ( ( always))) ( ( loads)))))) 177 | (000000200000000000 ( ( ( The) ( rep)) ( ( ( ( did) ( not)) ( ( even))) ( ( ( answer) ( ( my) ( question))) ( ( ( ( ( ( I)) ( ( had) ( ( ( to) ( ( ( ask) ( ( him))) ( ( if) ( ( ( he)) ( ( understood) ( ( ( what)) ( ( ( I)) ( ( ask))))))))))))) ( or)) ( ( if) ( ( ( he)) ( ( ( spoke) ( ( english))) ( ( because) ( ( ( he)) ( ( ( didn't) ( even)) ( ( try) ( ( ( to) ( ( acknowledge) ( ( my) ( question))))))))))))))))) 178 | (300000000000000000 ( ( ( five)) ( ( stars)))) 179 | (000000000000000000 ( ( ( I)) ( ( use) ( ( ( the) ( computer)) ( ( ( ( ( to) ( ( ( basically)) ( ( ( check) ( ( emails) ( surf))) ( ( the) ( ( web) ( ( print) ( coupons)))))))) ( and)) ( ( for) ( ( my) ( ( college) ( papers))))))))) 180 | (000000000000000000 ( ( ( I)) ( ( like) ( ( ( those) ( programs)) ( ( better) ( ( than) ( ( ( ( Office) ( and)) ( you)) ( ( can) ( ( ( save) ( ( your) ( files))) ( ( ( to) ( ( ( be) ( ( completely) ( ( compatible) ( ( with) ( ( the) ( ( Office) ( programs))))))) ( ( as) ( ( well))))))))))))))) 181 | (000000000000000003 ( ( ( ( ( ( The) ( ( retina) ( screen))) ( ( is) ( ( absolutely) ( beautiful)))) ( and)) ( ( ( the) ( touchpad)) ( ( is) ( ( ( the) ( best)) ( ( touchpad) ( ( to) ( ( date)))))))))) 182 | (003000030000000000 ( ( ( ( The) ( ( best) ( thing))) ( ( about) ( ( this) ( laptop)))) ( ( ( is) ( ( ( the) ( price)) ( along))) ( ( with) ( ( ( some)) ( ( of) ( ( the) ( ( newer) ( features))))))))) 183 | (000000003000000000 ( ( ( I)) ( ( ( will) ( ( only))) ( ( ( buy) ( ( apple) ( laptops))) ( ( from) ( ( now) ( on))))))) 184 | (020200000000000000 ( ( ( ( ( IT)) ( ( ( DOES) ( ( NOT) ( TURN))) ( ( ON)))) ( -)) ( ( ( IF) ( ( ( I)) ( ( TAKE) ( ( THE) ( ( BATTERY) ( OUT)))))) ( ( ( IT)) ( ( MIGHT) ( ( ( WORK) ( NOT)) ( ( ( SURE)) ( ( IF) ( ( ( IT'S) ( ( A) ( ( BAD) ( ( BATTERY) ( ( OR) ( COMPUTER))))))))))))))) 185 | (300000000000000000 ( ( ( Worth)) ( ( ( ( the) ( investment)) ( and)) ( ( ( truly) ( ( a) ( ( fine) ( piece)))) ( ( of) ( ( equipment))))))) 186 | (000000000000000000 ( ( ( ( The) ( feel)) ( ( of) ( ( ( this) ( machine)) ( ( compared) ( ( to) ( ( the) ( ( old) ( MacBook)))))))) ( ( is) ( ( far) ( superior))))) 187 | (000000000000000000 ( ( ( What)) ( ( ( can) ( ( I))) ( ( say))))) 188 | (000000000000000000 ( ( ( I)) ( ( ( now)) ( ( travel) ( ( with) ( ( ( ( this) ( laptop)) ( and)) ( ( my) ( ( work) ( PC))))))))) 189 | (000030000000000000 ( ( ( ( Does) ( ( a) ( ( great) ( job)))) ( ( with) ( ( ( video) ( shot)) ( ( on) ( ( a) ( Canon)))))) ( ( 5D) ( MKII)))) 190 | (000000000000000003 ( ( ( I)) ( ( loaded) ( ( ( ( ( ( windows)) ( ( ( 7)) ( ( via) ( ( Bootcamp))))) ( and)) ( ( ( it)) ( ( works) ( ( flawlessly))))))))) 191 | (000000000000000000 ( ( ( ( ( Pay) ( ( attention))) ( ( to) ( ( the) ( specs)))) ( ( if) ( ( ( you)) ( ( want) ( ( these) ( options)))))))) 192 | (002000000020000000 ( ( but) ( ( ( it)) ( ( doesn't) ( ( have) ( ( ( ( a) ( ( cd) ( unit))) ( ( anyway))) ( ( ( ( the) ( ( other) ( thing))) ( ( is) ( ( that) ( ( ( the) ( laptop)) ( ( ( does) ( not)) ( ( have) ( ( ( an) ( ( ethernet) ( port))) ( ( for) ( ( cable) ( connecting))))))))))))))))) 193 | (000000002000000000 ( ( ( I)) ( ( ( would) ( rather)) ( ( ( spend) ( ( my) ( money))) ( ( on) ( ( ( a) ( computer)) ( ( ( that)) ( ( ( ( costs) ( ( more))) ( ( ( then) ( ( a) ( Toshiba))) ( ( ( that)) ( ( ( ( isn't) ( ( good))) ( ( at) ( ( all)))))))))))))))) 194 | (000000000000000000 ( ( After) ( ( ( doing) ( ( ( CAD)) ( ( ( ( ( work) ( ( all) ( day))) ( ( at) ( ( ( work)) ( ( using) ( ( ( a) ( ( higher) ( ( end) ( PC)))) ( ( ( ( I)) ( ( couldn't) ( ( come) ( ( home))))))))))) ( and)) ( ( settle) ( ( for) ( ( ( the) ( use)) ( ( of) ( ( a) ( ( lower) ( ( end) ( computer)))))))))))))) 195 | (000000000000000002 ( ( After) ( ( ( the) ( warrenty)) ( ( expired) ( ( ( ( ( ( the) ( ( hard) ( drive))) ( ( went) ( ( bad)))) ( and)) ( ( ( it)) ( ( would) ( ( have) ( ( ( cost) ( ( more))) ( ( ( to) ( ( ( fix) ( ( then))) ( ( to) ( ( replace)))))))))))))))) 196 | (000000000000000000 ( ( Although) ( ( ( I)) ( ( ( opted) ( ( for) ( ( the) ( ( lowest) ( end))))) ( ( ( MacBook) ( Pro)) ( ( ( ( this) ( thing)) ( ( holds) ( ( its) ( own)))))))))) 197 | (000000000000000000 ( ( ( It)) ( ( ( took) ( ( me))) ( ( ( ( ( ( a) ( ( while) ( top))) ( ( ( get) ( ( away))) ( ( from) ( ( ( the) ( land)) ( ( of) ( ( PCs)))))))) ( but)) ( ( ( now)) ( ( that) ( ( ( I)) ( ( have) ( ( ( I)) ( ( ( can't)) ( ( ( see) ( ( ( myself)) ( ( ( going) ( ( back))) ( ( to) ( ( it))))))))))))))))) 198 | (000000000000000002 ( ( ( Oh) ( ( yeah) ( don't))) ( ( ( forget) ( ( the) ( ( expensive) ( shipping)))) ( ( ( ( to) ( and)) ( from)) ( ( HP)))))) 199 | -------------------------------------------------------------------------------- /trees/test.txt: -------------------------------------------------------------------------------- 1 | (030300003000000000 ( ( ( Apple)) ( ( is) ( ( unrivaled) ( ( in) ( ( ( terms)) ( ( of) ( ( ( build) ( ( ( quality) ( and)) ( functionality))))))))))) 2 | (003003000000000000 ( ( ( ( It's)) ( ( ( light) ( and)) ( easy))) ( ( to) ( ( use) ( though))))) 3 | (000000000000000000 ( ( ( My) ( ( last) ( computer))) ( ( ( ( ( a) ( ( Toshiba) ( cost))) ( ( only) ( ( $400)))) ( and)) ( ( worked) ( ( like) ( ( ( a) ( charm)) ( ( for) ( ( many) ( years))))))))) 4 | (000300000000000000 ( ( ( The) ( ( computer) ( ( ( ( itself)) ( ( ( ( runs) ( ( very) ( quiet))) ( and)) ( ( is) ( ( mostly) ( ( cool) ( ( to) ( ( the) ( touch))))))))))))) 5 | (002000000000000000 ( ( Once) ( ( ( open) ( ( ( ( the) ( ( leading) ( edge))) ( ( is) ( ( razor) ( sharp))))))))) 6 | (000000000000000000 ( ( ( Unfortunately) ( ( that) ( ( ( ( is) ( not)) ( ( the) ( case)))))))) 7 | (300000000000000000 ( ( ( It's)) ( ( an) ( ( amazing) ( laptop))))) 8 | (330000000000000000 ( ( ( ( I'm) ( ( very) ( happy))) ( ( with) ( ( ( ( ( it)) ( ( ( ( typing) ( ( on))) ( ( it))) ( ( right) ( now)))) ( and)) ( ( ( it)) ( ( ( is) ( ( fast) ( enough))) ( ( for) ( ( that)))))))))) 9 | (020000000000000000 ( ( ( it)) ( ( ( cant) ( ( fuction))) ( ( well) ( ( with) ( ( ( lots)) ( ( of) ( ( ( webpages)) ( ( open) ( ( at) ( ( once)))))))))))) 10 | (000003000000000000 ( ( ( The) ( ( online) ( ( tutorial) ( videos)))) ( ( make) ( ( ( ( it)) ( ( super) ( ( easy) ( ( ( to) ( ( learn) ( ( if) ( ( ( you)) ( ( ( have) ( ( always))) ( ( used) ( ( a) ( PC)))))))))))))))) 11 | (000000000000000002 ( ( ( Windows)) ( ( runs) ( ( very) ( poorly))))) 12 | (200000000000000000 ( ( ( ( The) ( problem)) ( ( ( ( I)) ( ( had) ( ( with) ( ( this) ( unit))))))) ( ( was) ( ( unresolvable))))) 13 | (000000000000300020 ( ( ( ( Small) ( screen)) ( ( ( ( somewhat) ( limiting)) ( but)) ( ( great)))) ( ( for) ( ( travel))))) 14 | (300000000000000000 ( ( ( I)) ( ( can) ( ( appreciate) ( ( ( why)) ( ( ( she)) ( ( recommended) ( ( it))))))))) 15 | (330000010000000000 ( ( ( ( It's) ( ( super) ( ( fast) ( ( and) ( ( a) ( ( great) ( value))))))) ( ( for) ( ( the) ( price)))))) 16 | (000000000000000002 ( ( ( The) ( ( hard) ( drive))) ( ( crashed) ( ( as) ( ( ( ( well) ( and)) ( I)) ( ( had) ( ( ( to) ( ( buy) ( ( a) ( ( new) ( ( power) ( cord))))))))))))) 17 | (002000000020000000 ( ( No) ( ( ethernet) ( outlet)))) 18 | (000000000000000000 ( ( ( I)) ( ( ( just) ( recently)) ( ( had) ( ( ( to) ( ( ( ( ship) ( ( my) ( laptop))) ( ( back) ( ( to) ( ( HP))))) ( ( for) ( ( repair)))))))))) 19 | (000200000000000000 ( ( ( Also) ( ( ( ( I)) ( ( ( have) ( ( ( alot)) ( ( of) ( ( trouble))))) ( ( with) ( ( ( it)) ( ( ( ( ( getting) ( ( very) ( hot))) ( and)) ( not)) ( ( ( even)) ( ( ( sitting) ( ( on) ( ( anything)))) ( ( ( to) ( ( make) ( ( it)))))))))))))) ( ( hot)))) 20 | (000000300000000000 ( ( ( ( One)) ( ( of) ( ( them)))) ( ( seems) ( ( ( to) ( ( have) ( ( worked)))))))) 21 | (000020000000000000 ( ( ( I)) ( ( ( will) ( ( NEVER))) ( ( buy) ( ( ( (Refurbished)) ( again)) ( ( ( ( I)) ( ( ( don't) ( ( care))) ( ( ( how) ( ( cheap))) ( ( ( it)) ( ( is)))))))))))) 22 | (020200000000000000 ( ( ( With) ( ( in) ( ( ( weeks)) ( ( of) ( ( purchasing)))))) ( ( ( my) ( computer)) ( ( is) ( ( began) ( ( ( to) ( ( slow) ( ( down)))))))))) 23 | (000200020000000000 ( ( ( I)) ( ( ( spent) ( ( 2200) ( dollars))) ( ( on) ( ( ( a) ( top)) ( ( of) ( ( the) ( ( line) ( laptop))))))))) 24 | (200000000000000000 ( ( ( not) ( ( a) ( ( good) ( computer)))) ( ( at) ( ( all))))) 25 | (000000000000000003 ( ( ( The) ( ( ( keyboard) ( and)) ( sound))) ( ( are) ( ( ( ( great)) ( and)) ( ( the) ( ( matte) ( ( screen) ( ( works) ( well))))))))) 26 | (003003000000300000 ( ( ( ( It's)) ( ( easy) ( ( ( to) ( ( ( ( operate) ( and)) ( it's)) ( ( ( very) ( light)) ( ( (my) ( parents)))))))) ( ( are) ( ( ( almost) ( ( 60) ( yo))) ( ( ( ( they)) ( ( can't) ( ( ( carry) ( ( a) ( ( heavy) ( computer)))) ( ( while) ( ( traveling)))))))))))) 27 | (000000000000030001 ( ( ( Windows) ( ( 7) ( Starter))) ( ( is) ( ( ( terrific) ( (no)) ( ( ( ( ( ( you)) ( ( can't) ( ( change) ( ( the) ( background)))))) ( but)) ( ( ( I)) ( ( don't) ( ( ( ( need)) ( ( to) ( ( ( I)) ( ( ( ( use) ( ( it))) ( ( just))) ( ( for) ( ( school) ( work)))))))))))))))) 28 | (300000003000000000 ( ( ( ( ( It's) ( great)) ( and)) ( ( we))) ( ( ( will) ( ( always))) ( ( stick) ( ( with) ( ( ( Apple) ( computers)) ( ( ( ( we)) ( ( have) ( ( ( been) ( ( so) ( happy))) ( ( with) ( ( them))))))))))))) 29 | (030000000003000000 ( ( ( Fast) ( great)) ( visual))) 30 | (030030000000000000 ( ( ( The) ( Macbook)) ( ( ( ( arrived) ( ( in) ( ( a) ( ( nice) ( ( twin) ( packing)))))) ( and)) ( ( sealed) ( ( in) ( ( ( the) ( box)) ( ( ( ( all) ( ( the) ( functions))) ( ( works) ( ( great))))))))))) 31 | (300000010000000000 ( ( ( A) ( ( good) ( value))) ( ( for) ( ( the) ( money))))) 32 | (300003000000000003 ( ( ( Overall)) ( ( the) ( ( computer) ( ( ( ( ( is) ( ( very) ( easy))) ( ( ( to) ( ( use) ( ( ( ( the) ( screen)) ( ( ( is) ( ( perfect) ( great))) ( ( ( computer) ( ( my) ( ( daughter) ( loves)))))))))))))))))) 33 | (300000000000000000 ( ( ( This) ( laptop)) ( ( is) ( ( amazing))))) 34 | (020000000000000001 ( ( Even) ( ( for) ( ( ( a) ( ( (4) (GB)) ( RAM))) ( ( ( ( it)) ( ( ( barely)) ( ( chugs) ( ( with) ( ( 3) ( ( tabs) ( open)))))))))))) 35 | (000000000000000000 ( ( So) ( ( ( think) ( ( about) ( ( factoring)))) ( ( ( those) ( things)) ( ( in) ( ( ( when)) ( ( ( you)) ( ( purchase))))))))) 36 | (020000000000000002 ( ( ( It)) ( ( ( was) ( ( slow))) ( ( ( ( ( locked) ( ( up))) ( and)) ( ( also))) ( ( had) ( ( ( hardware)) ( ( replaced) ( ( after) ( ( ( only) ( 2)) ( months)))))))))) 37 | (000000000000000002 ( ( ( It)) ( ( gets) ( ( ( ( stuck) ( ( ( ( ( all)) ( ( of) ( ( the) ( time)))) ( ( ( ( ( you)) ( ( use) ( ( it)))) ( and)) ( ( ( you)) ( ( ( have) ( ( ( to) ( ( keep) ( ( ( tapping) ( ( on) ( ( it))))))))) ( ( ( to) ( ( ( get) ( ( it))) ( ( to) ( ( work))))))))))))))))) 38 | (200000000000000000 ( ( ( All)) ( ( in) ( ( ( all)) ( ( ( ( I)) ( ( wish) ( ( ( ( I)) ( ( had) ( ( waited) ( ( a) ( bit))))))))))))) 39 | (000000000000000002 ( ( defective) ( software))) 40 | (200000000000000000 ( ( ( It)) ( ( ( is) ( ( the) ( ( worst) ( laptop)))) ( ( ever))))) 41 | (000000000000000000 ( ( ( Yes) ( ( ( ( I)) ( ( ( have) ( ( it))) ( ( on) ( ( the) ( ( ( highest) ( available)) ( setting)))))))))) 42 | (200000002000000000 ( ( ( I)) ( ( ( ( would) ( ( love) ( ( ( to) ( ( keep) ( ( this) ( laptop))))))) ( but)) ( ( will) ( ( be) ( ( ( ( ( sending) ( ( it))) ( ( back))) ( and)) ( ( looking) ( ( for) ( ( a) ( ( different) ( brand))))))))))) 43 | (300000020000000000 ( ( ( I)) ( ( ( really)) ( ( like) ( ( ( the) ( ( Mac) ( ( (15.4) (inch)) ( Notebook)))) ( ( but) ( ( its) ( ( very) ( pricey))))))))) 44 | (000000000000033000 ( ( ( I)) ( ( love) ( ( ( ( the) ( ( operating) ( system))) ( and)) ( ( the) ( ( preloaded) ( software))))))) 45 | (020000000000000000 ( ( ( ( ( Locks) ( ( up))) ( ( she))) ( ( ( searching) ( ( for) ( ( updates.)))))))) 46 | (000000000000000000 ( ( ( I)) ( ( ( use) ( ( it))) ( ( for) ( ( basic) ( ( web) ( ( browsing) ( ( and) ( ( word) ( processing)))))))))) 47 | (030000000000000000 ( ( ( The) ( macbook)) ( ( ( rarely)) ( ( requires) ( ( a) ( ( hard) ( reboot))))))) 48 | (030000000000000000 ( ( ( The) ( performance)) ( ( is) ( ( awesome))))) 49 | (000000000200000002 ( ( After) ( ( ( replacing) ( ( ( the) ( ( hard) ( drive))) ( ( ( ( the) ( battery)) ( ( stopped) ( ( ( working) ( ( ( ( (3) ( months)) ( ( of) ( ( use))))) ( ( ( which)) ( ( ( was) ( ( frustrating)))))))))))))))) 50 | (300000030000000000 ( ( ( It's)) ( ( ( a) ( ( great) ( product))) ( ( for) ( ( a) ( ( great) ( price))))))) 51 | (300000000000000000 ( ( ( This) ( MacBook)) ( ( is) ( ( ( an) ( ( outstanding) ( product))) ( ( with) ( ( great) ( value))))))) 52 | (000003000000000000 ( ( ( ( It's)) ( ( been) ( ( ( a) ( ( ( very) ( easy)) ( transition))) ( ( moving) ( ( my) ( Windows)))))) ( ( ( ( created) ( ( files))) ( ( over))) ( ( to) ( ( the) ( Mac)))))) 53 | (000000000000000000 ( ( ( I've)) ( ( ( owned) ( ( ( ( every) ( ( Pro) ( ( model) ( ( Apple) ( laptop))))) ( ( for) ( ( the) ( ( last) ( ( 8) ( years)))))) ( ( ( ( this)) ( ( is) ( ( BY) ( FAR))))))) ( ( ( the) ( ( WORST) ( ( one) ( I've)))) ( ( ever) ( had)))))) 54 | (300000000000000000 ( ( ( So) ( ( far) ( ( a) ( ( great) ( product))))))) 55 | (000000002000000000 ( ( ( ( ( ( Seriously)) ( ( ( save) ( ( yourself))) ( ( the) ( hassle)))) ( and)) ( ( purchase) ( ( from) ( ( a) ( ( different) ( company)))))))) 56 | (000000000000000002 ( ( ( No) ( bass)) ( ( ( sound)) ( ( at) ( ( all)))))) 57 | (000000000000000002 ( ( ( It)) ( ( ( was) ( not)) ( ( ( responsive) ( ( at) ( all))) ( ( to) ( ( touch))))))) 58 | (000000200200000000 ( ( ( ( ( ( They)) ( ( ( ( ( gave) ( ( me))) ( ( a) ( ( hard) ( time)))) ( yet)) ( ( again)))) ( but)) ( ( ( their)) ( ( was) ( ( ( a) ( malfunction)) ( ( in) ( ( the) ( battery))))))) ( ( ( itself) ( ( it))) ( ( didn't) ( die))))) 59 | (000000000020000000 ( ( ( ( Web) ( ( access))) ( ( through) ( ( ( ( ( the) ( ( 3G) ( network))) ( ( ( ( ( is) ( ( so) ( ( slow) ( it's)))) ( ( very) ( frustrating)))))) ( and)) ( ( VERY) ( DISAPPOINTING))))))) 60 | (000000000000000002 ( ( ( ( ( the) ( ( mouse) ( pad))) ( and)) ( ( buttons))) ( ( are) ( ( ( the) ( ( worst) ( i've))) ( ( ever) ( seen)))))) 61 | (300000000000000000 ( ( Waited) ( ( on) ( ( ( ( getting) ( ( this) ( computer))) ( ( but) ( ( ( it)) ( ( has) ( ( been) ( ( a) ( ( great) ( change)))))))))))) 62 | (000030000000000000 ( ( ( I)) ( ( am) ( ( able) ( ( ( to) ( ( play) ( ( ( ( 720p) ( ( and) ( ( 1080p) ( media)))) ( ( files) ( ( just) ( ( fine) ( ( with) ( ( it))))))))))))))) 63 | (000000000000000002 ( ( ( I)) ( ( hate) ( ( ( ( ( ( the) ( ( display) ( screen))) ( and)) ( ( I))) ( ( have) ( ( done) ( ( ( everything)) ( ( ( ( I)) ( ( could) ( ( do) ( ( the) ( ( change) ( it.))))))))))))))) 64 | (000000000000000000 ( ( ( Hope) ( ( ( ( this)) ( ( helped))))))) 65 | (000000002000000000 ( ( ( Guess) ( ( ( I'll)) ( ( ( stay) ( ( away))) ( ( from) ( ( HP)))))))) 66 | (000000000300000000 ( ( ( I)) ( ( ( can) ( ( easily))) ( ( ( ( get) ( ( 10) ( hours))) ( ( out))) ( ( of) ( ( a) ( ( full) ( charge)))))))) 67 | (000000000000000000 ( ( ( This)) ( ( is) ( ( my) ( ( second) ( MacBook)))))) 68 | (002000000000000000 ( ( ( The) ( cords)) ( ( ( always)) ( ( feel) ( ( like) ( ( ( they)) ( ( are) ( ( in) ( ( my) ( way)))))))))) 69 | (000000000000000000 ( ( ( I)) ( ( ( bought) ( ( this) ( laptop))) ( ( in) ( ( November) ( 2013)))))) 70 | (000010000000000000 ( ( ( Probably)) ( ( ( not) ( ( a) ( ( gaming) ( machine)))) ( ( ( which)) ( ( ( I)) ( ( have) ( ( zero) ( ( interest) ( in))))))))) 71 | (000000000000000002 ( ( ( The) ( ( processor) ( ( ( ( ( a) ( ( AMD) ( Semprom))) ( ( at) ( ( 2.1) ( ghz)))) ( ( is) ( ( ( a) ( bummer)) ( ( ( ( it)) ( ( ( does) ( not)) ( ( have) ( ( ( the) ( power)) ( ( for) ( ( ( ( HD)) ( or)) ( ( heavy) ( computing))))))))))))))))) 72 | (002000000000002000 ( ( ( Only) ( downfall)) ( ( is) ( ( ( ( the) ( ( preloaded) ( McAfee))) ( and)) ( ( other) ( software)))))) 73 | (003300030000000000 ( ( ( I'ts)) ( ( nice) ( ( ( to) ( ( ( have) ( ( the) ( ( (higher) (end)) ( laptops)))) ( ( but) ( ( ( this)) ( ( fits) ( ( ( ( my) ( budget)) ( and)) ( ( the) ( ( features) ( ( I) ( need)))))))))))))) 74 | (000030000000000000 ( ( ( It)) ( ( works) ( ( ( ( great) ( ( for) ( ( general) ( ( internet) ( ( use) ( ( Microsoft) ( ( Office) ( apps)))))))) ( ( home) ( bookkeeping))) ( ( etc)))))) 75 | (300000003000000000 ( ( ( I)) ( ( love) ( ( ( ( HP)) ( ( it's) ( ( ( the) ( ( only) ( (computer) (printer)))) ( ( ( ( we)) ( ( will) ( ( buy)))))))))))) 76 | (003000000000000000 ( ( ( This) ( computer)) ( ( had) ( ( ( exactly) ( ( the) ( specifications))) ( ( ( ( I)) ( ( needed)))))))) 77 | (000000000000000002 ( ( ( ANd) ( ( ( ( I)) ( ( ( ( ( babyed) ( ( ( the) ( heck)) ( ( out) ( ( of) ( ( it)))))) ( ( just))) ( ( one) ( day))) ( ( ( when)) ( ( ( i)) ( ( opened) ( ( ( ( it)) ( ( turned) ( ( ( ( ( ( it)) ( ( ( on)) ( ( went) ( ( ( to) ( ( click))))))) ( and)) ( ( ( it)) ( ( was) ( ( broke)))))))))))))))))) 78 | (030000000000000000 ( ( ( Plain) ( ( and) ( ( simple) ( it(laptop))))) ( ( runs) ( ( great) ( ( and) ( ( loads) ( fast))))))) 79 | (000000000000000000 ( ( ( Before) ( ( i))) ( ( ( bought)) ( ( ( ( my) ( ( new) ( i5))) ( ( ( ( I)) ( ( ( ( ( did) ( ( my) ( research))) ( ( for) ( ( ( about) ( 2)) ( weeks)))) ( and)) ( ( determined) ( ( ( to) ( ( ( move) ( ( for) ( ( HP)))) ( ( to) ( ( Apple))))))))))) ( ( for) ( ( ( ( reliability) ( dependable)) ( and)) ( ( long) ( ( lasting) ( operations))))))))) 80 | (000000000030000030 ( ( But) ( ( ( ( with) ( ( A) ( ( WAY) ( ( Bigger) ( Screen))))) ( and)) ( ( IS) ( ( able) ( ( ( to) ( ( connect) ( ( to) ( ( an) ( HDMI))))))))))) 81 | (200000000000000000 ( ( If) ( ( ( you)) ( ( ( ( shop) ( ( around))) ( ( in) ( ( the) ( ( current) ( market))))) ( ( ( ( you)) ( ( can) ( ( find) ( ( a) ( ( ( much) ( better)) ( deal))))))))))) 82 | (000000000200000000 ( ( ( I)) ( ( ( challenge) ( ( anyone))) ( ( ( to) ( ( ( show) ( ( proof))) ( ( that) ( ( ( ( through) ( anywhere)) ( ( near) ( ( normal) ( use)))) ( ( can) ( ( ( ( get) ( ( ( more) ( ( than) ( 2.5))) ( hrs))) ( ( out))) ( ( of) ( ( it))))))))))))) 83 | (000000000030000000 ( ( ( The) ( ( internet) ( capabilities))) ( ( ( ( ( are) ( ( also))) ( ( very) ( strong))) ( and)) ( ( ( picks) ( ( up))) ( ( ( signals)) ( ( very) ( easily))))))) 84 | (003003000000300000 ( ( ( Comfterbale) ( ( ( to) ( ( use) ( ( ( light)) ( ( easy) ( ( to) ( ( transport))))))))))) 85 | (030003000000000000 ( ( ( fast)) ( ( easy)))) 86 | (000000300000000000 ( ( ( All) ( ( apple) ( associates))) ( ( ( are) ( ( always))) ( ( wiling) ( ( ( to) ( ( ( ( help) ( ( you))) ( ( out))) ( ( with) ( ( ( anything) ( ( no) ( ( matter) ( ( ( ( ( when)) ( ( ( you)) ( ( purchased) ( ( the) ( computer))))) ( and)) ( ( ( how) ( many)) ( ( ( years)) ( ( passed))))))))))))))))) 87 | (300000003000000000 ( ( ( ( Thank) ( ( you))) ( ( for) ( ( your) ( ( great) ( product))))))) 88 | (000000000000000000 ( ( ( Dells)) ( ( are) ( ( ( ok) ( ( HPs) ( aren't))) ( ( ( that)) ( ( ( good) ( ( but) ( ( ( Macs) ( or)) ( Fantastic)))))))))) 89 | (000000000000000003 ( ( ( iPhotos)) ( ( is) ( ( ( an) ( ( excellent) ( program))) ( ( for) ( ( ( ( ( storing) ( and)) ( organizing)) ( ( photos))))))))) 90 | (000000100000000002 ( ( ( In) ( ( ( two) ( months)) ( ( both)))) ( ( ( the) ( ( power) ( ( cord) ( pin)))) ( ( broke) ( ( ( ( (the) ( company)) ( ( ( ( replaced) ( ( it)))) ( and)) ( ( ( ( ( then)) ( ( the) ( ( CD) ( drive)))) ( literally)) ( ( ( jumped) ( ( out))) ( ( of) ( ( ( the) ( laptop)) ( ( ( ( unannounced) ( and)) ( shattered)) ( ( into) ( ( a) ( ( million) ( pieces)))))))))))))))) 91 | (000200000000000000 ( ( ( ( this) ( one)) ( ( in) ( ( my) ( opinion)))) ( ( might) ( ( be) ( ( a) ( lemon)))))) 92 | (000000000000000002 ( ( ( ( Then) ( ( within) ( ( 5)))) ( ( months))) ( ( ( the) ( charger)) ( ( ( crapped) ( ( out))) ( ( on) ( ( me))))))) 93 | (300000000000000000 ( ( great) ( product))) 94 | (000030000000000000 ( ( ( This) ( computer)) ( ( is) ( ( great) ( ( for) ( ( ( ( ( someone)) ( ( ( who)) ( ( ( is) ( ( looking) ( ( ( to) ( ( manage) ( ( their) ( ( online) ( ( life(banling) ( ( facebook) ( etc)))))))))))))) ( and)) ( ( ( some) ( ( basic) ( ( offline) ( work)))) ( ( using) ( ( MS) ( Office)))))))))) 95 | (000000000000000002 ( ( ( Sounds) ( ( like) ( ( a) ( washer)))))) 96 | (000000000000000000 ( ( ( I)) ( ( paid) ( ( for) ( ( ( ( ( ( extra) ( memory)) ( and)) ( ( the) ( ( (17)(inch)) ( screen)))) ( ( as) ( ( well) ( as)))) ( ( ( the) ( top)) ( ( of) ( ( the) ( ( line) ( ( DVD) ( ( and) ( ( CD) ( burners))))))))))))) 97 | (300000000000000000 ( ( ( I)) ( ( like) ( ( ( everything)) ( ( about) ( ( this) ( laptop))))))) 98 | (000000000000000000 ( ( ( ( ( The) ( ( quality) ( ( engineering) ( design)))) ( and)) ( ( warranty))) ( ( are) ( ( ( (superior) (covers)) ( damage)) ( ( from) ( ( ( dropping) ( ( the) ( laptop))))))))) 99 | (000000020000000000 ( ( ( But) ( ( like) ( ( ( I)) ( ( said) ( ( ( before) ( ( ( the) ( ( only) ( reason))) ( ( ( ( I)) ( ( ( don't) ( ( currently))) ( ( have) ( ( ( a) ( ( Mac) ( laptop))) ( ( is) ( ( because) ( ( ( ( all)) ( ( of) ( ( their) ( laptops)))) ( ( are) ( ( too) ( pricey)))))))))))))))))))) 100 | (030000030000000000 ( ( ( Excellent) ( performance)) ( ( ( especially)) ( ( given) ( ( its) ( ( price) ( point))))))) 101 | (000000000000000000 ( ( ( The) ( applications)) ( ( ( are) ( ( also))) ( ( very) ( ( ( easy) ( ( ( to) ( ( ( ( find)) ( and)) ( ( ( maneuver) ( ( much) ( easier))) ( ( than) ( ( any) ( ( other) ( computer))))))))) ( ( ( ( I)) ( ( ( have) ( ( ever))) ( ( owned)))))))))) 102 | (120000010000000000 ( ( Although) ( ( ( ( ( it)) ( ( was) ( ( slow)))) ( but)) ( ( ( I)) ( ( felt) ( ( ( ( it)) ( ( was) ( ( ok) ( ( for) ( ( ( the) ( price)) ( ( ( ( you)) ( ( have) ( ( bought) ( ( it))))))))))))))))) 103 | (000000000000002002 ( ( ( The) ( ( only) ( downfall))) ( ( is) ( ( ( a) ( lot)) ( ( of) ( ( ( the) ( software)) ( ( ( ( ( ( I)) ( ( ( have) ( ( won't) ( work))) ( ( with) ( ( Mac))))) ( and)) ( ( ( iWork)) ( ( ( is) ( not)) ( ( worth) ( ( ( the) ( price)) ( ( of) ( ( it))))))))))))))) 104 | (000100000000000000 ( ( ( It)) ( ( ( super) ( ( shiny))) ( ( so) ( ( ( you)) ( ( can) ( ( see) ( ( the) ( ( fingerprints) ( easily)))))))))) 105 | (030000000000000000 ( ( ( I)) ( ( can) ( ( have) ( ( ( tabs)) ( ( ( open)) ( ( while) ( ( ( ( ( playing) ( ( YouTube) ( videos))) ( and)) ( ( it))) ( ( ( handles) ( ( it))) ( ( impressively) ( ( well)))))))))))) 106 | (220000000000000000 ( ( ( In) ( ( all) ( ( my) ( life)))) ( ( ( i)) ( ( ( have) ( ( never))) ( ( ( come) ( ( across) ( ( ( a) ( computer)) ( ( as) ( slow))))) ( ( as) ( ( ( this)) ( ( ( ( ( ( one) ( ( it))) ( ( cant))) ( ( perform) ( ( basic) ( operations)))) ( and)) ( ( is) ( ( practically) ( useless))))))))))) 107 | (000000000000000000 ( ( ( ( The) ( ( (number) (one)) ( reason))) ( ( ( that)) ( ( ( ( is) ( ( always))) ( ( repeated)))))))) 108 | (000000000000000000 ( ( If) ( ( ( only) ( ( ( Bill) ( Gates)) ( ( would) ( ( read) ( ( ( some)) ( ( of) ( ( ( what)) ( ( ( is) ( ( said) ( ( here)))))))))))) ( ( ( MS)) ( ( would) ( ( do) ( ( a) ( ( better) ( job))))))))) 109 | (300000010000000000 ( ( ( This)) ( ( is) ( ( ( a) ( ( great) ( value))) ( ( for) ( ( the) ( money))))))) 110 | (200000000000000000 ( ( ( I)) ( ( can't) ( ( begin) ( ( ( to) ( ( say) ( ( ( how) ( ( disappointed))) ( ( ( I)) ( ( am))))))))))) 111 | (003000000000000330 ( ( ( The) ( laptop)) ( ( is) ( ( beautiful) ( ( ( ( ( ( not) ( ( extremely) ( light))) ( but)) ( ( thin))) ( ( ( ( enough) ( and)) ( wide)) ( screen))) ( ( with) ( ( a) ( ( full) ( keyboard))))))))) 112 | (030000000000000000 ( ( ( ( The) ( ( only) ( time))) ( ( ( ( I)) ( ( have) ( ( restarted)))))) ( ( is) ( ( during) ( ( system) ( updates)))))) 113 | (002000000000022000 ( ( ( ( The) ( ( only) ( ( major) ( negative)))) ( ( to) ( ( me)))) ( ( is) ( ( Windows) ( ( ( ( 8.1) ( ( (though) ( YMMV)))) ( and)) ( ( the) ( ( Dell) ( ( crapware) ( installed))))))))) 114 | (000000000000000000 ( ( ( I)) ( ( was) ( ( so) ( ( ( excited) ( ( ( to) ( ( ( receive) ( ( the) ( ( Toshiba) ( L455)))) ( ( as) ( ( ( a) ( (gift) (bonus))) ( ( for) ( ( some) ( work))))))))) ( ( ( ( I)) ( ( had) ( ( done) ( ( for) ( ( ( a) ( friend)) ( ( of) ( ( mine)))))))))))))) 115 | (300000000000000000 ( ( ( Worth)) ( ( ( ( the) ( investment)) ( and)) ( ( ( truly) ( ( a) ( ( fine) ( piece)))) ( ( of) ( ( equipment))))))) 116 | (000000000000000000 ( ( ( ( The) ( feel)) ( ( of) ( ( ( this) ( machine)) ( ( compared) ( ( to) ( ( the) ( ( old) ( MacBook)))))))) ( ( is) ( ( far) ( superior))))) 117 | (000000000000000000 ( ( ( What)) ( ( ( can) ( ( I))) ( ( say))))) 118 | (000000000000000000 ( ( ( I)) ( ( ( now)) ( ( travel) ( ( with) ( ( ( ( this) ( laptop)) ( and)) ( ( my) ( ( work) ( PC))))))))) 119 | (000030000000000000 ( ( ( ( Does) ( ( a) ( ( great) ( job)))) ( ( with) ( ( ( video) ( shot)) ( ( on) ( ( a) ( Canon)))))) ( ( 5D) ( MKII)))) 120 | (000000000000000003 ( ( ( I)) ( ( loaded) ( ( ( ( ( ( windows)) ( ( ( 7)) ( ( via) ( ( Bootcamp))))) ( and)) ( ( ( it)) ( ( works) ( ( flawlessly))))))))) 121 | (000000000000000000 ( ( ( ( ( Pay) ( ( attention))) ( ( to) ( ( the) ( specs)))) ( ( if) ( ( ( you)) ( ( want) ( ( these) ( options)))))))) 122 | (002000000020000000 ( ( but) ( ( ( it)) ( ( doesn't) ( ( have) ( ( ( ( a) ( ( cd) ( unit))) ( ( anyway))) ( ( ( ( the) ( ( other) ( thing))) ( ( is) ( ( that) ( ( ( the) ( laptop)) ( ( ( does) ( not)) ( ( have) ( ( ( an) ( ( ethernet) ( port))) ( ( for) ( ( cable) ( connecting))))))))))))))))) 123 | (030000000000000000 ( ( ( It)) ( ( is) ( ( ( ( ( super) ( fast)) ( and)) ( ( always))) ( ( loads)))))) 124 | (000000200000000000 ( ( ( The) ( rep)) ( ( ( ( did) ( not)) ( ( even))) ( ( ( answer) ( ( my) ( question))) ( ( ( ( ( ( I)) ( ( had) ( ( ( to) ( ( ( ask) ( ( him))) ( ( if) ( ( ( he)) ( ( understood) ( ( ( what)) ( ( ( I)) ( ( ask))))))))))))) ( or)) ( ( if) ( ( ( he)) ( ( ( spoke) ( ( english))) ( ( because) ( ( ( he)) ( ( ( didn't) ( even)) ( ( try) ( ( ( to) ( ( acknowledge) ( ( my) ( question))))))))))))))))) 125 | (300000000000000000 ( ( ( five)) ( ( stars)))) 126 | (000000000000000000 ( ( ( I)) ( ( use) ( ( ( the) ( computer)) ( ( ( ( ( to) ( ( ( basically)) ( ( ( check) ( ( emails) ( surf))) ( ( the) ( ( web) ( ( print) ( coupons)))))))) ( and)) ( ( for) ( ( my) ( ( college) ( papers))))))))) 127 | (000000000002000002 ( ( ( Three) ( weeks)) ( ( after) ( ( ( I)) ( ( bought) ( ( ( the) ( netbook)) ( ( ( ( the) ( screen)) ( ( quit) ( ( working))))))))))) 128 | (000000000000000000 ( ( ( I)) ( ( ( shopped) ( ( around))) ( ( before) ( ( buying)))))) 129 | (300000000000000000 ( ( ( This) ( laptop)) ( ( is) ( ( nice))))) 130 | (000000000000000000 ( ( ( I)) ( ( can't) ( ( imagine) ( ( ( EVER)) ( ( ( buying) ( ( a) ( PC))) ( ( again)))))))) 131 | (000000000000000000 ( ( ( I)) ( ( have) ( ( ( ( had) ( ( no) ( problems))) ( ( with) ( ( it)))) ( ( unlike) ( ( ( some) ( ( hardware) ( defects))) ( ( on) ( ( past) ( models))))))))) 132 | (000000000200000000 ( ( ( I)) ( ( know) ( ( ( what)) ( ( ( ( 7) ( hours)) ( ( of) ( ( battery)))) ( ( looks) ( ( like)))))))) 133 | (000000000300000003 ( ( ( The) ( ( battery) ( life))) ( ( ( has) ( not)) ( ( decreased) ( ( since) ( ( ( I)) ( ( bought) ( ( ( it)) ( ( ( so) ( I'm)) ( ( ( thrilled) ( ( with) ( ( that)))))))))))))) 134 | (300000000000000000 ( ( ( It's)) ( ( A) ( ( MAC))))) 135 | (300000000000000000 ( ( ( So) ( ( ( far)) ( ( ( I)) ( ( am) ( ( very) ( ( happy) ( ( with) ( ( this) ( computer))))))))))) 136 | (000000000001000001 ( ( ( ( The) ( reflectiveness)) ( ( of) ( ( the) ( display)))) ( ( is) ( ( ( only) ( ( a) ( ( minor) ( inconvenience)))) ( ( ( ( if) ( ( ( you)) ( ( ( work) ( ( in) ( ( a) ( ( (controlled) (lighting)) ( environment))))) ( ( like) ( ( ( me)) ( ( ( (I)) ( ( prefer) ( ( ( it)) ( ( dark))))))))))) ( or)) ( ( if) ( ( ( you)) ( ( can) ( ( ( crank) ( ( up))) ( ( the) ( brightness))))))))))) 137 | (300000000000000000 ( ( ( I)) ( ( Love) ( ( my) ( ( new) ( computer)))))) 138 | (000003000000000000 ( ( In) ( ( ( my) ( line)) ( ( of) ( ( ( work) ( ( ( ( ( I)) ( ( ( often)) ( ( have) ( ( ( to) ( ( take) ( ( work) ( home)))))))) ( and)) ( ( ( this)) ( ( makes) ( ( ( it)) ( ( so) ( easy)))))))))))) 139 | (300000000000000000 ( ( ( I)) ( ( like) ( ( the) ( ( laptop) ( overall)))))) 140 | ( ( ( ( My) ( ( ONLY) ( issues))) ( ( are)))) 141 | (000200000000000000 ( ( ( I)) ( ( burned) ( ( my) ( ( ( leg,) ( ( after) ( ( ( ( ( ( lifting) ( ( it))) ( ( from) ( ( my) ( desk)))) ( and)) ( ( ( for) ( ( ( less) ( ( than) ( 5))) ( second))) ( ( ( putting) ( ( it))) ( ( on) ( ( my) ( ( lap) ( ( ( to) ( ( ( clean) ( ( my) ( ( coffee) ( table)))) ( ( so) ( ( ( I)) ( ( can) ( ( place) ( ( it)))))))))))))))))) ( there)))))) 142 | (000030000000000000 ( ( If) ( ( ( you)) ( ( are) ( ( ( a) ( ( PC) ( user))) ( ( looking) ( ( ( to) ( ( convert) ( ( ( ( I)) ( ( ( would) ( ( HIGHLY))) ( ( recommend) ( ( it))))))))))))))) 143 | (000000000000000003 ( ( ( I)) ( ( am) ( ( using) ( ( ( the) ( ( external) ( ( speaker) ( sound)))) ( ( ( ( is) ( ( good)))))))))) 144 | (030000000000000000 ( ( ( I)) ( ( ( run) ( ( ( ( Dreamweaver) ( ( Final) ( ( Cut) ( ( Pro) ( ( 7) ( ( Photoshop) ( ( Safari) ( ( Firefox) ( ( MSN) ( Messenger)))))))))) ( and)) ( ( a) ( ( few) ( ( other) ( applications)))))) ( ( ( constantly)) ( ( at) ( ( the) ( ( same) ( time)))))))) 145 | (000000000000000003 ( ( ( They)) ( ( are) ( ( so) ( ( realistic) ( ( ( ( I)) ( ( am) ( ( just) ( speechless)))))))))) 146 | (000000000000000000 ( ( ( I)) ( ( ( have) ( ( also))) ( ( used) ( ( ( it)) ( ( to) ( ( watch) ( ( ( YouTube) ( and)) ( Hulu))))))))) 147 | (000330000000000000 ( ( ( I)) ( ( ( highly)) ( ( ( recommend) ( ( this) ( computer))) ( ( for) ( ( ( students)) ( ( ( looking) ( ( for) ( ( a) ( ( solid) ( machine))))) ( ( ( to) ( ( ( get) ( ( them))) ( ( through) ( ( college))))))))))))) 148 | (000000000000000000 ( ( ( All) ( ( of) ( ( them)))) ( ( were) ( ( Windows) ( machines))))) 149 | (000000000000000201 ( ( ( The) ( keyboard)) ( ( is) ( ( ( a) ( ( little) ( wonky))) ( ( with) ( ( ( having) ( ( ( to) ( ( use) ( ( ( the) ( ( Function) ( button))) ( ( to) ( ( ( get) ( ( the) ( F-keys))) ( ( but) ( ( with) ( ( ( how)) ( ( ( infrequently) ( i)) ( ( use) ( ( ( those)) ( ( ( ( it)) ( ( is) ( ( a) ( (non) (issue))))))))))))))))))))))))) 150 | (000030000000000000 ( ( Like) ( ( ( i) ( ( said) ( Good))) ( ( ( ( for) ( ( basic) ( stuff))) ( and)) ( ( as) ( ( a) ( starter))))))) 151 | (000000000000000000 ( ( If) ( ( ( that)) ( ( is) ( ( ( the) ( case)) ( ( for) ( ( ( you) ( ( ( ( I)) ( ( would) ( ( ( suggest) ( ( a) ( ( (pull) (behind)) ( solution)))) ( ( ( when)) ( ( ( looking) ( ( at) ( ( cases)))))))))))))))))) 152 | (000000200000000000 ( ( ( they)) ( ( ( have) ( not)) ( ( sent) ( ( ( ( a) ( ( new) ( one))) ( nor)) ( ( called))))))) 153 | (000000000000000000 ( ( ( It)) ( ( was) ( ( stubborn) ( ( as) ( ( ( ( ( hell) ( ( ( no) ( amount)) ( ( of) ( ( dust))))) ( or)) ( ( slipping) ( ( to) ( ( ( the) ( ground)) ( ( phased) ( ( it))))))))))))) 154 | (300000000000000000 (it's) (awesome)) 155 | (330000000000000030 ( ( ( ( Still)) ( ( ( giving) ( ( it))) ( ( ( ( ( a) ( ( 5) ( ( star) ( rating)))) ( ( because) ( ( ( it)) ( ( is) ( ( fast)))))) ( and)) ( ( a) ( ( nice) ( ( sized) ( screen))))))))) 156 | (030300000000000000 ( ( ( I)) ( ( was) ( ( surprised) ( ( with) ( ( ( the) ( ( ( performance) ( and)) ( quality))) ( ( of) ( ( this) ( ( HP) ( Laptop)))))))))) 157 | (200000002000000000 ( ( Used) ( ( ( to) ( ( ( love) ( ( HP) ( products))) ( ( but) ( ( ( this)) ( ( has) ( ( ( soured) ( ( me))) ( ( on) ( ( the) ( ( whole) ( company))))))))))))) 158 | (200200000000000000 ( ( ( It)) ( ( ( ( ( is) ( not)) ( ( even))) ( ( ( a) ( year)) ( ( old) ( yet)))) ( ( so) ( ( ( I)) ( ( ( would definitely) ( not)) ( ( ( recommend) ( ( it))) ( ( to) ( ( anyone)))))))))) 159 | (000000000000000000 ( ( ( I)) ( ( ( can) ( ( actually))) ( ( ( ( ( get) ( ( ( work)) ( ( done) ( ( with) ( ( this) ( MAC)))))) ( and)) ( not)) ( ( ( fight) ( ( with) ( ( it)))) ( ( like) ( ( my) ( ( tired) ( ( old) ( ( PC) ( laptop))))))))))) 160 | --------------------------------------------------------------------------------