Changes

Jump to navigation Jump to search
no edit summary
==Project==
This is a ML project that classifies webpages as a demo day page containing a list of cohort companies, currently using scikit learn's random forest model and a bag of words approach. Currently about 80% accuracy, though this would be vastly improved with more training data. The classifier currently really overfits the training data. The classifier itself takes:
<strong>FeaturesInput features:</strong> The frequencies of each word from words.txt in the webpage. This is calculated by web_demo_features.py in the same directoryand output to a tsv file. It also takes : the frequencies of years each word from 1900-2099words.txt, month words grouped in seasons, and phrases of the form "# startups". It also takes the number of simple links (links in the form www.abc.com or www.abc.org) and the number of those that are attached to images. It also takes the number of "strong" html tags in the body. These features can be extended by adding words to words.txt or regexes to the PATTERNS variable in web_demo_features.py. There is also unused code for generating tfidf frequencies, this might improve the classifier if we had more data. Currently it does not.
<strong>Training classificationsdata:</strong> A set of webpages hand-classified as to whether they contain a list of cohort companies. This The classification is stored in classification.txt, which is a tsv equivalent of Demo Day URLS.xlsx. Keep in mind that this txt file must be utf-8 encoded. In textpad, one can convert a file to utf-8 by pressing save-as, and changing the encoding at the bottom. The HTML pages themselves are stored in DemoDayHTMLFull.
A demo day page is an advertisement page for a "demo day," which is a day that cohorts graduating from accelerators can pitch their ideas to investors. These demo days give us a good idea of when these cohorts graduated from their accelerator.
<strong>Usage:</strong>
* Steps to train add training data to the model: Put all of the html files to be used in DemoDayHTMLFull. Put corresponding entries into demo_day_cohort_lists.xlsx(only the columns "URL" and "Cohort" are necessary, but they must be in alphabetical order. data_reader.py will throw error otherwise), then export it to classification.txt. Convert this to utf-8(textpad can do this, just save as -> encoding:utf-8). Then run web_demo_features.py to generate the features matrix, training_featureshand_training_features.txt. Then, run demo_day_classifier_randforest.py to generate the model, classifier.pkl.
* Steps to run the model on google results: In the file crawl_and_classify.py, set the variables to whatever is wanted. Then, run this command:
python3 crawl_and_classify.py
It will download all of the html files into the directory CrawledHTMLPages, and then it will generate a matrix of features, CrawledHTMLPages\features.txt. It will then run the trained model saved in classifier.pkl to predict whether these pages are demo day pages, and then it will save the results to CrawledHTMLPages\predicted.txt. The HTML pages are then moved into CrawledHTMlPages/demodaypositive/ or CrawledHtmlPages/non_demoday negative/ based on their prediction. If you want to run the classifier on html files already downloaded, the function classify_dir in crawl_and_classify.py will do this.
==Files and Directories==
* CrawledHTMLPages
** Contains the classified html file results from crawl_and_classify.py, stored in positive and negative folders based on how the html files they are classified.
* DemoDayHTMLFull
** Contains the training data for the classifier. demo_day_cohort_lists.xlsx is the classification (converted to same as classification.txt before use, which is actually used by the program, but the excel file has hyperlinks), and the html files are used for generating the features matrix.
* demo_day_classifier_randforest.py
** The classifier itself. A pkl'ed pickled version of the classifier should be saved in classifier.pkl.
* web_demo_features.py
** Generates the features matrix from a directory of html files to be used in the classifier. See input features.
* words.txt
** The words for the features. The frequency of each word is used as a feature (maybe change this to tfidf?)
** Generates a little image to show how the number of features differs between demoday and non-demoday pages.
* delete_duplicate_classified.py
** Looks through CrawledHTMLPages/positive and CrawledHTMLPages/negative and deletes all the duplicate files. Run this after the crawler runs, because there are lots of duplicates from google results.
* classify_all_accelerator.py
** Taking the TSV files MasterAcceleratorList.tsv and SplitAcceleratorList.tsv, it googles and classifies all accelerators from MasterAcceleratorList that are not already in SplitAcceleratorList.These tsv files were exported from the Master Variable List on google sheets.* google.py/google_crawl.py** Functions for googling stuff
==Possible further steps==
Changed Change from Bag-Of-Words model to a more powerful neural network, perhaps an RNN, or use full tfidf monogram/bigram frequencies. This would likely need even more data, though. The best way to collect more data would probably be to automate/make easier the process of data collection, and just have a few people collect a few thousand points of data, or use mechanical turk. This would likely improve accuracy a lot, and allow for more sophisticated classification methods.
226

edits

Navigation menu