MentorHack results: chatbot for extracting tasks from dialogs, services for building career paths and commands
Under the cutter, a little about the hackathon: through weekdays, FSO checks and a forum to the winners with a chat bot for automatically selecting tasks from correspondence, a service for building career paths to desired positions in the future and assembling teams for projects.

To begin with, we recall that in the base track of the hackathon there were 2 conditional thematic areas: all kinds of matching and elements of AI Boss with a prize pool of 500,000 rubles.
As well as two equally large-scale special operations:
- SuperJob with the task of building career paths from the current resume to the desired job with an additional prize of also 500 tr
- BusinessChain with the task of assembling teams for the project based on the description of the project and a summary of candidates with a prize of 300 tr
Since there were quite a few participants - 200, it was decided to weed out the participants in the hackathon process. To do this, on the first and second days, we discussed with the participants their ideas and the current implemented functionality in order to assess the completeness of the project. They walked quite cheerfully in the company of curators from a wide variety of companies and funds breaking through the guards, although most of the teams were not ready for such a format - the good old format of a presentation presentation was expected. 30 teams were allowed to the finals, having received a lot of joyful emotions about the dropout of 20 and talk about the fact that you can not fill in the methodological concepts and tables from the designers instead of the code.
In the final, the jury members evaluated the teams according to four criteria:
- technical implementation,
- level of elaboration,
- relevance and relevance,
- commercial potential and scalability.

As expected, in fact, in most cases, the jury in fact gives each team one mark, expressing the general impression - liked / disliked, so the scores on the four criteria were very close.
For the final assessment, the jury's opinion was averaged with an assessment from our curators on the quality and performance of the code.

The graph shows that good projects almost always received high marks for both presentation and technical implementation. A separate entertainment was the real-time processing of a jury's estimates of 20 people in the absence of the Internet and a working printer to the sounds of the versatile pavilion. But we put a couple of machine drivers for Excel and managed, in the end we got these ratings:

Winners about their projects
Jetlex Nota
Project - bot-assistant for working with chat rooms in natural language with highlighting of delivered tasks in correspondence. To get started, you need to add Nota to the chat and register with Trello. Then the bot will tell you what to do - it's simple. After adding to the chat, the bot will detect messages where one user sets a task to another. In this message, Nota determines the deadline and the contractor, and then, based on the data received, she creates a task in trello. At the same time, Nota itself generates the name of the task, based on the essence of the task, using a neural summarizer. Nota distinguishes regular messages and flood from real tasks.

For example, from the text: "@ viktorboyko09, prepare a quarterly report for next week! The one we spoke on Skype yesterday." Nota will do a task in Trello with the title “Report Preparation”, valid for “until 02/26/2018 (Nota counted 7 days from the date of setting the task)”, responsible “Victor Boyko” and the description corresponding to the original text.

To train the classifier, a dataset was created on the basis of messages from the forums drom.ru, moskvaforum.ru, women.ru, antiwomen.ru, vashdom.ru - in order to determine which messages are not tasks. And as examples of tasks messages from youdo.ru and fl.ru were collected. As a result, more than 35 million examples were collected, of which 3 million were tasks. It was the data on the tasks and their headings that we used to train the summarizer (seq2seq of the OpenNMT implementation). During the competition, we found that tasks are often posed precisely in the imperative mood, and tasks in our dataset used verbs in the infinitive (for example, “[you need] to paint the fence”). Therefore, we decided to augment our dataset with messages with verbs in the imperative mood. It turned out that this can be easily done using pymorphy2 (function inflect).
Summarizer training - train and test .
Classifier training - train and test .
Our temporary tfidf + SVM classifier with linear kernels should subsequently be replaced by a CNN classifier. But this did not happen and the temporary option remained the final decision, because the neural classifier learned only a day after the end of the competition.
Team members wrote in different languages, so we chose a service approach to architecture. The service architecture allowed us to easily combine modules written in Python (services of summation, NER and classification of phrases), Go (input-output in Telegram) and Node.js (input-output in Trello). IPC between services was built on the basis of standard input-output streams.
You can try our bot by adding manager_assist_bot to the group. As a demo version of Nota, Trello adds all tasks to one common board.
Tuggla
We developed a system, which will be able to select vacancies suitable for each candidate for each candidate, show further career paths in each direction, and also explain what skills a person needs to pull up and get in order to get to the desired position. After receiving a dataset from SuperJob in the form of json resume lines and vacancies, without having time to come up with a solution, we considered it logical to compare work experience with a real vacancy, as this will give us an idea of the chronology of a person acquiring the skills that an employer requires in a vacancy.
The main problem was the amount of data (250,000 vacancies and resumes each; in each resume, work experience was at least 3-4 positions, and sometimes up to 50). If you just use word2vec for comparison, it will take more than one day, which is not the most optimal step within the hackathon. Therefore, we found more or less similar vacancies for work experience in a resume using TF-iDF, and the final answer (suitable or not) gave us word2vec. After matching the vacancies, it is time to pull the skills out of the requirements field from the candidate for the vacancy. We did this with the help of regex, logic and black magic. Logic and regex had to be tuned for a very long time because all the requirements were written in a derived style. After 20 ifs and a cloud of regexes, we pulled out something more or less like skills. Of course, you can do something more intelligent, for example, make merge all the skills, play a lot with stop words, but we had a little less than a day, so we went on to the next stage of work. Since each vacancy in the dataset was compared with an abstract area (manager, assistant, etc.), we calculated the most common skills for each area. Then we took the average of the vectors of these skills and called it the profession vector.
Here, for example, the top 10 skills of a lawyer:

