views:

85

answers:

4

I am building a job site -- yes, there isn't enough of those yet. One of the problems I came across in my research is how to match the relevant resumes to the interested recruiters. The most boring solution I thought of is to use textual analysis to parse the resumes for tags recruiters specify -- which has a drawback: the resume might be packed with hidden keywords or buzzwords. Then it's interesting to figure out how to get around that. What would be a more interesting way of solving this problem? (Maybe some kind of machine learning algorithm? Then you have to train this beast, too.)

So I don't know how I'll do it yet. I'd welcome any suggestions you could offer.

+2  A: 

Don't allow the candidates to write plain resume. Instead, create a form with various fields (degrees obtained (which institutions?), expected salary, experience/skill level in specific technology, job type (contractual, permanent), distance of job from specific address etc.). Similarly, create form with various relevant fields for employers. Create these forms in such a way that matching of one form against another is possible. Leave as many fields as possible non-mandatory. Then employ an algorithm that is most relevant to match these forms. There should be two such algorithms: one with which candidate can search job, with another employers can search candidates.

Donotalo
I do like your solution, but one thing I hate about job search is having to fill so many damn forms.
picardo
@picardo: if possible, make every field optional. users may or may not put anything there. divide the complete form into several `tabs`. keep the smallest/easiest tab as default form. as users fill up the forms, you can `live display` results in a `div`, or at least `live job count`.
Donotalo
The project requires ability to upload resumes. I suppose I can parse the resume and match its content to the fields of a form, though.
picardo
+1  A: 

The key is to not worry about matching and instead perfect sorting. That was the key to google -- anyone could find 1,000,000 hits -- they figured out the top one.

Frankly, if I type Java, I really expect (want) the resume to have Java in it -- how do you find me the best candidate though?

Lou Franco
That's a good question. There won't be a million job seekers on this site, though, so that could be the difference. But if recruiters wanted to sort the best candidate, you would need to allow recruiters to rate the resumees, right? That way the system could learn about the candidates.
picardo
When I search for resumes I'm pretty satisfied with zip code distance, number of years experience and some keywords. Usually that narrows it down quite a bit. Not sure you need to worry much beyond that -- instead figure out how to make sure that the best candidates use your service so that I think that using it will give me access to them.
Lou Franco
A: 

The candidate can be asked to enter the data in fields, but the problem is he might use similars word to the word of interest that might be missed like for HTML, he might enter HyperTextMarkupLanguage. So the system must be such that it learns from unidentifiable jargons, this can be accomplished by using a synonym of words to words of interest. Like say I wanna get a candidate who knows scripting language instead of searching 'scripting language' I can get the synonyms like perl,python,ruby for it and use it to compare fields.But this requires you entering data in each time a new scripting language comes up.

If you hate entering data into system, you can query the Web say Wikipedia to find what kinda language 'Perl' is and parse it.This makes system adaptable even to new technologies, as we all know technology keeps evolving so this can be useful.

ShyamLovesToCode
+1  A: 

Parse the free-text résumé into words. Remove stopwords (and, or but, the, etc). Store the remaining words in a database with the résumé.

You need, initially, a subject matter expert who will rate CVs against recruiters' requests. The expert will give a score, say 0-100 on how well each CV matches a given request. Once this process is boot-strapped, you can use one of the classic matching algorithms to select CVs which seem close to those that were well-rated by the experts.

Probably start with the simple N nearest Neighbours and move on to fancier ones like Principal Component Analysis or Singular Value Decomposition later on.

You can find extensive discussions and code to implement these algorithms on the Netflix Prize Forum

smirkingman
Cool, but I'm curious: how would you correct for the "buzzword packing"? Also I'm wondering about the relevancy issue. How does the algorithm figure out the relevance of a resume? You can't do frequency of occurrence, nor place of appearance. What else is there?
picardo
CV A contains words J,K,L. CV B contains J,K,M. Request R contains words P, Q. Expert judges A relevant to R. Recruiter asks P,Q. System presents SUMMARY of A and B because B shares J,K with A. Recruiter shows interest in B (e.g. by clicking 'details'). System infers that M is (putatively) relevant to P,Q. You'll need to work out scoring and reinforcement, but that's the idea. The method just associates presence of words, no counting. It works best in situations like yours where CVs have lots of words, which allow the algorithms to discriminate well. HTH.
smirkingman