Telegram Group Search
Как-то незаметно прошло 3 месяца с последней записи. За это время произошли две новости.

НОВОСТЬ НОМЕР ОДИН. Я начала писать TFM (Trabago del fin del máster, или финальная магистерская работа)

В начале сентября мне казалось, что я определилась с темой – выбрала Wordnets. Преподы по Deep learning мне отказали, сославшись на то, что у них большая нагрузка и больше они студентов не берут. Так я осталась с Херманом, а потом выяснилось, что со мной еще будет заниматься Родриго, в итоге у меня два преподавателя по TFM. Херман – организатор и генератор идей, а Родриго отвечает за техническую часть.

Когда я пришла к Херману и сказала, что выбрала тему, он предложил мне еще 20 тем. Дал список статей по каждой и месяц на прочтение. То есть только я избавилась от мук выбора, как они снова ко мне вернулись. Мне, как обычно, понравилось все. Однако я пошла по самому простому пути: взяла продолжать тему в проекте, который уже создан и первую часть написала студентка с предыдущего курса. Это Named Entity Recognition в параллельных текстах. Идея такая: если в трех параллельных текстах NE совпадают, то и в четвертом (или пятом, или сколько есть) параллельном тексте с большой вероятностью они будут такие же, и это можно использовать как NER tagger (или любой другой теггер, например, semantic role labelling). Преподы и студентка с этой темой была на конференции в Японии, и они опубликовали пейпер. Ссылка на статью: http://www.lrec-conf.org/proceedings/lrec2018/pdf/965.pdf. Мне это понравилось, я подумала, значит, тема интересная.

Так, в начале октября я начала делать TFM. Моя задача сейчас провести тот же самый эксперимент, но уже с моделью, обученной на данных, которые выдает система. Все идет довольно медленно. Скрипт, который написала студентка, не работал. И я не знала почему, и никто не знал почему. Пока друг-программист не сел и не проверил строка за строкой все 300 строк кода. Преподы не унывают, говорят, время еще есть, и не воспринимай это как потерю времени, а как процесс обучения. Они оптимисты.
НОВОСТЬ НОМЕР ДВА. Меня взяли на работу по специальности.

Это небольшая контора в Мадриде, которая занимается исследованиями рынка, в том числе и политической картины. Они искали компьютерного лингвиста для работы в области текст-майнинга (соцсети, вот это вот все). И поскольку таких специалистов довольно мало в Испании, а те, кто есть уже работают и неплохо зарабатывают или не хотят уезжать из Страны Басков ни за какие деньги. Вся работа происходит в уже готовом приложении для машинного обучения (Rapid Miner называется, это как Weka, только более продвинутая и более user friendly), мне не нужно ничего писать с нуля, только какие-то небольшие вещи, которых нет в программе. В основном нужно только знать процесс построения модели, как подготовить текст для каждой модели, как сделать базу данных и gold standard, предложить какие-нибудь улучшения. Среди задач: определение языка текста (нужно чтобы программа отличала испанский от каталанского), определение тематики, определение политического крыла, если тема – политика. Супер интересно. Пока что мне все нравится, и единственное, что кажется странным, — это то, почему мне не очень сложно и почему у меня получаются все задания. Впрочем, не будем забывать, что по машинному обучению я получила 8,5 – это самая высокая оценка из всех девяти предметов.
Forwarded from nlp_uppsala_master
Хотите поизучать самые разные NLP-задачи с примерами и готовым кодом на питоне, при этом внятно изложенные материалы по рубрикам, да ещё и на русских данных? На Гитхабе лежит много разных вышкинских материалов, но этот репозиторий совершенно точно стоит изучения (а я всплакнула, потому что нам подобного показали каплю в море, степень подробности была минимальна, ну и такого охвата тем по сути в Уппсале в рамках одного курса не дают): https://github.com/mannefedov/compling_nlp_hse_course
Коллекция новейших научных публикаций по теме NLP с кодом: https://paperswithcode.com/area/nlp
В Zalandoresearch сделали совершенно потрясающую NLP библиотеку для NER, POS, desambiguation, классификации, работы с embeddings (Glove, FastText, BERT и их собственные). Работает на базе Pytorch и очень-очень простая в использовании, так что даже лингвисты теперь могут тренировать свои модели, используя нейросети. Не нужно знать математику, Numpy и подробную теорию дип-ленинга. Достаточно знаний о параметрах, чем они отличаются и как найти наиболее подходящие. 