Next, when the user enters the skills, we pull out the “real” (our) skills with the same magic and regex, take their vector, average and use the cosine to look at the distance to the profession vector. Thus, you can tell which area your skills fit into. SuperJob was more interested in predicting the next step, and we wanted to win, so we took all the career paths and decided to look at the dynamics of skills and the chronology of professions. Because we compared each line in the experience of working with a vacancy, and a vacancy is compared with a profession - for us, a career path is just a set of professions in chronological order. Here's what it looks like for one resume:

After that, we identified the “correct” career paths. This is the most interesting and muddy part of our project. The fact is that it is not very clear what career growth is. It is especially unclear how to convey our sense of career growth in code. After long discussions, 7 hours before the end of the hackathon, it was decided to assign professions levels depending on the frequency of transition to it from the current one.
For example: CEO - Level 10, Driver - Level 1. And here's what we got:

An interesting problem is hidden here - it turns out people do not always develop in our paradigm. And sometimes they even become drivers after being managers or bankers or they write complete nonsense in their resumes - and we get 40 vacancies that have nothing to do with each other. Therefore, we had to write several conditions for checking the adequacy of the career path:
- The path should occupy a visible number of transitions - for example, from 3 to 8.
- Each next position, if it does not coincide with the previous one, should be 1-3 levels higher.
After receiving career paths, you can build a path from the current profession and recommend vacancies based on the skills that the user has.
A couple of examples of building skills maps:
- Speech and organizational abilities are a supervisor card .
- Russian language and writing texts - %0A%09
- ">map of a journalist
.
Description of the projects of several other
Canapé winners
Our task was to assemble a team for a specific project in the form of a set of vacancies.
We assembled a team according to two main criteria: covering all the necessary skills and compatibility by interests.
A custom implementation of resume2vec was made to “smartly” search for people suitable for the vacancy. It works something like this:
- parse skills from a dataset with a resume,
- we create a graph where the vertices are the summary, and the edges are the similarities between them, then we use the node2vec technology described in this article . For the second part, we wrote a chat bot that parses VKontakte and determines its interests by subscriptions and user groups.
TeamUp
We worked on a service for assembling teams on resumes. People from the database were filtered by competency, and then ranked. For human analysis, answers to questions about interests were used, answers were vectorized with word2vec and were the closest among the filtered ones. Using the ApplyMagicSauce API, an additional type was determined according to the OCEAN scheme based on the same issues. The ratio of age to total work experience was also used for ranking. The final speed for each person is a weighted sum of these three parameters.
Nice folks out
In advanced companies, it is necessary to monitor the quality of the project code. Good analytics can be provided by an external expert. For this analytics to be most useful, it is necessary that the competencies of the expert coincide with the competencies of the team. To do this, we have developed a platform for code analytics, which determines the degree of similarity of projects by their content and description using machine learning.
If you read up to here and would like to familiarize yourself with other projects and their presentations, welcome here , here you will find service prototypes for selecting a research supervisor, increasing team efficiency, matching mentor menti and much more.
Elena Alexandrova, Director of Development, IPI Laboratory, author of special nomination from the BusinessChain project.
“We decided to participate in the hackathon spontaneously. After a meeting in the Superjob office with Alena Ilyina, the decision was made in half an hour. We have long nurtured the idea of holding a hackathon for our tasks, and at that moment we decided that the stars came together, and this event will be a good springboard for us to break in a new mechanism and study all the pitfalls. And just reefs were more than enough for us. Starting from very sprint terms, ending with constantly changing organizational inputs, the existence of which is difficult to even guess, constantly playing only in the commercial field. We had a lot of options for setting the task, since there are many directions that SJ develops, ranging from direct commercial stories to vocational guidance and volunteer directions. We agreed on the task along career paths - it was interesting how the guys will be able to realize what we are already working on, whether they can give us a new vision and show us what we may miss. In terms of the size of the prize pool, the decision was changed upwards as quickly, when they tried to divide the agreed amount into three places and it turned out “ugly”. Probably, it was a bonus to our determination against all the laws of logic, to get everything done in a couple of weeks, we had at our disposal a piece for the lounge and a couple of hundred gray hairs when it was arranged in conditions “until we know how many meters it is, in which room and that you can put, stick, connect. ” When we finally reached the opening day, we realized that we knew absolutely nothing about the processes and mechanisms, but by then we had friends who were as old as we were (sorry, Alena, we hope that everything is reversible), who dragged us through all 48 hours. And if the guys (terrific, crazy for the good, and just good people) worked on the site for two days, then we spent 48 hours doing fortune-telling and predictions without any machine learning. Each next checkpoint changed the scale “everything is awesome-everything disappeared” in opposite directions. By the finals, we already knew who was the favorite, but unexpectedly “stalled” with places 2 and 3. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” And if the guys (terrific, crazy for the good, and just good people) worked on the site for two days, then we spent 48 hours doing fortune-telling and predictions without any machine learning. Each next checkpoint changed the scale “everything is awesome-everything disappeared” in opposite directions. By the finals, we already knew who was the favorite, but unexpectedly “stalled” with places 2 and 3. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” And if the guys (terrific, crazy for the good, and just good people) worked on the site for two days, then we spent 48 hours doing fortune-telling and predictions without any machine learning. Each next checkpoint changed the scale “everything is awesome-everything disappeared” in opposite directions. By the finals, we already knew who was the favorite, but unexpectedly “stalled” with places 2 and 3. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” and just good people) worked for two days on the site, then we spent 48 hours doing fortune-telling and predictions without any machine learning. Each next checkpoint changed the scale “everything is awesome-everything disappeared” in opposite directions. By the finals, we already knew who was the favorite, but unexpectedly “stalled” with places 2 and 3. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” and just good people) worked for two days on the site, then we spent 48 hours doing fortune-telling and predictions without any machine learning. Each next checkpoint changed the scale “everything is awesome-everything disappeared” in opposite directions. By the finals, we already knew who was the favorite, but unexpectedly “stalled” with places 2 and 3. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” then we spent 48 hours doing fortune telling and predictions without any machine learning. Each next checkpoint changed the scale “everything is awesome-everything disappeared” in opposite directions. By the finals, we already knew who was the favorite, but unexpectedly “stalled” with places 2 and 3. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” then we spent 48 hours doing fortune telling and predictions without any machine learning. Each next checkpoint changed the scale “everything is awesome-everything disappeared” in opposite directions. By the finals, we already knew who was the favorite, but unexpectedly “stalled” with places 2 and 3. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” but with 2 and 3 places they suddenly “stalled”. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” but with 2 and 3 places they suddenly “stalled”. We decided already on pitches, but we hope that we made the right choice. In short, these were a roller coaster and a horror room in one. In general, the attraction was a success, and we liked it. We learned a lot about “how not to”, we met great guys and understood a lot about what we can do using such mechanisms to work out our tasks. We know that we will repeat it and we know that it will be cool. ” using such mechanisms to work out their tasks. We know that we will repeat it and we know that it will be cool. ” using such mechanisms to work out their tasks. We know that we will repeat it and we know that it will be cool. ”
Julia Sharapova, Head of Press Service, SuperJob .