Когда вы впервые работаете с Word2Ve c, попробуйте кластеризовать пользователей на основе их навыков. - PullRequest
1 голос
/ 02 апреля 2020

Для моей диссертации я должен проанализировать навыки кандидатов. Я должен объединить пользователей и сравнить их навыки. Информация засекречена, поэтому я создал случайную базу данных, которая имеет такую ​​же структуру, чтобы я мог показать, как создаются мои данные.

import random
listOfSkills = ["Dutch","Java OSGI","XML Transformation Query","Java Enterprise Edition","Functional Design","Scrum","Python","JavaScript","Ruby","Java","SQL","Data Analytics","Machine Learning","Deep Learning","English"]

rand_item = random.choice(listOfSkills)

n = 5

rand_items = random.sample(listOfSkills, n)

test_skillset = []

for i in range(5):
    result = random.sample(listOfSkills, n)
    string = ", ".join(result)
    test_skillset.append(string)

test_id_ = np.arange(0, len(test_skillset)).tolist()

test_dict = {'id' : test_id_,
             'skillset' : test_skillset
             }

test_df = pd.DataFrame(test_dict)

После запуска этого кода я получаю DataFrame, который выглядит следующим образом:

id, skillset
0, "Java, ruby, ..."
1, "Java, ruby, ..."
2, "Java, ruby, ..."

Это то же самое для базы данных, которую я получил.

Список навыки - это некоторые из навыков, которые я нашел в базе данных. Также в базе данных есть больше пользователей, у которых также больше навыков.

Я совершенно новичок в машинном обучении и использовании моделей Word2Ve c. Я пробовал кое-что, но почти все время не получаю результат, который дает мне дополнительную информацию. Некоторые из навыков имеют длинное имя, которое может испортить модель. Или я сделал что-то не так.

Одна из моих целей - объединить пользователей и найти сходства между каждым набором навыков.

Моя конечная цель - сопоставить векторы набора навыков с вакансиями, чтобы проверьте, насколько удачным может быть совпадение пользователя с открытой вакансией. Но сначала мне нужно узнать, могу ли я найти сходство между пользователями.

Итак, мой вопрос:

  • Как я могу использовать Word2Ve c, чтобы найти индивидуальные сходства между навыками?
  • Как я могу использовать Word2Ve c кластеризовать пользователей, чтобы найти похожие наборы навыков?

Извините, если мой вопрос немного расплывчат, Engli sh не мой родной язык и Python немного ново для меня. Я открыт, чтобы уточнить вещи, если это необходимо.

1 Ответ

1 голос
/ 02 апреля 2020

Word2ve c был первоначально представлен как алгоритм, обученный на длинных, реальных текстах на естественном языке, которые включают в себя множество едва различимых примеров использования слова в оригинальном контексте.

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

Word2ve c и аналогичные алгоритмы могут иногда давать интересные результаты на таких не совсем реальных языках, но могут потребовать большего изменения данных обучения и параметров, отличных от обычных значений по умолчанию для текстов на естественном языке , для лучших результатов.

В частности, если вы используете случайно сгенерированный корпус - особенно тот, который генерируется путем равномерной выборки из крошечного списка, состоящего всего из 15 «слов»! - вы не должны ожидать, что алгоритм word2ve c сделает что-нибудь полезное. В таком искусственном корпусе нет языковой модели относительных значений слов. (И любой крошечный намек на корреляцию, который может показать любой прогон, был бы шумом от вашей случайной выборки, совершенно не похожим на градации значений, которые имеют настоящие языки, и показывали бы реальные учебные тексты.)

(Есть возможно, и другие ошибки в ваших экспериментах с «пробовал что-то», которые не дали полезных результатов - но использование случайного обучающего набора - только самая очевидная проблема из того, что вы показали.)

Чтобы получить полезные «векторы навыков», вам понадобится много реалистичных c данных, а также настроить такие параметры, как размер / параметры обучения, чтобы они соответствовали пределам того, что у вас есть. (Как только один пример, бессмысленно пытаться обучать даже 20-мерные векторы «плотного встраивания», такие как слова из word2ve c, для словаря длиной менее 20 токенов - и вам, вероятно, понадобится 400+ уникальных токенов чтобы 20-мерные векторы начали иметь смысл.)

Имея правильные данные, вы должны начать видеть значимые отношения между такими векторами навыков - с соответствующими навыками ближе друг к другу, чем несвязанные навыки, и даже с указаниями - из различий, наводящих на мысль о некоторых описываемых человеком аспектах навыков (таких как «более предприимчивый» или «более абстрактная математика»). Но вы даже не сможете реально оценить эти результаты для здравомыслия / улучшения, если только они не реалистичны c данных, с реальными отношениями, которые вы можете оценить, используя свои знания предметной области.

Тогда вы сможете попробовать альтернативные способы объединить их в резюме для каждого кандидата (например, усреднить векторы умений вместе) или просто использовать некоторую составную меру расстояния, которая зависит от векторов слов (например, скажем, «Расстояние для Word Mover»), чтобы попробовать кандидата кластеризация

Удачи!

...