Stephen Pryor is a computer science masters student at the
University of Texas at Austin

About Me

I graduated from Arkansas Tech University with a BS in Computer Science while minoring in Mathematics and am currently a computer science masters student at the University of Texas at Austin. My general areas of interest are artificial intelligence and neocortically inspired learning/intelligence. In particular, I am interested in language grounding: how to unite multi-modal perception with the learning and usage of natural language to make both more intelligent machines and more human friendly linguistic interfaces. I want to know how language relates to what we think about, how we think about it, and how we articulate what we know.

For fun, I like to cycle, swim, run and play piano (and some guitar). Check out some of my piano musings here.

Curriculum Vitae

Education
(MS) The University of Texas at Austin Expected Spring 2013
Computer Science
Focus: Machine Learning and Natural Language Processing
(BS) Arkansas Tech University Received 5/2011
Computer Science
Minor: Mathematics
Magna Cum Laude (CS GPA: 3.95) - Dean's list all semesters
Research Interests
Broad Competence AI
Machine Learning
Natural Language Acquisition and Grounding in Perception
Multi-modal Perception
Linguistic Interfaces
Work & Teaching Experience
Software Development Engineer July 2013 - Now
Amazon - Seattle, WA
Teaching Assistant Jan 2013 - May 2013
The University of Texas at Austin - Austin, TX
Intern Graduate Student July 2012 - August 2012
eBay, Inc. - Redmond, WA

Assisted with table modification in a data warehouse involving writing SQL, testing, and then pushing code to production

Developed Shell scripts for sharing data between servers

Intern - Data Research Analyst June 2011 - August 2011
Acxiom Corporation - Conway, AR

Gathered, organized, and analyzed data gathered from web scraping and manual sources to research and develop methods to exploit attributes of natural language within specific problem domains to automate the process of extracting meaningful data for businesses.

Math Tutor Jan 2010 - May 2011
Arkansas Tech Mathematics Help Lab - Russellville, AR
Freelance Web Developer Summer 2009 - Summer 2010
Conway, AR

Designed & developed a web presence for various small businesses nationwide.

Projects & Research Experience
Senior Design Project Spring 2011

Designed and implemented a web based system for collecting and managing user information for an annual university outreach event.

Independent Undergraduate Research Project Summer 2010

Used a self-implemented version of hierarchical temporal memory to experiment with the possibility of learning the meaning of words as associations between invariant forms in an inter-modal learning environment based on the premise that language is a mapping onto a spatiotemporal model of an environment's persistent structure.

Skills

C++, Python, Scala, Java, PHP, Javascript (Jquery), SQL, HTML, CSS

Associations & Honors

International Society for Computers and Their Applications (Member)
The National Society Of Collegiate Scholars (Member)
PHI THETA KAPPA International Honors Society (Member)
ATU University Scholarship [full tuition, room and board] (Recipient)

Publications

Pryor, S. Learning the Meaning of Words as Associations between Invariant Forms ISCA 26th International Conference On Computers And Their Applications (pdf)

Pryor, S., Milligan, J. A Parser-Generator For Building Extensible Grammars 10th Mid-south Consortium for Computing Sciences in Colleges (pdf)

Stuff

Here is a collection of projects, websites, grad school advice and other miscellaneous items which I find interesting.

Personal Projects

Code

Here is a collection of code that I have developed to have fun, to review, to help others, or just for class. Feel free to use any of it. I am also in the process of migrating this code to github.

Misc

A Quick Fibonacci Function

This project contains a python function to rapidly compute the n-th fibonacci number.

Data Structures

A Binary Search Tree

This project contains python and C++ code for a binary search tree. Methods include insert, remove, empty, size, search, and inorder printing.

A Singly Linked List

This project contains python code for a singly linked list. Methods include insert, remove, empty, size, search, and return the list a python list.

Search Algorithms

Binary Search

This project contains python code for the binary search algorithm.

