I have a data set that has 10k documents, each of which is mapped to one and only one of 4k categories. This forms my training set.
My requirement is that when a new, unseen document comes in, I need to be able to identify all the categories (from among the 4k categories) to which it belongs.
What is the best way to go about doing this? My problem conforms to what's generally known as multi-label classification in the literature, and I see plenty of papers, but no readily available software. I was hoping to know if anyone is aware of any off-the-shelf tools that would do this task.
Thanks in advance.
Update 1: Based on some comments below I am updating my question. Although I have 4k categories and only 10k documents, the distribution of these documents into categories is highly skewed - in other words, there are a small number of categories that have most of the training documents. I am OK with retaining categories that have sufficient training data, and throwing away the other categories if need be. The bigger problem is identifying all the categories of unseen document.