Classifying 200k articles in 7 hours using NLP
salt.agency
salt.agency
1. Experienced ML practitioners will be unimpressed with the ML task generally (simple problem, no comparison with common models, no use of common dataset, no lit review) and wish that there was more detail in model design.
2. Inexperienced ML practitioners will be happy with the birds-eye view of NLP tasks but wish there were more implementation details.
3. Potential clients (non-technical) will get lost in the details/lingo and wish there were case studies or a vision of what this service can accomplish for them/their business.
4. Potential clients (technical) and SWEs will wish they got a better look at the GUI, got an explanation of the stack, and wonder about APIs/integration with whatever it is they already do.
Perhaps this might explain why literally every other comment at the time I'm writing this is asking for additional details. Pick one or two!
- Snorkel (training data curation, weak supervision, heuristic labeling functions, uncertainty sampling, relation extraction): https://github.com/snorkel-team/snorkel
- AllenNLP (many pretrained NLP research models for tasks beyond text classification, model training and serving, visualization/interpretability utilities): https://github.com/allenai/allennlp
- Spacy (tokenization, NER/POS + tagging visualizer, pretrained word vectors, integration with DL models): https://github.com/allenai/allennlp
-huggingface Transformers (latest and greatest pretrained models, e.g. BERT): https://github.com/huggingface/transformers
- ...or a barebones “from scratch” solution in less than an hour with a Colab notebook and scikit-learn (preprocess text into tf-idf vectors, LSA/NMF to generate “document embeddings”, visualize embeddings with t-SNE/UMAP [facilitates weak supervision/active learning], classify with LogReg/RF/SVM/whatever). You could also tack on pretrained gensim/TF/PyTorch models quite easily as a next step. But this basic flow quickly gives you a handle on your corpus.
By the way, the docs for DeepDive (the predecessor of Snorkel) are some amazingly detailed background reading: http://deepdive.stanford.edu/example-spouse
Bonus—An excellent interactive Spacy course from Ines Montani (also includes a template to build similar courses!): https://github.com/ines/spacy-course
I've tried multiple times (although mostly with DeepDive) and it was pretty complicated to get to do anything outside the demos.
The Spacy link is here BTW: https://spacy.io/
But all the info we get about that is
"The last step was to combine the four binary models into one multiclass model, as explained in the previous section, and use it to classify 1M new documents automatically. To do this, we simply went on the UI and uploaded a new list of documents."
Great intro to NLP article, but very light on the actual implementation details and dataset.
Disclaimer: No affiliation, only sharing for those who are curious
Did you try other solutions like ULMFiT [1]? Seems like the exact use case for that. Although it might be overkill for just 4 categories.
There are some well known text classification datasets, e.g. the Reuters news dataset from David Lewis of Bell Labs:
http://www.daviddlewis.com/resources/testcollections/reuters21578/
More background here: https://link.springer.com/content/pdf/bbm%3A978-3-642-04533-2%2F1.pdf
Here's a result from ReelTwo's Classification System circa 2003 (Based on a bayesian learner; related to the U Waikato WEKA ML system) if you'd be up for comparison: https://web.archive.org/web/20040606002449/http://www.reeltwo.com/datasets.html
10 categories
2,535 documents
15 build time (~170 docs/sec; these were short news abstracts; see pdf for example)
0.9121 F-measureBuild Time is the time to load, model and evaluate (using Leave-One-Out evaluation) a dataset on a WinXP/1GHz Celeron/256MB computer. F-Measure is the micro-averaged F-Measure across all categories in the dataset.
If it was hard for humans to understand that, just imagine how difficult it would be for NLP to understand it. :)