I have a dataset of sentences that have been annotated with labels from a hierarchy. The hierarchy is a selection of music genres. It is a tree, not a DAG - each node has one parent and one parent only. Here is an extract as an example:
root = music
parent = latin
child = afro-cuban
child = salsa
child = brazilian
child = axe
parent = non-latin
child = classical
...
For the sentence Mozart is the best
for example, from the collected annotations, the majority agree the class label for this sentence or ground truth is classical
. From the hierarchy, we know that classical
is also a form of non-latin
music, which is a form of music
. Whereas i prefer salsa
might have been annotated as latin
.
In terms of classification, flattening the hierarchy - which I have done - intuitively does not solve the problem, as we're completely ignoring the class hierarchy. It also produces low results whilst using Weka, and a selection of classifiers, as we're faced with a multiclass classification problem.
My problem is, I've read very vague literature and online articles about how hierarchical classification is implemented. I'd like to use Weka and Python. But I just wanted clarification of how to perform hierarchical classification in this situation. So my questions are:
1) what is the best suggestion of going around this? Would implementing a top-down approach be the best option? If I do this, how do I avoid the problem of classifying incorrectly on each level? i.e. it could predict latin
on level 1, and classical
on level 2. What about a binary classifier? I'm open to suggestions.
2) how does training and testing data come into this?
3) how can one evaluate classification performance? Particularly with a top-down approach, as we'll have evaluations for every separate level.