If I understand correctly, we are interested in soft multilabel classification, where a single text can have multiple correct genres.
According to your comment, we don't have any training data, just a list of keywords associated with each genre.
We can try computing the similarity between each document and each keyword list:
- Normalize the document (convert to lowercase, remove punctuation, diacritics, non-alphanums, etc)
- Remove stopwords
- Convert the document to tf-idf vector over our genre keyword vocabulary: Each document gets an n-length vector where each entry is the frequency of the ith genre keyword in the document. Normalize this vector to magnitude 1.
- Convert each genre keyword list to a tf-idf vector in the same way (again over the keyword vocabulary for all genres).
- Compute the cosine similarity between the document vector and each genre vector.
For each document, this will give us a number in the range [0,1] for each genre. For example:
Comedy Drama Fiction Romance Mythology Adventure
Text #1: 0.15 0.11 0.03 0.00 0.00 0.07
If we were doing single label classification we could normalize each row to add up to 1 and we might have a working model. However there is no such trick for multilabel classification here. We don't have a good way to calibrate these values into probability estimates.
At this point the only solution I see is to build a small training set so we can fit our model to actual data.
After gathering some training examples, we can run a multilabel regression with sigmoid activation and binary crossentropy loss with the cosine similarities as input features to get a probability estimate for each class.
Using this method our list of genre keywords will at least save us having to build a large training set to solve the problem directly with bag-of-words or similar approaches.