задопихание
Oct. 4th, 2022 01:04 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Как backpropagation выводится из градиентного спуска:
https://babkin-cep.blogspot.com/2022/10/optimization-4-backpropagation-for-last.html
https://babkin-cep.blogspot.com/2022/10/optimization-5-backpropagation-further.html
https://babkin-cep.blogspot.com/2022/10/optimization-4-backpropagation-for-last.html
https://babkin-cep.blogspot.com/2022/10/optimization-5-backpropagation-further.html
What is the purpose of this neural network?
Date: 2022-10-04 10:15 pm (UTC)Re: What is the purpose of this neural network?
Date: 2022-10-05 01:13 am (UTC)Re: What is the purpose of this neural network?
Date: 2022-10-05 10:27 am (UTC)Откуда ты знаешь, что пофиг?
Вряд ли NN, специализирующаяся на распознавании картином, будет хорошо работать с текстами.
> Я пока играю с игрушечными примерами.
Какую проблему решают твои игрушечные примеры?
Re: What is the purpose of this neural network?
Date: 2022-10-05 04:29 pm (UTC)Смотря для какой цели и смотря как подключить.
> Какую проблему решают твои игрушечные примеры?
Никакой практической. Пока что только имитировать простую гладкую функцию. Мне интересно посмотреть на то, что там внутри происходит, в очень мелком масштабе.
Re: What is the purpose of this neural network?
Date: 2022-10-05 04:39 pm (UTC)У меня есть практическая задача: взять резюме кандидата, и извлечь из этого резюме ключевые слова, по которым можно искать работу для этого кандидата.
Думаешь neural network, в настройке которой ты упражнялся, поможет в решении этой задачи?
> только имитировать простую гладкую функцию
Для того, чтобы имитировать простую гладкую функцию - нет необходимости использовать neural network.
Re: What is the purpose of this neural network?
Date: 2022-10-05 06:39 pm (UTC)> Думаешь neural network, в настройке которой ты упражнялся, поможет в решении этой задачи?
Ну, во-первых, я пока упражняюсь еще не в настройке, а в построении механизма. Мне хочется понять, как оно работает. В реальности большинство data engineers используют механизмы как черный ящик, плохо понимая, как он внутри работает.
Во-вторых, твоя задача, наверное, хорошо решается более простым способом? От простого поиска по хэш-мапу до построения байесовой модели (которая по своей сути соответствует одному слою нейронов, по одному нейрону для каждого возможного результата). Для отдельных слов или для словосочетаний из двух-трех слов. Или ты пробовал и не решается? Ну, можем обсудить.
Для Байеса у меня, кстати, есть примеры на Перле: https://sourceforge.net/projects/exbayes/ . Циферки в именах файлов соответствуют номерам в серии постов в блоге, где они обсуждаются.
> Для того, чтобы имитировать простую гладкую функцию - нет необходимости использовать neural network.
Эта задача интересна тем, что она тривиальна. И если методы тренировки показывают странные эффекты (а они показывают) на такой тривиальной задаче, то они будут их показывать и на более сложных задачах. Эти эффекты общеизвестны, и на более сложных задачах их пытаются решать шаманизмом: "давайте возьмем другие случайные начальные значения", "давайте сдвинем диапазон случайных значений", "давайте возьмем больше нейронов", и т.д. Потому что там трудно проследить, что вызывает эти проблемы и какой именно получается подробный эффект от разных попыток решения. А на маленькой и тривиальной задаче все это видно хорошо. И мне интересно в этом поковыряться. Без кратковременной практической выгоды, просто так (ну а долговременно - кто знает, может когда-то пригодится).
Ну, а в следующем этапе у меня запланировано попробовать классическую простую задачу - распознавнаие цифер из набора рукописных образцов.
How to create a job search query from resume text?
Date: 2022-10-05 07:19 pm (UTC)Решается, но, пока, не очень хорошо.
Мы создаем и поддерживаем общий список skills (keywords).
Соответственно, несложно найти эти skills в тексте резюме.
Также, мы считаем частоту использования каждого skill.
В общем списке мы также считаем, насколько часто каждый skill используется при поиске работ и насколько часто используется в описании работ.
Чем больше соотношение "частота поиска"/"частота использования в работе" - тем более важный такой skill.
Можно взять один, два или три самых важных skills и использовать для поиска работ.
Это работает, но не идеально.
Например, вот это резюме:
https://www.postjobfree.com/resume/adsn0r/customer-service-clerk-new-city-ny
превращается в набор skills:
1) warehouse
2) sales
3) customer service
4) data entry
То есть можно автоматически получить такой job search:
warehouse sales
Но, хотелось бы, результат получше, что-нибудь вроде:
(manager or management) (warehouse or sales or quality or control or dairy or shop or frozen or osha)
Но как автоматически добиться подобного результата (job search query) - пока не совсем понятно.
Как ты думаешь, подходит ли NN для решения подобных задач?
Re: How to create a job search query from resume text?
Date: 2022-10-05 08:57 pm (UTC)Ваше нынешнее решение по соотношению частот - Байесово, только видимо независимо воссозданное из логических рассуждений. Я как-то вообще в таком ракурсе выбирания слов для поиска не думал.
Я думаю, что первое, как его можно улучшить - это использовать больше контекста, в как минимум двух смыслах:
1. Этот конкретный человек у тебя популярно написал что он хочет в разделе Objectives. Просто выделять этот раздел и считать слова из него более важными. Ну и можно искать предолжения с фразами типа "looking for". Аналогично, можно считать более недавние работы более важными.
2. Использовать не отдельные слова, а словосочетания. Например, data warehousing имеет очень другой смысл, чем просто warehousing и чем data entry. Если тебе не хочется индексировать все встречающиеся словосочетания, то можно начать с поиска более важных отдельных слов, а потом только их взять с соседними словами.
Третье, тоже связанное с контекстом - если ты ищешь по резюме, то надо искать слова не сами по себе важные, а важные в контексте резюме.
Про конкретно NN я не знаю. Использовать точно можно, но я не знаю, будет ли от них выгоды гораздо больше, чем от более простых методов. То, что NN умеет делать гораздо лучше простого Байеса - отличать случаи типа "А, но не Б, или Б, но не а" и противоположные. Плюс для всего нужен тренировочный материал, в котором вручную размечены правильные ответы.
Re: How to create a job search query from resume text?
Date: 2022-10-06 03:39 am (UTC)Почему анализ частоты использования skills ты называешь "байесовой" моделью?
> 1. Этот конкретный человек у тебя популярно написал что он хочет в разделе Objectives. Просто выделять этот раздел и считать слова из него более важными.
Мне кажется, получится не очень хорошо. Давай рассмотрим на примере того же резюме:
"Management" и "managerial" - правильно. Но "develop" и "development" - неправильно.
Кроме того, упущены другие важные skills: "customer service", "deposits", "store", "sales", "quality control".
> искать предолжения с фразами типа "looking for"
Анализ использования looking for - показывает, что:
1) "looking for" указывает на важные skills лишь иногда.
2) "looking for" используется лишь в примерно 3% опубликованных резюме.
> 2. Использовать не отдельные слова, а словосочетания.
Это мы уже делаем: выделяем фразы из двух слов.
> надо искать слова не сами по себе важные, а важные в контексте резюме
Как определить какие слова - важные в контексте резюме?
Re: How to create a job search query from resume text?
Date: 2022-10-06 05:36 pm (UTC)Потому что частота - она же вероятность. В твоей байесовой модели используется событие - найм. Ты считаешь частоту встречания скилла у работников до найма, это твоя априорная вероятность, и частоту скилла у работ, то есть работников после найма, это твоя постериорная вероятность. Когда ты их делишь, ты получаешь условную вероятность найма с таким скиллом (ну, не сосем вероятность, а шанс, который имеет тот же смысл и эквивалентен вероятности для целей максиимзации), и отбираешь скиллы с наибольшей условной вероятностью, то есть дающие максимальную пользу в найме. Это аналогично тому, как в классических экспертных системах 80-х годов выбирался следующий вопрос чтобы задать клиенту - такой вопрос, который позволит извлечь максимум информации в имеющемся контексте.
Байесовую модель можно развернуть и дальше - получить рейтинг соответствия резюме к вакансии исходя из полного списка скиллов, перечисленных в обоих. Ну, соединять каждое резюме с каждой вакансией может быть утомительно, но можно сначала сделать поиск как у тебя есть для грубой фильтровки, а потом посчитать рейтинг для найденных вакансий и отсортировать результаты поиска по этому рейтингу.
> "Management" и "managerial" - правильно. Но "develop" и "development" - неправильно.
> Анализ использования looking for - показывает, что:
Эти советы надо использовать не тупо, а с умом. Я надеюсь, ты не ожидаешь, что я тебе тут за десять минут выкачу готовое решение во всех подробностях. Есть словосочетания, которые указывают на то, что рядом с ними выражаются желания кандидата. Например, "objective", "looking for", но не только они, а и прочие. Это не рецепт, а направление для дальнейшего изучения. Вот data engineers и занимаются всеми этими деталями, в частности поисками того, какие конкретно фразы дают какие добавления к смыслу.
Кстати, "develop" и "development" тут правильно, это часть "employee development", руководящего скилла. Это пример из той же области, что "data warehousing" - совсем не то же самое, что просто "warehousing".
> Как определить какие слова - важные в контексте резюме?
Один пример - те слова, которые выражают желание работника, цель его поиска работы. Другой пример - скиллзы в недавних работах гораздо более важны, чем скиллзы в работах десятилетней давности. Ну вот тебе в качестве очень простого примера, если есть человек, только что закончивший институт по инженерной специальности, но во время учебы работавший баристой, то ему будут интересны в первую очередь работы в инженерии, а не баристы.
У тебя, кстати, есть хорошая возможность набрать много тренировочных данных, если хранить историю резюме. Вот у тебя есть человек с неким резюме, ищет работу. Потом через какое-то время опа, он же закачивает новое резюме, в котором добавилась новая работа. Это твой сигнал, что человек с таким-то резюме хорошо подошел для вот такой работы.
Skills: frequency vs Bayesian probability
Date: 2022-10-07 04:11 am (UTC)Да: частота использования скилла в резюме - кореллирует с вероятностью того, что работника наняли из-за этого скилла.
> и частоту скилла у работ, то есть работников после найма, это твоя постериорная вероятность.
Нет.
Частота употребления скилла в описании работы - коррелирует с востребованностью этого скилла на этой работе. А вовсе не с тем, сколько работников на этот скилл уже наняли.
> Когда ты их делишь, ты получаешь условную вероятность найма с таким скиллом
В данном случае, чтобы получить вероятность найма с таким скиллом, надо умножать эти две частоты использования, а не делить их друг на друга.
> Байесовую модель можно развернуть и дальше - получить рейтинг соответствия резюме к вакансии исходя из полного списка скиллов, перечисленных в обоих.
Да, примерно так можно считать match score.
Но это слабо похоже на байесовую модель.
Re: Skills: frequency vs Bayesian probability
Date: 2022-10-08 12:03 am (UTC)Нет, умножать не надо. Чтобы понять байесову формулу, проще всего начать с рисования квадрата, который будет представлять всех кандидатов. Потом его поделить на две части: в одной части те, что нашли работу, в другой - что не нашли работу, и с площадью пропорциональной количеству. Потом каждую часть поделить на две части: у которых есть скилл, и у которых нет скилла.
Априорная вероятность встречания скилла среди всех кандидатов - это соотношение количеств: (есть скилл) / (все кандидаты)
Постериорная вероятность встречания скилла среди нашедших работы - это: ((есть скилл) И (нашел работу)) / (нашел работу)
Условная вероятность нахождения работы при наличии данного скилла - это: ((есть скилл) И (нашел работу)) / (есть скилл)
То есть, можно даже пропустить два деления и просто сразу делить количество встречания скилла среди работ на количество встречания скилла среди кандидатов.
Re: Skills: frequency vs Bayesian probability
Date: 2022-10-08 03:21 am (UTC)Ты говоришь о том, насколько много resumes содержат рассматриваемый нами skill (HowManyResumesContainOurSkill).
Я же говорю о том, сколько раз рассматриваемый нами skill встречается в одной работе (HowManyTimesOurResumeContainsOurSkill).
Вероятность соответствия между резюме и работой:
- пропорциональна 1/HowManyResumesContainOurSkill
- пропорциональна log(HowManyTimesOurResumeContainsOurSkill + 1)
То есть формула вероятности:
log(HowManyTimesOurResumeContainsOurSkill + 1) / HowManyResumesContainOurSkill
> проще всего начать с рисования квадрата, который будет представлять всех кандидатов
Всех кандидатов на все работы?
Или всех кандидатов на одну работу?
Re: Skills: frequency vs Bayesian probability
Date: 2022-10-10 06:35 pm (UTC)В смысле, не в работе, а в резюме?
> Вероятность соответствия между резюме и работой:
> - пропорциональна 1/HowManyResumesContainOurSkill
> - пропорциональна log(HowManyTimesOurResumeContainsOurSkill + 1)
Так не получается, математически она не может быть одновременно пропорциональна обоим. Если ты каждому резюме приписываешь вес в log(HowManyTimesOurResumeContainsOurSkill + 1), то математически правильно будет смоделировать, что вероятность соответствия будет 1/(сумма_этих_весов).
Ну, не говоря уже про использование частоты встречания фразы как предсказателя ценности. Если кто-то поменял за год 5 работ и в каждой написал скилл, будет ли ему соответствие лучше, чем человеку, который написал этот скилл один раз в одной работе?
> Всех кандидатов на все работы? Или всех кандидатов на одну работу?
Хоть так, хоть так, смотря что хотеть мерять. Если ты ищешь среди всех работ, то для кандидатов на все работы.
Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Re: Skills: frequency vs Bayesian probability
From:Квадрат Bayesian probability
From:Re: Квадрат Bayesian probability
From:Re: Квадрат Bayesian probability
From:Re: Квадрат Bayesian probability
From:Re: Квадрат Bayesian probability
From:Re: Квадрат Bayesian probability
From:Re: Квадрат Bayesian probability
From:"Objective" and "looking for"
Date: 2022-10-07 04:18 am (UTC)Секция "Objective" - задумывалась для того, чтобы изложить желания кандидата.
Но большинство кандидатов просто хотят денег побольше, причем стесняются об этом написать.
Поэтому пишут всякую обобщенную фигню про то, как они хотели бы повысить свой уровень качества работы и не упоминают skills, которые помогают найти наиболее подходящую этим кандидатам работу.
> Это не рецепт, а направление для дальнейшего изучения.
Я этот "не рецепт" уже изучил. Выглядит довольно безнадежно.
Проще просто пытаться найти skills в тексте, а на заголовок "Objective" - не обращать внимания.
Также лучше не обращать внимание на "looking for".
Re: "Objective" and "looking for"
Date: 2022-10-07 11:43 pm (UTC)Вот кстати о географии, очеь бесит, когда единственный способ фильтрации - по зип-коду, и в радиус попадает какой-нибудь Нью-Йорк или Сиэттл, и потом этот мусор приходится вручную вычищать.
Search location and distance
Date: 2022-10-08 03:25 am (UTC)Какую ты видишь альтернативу кругу поиска с определенным радиусом?
Рисовать карту с границами зоны поиска работ?
99% кандидатов подобным заморачиваться не станут, даже если им дать в руки такой инструмент.
Re: Search location and distance
Date: 2022-10-10 06:38 pm (UTC)Re: Search location and distance
From:Re: Search location and distance
From:Re: Search location and distance
From:Re: "Objective" and "looking for"
Date: 2022-10-08 03:27 am (UTC)В objective тоже может оказаться что-то полезное, но смотреть надо не на то, что это objective, а на то, какие skills можно обнаружить в тексте.
> Там же могут содержаться уточнения про географию
Это как? "Исключить работы в NYC"?
Re: "Objective" and "looking for"
From:Re: "Objective" and "looking for"
From:Re: "Objective" and "looking for"
From:Чекбокс, исключающий препятствия
From:Re: Чекбокс, исключающий препятствия
From:Re: Чекбокс, исключающий препятствия
From:Re: Чекбокс, исключающий препятствия
From:Re: Чекбокс, исключающий препятствия
From:Old skills
Date: 2022-10-07 04:20 am (UTC)Да.
Поэтому, чем skills ниже в тексте резюме, тем меньший вес они имеют при нашем подсчете.
Антисигнал
Date: 2022-10-07 04:22 am (UTC)Если бы человек хорошо подошел для новой работы, то он, вероятно, уже бы не публиковал новое резюме, верно?
Может быть, связь старой секции и новой секции -- это не сигнал, а антисигнал?
Re: Антисигнал
Date: 2022-10-07 11:19 pm (UTC)Re: Антисигнал
Date: 2022-10-08 03:30 am (UTC)Обычно подобная практика есть у рекрутеров, которые получают свою компенсацию только после того, как кандидат проработает на новом месте 3 месяца.
Рекрутеры видят какие резюме с какими ключевыми словами привели к стабильному трудоустройству, а какие - нет.
Re: How to create a job search query from resume text?
Date: 2022-10-06 05:51 pm (UTC)Распознавание смысла делается примерно так: делается сеть, которая пытается предсказывать следующее слово. Она натренировывается. Потом с нее срезуют верхний слой нейронов, и используют выходы с предпоследнего слоя как индикаторы смысла.
Но я сам на анализ текста подробно никогда не смотрел, представляю только в общих словах. Могу еще сказать, что для анализа текста типовой топологией сети является LSTM, которая закольцовывает сигнал с выхода на вход.
Re: How to create a job search query from resume text?
Date: 2022-10-07 04:25 am (UTC)Это слишком сложно для имплементации если конечная цель - найти наиболее подходящие работы для резюме.