diff --git a/.gitignore b/.gitignore index e131105..b5c4959 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ assignment2/cs231n assignment2/.ipynb_checkpoints assignment3/dataset assignment3/.ipynb_checkpoints +assignment3/models diff --git a/assignment3/1 Language Modeling.ipynb b/assignment3/1 Language Modeling.ipynb index efea4f8..c79441e 100644 --- a/assignment3/1 Language Modeling.ipynb +++ b/assignment3/1 Language Modeling.ipynb @@ -66,18 +66,32 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From c:\\users\\han-chung lee\\.virtualenvs\\assignment3-xzjguwob\\lib\\site-packages\\tensorflow_core\\python\\compat\\v2_compat.py:65: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "non-resource variables are not supported in the long term\n" + ] + } + ], "source": [ "from segtok import tokenizer\n", "from collections import Counter\n", - "import tensorflow as tf\n", + "\n", + "# using tensorflow v1 since the skeleton code are written in v1.\n", + "import tensorflow.compat.v1 as tf\n", + "tf.disable_v2_behavior()\n", "import numpy as np\n", "import json\n", "import os\n", "\n", - "root_folder = \"\"" + "root_folder = \"\"\n", + "np.random.seed(45)" ] }, { @@ -100,17 +114,28 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of training samples: 88568\n", + "Number of validation samples: 946\n" + ] + } + ], "source": [ "# This cell loads the data for the model\n", "# Run this before working on loading any of the additional data\n", "\n", - "with open(root_folder+\"dataset/headline_generation_dataset_processed.json\", \"r\") as f:\n", + "# 2019-09-13 added encoding=\"utf8\" so file can be opened.\n", + "with open(root_folder+\"dataset/headline_generation_dataset_processed.json\", \"r\", encoding=\"utf8\") as f:\n", " d_released = json.load(f)\n", "\n", - "with open(root_folder+\"dataset/headline_generation_vocabulary.txt\", \"r\") as f:\n", + "# 2019-09-13 added encoding=\"utf8\" so file can be opened.\n", + "with open(root_folder+\"dataset/headline_generation_vocabulary.txt\", \"r\", encoding=\"utf8\") as f:\n", " vocabulary = f.read().split(\"\\n\")\n", "w2i = {w: i for i, w in enumerate(vocabulary)} # Word to index\n", "unkI, padI, start_index = w2i['UNK'], w2i['PAD'], w2i['']\n", @@ -136,9 +161,38 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['', 'UNK', 'PAD', 'to', ',', 'apple', 'facebook', 'google', \"'\", 'in']\n", + "{'cut': 'training', 'title': \"Microsoft donates cloud computing 'worth $1 bn'\", 'url': 'http://www.france24.com/en/20160120-microsoft-donates-cloud-computing-worth-1-bn', 'mask': [True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False], 'numerized': [20, 2908, 116, 1022, 8, 692, 24, 155, 1669, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]}\n" + ] + } + ], + "source": [ + "# quick print to see what's going on in vocabulary and d_train\n", + "print(vocabulary[:10])\n", + "print(d_train[1001])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reversing the numerized: microsoft donates cloud computing ' worth $ 1 bn ' PAD PAD PAD PAD PAD PAD PAD PAD PAD PAD\n", + "From the `title` entry: Microsoft donates cloud computing 'worth $1 bn'\n" + ] + } + ], "source": [ "def numerized2text(numerized):\n", " \"\"\" Converts an integer sequence in the vocabulary into a string corresponding to the title.\n", @@ -154,8 +208,8 @@ " # Hint: Use the string.join() function to reconstruct a single string\n", " #####\n", " \n", - " words = None\n", - " converted_string = None\n", + " words = [vocabulary[i] for i in numerized]\n", + " converted_string = \" \".join(words)\n", " \n", " #####\n", " # END YOUR CODE HERE\n", @@ -200,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -220,7 +274,6 @@ " # BEGIN YOUR CODE HERE \n", " #####\n", " \n", - " \n", " # We get a list of indices we will choose from the dataset.\n", " # The randint function uses a uniform distribution, giving equal probably to any entry\n", " # for each batch\n", @@ -230,23 +283,24 @@ " batch = [dataset[i] for i in indices]\n", " \n", " # Get the raw numerized for this input, each element of the dataset has a 'numerized' key\n", - " batch_numerized = None\n", + " batch_numerized = [item[\"numerized\"] for item in batch]\n", "\n", " # Create an array of start_index that will be concatenated at position 1 for the input.\n", " # Should be of shape (batch_size, 1)\n", - " start_tokens = None\n", + " # '' index is start_index\n", + " start_tokens = np.array([start_index] * batch_size).reshape(batch_size, 1)\n", "\n", " # Concatenate the start_tokens with the rest of the input\n", " # The np.concatenate function should be useful\n", " # The output should now be [batch_size, sequence_length+1]\n", - " batch_input = None\n", + " batch_input = np.concatenate((start_tokens, batch_numerized), axis=1)\n", "\n", " # Remove the last word from each element in the batch\n", " # To restore the [batch_size, sequence_length] size\n", - " batch_input = None\n", + " batch_input = batch_input[:, :-1]\n", " \n", " # The target should be the un-shifted numerized input\n", - " batch_target = None\n", + " batch_target = [item[\"numerized\"] for item in batch]\n", "\n", " # The target-mask is a 0 or 1 filter to note which tokens are\n", " # padding or not, to give the loss, so the model doesn't get rewarded for\n", @@ -260,6 +314,27 @@ " return batch_input, batch_target, batch_target_mask" ] }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# test code to make sure the shape is right and batch_input is padded\n", + "\n", + "foo = [d_train[1001], d_train[1002]]\n", + "batch_size, sequence_length = len(foo), len(foo[0]['numerized'])\n", + "\n", + "bi, bt, btm = build_batch(foo, len(foo))\n", + "\n", + "assert bi.shape == (batch_size, sequence_length) # verify batch_input shape\n", + "assert bi[0][0] == 0 # verify build_input starts w/ 0 for \"\n", + "assert np.array(bt).shape == (batch_size, sequence_length) # verify batch_target shape\n", + "\n", + "# print them out for sanity check\n", + "# print(f\"{bt} \\n {bi} \\n {btm}\")" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -288,7 +363,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -301,46 +376,50 @@ " # Where None represents a variable batch_size, and input_length is the\n", " # maximal length of a sequence of words, after being padded.\n", " self.input_num = tf.placeholder(tf.int32, shape=[None, input_length])\n", - " self.targets = None\n", - " self.targets_mask = None\n", - "\n", + " self.targets = tf.placeholder(tf.int32, shape=[None, input_length]) \n", + " self.targets_mask = tf.placeholder(tf.int32, shape=[None, input_length])\n", + " \n", " # Create an embedding variable of shape [vocab_size, rnn_size]\n", " # That will map each word in our vocab into a vector of rnn_size size.\n", - " embedding = None\n", + " embedding = tf.get_variable(name='embedding', shape=[vocab_size, rnn_size])\n", " # Use the tensorflow embedding_lookup function\n", " # To embed the input_num, using the embedding variable we've created\n", - " input_emb = None\n", + " input_emb = tf.nn.embedding_lookup(embedding, self.input_num)\n", "\n", " # Create a an RNN or LSTM cell of rnn_size size.\n", " # Look into the tf.nn.rnn_cell documentation\n", " # You can optionally use Tensorflow Add-ons such as the MultiRNNCell, or the DropoutWrapper\n", - " lm_cell = None\n", + " lm_cell = tf.nn.rnn_cell.BasicLSTMCell(rnn_size, state_is_tuple=True)\n", + " lm_cell = tf.nn.rnn_cell.DropoutWrapper(lm_cell, input_keep_prob=0.8)\n", " \n", " # Use the dynamic_rnn function of Tensorflow to run the embedded inputs\n", " # using the lm_cell you've created, and obtain the outputs of the RNN cell.\n", " # You have created a cell, which represents a single block (column) of the RNN.\n", " # dynamic_rnn will \"copy\" the cell for each element in your sequence, runs the input you provide through the cell,\n", " # and returns the outputs and the states of the cell.\n", - " outputs, states = None\n", + " outputs, states = tf.nn.dynamic_rnn(lm_cell, input_emb, dtype=tf.float32)\n", "\n", " # Use a dense layer to project the outputs of the RNN cell into the size of the\n", " # vocabulary (vocab_size).\n", " # output_logits should be of shape [None,input_length,vocab_size]\n", " # You can look at the tf.layers.dense function\n", - " self.output_logits = None\n", - "\n", + " self.output_logits = tf.layers.dense(outputs, vocab_size)\n", + " \n", " # Setup the loss: using the sparse_softmax_cross_entropy.\n", " # The logits are the output_logits we've computed.\n", " # The targets are the gold labels we are trying to match\n", " # Don't forget to use the targets_mask we have, so your loss is not off,\n", " # And your model doesn't get rewarded for predicting PAD tokens\n", " # You might have to cast the masks into float32. Look at the tf.cast function.\n", - " self.loss = None\n", + " tf.cast(self.targets_mask, tf.float32)\n", + " self.loss = tf.losses.sparse_softmax_cross_entropy(self.targets, \n", + " self.output_logits,\n", + " weights=self.targets_mask)\n", "\n", " # Setup an optimizer (SGD, RMSProp, Adam), you can find a list under tf.train.*\n", " # And provide it with a start learning rate.\n", "\n", - " optimizer = None \n", + " optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)\n", "\n", " # We create a train_op that requires the optimizer we've created to minimize the\n", " # loss we've defined.\n", @@ -349,7 +428,7 @@ " # Optimizations steps have been run.\n", " \n", " self.global_step = tf.train.get_or_create_global_step()\n", - " self.train_op = None\n", + " self.train_op = optimizer.minimize(self.loss, global_step = self.global_step)\n", " self.saver = tf.train.Saver()" ] }, @@ -362,9 +441,37 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING:tensorflow:From :23: BasicLSTMCell.__init__ (from tensorflow.python.ops.rnn_cell_impl) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "This class is equivalent as tf.keras.layers.LSTMCell, and will be replaced by that in Tensorflow 2.0.\n", + "WARNING:tensorflow:From :31: dynamic_rnn (from tensorflow.python.ops.rnn) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use `keras.layers.RNN(cell)`, which is equivalent to this API\n", + "WARNING:tensorflow:From c:\\users\\han-chung lee\\.virtualenvs\\assignment3-xzjguwob\\lib\\site-packages\\tensorflow_core\\python\\ops\\rnn_cell_impl.py:735: Layer.add_variable (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use `layer.add_weight` method instead.\n", + "WARNING:tensorflow:From c:\\users\\han-chung lee\\.virtualenvs\\assignment3-xzjguwob\\lib\\site-packages\\tensorflow_core\\python\\ops\\rnn_cell_impl.py:739: calling Zeros.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Call initializer instance with the dtype argument instead of passing it to the constructor\n", + "WARNING:tensorflow:From :37: dense (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use keras.layers.Dense instead.\n", + "WARNING:tensorflow:From c:\\users\\han-chung lee\\.virtualenvs\\assignment3-xzjguwob\\lib\\site-packages\\tensorflow_core\\python\\layers\\core.py:187: Layer.apply (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Please use `layer.__call__` method instead.\n", + "WARNING:tensorflow:From c:\\users\\han-chung lee\\.virtualenvs\\assignment3-xzjguwob\\lib\\site-packages\\tensorflow_core\\python\\ops\\losses\\losses_impl.py:121: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" + ] + } + ], "source": [ "# We can create our model,\n", "# with parameters of our choosing.\n", @@ -407,40 +514,56 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9.210281\n", + "7.118761\n", + "6.807353\n", + "6.66833\n", + "7.1950293\n" + ] + } + ], "source": [ "# Skeleton code\n", "# You have to write your own training process to obtain a\n", "# Good performing model on the validation set, and save it.\n", "\n", - "experiment = root_folder+\"models/magic_model\"\n", + "experiment = root_folder+\"models\\magic_model\"\n", "\n", "with tf.Session() as sess:\n", " # Here is how you initialize weights of the model according to their\n", " # Initialization parameters.\n", " sess.run(tf.global_variables_initializer())\n", - " \n", - " # Here is how you obtain a batch:\n", - " batch_size = 16\n", - " batch_input, batch_target, batch_target_mask = build_batch(d_train, batch_size)\n", - " # Map the values to each tensor in a `feed_dict`\n", - " feed = {model.input_num: batch_input, model.targets: batch_target, model.targets_mask: batch_target_mask}\n", - "\n", - " # Obtain a single value of the loss for that batch.\n", - " # !IMPORTANT! Don't forget to include the train_op to when using a batch from the training dataset\n", - " # (d_train)\n", - " # !MORE IMPORTANT! Don't use the train_op if you evaluate the loss on the validation set,\n", - " # Otherwise, your network will overfit on your validation dataset.\n", - " \n", - " step, train_loss, _ = sess.run([model.global_step, model.loss, model.train_op], feed_dict=feed)\n", - " \n", + "\n", + " for i in range(500):\n", + " # Here is how you obtain a batch:\n", + " batch_size = 16\n", + " batch_input, batch_target, batch_target_mask = build_batch(d_train, batch_size)\n", + " # Map the values to each tensor in a `feed_dict`\n", + " feed = {model.input_num: batch_input, model.targets: batch_target, model.targets_mask: batch_target_mask}\n", + "\n", + " # Obtain a single value of the loss for that batch.\n", + " # !IMPORTANT! Don't forget to include the train_op to when using a batch from the training dataset\n", + " # (d_train)\n", + " # !MORE IMPORTANT! Don't use the train_op if you evaluate the loss on the validation set,\n", + " # Otherwise, your network will overfit on your validation dataset.\n", + "\n", + " step, train_loss, _ = sess.run([model.global_step, model.loss, model.train_op], feed_dict=feed)\n", + " \n", + " if i % 100 == 0:\n", + " print(train_loss)\n", + "\n", " # Here is how you save the model weights\n", " model.saver.save(sess, experiment)\n", " \n", " # Here is how you restore the weights previously saved\n", - " model.saver.restore(sess, experiment)" + " # model.saver.restore(sess, experiment)" ] }, { @@ -471,19 +594,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# Your best performing model should go here.\n", - "model_file = root_folder+\"models/language_model_1\"" + "model_file = root_folder+\"models\\magic_model\"" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Restoring parameters from models\\magic_model\n", + "Evaluation set loss: [6.77481]\n" + ] + } + ], "source": [ "# We will evaluate your model in the model_file above\n", "# In a very similar way as the code below.\n", @@ -521,9 +653,41 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 12, + "metadata": { + "hidden": true + }, "outputs": [], + "source": [ + "def numerize_sequence(tokenized):\n", + " return [w2i.get(w, unkI) for w in tokenized]\n", + "\n", + "def pad_sequence(numerized, pad_index, to_length):\n", + " pad = numerized[:to_length]\n", + " padded = pad + [pad_index] * (to_length - len(pad))\n", + " mask = [w != pad_index for w in padded]\n", + " return padded, mask" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Restoring parameters from models\\magic_model\n", + "----------------------------------------\n", + "Headline: apple to release new iphone in july\n", + "Loss of the headline: [5.360189]\n", + "----------------------------------------\n", + "Headline: apple and samsung resolve all lawsuits\n", + "Loss of the headline: [7.231014]\n" + ] + } + ], "source": [ "headline1 = \"Apple to release new iPhone in July\"\n", "headline2 = \"Apple and Samsung resolve all lawsuits\"\n", @@ -538,17 +702,21 @@ " \n", " # From the code in the Preprocessing section at the end of the notebook\n", " # Find out how to tokenize the headline\n", - " tokenized = None\n", + " \n", + " tokenized = tokenizer.word_tokenizer(headline)\n", " \n", " # Find out how to numerize the tokenized headline\n", - " numerized = None\n", - "\n", + " numerized = [w2i.get(w, unkI) for w in tokenized]\n", + " \n", " # Learn how to pad and obtain the mask of the sequence.\n", - " padded, mask = None\n", + " padded, mask = pad_sequence(numerized, padI, input_length)\n", " \n", " # Obtain the loss of the sequence, and pring it\n", + " eval_dataset = [{\"numerized\":padded, \"mask\":mask}]\n", + " eval_input, eval_target, eval_target_mask = build_batch(eval_dataset, 1)\n", + " feed = {model.input_num: eval_input, model.targets: eval_target, model.targets_mask: eval_target_mask}\n", + " loss = sess.run([model.loss], feed_dict=feed)\n", " \n", - " loss = None\n", " print(\"----------------------------------------\")\n", " print(\"Headline:\",headline)\n", " print(\"Loss of the headline:\", loss)\n", @@ -583,9 +751,29 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Restoring parameters from models\\magic_model\n", + "===================\n", + "Generating headline starting with: apple has released\n", + " apple has released UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK\n", + "===================\n", + "Generating headline starting with: google has released\n", + " google has released UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK\n", + "===================\n", + "Generating headline starting with: amazon\n", + " amazon UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK\n", + "===================\n", + "Generating headline starting with: tesla to\n", + " tesla to UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK UNK\n" + ] + } + ], "source": [ "with tf.Session() as sess:\n", " model.saver.restore(sess, model_file)\n", @@ -601,8 +789,8 @@ "\n", " # Tokenize and numerize the headline. Put the numerized headline\n", " # beginning in `current_build`\n", - " tokenized = None\n", - " current_build = [startI] + numerize_sequence(tokenized)\n", + " tokenized = tokenizer.word_tokenizer(headline_starter)\n", + " current_build = [start_index] + numerize_sequence(tokenized)\n", "\n", " while len(current_build) < input_length:\n", " # Pad the current_build into a input_length vector.\n", @@ -613,21 +801,23 @@ " # Obtain the logits for the current padded sequence\n", " # This involves obtaining the output_logits from our model,\n", " # and not the loss like we have done so far\n", - " logits = None\n", + " logits = sess.run([model.output_logits], feed_dict={model.input_num:current_padded})\n", + "# print(np.array(logits).shape)\n", "\n", " # Obtain the row of logits that interest us, the logits for the last non-pad\n", " # inputs\n", - " last_logits = None\n", + " last_logits = logits[0][0][len(current_build)-1]\n", + "# print(last_logits)\n", " \n", " # Find the highest scoring word in the last_logits\n", " # array. The np.argmax function should be useful.\n", " # Append this word to our current build\n", - " current_build.append(None)\n", + " current_build.append(np.argmax(last_logits))\n", " \n", " # Go from the current_build of word_indices\n", " # To the headline (string) produced. This should involve\n", " # the vocabulary, and a string merger.\n", - " produced_sentence = None\n", + " produced_sentence = numerized2text(current_build)\n", " print(produced_sentence)" ] }, @@ -663,29 +853,10 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "hidden": true - }, - "outputs": [], - "source": [ - "def numerize_sequence(tokenized):\n", - " return [w2i.get(w, unkI) for w in tokenized]\n", - "def pad_sequence(numerized, pad_index, to_length):\n", - " pad = numerized[:to_length]\n", - " padded = pad + [pad_index] * (to_length - len(pad))\n", - " mask = [w != pad_index for w in padded]\n", - " return padded, mask" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "cell_type": "raw", "metadata": { "hidden": true }, - "outputs": [], "source": [ "# You do not need to run this\n", "# This is to show you how the dataset was created\n", @@ -697,13 +868,10 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "raw", "metadata": { - "hidden": true, - "scrolled": true + "hidden": true }, - "outputs": [], "source": [ "# You do not need to run this\n", "# This is to show you how the dataset was created\n", @@ -718,12 +886,10 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "raw", "metadata": { "hidden": true }, - "outputs": [], "source": [ "# You do not need to run this\n", "# This is to show you how the dataset was created\n", @@ -751,12 +917,10 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "raw", "metadata": { "hidden": true }, - "outputs": [], "source": [ "# You do not need to run this\n", "# This is to show you how the dataset was created\n", @@ -781,21 +945,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.7.3" }, "varInspector": { "cols": { @@ -828,5 +992,5 @@ } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/assignment3/Pipfile b/assignment3/Pipfile new file mode 100644 index 0000000..2169850 --- /dev/null +++ b/assignment3/Pipfile @@ -0,0 +1,18 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +jupyter = "*" +tqdm = "*" +sentencepiece = "*" +segtok = "*" +tensorflow-gpu = "==2.0.0-rc1" +juypterlab = "*" +jupyterlab = "*" + +[requires] +python_version = "3.7" diff --git a/assignment3/Pipfile.lock b/assignment3/Pipfile.lock new file mode 100644 index 0000000..ee7f9b2 --- /dev/null +++ b/assignment3/Pipfile.lock @@ -0,0 +1,445 @@ +{ + "_meta": { + "hash": { + "sha256": "2ba3b9e479a7304d7932cb80ffcddcaa743e190d2b2736eb888d292b6a15ef1b" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "attrs": { + "hashes": [ + "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", + "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" + ], + "version": "==19.1.0" + }, + "backcall": { + "hashes": [ + "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", + "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" + ], + "version": "==0.1.0" + }, + "bleach": { + "hashes": [ + "sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16", + "sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa" + ], + "version": "==3.1.0" + }, + "colorama": { + "hashes": [ + "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", + "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48" + ], + "markers": "sys_platform == 'win32'", + "version": "==0.4.1" + }, + "decorator": { + "hashes": [ + "sha256:86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de", + "sha256:f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6" + ], + "version": "==4.4.0" + }, + "defusedxml": { + "hashes": [ + "sha256:6687150770438374ab581bb7a1b327a847dd9c5749e396102de3fad4e8a3ef93", + "sha256:f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5" + ], + "version": "==0.6.0" + }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "ipykernel": { + "hashes": [ + "sha256:167c3ef08450f5e060b76c749905acb0e0fbef9365899377a4a1eae728864383", + "sha256:b503913e0b4cce7ed2de965457dfb2edd633e8234161a60e23f2fe2161345d12" + ], + "version": "==5.1.2" + }, + "ipython": { + "hashes": [ + "sha256:c4ab005921641e40a68e405e286e7a1fcc464497e14d81b6914b4fd95e5dee9b", + "sha256:dd76831f065f17bddd7eaa5c781f5ea32de5ef217592cf019e34043b56895aa1" + ], + "markers": "python_version >= '3.3'", + "version": "==7.8.0" + }, + "ipython-genutils": { + "hashes": [ + "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", + "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" + ], + "version": "==0.2.0" + }, + "ipywidgets": { + "hashes": [ + "sha256:13ffeca438e0c0f91ae583dc22f50379b9d6b28390ac7be8b757140e9a771516", + "sha256:e945f6e02854a74994c596d9db83444a1850c01648f1574adf144fbbabe05c97" + ], + "version": "==7.5.1" + }, + "jedi": { + "hashes": [ + "sha256:786b6c3d80e2f06fd77162a07fed81b8baa22dde5d62896a790a331d6ac21a27", + "sha256:ba859c74fa3c966a22f2aeebe1b74ee27e2a462f56d3f5f7ca4a59af61bfe42e" + ], + "version": "==0.15.1" + }, + "jinja2": { + "hashes": [ + "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", + "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" + ], + "version": "==2.10.1" + }, + "jsonschema": { + "hashes": [ + "sha256:5f9c0a719ca2ce14c5de2fd350a64fd2d13e8539db29836a86adc990bb1a068f", + "sha256:8d4a2b7b6c2237e0199c8ea1a6d3e05bf118e289ae2b9d7ba444182a2959560d" + ], + "version": "==3.0.2" + }, + "jupyter": { + "hashes": [ + "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7", + "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78", + "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f" + ], + "index": "pypi", + "version": "==1.0.0" + }, + "jupyter-client": { + "hashes": [ + "sha256:73a809a2964afa07adcc1521537fddb58c2ffbb7e84d53dc5901cf80480465b3", + "sha256:98e8af5edff5d24e4d31e73bc21043130ae9d955a91aa93fc0bc3b1d0f7b5880" + ], + "version": "==5.3.1" + }, + "jupyter-console": { + "hashes": [ + "sha256:308ce876354924fb6c540b41d5d6d08acfc946984bf0c97777c1ddcb42e0b2f5", + "sha256:cc80a97a5c389cbd30252ffb5ce7cefd4b66bde98219edd16bf5cb6f84bb3568" + ], + "version": "==6.0.0" + }, + "jupyter-core": { + "hashes": [ + "sha256:2c6e7c1e9f2ac45b5c2ceea5730bc9008d92fe59d0725eac57b04c0edfba24f7", + "sha256:f4fa22d6cf25f34807c995f22d2923693575c70f02557bcbfbe59bd5ec8d8b84" + ], + "version": "==4.5.0" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" + ], + "version": "==1.1.1" + }, + "mistune": { + "hashes": [ + "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e", + "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4" + ], + "version": "==0.8.4" + }, + "nbconvert": { + "hashes": [ + "sha256:427a468ec26e7d68a529b95f578d5cbf018cb4c1f889e897681c2b6d11897695", + "sha256:48d3c342057a2cf21e8df820d49ff27ab9f25fc72b8f15606bd47967333b2709" + ], + "version": "==5.6.0" + }, + "nbformat": { + "hashes": [ + "sha256:b9a0dbdbd45bb034f4f8893cafd6f652ea08c8c1674ba83f2dc55d3955743b0b", + "sha256:f7494ef0df60766b7cabe0a3651556345a963b74dbc16bc7c18479041170d402" + ], + "version": "==4.4.0" + }, + "notebook": { + "hashes": [ + "sha256:660976fe4fe45c7aa55e04bf4bccb9f9566749ff637e9020af3422f9921f9a5d", + "sha256:b0a290f5cc7792d50a21bec62b3c221dd820bf00efa916ce9aeec4b5354bde20" + ], + "version": "==6.0.1" + }, + "pandocfilters": { + "hashes": [ + "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9" + ], + "version": "==1.4.2" + }, + "parso": { + "hashes": [ + "sha256:63854233e1fadb5da97f2744b6b24346d2750b85965e7e399bec1620232797dc", + "sha256:666b0ee4a7a1220f65d367617f2cd3ffddff3e205f3f16a0284df30e774c2a9c" + ], + "version": "==0.5.1" + }, + "pickleshare": { + "hashes": [ + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" + ], + "version": "==0.7.5" + }, + "prometheus-client": { + "hashes": [ + "sha256:71cd24a2b3eb335cb800c7159f423df1bd4dcd5171b234be15e3f31ec9f622da" + ], + "version": "==0.7.1" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:11adf3389a996a6d45cc277580d0d53e8a5afd281d0c9ec71b28e6f121463780", + "sha256:2519ad1d8038fd5fc8e770362237ad0364d16a7650fb5724af6997ed5515e3c1", + "sha256:977c6583ae813a37dc1c2e1b715892461fcbdaa57f6fc62f33a528c4886c8f55" + ], + "version": "==2.0.9" + }, + "pygments": { + "hashes": [ + "sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", + "sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297" + ], + "version": "==2.4.2" + }, + "pyrsistent": { + "hashes": [ + "sha256:34b47fa169d6006b32e99d4b3c4031f155e6e68ebcc107d6454852e8e0ee6533" + ], + "version": "==0.15.4" + }, + "python-dateutil": { + "hashes": [ + "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", + "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" + ], + "version": "==2.8.0" + }, + "pywinpty": { + "hashes": [ + "sha256:0e01321e53a230233358a6d608a1a8bc86c3882cf82769ba3c62ca387dc9cc51", + "sha256:333e0bc5fca8ad9e9a1516ebedb2a65da38dc1f399f8b2ea57d6cccec1ff2cc8", + "sha256:3ca3123aa6340ab31bbf9bd012b92e72f9ec905e4c9ee152cc997403e1778cd3", + "sha256:44a6dddcf2abf402e22f87e2c9a341f7d0b296afbec3d28184c8de4d7f514ee4", + "sha256:53d94d574c3d4da2df5b1c3ae728b8d90e4d33502b0388576bbd4ddeb4de0f77", + "sha256:c3955f162c53dde968f3fc11361658f1d83b683bfe601d4b6f94bb01ea4300bc", + "sha256:cec9894ecb34de3d7b1ca121dd98433035b9f8949b5095e84b103b349231509c", + "sha256:dcd45912e2fe2e6f72cee997a4da6ed1ad2056165a277ce5ec7f7ac98dcdf667", + "sha256:f2bcdd9a2ffd8b223752a971b3d377fb7bfed85f140ec9710f1218d760f2ccb7" + ], + "markers": "os_name == 'nt'", + "version": "==0.5.5" + }, + "pyzmq": { + "hashes": [ + "sha256:01636e95a88d60118479041c6aaaaf5419c6485b7b1d37c9c4dd424b7b9f1121", + "sha256:021dba0d1436516092c624359e5da51472b11ba8edffa334218912f7e8b65467", + "sha256:0463bd941b6aead494d4035f7eebd70035293dd6caf8425993e85ad41de13fa3", + "sha256:05fd51edd81eed798fccafdd49c936b6c166ffae7b32482e4d6d6a2e196af4e6", + "sha256:1fadc8fbdf3d22753c36d4172169d184ee6654f8d6539e7af25029643363c490", + "sha256:22efa0596cf245a78a99060fe5682c4cd00c58bb7614271129215c889062db80", + "sha256:260c70b7c018905ec3659d0f04db735ac830fe27236e43b9dc0532cf7c9873ef", + "sha256:2762c45e289732d4450406cedca35a9d4d71e449131ba2f491e0bf473e3d2ff2", + "sha256:2fc6cada8dc53521c1189596f1898d45c5f68603194d3a6453d6db4b27f4e12e", + "sha256:343b9710a61f2b167673bea1974e70b5dccfe64b5ed10626798f08c1f7227e72", + "sha256:41bf96d5f554598a0632c3ec28e3026f1d6591a50f580df38eff0b8067efb9e7", + "sha256:856b2cdf7a1e2cbb84928e1e8db0ea4018709b39804103d3a409e5584f553f57", + "sha256:85b869abc894672de9aecdf032158ea8ad01e2f0c3b09ef60e3687fb79418096", + "sha256:93f44739db69234c013a16990e43db1aa0af3cf5a4b8b377d028ff24515fbeb3", + "sha256:98fa3e75ccb22c0dc99654e3dd9ff693b956861459e8c8e8734dd6247b89eb29", + "sha256:9a22c94d2e93af8bebd4fcf5fa38830f5e3b1ff0d4424e2912b07651eb1bafb4", + "sha256:a7d3f4b4bbb5d7866ae727763268b5c15797cbd7b63ea17f3b0ec1067da8994b", + "sha256:b645a49376547b3816433a7e2d2a99135c8e651e50497e7ecac3bd126e4bea16", + "sha256:cf0765822e78cf9e45451647a346d443f66792aba906bc340f4e0ac7870c169c", + "sha256:dc398e1e047efb18bfab7a8989346c6921a847feae2cad69fedf6ca12fb99e2c", + "sha256:dd5995ae2e80044e33b5077fb4bc2b0c1788ac6feaf15a6b87a00c14b4bdd682", + "sha256:e03fe5e07e70f245dc9013a9d48ae8cc4b10c33a1968039c5a3b64b5d01d083d", + "sha256:ea09a306144dff2795e48439883349819bef2c53c0ee62a3c2fae429451843bb", + "sha256:f4e37f33da282c3c319849877e34f97f0a3acec09622ec61b7333205bdd13b52", + "sha256:fa4bad0d1d173dee3e8ef3c3eb6b2bb6c723fc7a661eeecc1ecb2fa99860dd45" + ], + "version": "==18.1.0" + }, + "qtconsole": { + "hashes": [ + "sha256:40d5d8e00d070ea266dbf6f0da74c4b9597b8b8d67cd8233c3ffd8debf923703", + "sha256:b91e7412587e6cfe1644696538f73baf5611e837be5406633218443b2827c6d9" + ], + "version": "==4.5.5" + }, + "regex": { + "hashes": [ + "sha256:1e9f9bc44ca195baf0040b1938e6801d2f3409661c15fe57f8164c678cfc663f", + "sha256:587b62d48ca359d2d4f02d486f1f0aa9a20fbaf23a9d4198c4bed72ab2f6c849", + "sha256:835ccdcdc612821edf132c20aef3eaaecfb884c9454fdc480d5887562594ac61", + "sha256:93f6c9da57e704e128d90736430c5c59dd733327882b371b0cae8833106c2a21", + "sha256:a46f27d267665016acb3ec8c6046ec5eae8cf80befe85ba47f43c6f5ec636dcd", + "sha256:c5c8999b3a341b21ac2c6ec704cfcccbc50f1fedd61b6a8ee915ca7fd4b0a557", + "sha256:d4d1829cf97632673aa49f378b0a2c3925acd795148c5ace8ef854217abbee89", + "sha256:d96479257e8e4d1d7800adb26bf9c5ca5bab1648a1eddcac84d107b73dc68327", + "sha256:f20f4912daf443220436759858f96fefbfc6c6ba9e67835fd6e4e9b73582791a", + "sha256:f2b37b5b2c2a9d56d9e88efef200ec09c36c7f323f9d58d0b985a90923df386d", + "sha256:fe765b809a1f7ce642c2edeee351e7ebd84391640031ba4b60af8d91a9045890" + ], + "version": "==2019.8.19" + }, + "segtok": { + "hashes": [ + "sha256:e9ccb989648877e29c6e59782148e8fc6731ca3027dc9f05a48769a24bc0f328" + ], + "index": "pypi", + "version": "==1.5.7" + }, + "send2trash": { + "hashes": [ + "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2", + "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b" + ], + "version": "==1.5.0" + }, + "sentencepiece": { + "hashes": [ + "sha256:0014d39669289f7925c55e050932a907fa2199b1404385ddb4a69608f75e5b17", + "sha256:07a544533bbefec3dda5ef15cd00e9b4b9abb3ed0c82eb4b4c57d5f5fd01180b", + "sha256:1234b461c7706466368624d4a17661984f310708a61c6915174f9b49214ce001", + "sha256:2055e1e089f08d25f822ede20d004df64d02789b290d115c20aae86d349afed4", + "sha256:268bb70d89e6c808086844a96a2f086f3b05a66fc6d3e25e2c50691cb3fd14b1", + "sha256:4240117d7af47b596b8bbea2a8a09ce9f25ac234027030541f188490ad4f367b", + "sha256:49973f229728d858f9a97ad5c6f54c897b7dc10eddbd19f350f9870320540728", + "sha256:4daf9930f5e8882e09b6b1052614ab02e7db40ca83032160d49e7956e447d1f4", + "sha256:791ea9c0a5425f6dd2be6ea353ada94f53ca0964d96b5bf60d2a8e0b1abdfb5f", + "sha256:7eac4a9e4c51f6297b451ce670fce104e6f0e74049e304416bdde6e66c2708a6", + "sha256:8174139eca911fdbeab0fcf5eb5f96341959ccda9d403da7695261f20ec909f5", + "sha256:845748caaebc2fc3b3292537b98d4c5a31e5f15285f7d061ce1f6c795fe2884e", + "sha256:877a130c1787e2f210e5d7e317e8606ebdc212a1508101ff1bc155aa2ff51f20", + "sha256:9d206332f6d03fd3e9be40dbe4c04538d0c4d732c5e6314058c1cec3868ef213", + "sha256:ac049046d3a970aa9cb48a707a4d9cc8e1fcc060eeab7fcb7d03086b40dff70c", + "sha256:c1b4a5a93b95dd2ac03f3c099654e418800c1ff8fd7d1691f42bdbe8719ae4d3", + "sha256:ceb495ea00bf04ac9ee1a16a78a8d29efbac9e4ae4744bb1c11d8911fe7eb2e9", + "sha256:d194cf7431dd87798963ff998380f1c02ff0f9e380cc922a07926b69e21c4e2b", + "sha256:df2a04cffe27f1394008e55e75239804c907d9358214ff9d6252b1c3cfa7f4ab", + "sha256:f664c90a0637f5e0ed87cefb337aeb976fa44f3c59cb0aecbb78ac0688184378", + "sha256:fdbf04c50f131c36867bde2ae6ff48e1fd5216e43c8087fff1f762b7bf9d229a", + "sha256:fde644520c9c21ab1ee3e2a93be65ca751c971ccc166f0fce20db7f5da324029" + ], + "index": "pypi", + "version": "==0.1.83" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "terminado": { + "hashes": [ + "sha256:d9d012de63acb8223ac969c17c3043337c2fcfd28f3aea1ee429b345d01ef460", + "sha256:de08e141f83c3a0798b050ecb097ab6259c3f0331b2f7b7750c9075ced2c20c2" + ], + "version": "==0.8.2" + }, + "testpath": { + "hashes": [ + "sha256:46c89ebb683f473ffe2aab0ed9f12581d4d078308a3cb3765d79c6b2317b0109", + "sha256:b694b3d9288dbd81685c5d2e7140b81365d46c29f5db4bc659de5aa6b98780f8" + ], + "version": "==0.4.2" + }, + "tornado": { + "hashes": [ + "sha256:349884248c36801afa19e342a77cc4458caca694b0eda633f5878e458a44cb2c", + "sha256:398e0d35e086ba38a0427c3b37f4337327231942e731edaa6e9fd1865bbd6f60", + "sha256:4e73ef678b1a859f0cb29e1d895526a20ea64b5ffd510a2307b5998c7df24281", + "sha256:559bce3d31484b665259f50cd94c5c28b961b09315ccd838f284687245f416e5", + "sha256:abbe53a39734ef4aba061fca54e30c6b4639d3e1f59653f0da37a0003de148c7", + "sha256:c845db36ba616912074c5b1ee897f8e0124df269468f25e4fe21fe72f6edd7a9", + "sha256:c9399267c926a4e7c418baa5cbe91c7d1cf362d505a1ef898fde44a07c9dd8a5" + ], + "version": "==6.0.3" + }, + "tqdm": { + "hashes": [ + "sha256:1be3e4e3198f2d0e47b928e9d9a8ec1b63525db29095cec1467f4c5a4ea8ebf9", + "sha256:7e39a30e3d34a7a6539378e39d7490326253b7ee354878a92255656dc4284457" + ], + "index": "pypi", + "version": "==4.35.0" + }, + "traitlets": { + "hashes": [ + "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", + "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9" + ], + "version": "==4.3.2" + }, + "wcwidth": { + "hashes": [ + "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", + "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c" + ], + "version": "==0.1.7" + }, + "webencodings": { + "hashes": [ + "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", + "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" + ], + "version": "==0.5.1" + }, + "widgetsnbextension": { + "hashes": [ + "sha256:079f87d87270bce047512400efd70238820751a11d2d8cb137a5a5bdbaf255c7", + "sha256:bd314f8ceb488571a5ffea6cc5b9fc6cba0adaf88a9d2386b93a489751938bcd" + ], + "version": "==3.5.1" + } + }, + "develop": {} +} diff --git a/assignment3/requirements.txt b/assignment3/requirements.txt deleted file mode 100644 index 2468d0c..0000000 --- a/assignment3/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -tensorflow>=1.12 -sentencepiece -segtok -ipykernel -jupyter -tqdm diff --git a/assignment3/requirements_gpu.txt b/assignment3/requirements_gpu.txt deleted file mode 100644 index 8151352..0000000 --- a/assignment3/requirements_gpu.txt +++ /dev/null @@ -1,6 +0,0 @@ -tensorflow_gpu>=1.12 -sentencepiece -segtok -ipykernel -jupyter -tqdm diff --git a/section_notes/2019_CS182_Section_6_Notes.pdf b/section_notes/2019_CS182_Section_6_Notes.pdf deleted file mode 100644 index 46c6bde..0000000 Binary files a/section_notes/2019_CS182_Section_6_Notes.pdf and /dev/null differ diff --git a/section_notes/2019_CS182_Section_7_Notes.pdf b/section_notes/2019_CS182_Section_7_Notes.pdf deleted file mode 100644 index 8fa30f2..0000000 Binary files a/section_notes/2019_CS182_Section_7_Notes.pdf and /dev/null differ diff --git a/section_notes/2019_CS182_Section_8_Notes.pdf b/section_notes/2019_CS182_Section_8_Notes.pdf deleted file mode 100644 index 25b5a22..0000000 Binary files a/section_notes/2019_CS182_Section_8_Notes.pdf and /dev/null differ diff --git a/section_notes/2019_CS182_Section_Nodes_Week_3.pdf b/section_notes/2019_CS182_Section_Nodes_Week_3.pdf deleted file mode 100644 index 2e9b498..0000000 Binary files a/section_notes/2019_CS182_Section_Nodes_Week_3.pdf and /dev/null differ diff --git a/section_notes/2019_CS182_Section_Notes_Week_1.pdf b/section_notes/2019_CS182_Section_Notes_Week_1.pdf deleted file mode 100644 index 7928e3e..0000000 Binary files a/section_notes/2019_CS182_Section_Notes_Week_1.pdf and /dev/null differ diff --git a/section_notes/2019_CS182_Section_Notes_Week_2.pdf b/section_notes/2019_CS182_Section_Notes_Week_2.pdf deleted file mode 100644 index 9a3a44c..0000000 Binary files a/section_notes/2019_CS182_Section_Notes_Week_2.pdf and /dev/null differ