Привет! Я пришел к третьему спринту этого проекта, во что трудно поверить, потому что он также совпадает с серединой срока. Это значит, что я должен быть на полпути к этому проекту? Что ж, этот проект может продолжаться годами, но в целом я доволен тем, где я нахожусь. Я изучил новые библиотеки, новые методы, и на прошлой неделе, как я расскажу, все было посвящено проверке того, что мне действительно нужно понять, чтобы продвигаться вперед в этом проекте, а что нужно только уровень понимания. Вот краткое изложение того, что произошло:
Я понял, как интегрировать Gensim и FastText
В последнем посте я задокументировал процесс обучения моей модели с помощью FastText, библиотеки, разработанной Facebook для обучения встраиванию слов (это лишь одна из многих вещей, которые она может делать). Он очень прост в использовании. Вы просто запускаете его через командную строку, и все, что вам нужно, это ваши входные данные. Он выводит два файла, но интерес представляет model.bin, zip-файл со всеми векторами. Проблема в том, что для использования этой модели только с FastText я могу получить свои векторы только через командную строку, что очень неудобно.
Вот тут-то и появляется Gensim. Я обнаружил, что это и это помогают мне соединить Gensim и FastText. По сути, Gensim позволяет супер легко загружать обученную модель FastText и получать из нее векторы с помощью словаря. На внедрение у меня ушло 5 минут, и это сделало мою неделю лучше. Спасибо, Генсим!
Я получил статистику прямого смещения для моей исходной модели
Как только Gensim позволил мне легко получать векторы из моей модели, я мог перейти к интересным вещам: вычислению того, насколько сексистской была моя модель. Теперь я знаю, что довольно махнул рукой по этому поводу в своих предыдущих постах, но на этот раз мы собираемся рассмотреть, как это на самом деле работает, и обсудим каждую переменную в статистике.
Итак, ниже этого абзаца мы можем рассчитать степень, в которой вложение содержит конкретное смещение по нашему выбору. Это из Мужчина для программиста, как женщина для домохозяйки? по Bolukbasi et al. В этом примере я буду придерживаться пола, потому что, по крайней мере, в английском (и в большинстве других языков) пол невероятно бинарен (что очень печально), но эта черта оказывается полезной. в этом конкретном сценарии. Кроме того, было бы здорово сделать этот проект на другом языке, может быть, на том, который обрабатывает родовые местоимения совершенно иначе, чем английский. В ЛЮБОМ СЛУЧАЕ вернемся к алгоритму.
Для этого примера мы возьмем список из 10 гендерно-нейтральных профессий и посмотрим, насколько сильно они влияют на гендерную принадлежность.
- N → Набор гендерно-нейтральных служебных слов (например, медсестра, врач, программист, парикмахер, сантехник и т. д.)
- w → Один из тех членов N. Это суммирование или цикл, если вы мыслите программно. По сути, мы просто будем смотреть по одному слову в списке профессий. занятия [i]
- g → Гендерное подпространство. Ах да, неуловимая лиса алгоритма. Выберите список слов противоположного рода (например, мужчина и женщина, он и она, официантка и официант и т. д.) и вычтите слова мужского пола из слов женского пола (или наоборот). Затем из этого набора вычитаемых векторов найдите их главные компоненты и используйте первое собственное значение. Звучит как блевотина линейной алгебры, и это вроде как так и есть, но если вы можете выучить функции PCA в библиотеке sklearn, то все будет в порядке.
- c → Строгость алгоритма. Это значение от 0 до 1, и за весь год, что я работал над этим проектом, и четыре раза, когда я вычислял эту статистику, я всегда устанавливал ее на 0,8. Чтобы быть более конкретным, если c равно 0, и между словом и родовым направлением g не обнаружено смещения, то слово w вообще не пересекается с g.
Я сделал очень простую версию этого алгоритма для первой версии моего проекта. Я создал свое гендерное подпространство со словами она, ее, ее, он, его и его. И я выбрал список из 10 профессий, чтобы расставить все точки над ним:
occupations = ['doctor', 'nurse', 'actor', 'housekeeper', 'mechanic', 'soldier', 'cashier', 'comedian', 'gynecologist', 'musician']
Я изменил свои данные и переобучил свою модель
Прежде чем я расскажу о том, что я обнаружил, я хочу напомнить вам, что цель этого проекта — минимизировать эту статистику, внеся разумные изменения в данные, которые я ввожу в модель. И хотя моя первая манипуляция с данными была не совсем умной, это было что-то.
Сделал вторую модель, для сравнения с первой. Однако на этот раз я скормил ему новый набор данных. На самом деле это две объединенные копии старого набора текстовых данных, но во второй копии я поменял местами все родовые местоимения:
REPLACEMENTS = [ ['she','he'], ['her','him'], ['hers','his'], ['he','she'], ['him','her'], ['his','hers'], ['herself', 'himself'], ['himself', 'herself'], ["she's", "he's"], ["she'll", "he'll"], ["he'll", "she'll"] ]
Итак, вооружившись сценарием и двумя моделями, пришло ВРЕМЯ проверить, сработал ли план…
Черт возьми! Вроде сработало!
Мне все равно, кто ты, второе число меньше первого. Объективная правда!
Очевидно. МНОГО что нужно сделать. Во-первых, исходная статистика смещения крошечная. Когда я рассчитал эту статистику на word2Vec в прошлом году (намного большая модель, v v известная также), мой исходный гендерный уклон в отношении профессий составил 0,2. Есть ряд причин, почему это может быть:
- Мое гендерное подпространство все еще довольно дерьмовое, поэтому в следующий раз я подкреплю его несколькими парами слов.
- Мой список профессий был намного короче, когда я делал этот последний расчет, так что это неизбежно уменьшает эффект.
- Мне нужно больше данных для обучения этой модели. У меня уже давно есть это подозрение. Начинает есть меня.
Хорошо, что дальше?
Что ж, я хочу найти способ оценить мою модель, посмотреть, действительно ли она хорошо отображает значения слов. Я собирался заняться этим, но думаю, что займусь этим где-нибудь на этой неделе.
Кроме того, эти философские вопросы все еще остаются, поэтому я мог бы задать их кому-то, кто на самом деле является философом. К счастью для меня, профессор, курирующий мой другой дипломный проект, — философ! Так что, может быть, он сможет предложить передышку, а может и нет. В любом случае, я уверен, это будет увлекательно.
Я также хочу получить еще несколько интересных подпространств. Может быть, те, которые представляют расу или этническую принадлежность. Это предполагает перечитывание старой литературы. Линейная алгебра здесь немного более неуловима, но у меня есть еще один контакт в кампусе, который является волшебником линейной алгебры! Может быть, он сможет помочь.
Я могу использовать всю помощь, которую я могу получить.