Другой вопрос, что пока что на моем корпусе нейросети уступают в точности и F-score простому Support vector machine. Надеюсь, мои преподаватели объяснят мне этот феномен. 


Собственно, библиотека: 


https://github.com/zalandoresearch/flair  


Понятный туториал как сделать классификационную модель: 

https://towardsdatascience.com/text-classification-with-state-of-the-art-nlp-library-flair-b541d7add21f  


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

Поскольку работа была связана непосредственно с NLP, более того, с классификацией текстов, и более того, с Твиттером, я решила сменить тему магистерской. И она стала называться Stance Detection on Political Discourse in Twitter. Я писала модели машинного обучения для предсказания того, согласен ли автор твита с необходимостью проводить референдум о самоопределении нации в Каталонии в 2017 году.

Внезапно для всех, для меня особенно, мои модели работали лучше, чем все, сделанные ранее на этом датасете. Я сравнивала классический SVM и TF-IDF в качестве векторизации текста, SVM и embeddings векторы FastText, и BiLSTM и контекстуальные эмбеддинги. Первый вариант, с хорошо отобранными features и grid search по параметрам классификатора выдал самый высокий F1, но и оверфиттиинг тоже самый большой. (Трудно писать на русском про машинное обучение). Нейросети хуже всего показали себя, возможно, потому что датасет был совсем маленький, тренировочный сет был 4500 твитов.

На написание ушло 7 месяцев, с января по сентябрь, в августе я почти ничего не делала, все были в отпуске. Хотя я хотела защититься в июне, все затянулось, преподы не могли проверять быстро, и в общем, это было правильное решение. Мне нелегко далась письменная часть. На самом деле у меня не такая уж сильная база английского. Я изучала его в школе 8 лет с языковом классе, и после этого пользовалась им мало, вся языковая практика была в просмотре сериалов без перевода и чтении редких несложных книг. А тут раз - и пиши научным стилем про машинное обучение. Я много раз переписывала одно и то же, переставляла местами, мне все время что-то не нравилось. И в итоге Родриго помог и отредактировал мой английский так, чтобы он был похож на научный стиль.

С преподавателями общались по скайпу, каждый понедельник, в 9 утра было собрание. Мы обсуждали сделанное и составляли план на неделю. Мне все время казалось, что я работаю медленно, что не выполняю все запланированное на неделю. Но преподы меня хвалили, подбадривали и очень этим мотивировали. Я первое время ждала от них каких-то указаний, через некоторое время стало ясно, что я могу делать все самостоятельно, не согласовывая с ними каждый шаг. Несколько раз мы встречались лично, когда у меня была возможность бывать в Сан-Себастьяне в рабочие дни.

Мне очень понравилось делать TFM, читать статьи, придумывать что-нибудь, чтобы поднять перформанс, все-таки машинное обучение очень геймифицированное, генерирующее дофамин килограммами, вечное соревнование, у кого F1 больше хотя бы на полпункта. Вот что получилось в итоге. Абстракт и pdf по этой ссылке: http://ixa.si.ehu.es/master/eu/node/2102
Здесь можно посмотреть все работы магистратуры, и даже по одним только заголовкам понять, что они все интересные и сложные, а студенты все молодцы. http://ixa.si.ehu.es/master/eu/master_tesiak_amaitutakoak
Начался прием заявлений в магистратуру по NLP, куда можно поехать по программе Эрасмус. Магистратура длится два года, и в течение этого времени можно учиться в двух вузах, один год в одном и второй в другом. https://lct-master.org/
Уже идет прием документов в магистратуру по NLP в университете Страны Басков. Магистратура недорогая, а университет находится в красивом месте. https://www.ehu.eus/en/web/estudiosdeposgrado-graduondokoikasketak/master-izen-ematea-eta-onarpena http://ixa.si.ehu.es/master/en?lang=en
Прошло еще сколько-то месяцев (незаметно), а я все еще не написала про защиту магистерской. Так вот. Для меня это был новый опыт. Последний раз до этого я говорила перед публикой больше 10 человек много-много лет назад, и уж точно не по-английски. Конечно, я сразу представила, что буду говорить какую-нибудь фигню, все забуду и перепутаю.

