Changes

Jump to navigation Jump to search
no edit summary
{{Project|Has project output=Tool|Has sponsor=McNair ProjectsCenter
|Has title=Demo Day Page Google Classifier
|Has owner=Kyran Adams,
|Has start date=2/5/2018
|Has keywords=Accelerator, Demo Day, Google Result, Word2vec, Tensorflow
|Has project status=ActiveSubsume
|Is dependent on=Accelerator Seed List (Data), Demo Day Page Parser
}}
==Project==
==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>Input features:</strong> This is calculated by web_demo_features.py in the same directory and output to a tensorflow project that classifies webpages as either a demo day page or nottsv file. It takes: the frequencies of each word from words.txt, month words grouped in seasons, currently using logistic regressionand phrases of the form "# startups". The classifier itself should take It also takes the output number of Peter's DemoDayHitssimple links (links in the form www.abc.com or www.py program abc.org) and output whether the page is a demo day pagenumber of those that are attached to images. It is trained on a file outputted also takes the number of "strong" html tags in the body. These features can be extended by DemoDayHitsadding words to words.txt or regexes to the PATTERNS variable in web_demo_features.py and a hand-classified set of google results. There is also unused code for generating monogram/bigram tfidf frequencies, some of which are demo day pagesthis might improve the classifier if we had more data.
It may later take other inputs<strong>Training data:</strong> A set of webpages hand-classified as to whether they contain a list of cohort companies. The classification is stored in classification.txt, such 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 text of encoding at the page itselfbottom. 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.
The random forest implementation doesn't work on windows, so it is located in the Z drive to be run from the linux box. Located<strong>Project location:</strong> E:\McNair\Projects\Accelerators\Spring 2018\google_classifier\ Z:demo_day_classifier\demoday
<strong>Usage:</strong>
Training * Steps to add training datato 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: E:\McNair\Projects\Accelerators\Fall 2017\Demo Day URLspython3 web_demo_features.py #to generate the features matrix, hand_training_features.txt python3 demo_day_classifier_randforest.py #to generate the model, classifier.pkl.xlsx
==Possibly useful programs==* 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.pyIt 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/positive/ or CrawledHtmlPages/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.
Google bindings ==Files and Directories==* CrawledHTMLPages** Contains the classified html file results from crawl_and_classify.py, stored in positive and negative folders based on how they are classified.* DemoDayHTMLFull** Contains the training data for pythonthe classifier. demo_day_cohort_lists.xlsx is the classification (same as classification.txt, 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 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?)* data_reader.py** Helper functions to read in the data for the classifier.* crawl_and_classify.py** Googles a bunch of results for a given query and list of accelerators and their years, and then classifies the html pages into CrawledHTMLPages.
E:\McNair\Projects\Accelerators\Spring 2017\Google_SiteSearch===Other scripts===* feature_diff.py** 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
PDF to text converter
E:\McNair\Projects\Accelerators\Fall 2017\Code+Final_Data\Utilities\PDF_Ripper==Possible further steps==
HTML Change from Bag-Of-Words model to text converteda more powerful neural network, perhaps an RNN, or use full tfidf monogram/bigram frequencies. This would 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.
E:\McNair\Projects\Accelerators\Fall 2017\Code+Final_Data
[[Demo Day Page Parser]]
*https://machinelearnings.co/tensorflow-text-classification-615198df9231
*http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/
*httpshttp://statsscikit-learn.stackexchange.comorg/stable/questionstutorial/181text_analytics/how-to-choose-the-number-of-hidden-layers-and-nodes-in-a-feedforward-neural-netwworking_with_text_data.html

Navigation menu