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

Я понял, как интегрировать 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. Есть ряд причин, почему это может быть:

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

Хорошо, что дальше?

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

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

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

Я могу использовать всю помощь, которую я могу получить.