На подготовку презентации дается 2 недели. Слайды я сделала быстро, в этом у меня есть приличный опыт, я работала в отделе маркетинга все-таки. Потом две репетиции. На первой преподаватели привели меня в зал, где проходят защиты, чтобы поместить меня в максимально приближенные к реальным условия. На презентацию давалось 20 минут. Я в них не уложилась даже близко, а Херман сказал, что я говорю очень медленно, как будто я уже устала от всего происходящего. Ты, говорит, должна знать, что оцениваться будет не только твоя работа, но и то, как ты ее представишь, в твоих словах должно чувствоваться, что ты гордишься своей работой. Честно сказать, я и правда, собой очень гордилась, перед самой собой, потому что это было гораздо больше, чем я от себя ожидала, когда поступила в магистратуру.

Затем еще неделя на поправки. И вторая репетиция была дома, со слайдами на телевизоре, таймером и критикой экспертов.

На работе я договорилась, что в день защиты буду работать удаленно полдня, а вторые полдня мне засчитают "бесплатно", поскольку по закону положено 4 рабочих часа на защиту финальной работы, если работник учится. Нас было пять человек на защите, из них трое были русские девочки. Одна из них, после компьютерной лингвистики ВШЭ, очень крутая и способная, проходила практику в Sony и сделала сложнейшую работу по системам распознавания речи, сейчас она в Германии, если верить ее линкедину.

Мне очень понравилось защищаться. Как-то само собой прошло волнение и мобилизовались силы, так что я уложилась в 20 минут, говорила бодро, не забывала слова и даже пошутила немного про независимость Каталонии. Еще 20 минут давалось на вопросы. Первым делом после твоего выступления преподаватели хвалят, говорят про сильные стороны работы, благодарят. И только потом начинаются вопросы. Мне особенно много вопросов не задавали, в комиссии были преподаватели не по моей теме, и для них, как они потом признались, все это машинное обучение выглядит как магия. Спросили, чтобы я сделала еще по этой теме, если бы продолжала работать над темой, и не помню, что еще.

Особенно меня поразила очень дружелюбная обстановка, когда тебя все поддерживают, поздравляют и обнимают после выступления. И тогда выступать на публике совсем не страшно, даже наоборот. Наверное, это не во всех универах так, просто мне повезло. Поскольку я не очень напрягалась, когда писала магистерскую и защиту к ней, у меня не было ни усталости, ни опустошения, как это бывало раньше после сессий в универе. Наоборот. Родриго сразу после защиты начал разговор про PhD и про пейпер и что мы будем делать дальше, и в приступе эйфории казалось, что я готова вот прямо сейчас написать и кучу статей, и диссертацию, и что угодно.
В телеграме есть чат про NLP на русском. Если интересно, приходите. Мы там обсуждаем насущные проблемы классификации, трансформеров и, конечно, зарплат дата-сайентистов https://www.group-telegram.com/nlp_ru
Я пишу длинный текст о том, как учусь программировать, а пока вот интересный вдохновляющий канал о том, как девочка-гуманитарий стала программистом. Желательно читать его сначала, чтобы понять всю историю. https://www.group-telegram.com/it_human
Прошло 3,5 года, как я решила сменить профессию, поступила в магистратуру, начала изучать обработку естественного языка. Я пишу код почти каждый день и мне за это платят. Хотя я не программист, конечно. Я NLP-специалист, который умеет писать скрипты и использовать Python для своих лингвистических и машиннообученческих нужд, то есть для ограниченного количества задач, и который может немного разобраться в другом скриптовом языке, если надо. Я каждый день учусь новому, поэтому, наверное, нет ощущения, что вот уже прошло столько времени, как я во всем этом.

