I am long-time engineer with almost zero machine learning experience, who is trying to determine a good starting point to solve my problem (hopefully using machine learning).
The problem (I'll keep it simple):
- Ultimately, I wish to be able to automatically assign a category to a financial transaction description
- For example: "121217 POST XX123 TONYS COFFEE" with an amount of $5, should map to "Food & Drink"
- Transaction descriptions are unstructured and often consist of unnatural language; also sometimes words can be truncated, or concatenated to others words
- There may or may not be "features" such as country/region codes, dates, etc., in a description
- Overall, there is no guarantee to the order or structure of the tokens in a description
- A transaction will always have an amount
- I maintain a list of potential categories (maybe, 20 or 30 in total)
- I could maintain a huge list of business names mapped to their distinctive category (may not be necessary to use, though?)
- There is an existing set of training labelled data (raw descriptions/amounts and the category they belong to; in the thousands, not millions)
A best effort to extract a business name from a description, could be considered, but it would be great if that was not necessary for the accuracy of a final system.
I was originally thinking about NLP somewhat, but as this is fairly non-natural language, with no semantics, I believe there is no use of NLP. NER (named entity recognition) is maybe not really helpful either, as it is generally required to understand a text somewhat in order to determine entities.
I am toying with the idea of downloading GloVes pre-trained word vectors (https://nlp.stanford.edu/projects/glove/), to help determine words related to categories, though I am unsure how as of now or how well that might work. The idea might be if I trained something to say "Jimmy's Diner" -> "Food & Drink", then, for example, "Bobby's Rest" might map to "Food & Drink" too, as that is the nearest category to it in terms of word relationships/distance. It's depends on the possibility of being able to query the word embedding in such a way, as well as train it.
I guess in other to train a system using labelled data, I'd need to extract features from the description. The problem is, what features? Some features might be useless (unique identifiers, concatenated words, etc.). I'd need the system to be somewhat forgiving in terms of polluting it with useless features (avoidable to a degree, but probably not inevitable).
Either way, it would be great to hear how some of you experts might begin to approach this: what ML techniques would you deem most suitable?
I have researched machine learning and deep learning & the associated frameworks quite a bit over the last few days, but there is so many areas, with so much potential, that it is hard to to know where to begin.