Кластерная компания Curriculum Vitae (CV) в python (Clustering pieces of text)

Я пытаюсь классифицировать (кластер) наши компании Curriculum Vitae (CV). Всего около 100 резюме. Идея состоит в том, чтобы найти похожих людей на основе их содержания резюме. Я уже преобразовал слово docs в текстовые файлы и прочитал все кандидаты в словаре python в формате:

cvdict = { 'name1' : "cv text", 'name2', : 'cv text', ... }

Я также удаляю большую пунктуацию, уменьшаю ее, удаляя номера и т.д., И удаляет слова длиной менее x (4)

Мои вопросы:

  1. Является ли кластеризация правильным подходом? Если нет, то какой алгоритм машинного обучения будет подходящим начальным фокусом для этой задачи.

  2. Любые указатели на некоторый код python я могу использовать для поперечного перевода этого словаря и "кластера" содержимого. Основываясь на кластеризации содержимого, он должен вывести имена "keys = кандидаты" как кластерные группы.

2 ответа

Поэтому из того, что я понял, вы хотите увидеть потенциальные группы/кластеры в наборе CV. идея cvdict велика, но вам также нужно преобразовать все тексты в числа! вы на полпути. поэтому подумайте о матрице /excel sheet/table. где у вас есть профиль каждого сотрудника в каждой строке. name1, cv_text1 name2, cv_text2 name3, cv_text3...

Да, как вы можете догадаться, длина cv_text может варьироваться. У некоторых людей есть длинное резюме, а другое нет! какие слова могут классифицировать сотрудника компании. Некоторые, как нам нужно сделать их равными по размеру; Кроме того, не все слова являются информативными, вам нужно подумать, какие слова могут захватить вашу идею; В Machine Learning они называют это "Feature" вектором или матрицей. Поэтому мое предложение будет приводить множество слов и отметить, если человек упомянул это слово в своем умении.

managment marketing customers statistics programming
name1 1 1 0 0 0
name2 0 0 0 1 1
name3 0 0 1 1 0

или вместо матрицы 0/1 вы можете указать, сколько раз это слово упоминалось в резюме. снова вы можете просто извлечь все возможные слова из всех резюме. NLTK - это замечательный модуль для текстового анализа, и у него есть встроенная функция, позволяющая вам полировать текст. взгляните на первую половину этого слайда.

Затем вы можете использовать любой метод кластеризации, например, иерархический https://code.activestate.com/recipes/578834-hierarchical-clustering-heatmap-python/ уже есть пакеты для такого анализа; либо в scipy, либо в scikit, и я уверен, что для каждого вы можете найти массу примеров. Ключевым шагом является тот, над которым вы уже работаете; представляя ваши данные в виде матрицы.


Еще пару советов к более раннему комментарию:

  1. Я бы не выбрасывал слова длиной менее 4 символов. Вместо этого я бы использовал стоп-лист общих слов. Вы не хотите выбрасывать такие вещи, как C++ или С#

  2. Одним из хороших методов построения матрицы выше является использование показателя TF-IDF. По сути, это мера того, как часто какое-то слово встречается в конкретном документе, и как часто это происходит во всей коллекции. Поэтому такие вещи, как "the", очень распространены, поэтому их очень быстро снижают. Если только 5 человек в вашей компании теперь C++, это значительно увеличит показатель для этого слова.

  3. Возможно, вы захотите рассмотреть использование ******, как "алгоритм портера". Этот алгоритм будет сочетать слова типа "статистика" и "статистический".

  4. Большинство алгоритмов машинного обучения имеют проблему с очень широкими матрицами. К сожалению, ваша база резюме составляет всего 100 документов, которые считаются довольно низкими, и сколько потенциальных условий у вас будет. Причина, по которой эти методы работают для Google и NSA, состоит в том, что человеческие языки имеют тенденцию иметь десятки тысяч слов в активном использовании против миллиардов документов, которые они должны индексировать. Для вашей задачи я попытался бы сжать ваш набор данных не более чем на 30-40 столбцов. Будьте очень агрессивны, чтобы отбросить общие слова.

  5. К сожалению, самая большая слабость большинства методов кластеризации заключается в том, что вы должны заранее установить количество кластеров. Общим подходом, который люди используют, является установление определенного типа того, насколько хороши ваши кластеры, и сначала запустить алгоритм кластеризации с очень небольшим количеством кластеров и продолжать увеличиваться до тех пор, пока ваши показатели не начнут снижаться. Посмотрите курс обучения машинам Эндрю Нг на межстранах. Он очень хорошо объясняет эту технику.

  6. Разумеется, иерархическая кластеризация не зависит от точки 5.

  7. Вместо кластеризации вы можете попытаться построить дерево решений. Хотя и не очень точные, деревья решений имеют большое преимущество для визуализации построенной модели. Посмотрев на три, вы можете легко увидеть причину, по которой они построены.

  8. Кроме скудного и scikit, которые очень хороши. Посмотрите на Orange Toolbox. Он имеет множество хороших алгоритмов с хорошими инструментами визуализации. Они, как вы программируете, это просто соединяя коробки со стрелками. После того, как вы удовлетворены своей моделью, вы можете легко выгружать ее в сценарий.

    Надеюсь это поможет.

licensed under cc by-sa 3.0 with attribution.