Часть 0. Деньги и время.

Когда речь заходит о том, как кто-то “за 30” вошел в айти, думаю, возникает сразу два вопроса. Где он взял столько времени, чтобы переучиться, и кто ему оплачивал это время. И говорить о своих успехах без упоминания помощи и поддержки было бы несправедливо. Иначе кто-то подумает, что вот люди могут, а я нет, и я неудачник. А он, может, не неудачник, просто условия такие.

Как известно, я оказалась в Испании случайно, и начала ориентироваться по ситуации. Я считаю, что мне очень повезло. Рядом всегда были люди, которые мне помогали.

В сложившихся тогда обстоятельствах у меня было вот что.

1) Так получилось, что весной 2017 года пришлось продать квартиру в Барнауле. Спасибо сестре за то, что помогала искать покупателей, и Натке, за то, что приютила меня на целый месяц. Раз уж так сложилось, я решила инвестировать эти деньги в образование, потому что купить на эти деньги что-то существенное было нереально. Их хватило, чтобы оплатить учебу (3000 евро) и на жизнь на первое время.
2) Мне помогал муж. Когда я уехала, он сдал две свободные комнаты в своей трехспальневой квартире и оплату за одну из них отдавал мне. Ему тоже спасибо.
3) Периодически у меня была проектная удаленная работа на 20 часов в неделю без расписания, которая позволяла работать по выходным и по ночам. Этого хватало на еду. Спасибо Лене, менеджеру Сигмы, которая меня “продвинула по службе” и подкидывала “неофициальные” подработки по знакомству.
4) Я давала уроки русского, 2-4 урока в неделю, чем оплачивала походы по барам и поездки по окрестностям. Спасибо ученикам за их мотивацию и за то, что не торговались.
5) В начале второго курса, через год после начала учебы, я нашла работу по специальности. На этой работе было достаточно времени, чтобы заниматься своими делами - писать магистерскую и делать упражнения по программированию. Спасибо за это моему тогдашнему начальнику Мануэлю.
Часть Первая. Студенческая.

Перед началом учебы у меня было два месяца свободного времени. Я попыталась посмотреть видеокурс “про программирование” и открыла первый попавшийся. Это был Intro to Computer Science на Udacity, вот этот https://classroom.udacity.com/courses/cs101
Конечно, я выдержала недолго, всего пару уроков, практические задания пропускала и ничего не запомнила.

В магистратуре нам преподавали программирование с октября по февраль. Python, Perl, и немного R в курсе по машинному обучению. Нам говорили, что не сделают из нас программистов, что нам просто надо уметь понять код и запустить его.

Первые пару месяцев в универе программирование казалось мне сложным набором действий с запутанной логикой, где куча каких-то мелких деталей, у меня была куча вопросов, почему так, а не по-другому, это они специально так все сложно придумали, чтобы мы чувствовали себя тупыми. Код больше пяти строк пугал, и это мешало начать разбираться в нем. Если у меня что-то и получалось, то, скорее всего, это было случайно. Некоторые ошибки доводили меня до ярости, потому что я не понимала, что не так (а это была, как правило, какая-нибудь опечатка или неверный порядок строк, или еще что-то очень простое). Я была как собака в меме с собакой за компьютером I have no idea what I'm doing.
Недоделанные задания сдавать я не хотела. Лучше ничего, чем плохо. Однажды после занятия ко мне подходит преподаватель и спрашивает, почему я не загрузила в работы в личном кабинете. Я ответила правду. И он говорит: ты торопишься после лекции? Садись, давай будем разбирать, что непонятно. Он показал stackoverflow, сказал не бояться гуглить, что все так делают, что это нормально и полезно, что невозможно все держать в памяти все время. А мне правда не приходило в голову гуглить, я была уверена, что либо ты понимаешь, как работают функции, либо нет. У нас был туториал по питону, и я пыталась искать объяснение всего именно в нем.

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