Sorting Algorithms

Bubble Sort

This project contains a python implementation of bubble sort.

Heap Sort

This project contains a python implementation of heap sort.

Selection Sort

This project contains a python implementation of selection sort.

Insertion Sort

This project contains a python implementation of insertion sort.

Quick Sort

This project contains a python implementation of quick sort.

Merge Sort

This project contains a python implementation of merge sort.

Programming Languages

A Haskell Implemenetation of Simple Type Inference

This project contains Haskell code for performing type inference (not including evaluation) on a simple language. The language consists of variables, lambda functions, applications, let binding, ints, bools, boolean operators, and recursive value declarations.

Machine Learning

Simple Linear Regression

This project contains python code for a simple linear regression. The code generates linearly related data points and then performs linear regression on the data. The results are plotted using Matplotlib.

A Particle Filter for Mobile Robot Localization

This project contains a python implementation of a particle filter. Testing code is also included to display the filter running in realtime using Matplotlib, provide the number of landmarks and particles as arguments, and to simulate kidnapping. Also check out the slightly modified version of the python code running in javascript and displayed interactively in the browser.

Two Class Logistic Regression

This project contains python code for simple logistic regression. There is code for generating some random test data and code for performing classification and displaying the results using Matplotlib.

A Naïve Bayes Classifier

This project contains python code for a general Naïve Bayes Classifier with laplace (add-alpha) smoothing along with extra code for text classification. In this case, I used the code to perform sentiment analysis on this IMDB movie review database for which the classification accuracy is ~81%. Changing the features from unigram counts to bigram counts increases the accuracy to ~86.7% (and using trigrams will be about 1.4% better).

The K-means Clustering Algorithm

This project contains python code for the Kmeans clustering algorithm with either simple random centroid initialization or Kmeans++ initialization. There is also code for click-to-add 2-D data points and rendering the pre and post clustering results using Matplotlib.

The Mean Shift Clustering Algorithm

This project contains python code for the mean shift clustering algorithm. There is also code for click-to-add 2-D data points and rendering clustering results using Matplotlib.

Expectation Maximization for Gaussian Mixture Models

This project contains python code for the expectation maximization algorithm for gaussian mixture models with simple random initialization. There is also code for generating 2-D data points from gaussian distributions and rendering the pre and post clustering results using Matplotlib and Numpy. The code can take the number of clusters as a command line argument as well as displaying the cluster assignments as EM runs.

A Genetic Algorithm for Evolving Sorting Networks

This project contains python code for evolving sorting networks for 16 inputs (trying to sort the inputs while minimizing the network size). There is also code for coevolving a set of inputs to force the popluations to adapt to more difficult inputs. Performance over time for both average network length and average network performance are included using Matplotlib.

Natural Language Processing

An N-gram Language Model

This project contains python code for a constructing n-gram language models. You can provide the value of n to use the same class to make unigram, bigram, trigram, etc. language models. The N-gram uses Laplace (add-alpha) smoothing and handles OOV words. Extra functions are included for getting the perplexity score of the model on test data as well as utility functions for loading and tokenizing WSJ .pos files.

A Bidirectional N-gram Model

This project contains python code which extends the above n-gram model to be bidirectional. A bidirectional model simply involves linearly interpolating the token probabilities from a left-to-right and right-to-left n-gram model. This simple approach leads to much better perplexity scores.

A Bigram HMM Part-of-Speech Tagger

This project contains python code for a hidden markov model (HMM) used for part-of-speech tagging. The code uses a bigram POS tagger which uses deleted interpolation for unknown tag sequences (which is only slightly helpful for bigrams) and very simple unknown word smoothing. The code includes functions for loading WSJ .pos files as well as viterbi decoding for tagging new sentences and an evaluating function to get the accuracy on a tagged test set. This code generally gets training set accuracy of about ~95% and test set accuracy of about ~88%.

spryor02 [at] utexas [dot] edu