I am relativity new to machine/deep learning and NLP. As a part of my Phd thesis I have scraped vast number of job vacancies (most of them are in Polish, and about 10% are in English ones) and then extracted required skills/competencies. As an output I got a vector of strings contains single skills/competences. I performed initial preparation (removed extra spaces, special symbols, stop words etc.) and built then a frequency distribution table to figure out the most demanded skills. The most commonly required skills were as follow:

prawo jazdy kat b ## driver license
umiejętność pracy w zespole ## team work
wykształcenie wyższe ## higher education
czynne prawo jazdy kat b ## driver license
znajomość pakietu ms office ## MS Office
prawa jazdy kat b ## driver license
prawo jazdy kategorii b ## driver license
fluent english
doświadczenie na podobnym stanowisku ## work experience
dobra znajomość języka angielskiego  ## English
excellent english skills
doświadczenie ## work experience

As you may see some of these competencies are quite similar. The problem is that job offers were provided by a different employers. European classification of skills/competences qualifications and occupations define about 3500 different competencies for instance.

My aim is to create trivial classifier using logistic regression, SVM or random forest that would be able to classify skills in real time using pre trained model. The problem is that I can not label vector of unique skills because of vast number of skills within its synonyms. I spent a while trying to figure out a solution.

So, the idea was to perform cluster analysis and to put similar skills into separate groups (clusters) and then label this clusters. In this case I would have much less group to label. Moreover, I would have a lot of synonyms within each group, which would increase precision of classification (I guess). Using labelled data set I would be able to trained model, and then to classify future job vacancies (skills). However, as I said I am new to machine learning, so I am not sure whether my solution would be good enough.

So, I am looking for advice/tutorials/links that would help me to solve my problem rather than for complete solutions. I can use both R and Python. Would be appreciated for any help.


I can think of two approaches.

  1. You could use term-frequency/inverse-document-frequency (tf-idf) to cluster the vectors. Personally, I would start by first clustering the full text of the original job vacancies and then use this to assign clusters to the vectors. I have the feeling that it will outperform clustering directly the vectors.
    There are implementations both in R and in Python. I would use Python for clustering in a language other than English. You can use TfidfVectorizer from sklearn.

    I've a post on medium with an example of clustering wikipedia articles in Python if you are interested.

  2. You can start by a list of key/basic skills and then try to match your vectors to the items of this list. For defining a distance between words/phrases you can:

    a. use Jaccard index (ex. see this)

    b. use SpaCy in Python to find descriptions that are similar. I believe there is a language model for Polish. I haven't tried it but I would use something that is described in "The Beginner’s Guide to Similarity Matching Using spaCy". Since you are trying to find the similarity between phrases (not single words) you might also want to consider this stackoverflow discussion.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.