Этот случай меня немного приободрил. Теперь я вспоминаю тот период и понимаю, что я была один-на-один с компьютером, мне не у кого было спросить даже небольшого совета. А вокруг еще одногруппники все схватывали на лету, программировали какие-то сложные, как мне тогда казалось, штуки. Особенно я завидовала Кристине, она тоже лингвист, но младше меня на 10 лет, и она получала высокие оценки по программированию, и по теории автоматов, и по другим технических предметам. Я чувствовала себя старой. Когда я училась в универе 20 лет назад, мне все давалось легко, а тут я поняла, что либо я ввязалась во что-то очень сложное, либо мои способности к учебе за это время ухудшились.

После разговора с преподом я написала еще часть заданий и получила 6 из 10. Я не смогла все-таки сделать все упражнения по XML. До сих пор не люблю XML.
Часть Вторая. Романтическая.

Непонятно, как бы сложилась моя жизнь дальше, если бы в начале второго семестра магистратуры я не познакомилась с мальчиком, PhD студентом нашего факультета.

Однажды мы универской компанией пошли в кино. И после сеанса он спрашивает, чем я буду заниматься на выходных. Я говорю, буду писать скрипт, задание по “Приложениям”, буду занята. В курсе “NLP для приложений” было задание - сделать приложение. Я придумала программу для обучения русскому, которая бы тренировала запоминание падежей и спряжений. Ничего особенно сложного - нужно было взять текст, убрать окончания у некоторых слов и подставить рядом в скобках лемму. Но все равно - манипуляции со строками и списками, плюс условия в зависимости от части речи.

И он говорит: а давай я тебе помогу, и таким образом мы освободим твои выходные, съездим куда-нибудь. Он просит бумагу и ручку и пишет код. Представьте, ранняя весна, ночь, набережная океана, мы сидим на лавочке, я подсвечиваю тетрадь фонариком телефона, а он пишет код для меня. Сложно было представить что-то более романтичное и более вдохновляющее.

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

1) Поставить Анаконду. Потому что она удобная, заботится о том, чтобы питон работал правильно в Windows (в Ubuntu тоже, но в Windows особенно) и дает наглядное представление, что такое виртуальное окружение.

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

3) Начать делать упражнения, писать что-то для себя, любую фигню, главное, чтобы было интересно.

Поставить Анаконду было легко, она выглядит как обычная программа (жмешь next, next - и все готово), а библиотеки ставятся галочками в самой программе или conda install в ее собственном же терминале. Писать код стало раз в 10 приятнее и проще, я перестала ощущать себя потерянной перед черным экраном с белыми однообразными буквами. Теперь буквы были цветные и более понятные, ошибки подчеркивались, переменные отображались.

И я начала делать упражнения, причем начала сначала, с того, что мы уже учились делать в магистратуре. Это было что-то совсем мелкое, по книге NLTK Book: прочитать текстовый файл, разбить текст на токены, посчитать частоту токенов в тексте, убрать стоп-слова, разметить части речи. Каждый раз, когда моя функция работала без ошибок, я впадала в эйфорию и начинала чувствовать, что не все потеряно, я могу что-то делать.

К концу второго семестра у меня наступило просветление, я поняла, что именно я изучаю и чем хочу заниматься в будущем.
Часть Третья. Машинное обучение.

Когда закончились лекции, с места в карьер я перешла к машинному обучению. В универе у нас был курс по ML, где давали Weka и R. Если R язык программирования, то Weka - это полнейшее недоразумение, которое, мне кажется, только больше запутывает, чем помогает разобраться в машинном обучении.

