I am currently trying to design a graph-based approach for content tagging. In principle I am trying to two two things:
Use an algorithm such as Latent Dirichlet Allocation (LDA) or some variant of it to discover terms in documents that relate to a certain topic, thereby allowing me to tag a document as relating to that topic. None of the documents are labelled yet, so this step is entirely unsupervised
Allow user feedback on whether the labels are correct. This firstly allows us to sharpen labels on specific documents (i.e. override the output from 1. if incorrect). And secondly, it allows us to use these user-defined labels in a semi-supervised learning algorithm, which might perform better than what is done in step 1 (though this part is out of scope for this question).
Step 1 I could represent with a simple graph as follows:
The LDA algorithm outputs the terms found in the document along with some weighting according to their frequency. In addition, it outputs a set of topics along with the terms that are associated with each topic (again, weighted according to how strongly the term is associated with the topic).
Now for point 2 I need to incorporate user feedback, so I need to link a user to a document to indicate that the user has read it and then link the user to the topic, indicating that the user believes the document is about that topic.
But this doesn't really work. "Document is_read_by User" correctly describes the relationship between the document and the user, but "User believes_document_related_to Topic" is not a valid relationship because it is contingent on a specific book - in this case 1984 by George Orwell.
My question is, how could I build this relationship with a graph? I.e for each user I want to be able to capture the following information.
- According to User "Karl" the document "1984 by George Orwell" is about the topic "Surveillance"
(Of course, the idea is to allow multiple users to give feedback, thereby strengthening/weakening the relationship between the document and the topic).