I need to process natural language sentences in which words can appear with morphological variations: car -> cars; play -> playing, played; etc. There might be hyphens also, e.g. "dog-friendly hotel", "load-bearing walls", "rock-hard cake", etc. Are there any SOTA techniques in NLP for handling morphological variations in words in a robust way?
I was thinking that maybe working at the character level could help to learn morphological patterns in words (e.g. "ing" suffix at the end of a verb means that it's a gerund, etc.), but that would require using some sort of character-level embeddings instead of the typical word-level embeddings which are commonly used. So I'm not sure if this is the best approach, and I'd rather be informed of the current state-of-the-art before proceeding.
Motivating context: I'm working on VQA (visual question answering), and I'm still trying to figure out how to best implement the NLP branch that will process the questions. I want to implement a robust model, that's why ideally I would like it to be robust to morphological variations in words, which happen all the time in natural language.
Note: although my motivating context is VQA, answers to this post need not be restricted to the VQA domain, so feel free to forget about VQA when answering if you want.