Педиатр-программист: Как я попал в Майкрософт | "Практика в Майкрософт Бинг в Сан-Франциско", часть 6 из 7 (пост 2)
Второй 6-й части про практику, первый был .
Часть 1:
Часть 2:
Часть 3:
Часть 4:
Часть 5: Интервью
Часть 6: Практика в Майкрософт Бинг в Сан-Франциско (пост2)
Часть 7: Работа в Майкрософт Бинг изнутри
Для связи используйте мой ник здесь и Гугл :)
----------
В общем, я перебрал несколько подходов, остановился на наиболее перспективном и занимался анализом различных факторов на тип блока текста. Я написал несколько программ для анализа текста, его разметки вручную для генерации gold standard (который мне был нужен для расчета метрик, таких как precision и recall), самообучающийся движок для анализа текстов на основе многих страниц из одного источника (то есть для случая, когда мы можем предполагать одинаковый дизайн, но разный контент в n связных документах).
Предварительная же оценка моей работы, написанная моими двумя руководителями по итогам первых 6-8 недель, была скорее негативной, чем позитивной. «Не всегда способен оценить сложность и приоритет задач», «зачастую работает над менее приоритетными задачами, в то время как более приоритетная задача остается без внимания», «небрежно относится к срокам, которые может пропустить без какой-либо видимой причины» -- все это оказалось для меня совершенно неожиданным. И правда, примерно на 7-й неделе я потерял две недели работы из-за того, что у меня приказал долго жить жёсткий диск и была потеряна работа порядка полутора недель (я не делал бакапы каждый день), да, мне бывало откровенно скучно на наших рабочих встречах, так как мой проект не имел прямого отношения к тому, над чем работала наша группа. Но даже с учетом этого я не ожидал такой степени негатива.
Я попытался прояснить ряд моментов, особенно что касалось «сроков», со своими руководителями, ведь мы никогда не определяли сроки, на что получил просто феерический ответ – “we had some implicit deadlines” (у нас был ряд негласных сроков). Ну кто бы мог подумать, что их вопросы – «а успеешь ли ты до пятницы?» и т.п., которые я просто принимал за предположения, считались ими конкретными сроками выполнения работы.
После такой характеристики мне было уже все-равно. Я слышал от других интернов, что тем, интернам, которые успевали успешно закончить свой проект до конца практики, предлагали сразу работу. В моем случае, очевидно, это было исключено – я бы и сам никогда не взял работника с такой характеристикой.
После этой характеристики мне стало понятно, что между мной и моими руководителями имеется некое недопонимание. Я порой проверял какие-то гипотезы и делал какие-то вещи, которые я с ними не обсуждал детально, особенно если они не срабатывали. Я также мог самостоятельно изменить приоритет задачи, если считал, что она менее перспективна чем мы сначала считали.
В этот момент как раз проходил Global Intern Event, на который я полетел в Сиэтл, и там я встретился снова со своим рекрутером. По его совету я по возвращении обсудил свою характеристику еще раз со своими руководителями, и мы чуть изменили формат наших встреч, обговаривая в конце что ожидается к следующей встрече и к концу недели. Это помогло мне, с одной стороны, более правильно понимать их приоритеты и ожидания, а, с другой стороны, я стал больше рассказывать им о неудачах или тупиковых ветвях развития проекта.
До этого момента я старался подходить к своему проекту алгоритмически, но постоянно растущая сложность проекта, в частности количество учитываемых факторов и их взаимосвязь привела к тому, что, не смотря на мои старания, я не видел какого-либо статистически значимого улучшения в результате работы алгоритма. Всё говорило за то, чтобы перейти от чисто алгоритмического к Machine Learning подходу. Однако это меня пугало: я только-только разобрался немного в своей теме, а тут мне нужно было срочно осваивать новую тему, причем очень сложную и непонятную для меня.
Однако не самая хорошая характеристика придала мне сил – терять мне в любом случае было нечего (кроме, возможно, опасности попасть в какой-нибудь «черный список» с пометкой no hire, но об этом я в тот момент совсем не думал). Поэтому я решился на такой шаг и за 5 недель до окончания проекта я бросился со всеми силами на изучение и, по мере изучение, внедрение методик машинного обучения в своем проекте.
Это сейчас, в 2015 году, когда машинное обучение стало модной технологией, найти хороший и даже бесплатный курс в интернете не представляет больших проблем. Coursera предлагает целый ряд курсов, от объемно-теоретических, как курс профессора Andrew Ng, до сугубо-прикладных, как курс от университета John Hopkins. Да и на других платформах предостаточно интересных курсов с заданиями и разобранными ответами. Тогда же я смог найти лишь какой-то мутный туториал на R, который мне посоветовали использовать мои руководители, но который за три дня изучения и «научного тыка» не сильно продвинул меня к моей цели.
Когда я уже начал выдыхаться я вдруг вспомнил, что я же блин специалист по MS SQL Server, а в состав этого сервера входит отдельный движок для машинного обучения – SSAS, SQL Server Analytical Services. Когда, еще в целях подготовки докладов для Microsoft Student Partner Program, я занимался этим движком и у меня были базовые знания о том, как создавать модель, как распределять данные, как обучать модель и проводить cross-validation.
В результате я за три дня сделал несколько моделей для своих данных: от простых decision trees и nave bayes, до довольно большой по размерам (насколько мне позволил сервер) нейронной сети, которую я особенно долго тренировал на своих данных. После сравнения всех трёх моделей, к моему удивлению, модель, построенная на decision trees, выдавала наилучшие значения как для precision, так и для recall для моей задачи.
Кроме построения самой модели, SSAS позволил мне оценить вклад отдельных факторов в принятие решения о том, какой тип (реклама или текст) имеет данный блок (так называемая discriminative power), что позволило мне сосредоточиться на этих факторах и улучшить их, разбив некоторые из них на подкатегории и добавив сходные факторы. По итогам первой итерации моей модели я смог достичь рекордных значений метрик.
Как оказалось, мои руководители еще в начале моей практики на основании их собственных прикидок определили некие пороговые значения, которые должен был достичь мой алгоритм, чтобы они его приняли. Использования методик машинного обучения как раз и помогло мне получить алгоритм, который удовлетворял этим условиям.
Как я уже писал, мой алгоритмический подход имел в себе также самообучающуюся часть, и мне хотелось внести элементы обучения также в модель, основанную на машинном обучении. Проблема же заключалась в том, что сам процесс построения и обучения модели требовал активного участия SSAS, что не позволяло мне сделать весь проект в виде отдельного приложения. Оставшиеся две недели я потратил на различные попытки сгенерировать модель на основании метаданных, что я получал с сервера, чтобы сгенерировать модель в исполняемом виде (так мне приходилось посылать свои данные на сервер каждый раз, когда мне нужно было использовать модель). Я также попытался автоматизировать процесс переобучения модели по мере добавления новых данных и на основании предыдущих оценок. Однако мне не хватило времени завершить оба этих проекта, и поэтому мне пришлось в качестве итоговой презентации показывать результаты моей первой модели и метрики для них, сравнивая их с метриками для алгоритмического подхода.
(завершение истории по тех причинам )
Часть 1:
Часть 2:
Часть 3:
Часть 4:
Часть 5: Интервью
Часть 6: Практика в Майкрософт Бинг в Сан-Франциско (пост2)
Часть 7: Работа в Майкрософт Бинг изнутри
Для связи используйте мой ник здесь и Гугл :)
----------
В общем, я перебрал несколько подходов, остановился на наиболее перспективном и занимался анализом различных факторов на тип блока текста. Я написал несколько программ для анализа текста, его разметки вручную для генерации gold standard (который мне был нужен для расчета метрик, таких как precision и recall), самообучающийся движок для анализа текстов на основе многих страниц из одного источника (то есть для случая, когда мы можем предполагать одинаковый дизайн, но разный контент в n связных документах).
Предварительная же оценка моей работы, написанная моими двумя руководителями по итогам первых 6-8 недель, была скорее негативной, чем позитивной. «Не всегда способен оценить сложность и приоритет задач», «зачастую работает над менее приоритетными задачами, в то время как более приоритетная задача остается без внимания», «небрежно относится к срокам, которые может пропустить без какой-либо видимой причины» -- все это оказалось для меня совершенно неожиданным. И правда, примерно на 7-й неделе я потерял две недели работы из-за того, что у меня приказал долго жить жёсткий диск и была потеряна работа порядка полутора недель (я не делал бакапы каждый день), да, мне бывало откровенно скучно на наших рабочих встречах, так как мой проект не имел прямого отношения к тому, над чем работала наша группа. Но даже с учетом этого я не ожидал такой степени негатива.
Я попытался прояснить ряд моментов, особенно что касалось «сроков», со своими руководителями, ведь мы никогда не определяли сроки, на что получил просто феерический ответ – “we had some implicit deadlines” (у нас был ряд негласных сроков). Ну кто бы мог подумать, что их вопросы – «а успеешь ли ты до пятницы?» и т.п., которые я просто принимал за предположения, считались ими конкретными сроками выполнения работы.
После такой характеристики мне было уже все-равно. Я слышал от других интернов, что тем, интернам, которые успевали успешно закончить свой проект до конца практики, предлагали сразу работу. В моем случае, очевидно, это было исключено – я бы и сам никогда не взял работника с такой характеристикой.
После этой характеристики мне стало понятно, что между мной и моими руководителями имеется некое недопонимание. Я порой проверял какие-то гипотезы и делал какие-то вещи, которые я с ними не обсуждал детально, особенно если они не срабатывали. Я также мог самостоятельно изменить приоритет задачи, если считал, что она менее перспективна чем мы сначала считали.
В этот момент как раз проходил Global Intern Event, на который я полетел в Сиэтл, и там я встретился снова со своим рекрутером. По его совету я по возвращении обсудил свою характеристику еще раз со своими руководителями, и мы чуть изменили формат наших встреч, обговаривая в конце что ожидается к следующей встрече и к концу недели. Это помогло мне, с одной стороны, более правильно понимать их приоритеты и ожидания, а, с другой стороны, я стал больше рассказывать им о неудачах или тупиковых ветвях развития проекта.
До этого момента я старался подходить к своему проекту алгоритмически, но постоянно растущая сложность проекта, в частности количество учитываемых факторов и их взаимосвязь привела к тому, что, не смотря на мои старания, я не видел какого-либо статистически значимого улучшения в результате работы алгоритма. Всё говорило за то, чтобы перейти от чисто алгоритмического к Machine Learning подходу. Однако это меня пугало: я только-только разобрался немного в своей теме, а тут мне нужно было срочно осваивать новую тему, причем очень сложную и непонятную для меня.
Однако не самая хорошая характеристика придала мне сил – терять мне в любом случае было нечего (кроме, возможно, опасности попасть в какой-нибудь «черный список» с пометкой no hire, но об этом я в тот момент совсем не думал). Поэтому я решился на такой шаг и за 5 недель до окончания проекта я бросился со всеми силами на изучение и, по мере изучение, внедрение методик машинного обучения в своем проекте.
Это сейчас, в 2015 году, когда машинное обучение стало модной технологией, найти хороший и даже бесплатный курс в интернете не представляет больших проблем. Coursera предлагает целый ряд курсов, от объемно-теоретических, как курс профессора Andrew Ng, до сугубо-прикладных, как курс от университета John Hopkins. Да и на других платформах предостаточно интересных курсов с заданиями и разобранными ответами. Тогда же я смог найти лишь какой-то мутный туториал на R, который мне посоветовали использовать мои руководители, но который за три дня изучения и «научного тыка» не сильно продвинул меня к моей цели.
Когда я уже начал выдыхаться я вдруг вспомнил, что я же блин специалист по MS SQL Server, а в состав этого сервера входит отдельный движок для машинного обучения – SSAS, SQL Server Analytical Services. Когда, еще в целях подготовки докладов для Microsoft Student Partner Program, я занимался этим движком и у меня были базовые знания о том, как создавать модель, как распределять данные, как обучать модель и проводить cross-validation.
В результате я за три дня сделал несколько моделей для своих данных: от простых decision trees и nave bayes, до довольно большой по размерам (насколько мне позволил сервер) нейронной сети, которую я особенно долго тренировал на своих данных. После сравнения всех трёх моделей, к моему удивлению, модель, построенная на decision trees, выдавала наилучшие значения как для precision, так и для recall для моей задачи.
Кроме построения самой модели, SSAS позволил мне оценить вклад отдельных факторов в принятие решения о том, какой тип (реклама или текст) имеет данный блок (так называемая discriminative power), что позволило мне сосредоточиться на этих факторах и улучшить их, разбив некоторые из них на подкатегории и добавив сходные факторы. По итогам первой итерации моей модели я смог достичь рекордных значений метрик.
Как оказалось, мои руководители еще в начале моей практики на основании их собственных прикидок определили некие пороговые значения, которые должен был достичь мой алгоритм, чтобы они его приняли. Использования методик машинного обучения как раз и помогло мне получить алгоритм, который удовлетворял этим условиям.
Как я уже писал, мой алгоритмический подход имел в себе также самообучающуюся часть, и мне хотелось внести элементы обучения также в модель, основанную на машинном обучении. Проблема же заключалась в том, что сам процесс построения и обучения модели требовал активного участия SSAS, что не позволяло мне сделать весь проект в виде отдельного приложения. Оставшиеся две недели я потратил на различные попытки сгенерировать модель на основании метаданных, что я получал с сервера, чтобы сгенерировать модель в исполняемом виде (так мне приходилось посылать свои данные на сервер каждый раз, когда мне нужно было использовать модель). Я также попытался автоматизировать процесс переобучения модели по мере добавления новых данных и на основании предыдущих оценок. Однако мне не хватило времени завершить оба этих проекта, и поэтому мне пришлось в качестве итоговой презентации показывать результаты моей первой модели и метрики для них, сравнивая их с метриками для алгоритмического подхода.
(завершение истории по тех причинам )
(завершение истории, по техническим причинами здесь как комментарий)
Когда пошла последняя неделя моей практики к нам в офис из Сиэтла прилетел менеджер второго уровня (начальник моего начальника), который среди прочего послушал мой доклад о практике в виде небольшой сжатой презентации. После презентации я вернулся в свой кубикл, а мои руководители продолжили что-то обсуждать со своим начальником.
Вечером этого же дня, перед самолётом, начальник зашел ко мне попрощаться, так как он больше меня не увидит, и спросил, как бы между прочим: «не считай это предложением, но что ты думаешь о работе в Майкрософт в США?». Я удивился, но честно ответил, что это для меня практически невозможно, так как у моей жены была очень хорошая работа в Германии, которой мы не можем рисковать и я не думаю, что ей и моему сыну будет легко в США.
Моя практика закончилась опять не очень гладко: во время финального доклада лаптоп решил поставить критическое обновление и перезагрузиться, в результате половину моего 30-минутного доклада я пытался его оживить и потом за оставшиеся 15 минут рассказать весь доклад. После доклада мы группой сходили в ближайший ресторан, отметили окончания моей практики, я попрощался со всеми. Это была пятница. Выходные я провел очень бурно: всю субботу ездил по Сан Франциско на экскурсионном автобусе (до этого у меня не было на это время), а воскресенье потратил на поездку в Алькатрац и на Остров Ангелов. В понедельник вечером моё самолет вылетал обратно из Сан Франциско в Гамбург…
Утром в понедельник я проснулся от телефонного звонка. Я очень удивился – ведь мой номер в снимаемой квартире практически никто не знал. Это был мой рекрутер. Я был очень удивлен, но он напомнил мне, что мы, оказывается, договорились, что он позвонит мне в день отлета еще тогда, когда я с ним встречался во время поездки в Сиэтл на встречу с другими интернами. Тогда же я и дал ему этот номер – я как-то совершенно забыл об этом в пылу баталий последних дней практики.
Рекрутер довольно быстро перешел к делу «Алекс, я получил твою окончательную характеристику от твоих руководителей сегодня утром – и она просто замечательная! Поздравляю с успешным завершением практики. Мы хотим сделать тебе предложение о работе в Майкрософт, включая переезд в США из Германии по завершении твоей учебы. Я посмотрел, сколько мы можем тебе предложить в данной ситуации, и эта сумма составляет столько-то в год. К сожалению, это предложение является non-negotiable, то есть ты не можешь торговаться за его условия, а можешь лишь либо принять, либо отклонить его.»
Пока я летел обратно решение уже было принято моей семьей. Мы стали готовиться к переезду в США через пару лет…
Прочитал все от начала до конца. Осознал что я безвольное чмо.
Теперь этот пост осел в моей голове в виде доп. мотиватора, спасибо!
P.S. работаю в банке на самой скучной в мире должности, пару месяцев назад понял что начинаю тупеть. Через неделю отрабатываю последний день и меняю сферу деятельности на программирование. :)
Это что-то из разряда фантастических фильмов!
Читаю опять же с упоением.
Вот так,казалось бы все складывается не самым лучшим образом,но счастливый звонок с утречка может перевернуть всё!
С нетерпением жду следующую часть! (жаль что последнюю((
вот бля второй пост где вспомнили про бекапы хоть ты на работу едь