Delta Analytics - это некоммерческая организация 501 (c) 3, расположенная в районе залива Сан-Франциско, которая стремится использовать данные во благо через наши гранты на обслуживание данных и образовательные программы. Подробнее о наших программах вы можете узнать здесь. Если вы заинтересованы в поддержке наших программ, мы принимаем финансовые взносы здесь. Все остальные запросы направляйте по адресу [email protected].
Арман Мадани был научным сотрудником по данным 2019 года и аналитиком данных в Affirm. Эта статья также размещена в его личном блоге: ArmanMadani.com.

Стипендия Data Fellowship 2019 завершилась 19 июля, и было продемонстрировано множество отличных и эффективных проектов. Одной из некоммерческих организаций, сотрудничающих с Delta Analytics, было Tarjimly (переведи для меня на арабском языке), приложение для перевода, которое объединяет беженцев / иммигрантов с добровольными переводчиками по запросу. На сегодняшний день Тарджимли помог почти 20 000 беженцев и набрал 9 000 добровольцев. Томасу Веттерли, Теренсу Тэму, Угасо Шейх-Абди и мне было поручено помочь Таржимли выполнить следующее:

  1. Уменьшение времени, необходимого для сопоставления переводчиков / гуманитарных работников с беженцами / иммигрантами (базовый уровень: 130 секунд)
  2. Повышение коэффициента успешных совпадений (базовый уровень: 50%)

Ниже мы опишем TL; DR каждого этапа нашей работы.

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

  • Многие переводчики не использовались или использовались недостаточно

  • Время и часовой пояс имеют большое значение. Первоначально мы упустили из виду важность проверки связи переводчиков в подходящее время относительно их часового пояса.

У нас также была возможность изучить динамику рынка на платформе Tarjimly. То есть изучение взаимосвязи между спросом на переводы данной языковой пары (например, арабско-английский) и количеством переводчиков, которые могли бы говорить на обоих языках. Хотя в конечном итоге мы не так часто использовали анализ динамики рынка при моделировании, мы смогли внести изменения в кодовую базу, чтобы масштабировать количество переводчиков, к которым обращались пингующиеся в ответ на нехватку переводчиков (подробнее об этом ниже).

Разработка функций
Это довольно просто. Мы смогли расширить набор функций, которые предоставила нам команда Tarjimly, за счет получения новых функций из необработанных данных. Например, при задании даты, когда переводчик ответил «да» на запрос, мы разбили эту дату на несколько двоичных переменных, таких как «дата окончания недели?», «Дата окончания месяца?», « это будний день, выходные или праздник? »

Кроме того, мы свели отношения «один ко многим» в отношения «один к одному». Пример: если 1 пользователь имеет несколько оценок (один ко многим), мы взяли средний балл (один к одному).

Наконец, мы преобразовали все типы данных в пригодные для использования форматы для моделирования (даты, время и строки были преобразованы в числа, такие как числа с плавающей запятой и целые числа).

(Хорошо, я обещаю, что следующая пара на самом деле более «TL; DR-ish», потому что они более абстрактны / были рассмотрены немного выше.)

Библиотека помощников / экстракторов функций
Вся работа по проектированию функций, включая вычисления и преобразование типов данных, была упакована в библиотеку Python, которая поможет создавать функции (так называемые «помощники функций»), а затем сохранять / кешировать извлеченные объекты (называемые «экстракторами признаков»), чтобы мы могли пропустить данные через наши модели.

Рефакторы кодовой базы
Мы реорганизовали код, чтобы сделать его более эффективным, отслеживать производительность нашей модели и масштабировать число переводчиков, уведомляемых о запросе (пул переводчиков) в ответ на определенные триггеры. Что касается отслеживания моделей машинного обучения, мы реализовали MLFlow, платформу для отслеживания жизненного цикла машинного обучения, чтобы отслеживать производительность моделей. Триггеры, которые мы использовали для масштабирования пула переводчиков, основаны на количестве доступных переводчиков для данной языковой пары (например, количество переводчиков, говорящих на суахили и непальском языке, очень мало по сравнению с количеством переводчиков, говорящих на английском и арабском языках) и основано на сколько просьб беженец / иммигрант / гуманитарный работник подавал ранее.

Модели машинного обучения
Мы экспериментировали с 3 типами моделей: логистическая регрессия, случайный лес и деревья с градиентным усилением. Эти модели контролируемого обучения использовали набор функций, который мы вывели выше, как независимые переменные, а массив ответов (да или нет, 1 или 0) как зависимую переменную. Мы экспериментировали с 2-х и 3-х классными моделями, но в конечном итоге решили использовать 2-х классные модели. Идея трехклассовых моделей заключалась в том, что ответ нет отличался от ответа нет (ответ нет означает, что пользователь взаимодействовал с запросом, а не просто игнорировал его), но результаты в конечном итоге такие же. Наша модель случайного леса с расширенным набором функций имеет F1 Score, равный 0,94, и отзыв класса 1, равный 0,56, что действительно хорошо (в то время как большинство запросов либо выполняется, но большой процент индивидуальных эхо-запросов, отправляемых на каждый запрос, выполняется). игнорируется - в конце концов, это приложение использует добрую волю - поэтому нам приходилось помнить о классовом дисбалансе). Действительно интересной частью этого проекта было наблюдение за дихотомией между нашими показателями эффективности машинного обучения и практическими метриками. Например, мы получали очень низкие оценки F-1 (в диапазоне 0,2–0,3), но пока на запрос отвечал только один переводчик, совпадение было успешным, а коэффициент совпадения был отличным! Почему? Когда делается запрос, допустим, 20 переводчиков проверяются, 19 говорят нет и 1 говорит да, ваш результат F-1 будет низким, но пока переводчик 1+ говорит да для большинства запросов, ваш коэффициент совпадения будет высокий. Таким образом, мы наблюдали процент совпадений в диапазоне 80–85%! Вот матрица результатов:

Ниже вы найдете наш финальный плакат, который мы представили на UCSF 19.07.2019:

Полную презентацию Lightning Talk можно посмотреть здесь.

Это был невероятный опыт, и мы с нетерпением ждем продолжения нашей работы с такими влиятельными некоммерческими организациями, как Tarjimly. Опять же, если вы заинтересованы в волонтерстве или внесении финансовых пожертвований в пользу Тарджимли, идите сюда!