Repository where I mostly put random python scripts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

348 lines
49 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from gensim.models import Word2Vec"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"sentences = [[\"cat\", \"say\", \"meow\"], [\"dog\", \"say\", \"woof\"], [\"man\", \"say\", \"dam\"]]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5\n"
]
}
],
"source": [
"model = Word2Vec(min_count=1, size=10)\n",
"model.build_vocab(sentences)\n",
"model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs) \n",
"model.save(\"basic-word2vec.model\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('woof', 0.3232297897338867),\n",
" ('dam', 0.14384251832962036),\n",
" ('man', 0.11316978931427002),\n",
" ('cat', -0.06251632422208786),\n",
" ('say', -0.1781214326620102),\n",
" ('meow', -0.21009384095668793)]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.wv.most_similar(\"dog\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.04777663 0.01543251 -0.04632503 0.03601828 -0.00572644 0.00553683\n",
" -0.04476452 -0.0274465 0.0047655 0.00508591]\n"
]
}
],
"source": [
"print(model.wv.get_vector(\"dog\"))"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.decomposition import IncrementalPCA # inital reduction\n",
"from sklearn.manifold import TSNE # final reduction\n",
"import numpy as np # array handling\n",
"\n",
"def reduce_dimensions(model):\n",
" num_dimensions = 2 # final num dimensions (2D, 3D, etc)\n",
"\n",
" vectors = [] # positions in vector space\n",
" labels = [] # keep track of words to label our data again later\n",
" for word in model.wv.vocab:\n",
" vectors.append(model.wv[word])\n",
" labels.append(word)\n",
"\n",
" # convert both lists into numpy vectors for reduction\n",
" vectors = np.asarray(vectors)\n",
" labels = np.asarray(labels)\n",
"\n",
" # reduce using t-SNE\n",
" vectors = np.asarray(vectors)\n",
" tsne = TSNE(n_components=num_dimensions, random_state=0)\n",
" vectors = tsne.fit_transform(vectors)\n",
"\n",
" x_vals = [v[0] for v in vectors]\n",
" y_vals = [v[1] for v in vectors]\n",
" return x_vals, y_vals, labels\n",
"\n",
"\n",
"x_vals, y_vals, labels = reduce_dimensions(model)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['cat' 'say' 'meow' 'dog' 'woof' 'man' 'dam']\n",
"[-29.594002, -45.996586, 20.368856, 53.92877, -12.437127, 3.9659712, 37.524284]\n",
"[60.112713, 11.891685, 70.019325, 31.70431, -26.423267, 21.79772, -16.517805]\n"
]
}
],
"source": [
"print(labels)\n",
"print(x_vals)\n",
"print(y_vals)"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import random\n",
"\n",
"def plot_with_matplotlib(x_vals, y_vals, labels, num_to_label):\n",
" plt.figure(figsize=(5, 5))\n",
" plt.scatter(x_vals, y_vals)\n",
" plt.title(\"Embedding Space\")\n",
" indices = list(range(len(labels)))\n",
" selected_indices = random.sample(indices, num_to_label)\n",
" for i in selected_indices:\n",
" plt.annotate(labels[i], (x_vals[i], y_vals[i]))\n",
" \n",
"plot_with_matplotlib(x_vals, y_vals, labels, 5)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Inspired by [Justin and [Dan I decided to make a 2018 review post. I believe that it would be a good way to reflect upon what I did in 2018 and make plans for 2019. This post will be a very high level overview of the projects and activities that I did in 2018 -- nothing personal. Pictures say a thousand words, so, I will include a lot. # January: **Eagle Ceremony** ![Eagle Ceremony **Started Second Semester of College** Classes: - Mechanics of Programming - Statistics - Discrete Math - Communications - Moral Issues **Brick hack 4** ![Sleep Deprived me at BrickHack # February: **RIT Career Fair** ![Overview Picture of the Career **Build my Blog in Node.js** ![What original website looked # March: **Upgrading Floppy Drive Project** ![Floppy drive project under **Designed Website for Hoffends** ![Hoffends # April: **Imagine RIT** ![RITlug imagine rit ![RITlug imagine rit # May: **End of Second Semester** ![RIT Tiger during the **Started SSA Research Job** ![Erie # June: **Steam Graph Project** <youtube src=\"DoDaHmyIPvQ\" /> ![Steam graph project example showing 3 friend # July **Summer!** <youtube src=\"t7s2alt0sQ8\" /> ![Taughannock ![Erie **Updated UI for the Blog** ![New theme of # August: **Presented at RIT's Undergraduate Research Symposium** ![Poster at the undergraduate research **Second Year of College** First year on the Eboard of RITlug as Vice President. Classes: - Linear Algebra - Analysis Of Algorithms - CS Theory - SWEN - Public Policy # September: **End of Summer :(** ![Biking # October: **Hacktoberfest** ![Github hacktoberfest # November: **Foss [Election Night ![FOSS Election Night **Rochester Maker Fair** ![RITlug booth at the maker # December: **End of Fall Semester** ![Biking\n",
"['inspired', 'by', 'justin', 'and', 'dan', 'decided', 'to', 'make', 'review', 'post', 'believe', 'that', 'it', 'would', 'be', 'good', 'way', 'to', 'reflect', 'upon', 'what', 'did', 'in', 'and', 'make', 'plans', 'for', 'this', 'post', 'will', 'be', 'very', 'high', 'level', 'overview', 'of', 'the', 'projects', 'and', 'activities', 'that', 'did', 'in', 'nothing', 'personal', 'pictures', 'say', 'thousand', 'words', 'so', 'will', 'include', 'lot', 'january', 'eagle', 'ceremony', 'eagle', 'ceremony', 'started', 'second', 'semester', 'of', 'college', 'classes', 'mechanics', 'of', 'programming', 'statistics', 'discrete', 'math', 'communications', 'moral', 'issues', 'brick', 'hack', 'sleep', 'deprived', 'me', 'at', 'brickhack', 'february', 'rit', 'career', 'fair', 'overview', 'picture', 'of', 'the', 'career', 'build', 'my', 'blog', 'in', 'node', 'js', 'what', 'original', 'website', 'looked', 'march', 'upgrading', 'floppy', 'drive', 'project', 'floppy', 'drive', 'project', 'under', 'designed', 'website', 'for', 'hoffends', 'hoffends', 'april', 'imagine', 'rit', 'ritlug', 'imagine', 'rit', 'ritlug', 'imagine', 'rit', 'may', 'end', 'of', 'second', 'semester', 'rit', 'tiger', 'during', 'the', 'started', 'ssa', 'research', 'job', 'erie', 'june', 'steam', 'graph', 'project', 'youtube', 'src', 'dodahmyipvq', 'steam', 'graph', 'project', 'example', 'showing', 'friend', 'july', 'summer', 'youtube', 'src', 'alt', 'sq', 'taughannock', 'erie', 'updated', 'ui', 'for', 'the', 'blog', 'new', 'theme', 'of', 'august', 'presented', 'at', 'rit', 'undergraduate', 'research', 'symposium', 'poster', 'at', 'the', 'undergraduate', 'research', 'second', 'year', 'of', 'college', 'first', 'year', 'on', 'the', 'eboard', 'of', 'ritlug', 'as', 'vice', 'president', 'classes', 'linear', 'algebra', 'analysis', 'of', 'algorithms', 'cs', 'theory', 'swen', 'public', 'policy', 'september', 'end', 'of', 'summer', 'biking', 'october', 'hacktoberfest', 'github', 'hacktoberfest', 'november', 'foss', 'election', 'night', 'foss', 'election', 'night', 'rochester', 'maker', 'fair', 'ritlug', 'booth', 'at', 'the', 'maker', 'december', 'end', 'of', 'fall', 'semester', 'biking']\n"
]
}
],
"source": [
"def process_file(fileName):\n",
" result = \"\"\n",
" tempResult = \"\"\n",
" inCodeBlock = False\n",
"\n",
" with open(fileName) as file:\n",
" for line in file:\n",
" if line.startswith(\"```\"):\n",
" inCodeBlock = not inCodeBlock\n",
" elif inCodeBlock:\n",
" pass\n",
" else:\n",
" for word in line.split():\n",
" if \"http\" not in word and \"media/\"not in word:\n",
" result = result + \" \" + word\n",
" return result\n",
"\n",
"\n",
"print(process_file(\"data/2018-in-review.md\"))\n",
"\n",
"from gensim import utils\n",
"print(utils.simple_preprocess(process_file(\"data/2018-in-review.md\")))\n"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"file = open(\"jrtechs.cor\", \"w+\")\n",
"for file_name in os.listdir(\"data\"):\n",
" file.write(process_file(\"data/\" + file_name) + \"\\n\")\n",
"file.close()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"from gensim.test.utils import datapath\n",
"from gensim import utils\n",
"\n",
"class MyCorpus(object):\n",
" \"\"\"An interator that yields sentences (lists of str).\"\"\"\n",
"\n",
" def __iter__(self):\n",
" corpus_path = \"jrtechs.cor\"\n",
" for line in open(corpus_path):\n",
" # assume there's one document per line, tokens separated by whitespace\n",
" yield utils.simple_preprocess(line)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"sentences = MyCorpus()"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"model = Word2Vec(min_count=1, size=10, sentences=sentences)\n",
"model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs) \n",
"model.save(\"jrtechs-word2vec.model\")"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('constrained', 0.9626229405403137),\n",
" ('logics', 0.9502561092376709),\n",
" ('slide', 0.9486078023910522),\n",
" ('clip', 0.9481177926063538),\n",
" ('syntactically', 0.9479268789291382),\n",
" ('solace', 0.9447624683380127),\n",
" ('containing', 0.9312535524368286),\n",
" ('claims', 0.928554892539978),\n",
" ('exponential', 0.9284722805023193),\n",
" ('scarce', 0.9266577363014221)]"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.wv.most_similar(\"story\")"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [],
"source": [
"x_vals, y_vals, labels = reduce_dimensions(model)\n"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 216x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_with_matplotlib(x_vals, y_vals, labels, 10)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}