Обратите внимание, что я делаю все в R.
Проблема заключается в следующем:
В основном, у меня есть список резюме (резюме). Некоторые кандидаты будут иметь опыт работы раньше, а некоторые нет. Цель здесь состоит в том, чтобы: основываясь на тексте их резюме, я хочу классифицировать их по различным секторам работы. Я особенно в тех случаях, когда кандидаты не имеют никакого опыта / является студентом, и я хочу сделать прогноз, чтобы классифицировать, какие сферы работы этот кандидат наиболее вероятно будет принадлежать после окончания учебы.
Вопрос 1: Я знаю алгоритмы машинного обучения. Тем не менее, я никогда не делал НЛП раньше. Я наткнулся на распределение скрытого Дирихле в Интернете. Однако я не уверен, что это лучший подход к решению моей проблемы.
Моя оригинальная идея: сделать это контролируемой проблемой обучения . Предположим, у нас уже есть большой объем помеченных данных, что означает, что мы правильно пометили секторы работ для списка кандидатов. Мы дорабатываем модель с использованием алгоритмов ML (т.е. ближайшего соседа ...) и вводим эти немеченые данные , которые являются кандидатами, которые не имеют опыта работы / являются студентами, и пытаемся предсказать, к какому сектору работы они будут принадлежать.
Обновление Вопрос 2: Будет ли хорошей идеей создать текстовый файл, извлекая все в резюме и распечатывать эти данные в текстовом файле, чтобы каждое резюме ассоциировалось с текстовым файлом, который содержит неструктурированные строки, а затем мы применять методы анализа текста к текстовым файлам и сделать данные структурированными или даже создать частотную матрицу терминов, используемых из текстовых файлов? Например, текстовый файл может выглядеть примерно так:
I deployed ML algorithm in this project and... Skills: Java, Python, c++ ...
Это то, что я имел в виду под «неструктурированным», то есть сворачивая все в одну строку.
Это неправильный подход? Пожалуйста, поправьте меня, если вы думаете, что мой подход неверен.
Вопрос 3: хитрая часть: как определить и извлечь ключевые слова ? Используя tm
пакет в R? на каком алгоритме основан tm
пакет? Должен ли я использовать алгоритмы НЛП? Если да, на какие алгоритмы мне следует обратить внимание? Пожалуйста, укажите мне несколько хороших ресурсов, чтобы посмотреть на них.
Любые идеи будут великолепны.
источник
Просто извлеките ключевые слова и обучите их по классификатору . Вот и все, правда.
Большая часть текста в резюме на самом деле не связана с навыками. Например, рассмотрим предложение «Я опытный и очень эффективный в Java». Здесь только 1 из 7 слов - это название навыка, а остальные - просто шум, который снизит точность вашей классификации.
Большинство резюме не очень структурированы. Или структурированы слишком свободно. Или используйте необычные имена для разделов. Или форматы файлов, которые не сохраняют структуру при переводе в текст. У меня есть опыт извлечения дат, времени, имен, адресов и даже намерений людей из неструктурированного текста, но не списка навыков (или университета, или чего-либо еще), даже близко.
Так просто разметить (и , возможно , проистекает ) Ваше резюме, выберите только слова из предопределенного списка (вы можете использовать LinkedIn или что - то подобное , чтобы захватить этот список), создать вектор функции и попробовать пару классификаторов (скажем, SVM и наивный Байес) ,
(Примечание: я использовал аналогичный подход для классификации профилей LinkedIn на более чем 50 классов с точностью> 90%, поэтому я уверен, что даже наивная реализация будет работать хорошо.)
источник
Это сложная проблема. Есть много способов справиться с этим. Я думаю, резюме можно рассматривать как полуструктурированные документы. Иногда полезно иметь какую-то минимальную структуру в документах. Полагаю, в резюме вы увидите некоторые табличные данные. Возможно, вы захотите рассматривать их как пары значений атрибутов. Например, вы получите список терминов для атрибута «Набор навыков».
Основная идея заключается в том, чтобы вручную настроить список ключевых фраз, таких как «навык», «образование», «публикация» и т. Д. Следующим шагом является извлечение терминов, которые относятся к этим ключевым фразам, либо путем использования структуры каким-либо образом (например, в виде таблиц) или используя близость терминов вокруг этих ключевых фраз, например, тот факт, что слово «Java» находится в непосредственной близости от термина «навык», может указывать на то, что человек является специалистом по Java.
После того, как вы извлечете эту информацию, следующим шагом может быть создание вектора признаков для каждой из этих ключевых фраз. Затем вы можете представить документ в виде вектора с различными полями (по одному для ключевой фразы). Например, рассмотрим следующие два резюме, представленные в двух полях, а именно: проект и образование .
Doc1: {проект: (java, 3) (c, 4)}, {образование: (компьютер, 2), (физика, 1)}
Doc2: {проект: (Java, 3) (Python, 2)}, {образование: (математика, 3), (компьютер, 2)}
В приведенном выше примере я показываю термин с частотой. Конечно, при извлечении терминов вам нужно ставить и удалять стоп-слова. Из примеров видно, что человек, чье резюме - Doc1, более квалифицирован в C, чем в D2. В случае реализации очень легко представлять документы в виде векторов полей в Lucene.
Теперь следующим шагом является получение ранжированного списка резюме с учетом спецификации задания. На самом деле, это довольно просто, если вы представляете запросы (спецификации заданий) также как векторы полей. Вам просто нужно получить ранжированный список кандидатов (резюме), используя Lucene, из коллекции проиндексированных резюме.
источник
Я работаю на сайте вакансий онлайн, и мы разрабатываем решения, чтобы рекомендовать вакансии на основе резюме. Наш подход основан на названии должности человека (или желаемой должности, если он студент и известен), а также на навыках, которые мы извлекаем из их резюме, и на их местонахождении (что очень важно для большинства людей) и на основании этого находим совпадения с вакансиями.
с точки зрения классификации документов, я бы взял аналогичный подход. Я бы порекомендовал вычислять матрицу TF IDF для каждого резюме в качестве стандартной модели набора слов, извлекая только название должности и навыки человека (для которого вам нужно будет определить список навыков, которые нужно искать), и передать их в ML алгоритм. Я бы порекомендовал попробовать knn и SVM, который очень хорошо работает с текстовыми данными большого размера. Линейные SVM, как правило, работают лучше, чем нелинейные (например, с использованием ядер RBf). Если у вас есть такой вывод с приемлемыми результатами, я бы поэкспериментировал с извлечением функций, используя синтаксический анализатор \ chunker на естественном языке, а также некоторые пользовательские фразы, сопоставленные с регулярными выражениями.
источник