I've been asked to create a program that will rank similar texts to an input text given a collection of text.
So far I've been using a tdidf representation and cosine similarity with a lot of regex-based cleaning. The vocabulary is extremely domain specific, with a lot of codes, equipment names and tables.
The major problem that I find is to prevent from retrieving similar text based on unimportant parts of the input. For example, for "I have a problem on machine ABCD module XYZ" I wouldn't like to retrieve "I have a problem on machine EDFG module WNM". But maybe I would like to retrieve "ABCD has issues in XYZ".
I've been solving this by identifying the problematic cases and adding them to a cleaning function. For example, I could remove words {"I", "have", "a", "problem", "on"} from vocabulary as I don't want them to contribute to my similarity function. This approach is obviously not very scalable.
The second problem that I face is how to figure out the performance of the model.
I've been solving this by identifying the problems and adding cases to a cleaning function
for anyone to suggest improvements on your approach $\endgroup$