Все это было по туториалам, у меня, конечно, получилось все, но запомнила я мало, кроме того, что размер корпуса важен. Я не посмотрела на количество текстов и запустила обучение random forest на датасете с 50 тысячами документов на своем старом компе и потом долго не могла понять, что происходит, и вроде бы комп не висит, и цифры не выводятся на экран. Таков был мой первый опыт с биг-датой.

Теперь надо было делать все с нуля и в Scikit-learn. Это, наверное, самый известный фреймворк, и что самое важное, очень простой в использовании и в понимании. Думаю, было бы куда продуктивнее изучать в магистратуре именно его, а не странный R, на котором вообще еще кто-то пишет в NLP?

Чтобы было веселее, мы решили сделать что-нибудь, связанное с Твиттером. Для этого нужно было.
- Найти размеченный корпус. Я нашла датасет русского твиттера с размеченной тональностью (положительный, отрицательный, нейтральный). 15 тысяч твитов.
- Установить нужные библиотеки.
- Открыть сайт sklearn, найти туториал по классификации и скопировать код. Вот этот туториал https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html
- Обработать датасет, отредактировать код, подставив туда свои переменные и выкинув лишнее.
- Запустить обучение моделей.
- Сравнить результаты.
- Применить обученную модель к своему твиттеру, посмотреть, что получилось.
- Обучить модель на векторах word2vec. Найти скрипт, который считает средний вектор для каждого твита, подготовить входные данные для модели. Повторить пункты 4-7.

Конечно, для меня это все было магия. Это работает, циферки бегут. А как сделать так, чтобы эти цифры были выше и лучше? Что там получилось в итоге? Это было что-то наподобие игры, которая генерировала дофамин тоннами, поэтому несложно было всем этим увлечься. Кстати, потом этот скрипт, дописанный и улучшенный, я еще несколько раз использовала для своей магистерской и выложила его на гитхаб, когда готовилась к собеседованию на первую работу.
Часть Четвертая. Магистерская.

В октябре (это все еще 2018 год) снова началась учеба. Теперь уже магистерский проект, на него дается 30 кредитов, весь учебный год. Я два месяца провела в раздумьях, что я хочу выбрать и с кем писать. С кем писать - вопрос был более простой. Мне хотелось делать магистерскую с самым крутым преподом факультета, но, естественно, он меня не взял - сказал, что у него уже все места заняты.

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

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

Чтобы как-то упорядочить все эти списки с темами и статьями, мне пришлось освоить:

- Google Academic/Scholar - поиск по научным статьям;
- Mendeley - программа для категоризации и скачивания этих статей. У нее есть плагин для Firefox, который автоматически отправляет PDF в твой онлайн аккаунт, а десктоп-приложение автоматически синхронизирует все с онлайн-аккаунтом. Внутри пдфки можно помещать в разные папки, ставить на них свои теги, комментарии и так далее. Очень удобно и экономит кучу времени.

В итоге я остановилась на проекте, который уже начался, и в нем кое-что уже было сделано студенткой на год старше. Она даже отправила пейпер на LREC по итогам. И было видно, что преподам тоже интересно продолжать тему. Тема была про распознавание именованных сущностей в параллельных текстах.

Я каждую неделю ходила в универ на встречу с преподавателями, остальное время делала что-то дома. Работа шла медленно. Мне было сложно все. Все было на сервере, сервер на Ubuntu. Я с трудом запоминала команды, не представляла, как можно запомнить столько команд, как вообще жить без кнопок. Программирования как такового было немного, мне выдали скрипт, который написала предыдущая студентка, скрипт не работал, мне опять пришлось обращаться за помощью. Обучение моделей происходило в уже готовой программе и заключалось только в подстановке корпуса и моделей. В общем, довольно быстро наступило ощущение, что я немного застряла.
2025/06/19 14:27:45
Back to Top
HTML Embed Code: