Мотивация

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

Именно там я заметил отличную идею проекта: Расшифровка скриншотов! Тенденция последних лет в социальных сетях, включая Reddit, заключалась в том, чтобы делать скриншоты контента с других платформ и публиковать их для зрителей на других платформах. Пример скриншота из Твиттера:

Конечно, эта практика ужасно недружественна пользователям программ чтения с экрана (например, слепым), архивариусам и специалистам по поиску информации в целом.

Я не первый, кто сделал это наблюдение. На самом деле, этот проект вдохновили и те, кто это сделал: пользователи r/transcribersofreddit. Они ходят по Reddit только из-за доброты, добровольно тратя свое время на расшифровку этих самых постов. У них также есть шаблоны для этой цели. Итак, для этого поста пример транскрипции, который они предоставляют:

Транскрипция изображения: пост в Твиттере

Морган Бейкер, @yagirlmorgg

мои таланты заключаются в том, чтобы избегать трудных разговоров и по-настоящему грустить из-за того, что я предвидел

Я добровольный расшифровщик контента для Reddit, и вы тоже можете им стать! Если вам нужна дополнительная информация о том, что мы делаем и почему мы это делаем, нажмите здесь!

Увидев эти транскрипции на Reddit, я задумался. Можем ли мы обеспечить некоторую автоматизацию, чтобы помочь этим людям? Возможно, задача могла бы выглядеть так: 1) Одобрить автоматическую транскрипцию, 2) При необходимости исправить, при этом 90% сообщений требуют только шага 1.

И о чудо, у нас уже есть набор данных! Все, что нам нужно сделать, это зайти на reddit.com/r/ToR_Archive, и мы сможем найти каждый пост Reddit, который имеет транскрипцию, предоставленную человеком.

Пример:

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

Получение набора данных

Чтобы продолжить, у нас должен быть набор данных. Я надеялся использовать родной Reddit API и r/ToR_Archive для его создания, но Reddit API был слишком ограниченным и медленным, а в ToR_Archive оказались некоторые несоответствия. Вместо этого я использовал замечательный Pushshift API, который был разработан для исследований с участием Reddit. Сначала я собрал все комментарии, в которых был текст Я добровольный расшифровщик контента для Reddit!. Они сформировали файл tor_comments.csv. Затем для каждого комментария я смотрел, содержит ли URL-адрес PNG или JPG. Если это так, я скачал PNG или JPG.

Было несколько крайних случаев:

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

Вы можете найти CoLab, выполняющую загрузку здесь (плюс предыдущие исследования и неудачные попытки). Если вы хотите заняться этим проектом самостоятельно, вам потребуется около 20 ГБ дискового пространства. Как есть, код сохраняется на Google Диске, но это можно легко изменить. Присоединение комментария к транскрипции со снимком экрана с идентификатором поста транскрипции (link_id) дает набор данных из 95 766 полных транскрипций на момент написания.

Анализ набора данных

Транскрипции разбросаны по множеству разных субреддитов. Вот гистограмма топ-30, на которую приходится 87 878 ​​из 95 766:

Субреддит r/transcribersofreddit поддерживает согласованность среди своих транскрибаторов ~5 тыс., предоставляя шаблоны для транскрибаторов, которые они могут использовать в обычных сценариях. Исчерпывающе, они:

  • Искусство и изображения без текста
  • Изображения с текстом
  • 4Chan и фотографии Greentext
  • Сообщения и комментарии Reddit
  • Сообщения и комментарии в Facebook
  • Текстовые сообщения и другие приложения для обмена сообщениями
  • Сообщения и ответы в Твиттере
  • Комиксы
  • гифки
  • Код
  • Мемы
  • Другие источники

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

Неудивительно, что IMAGES_WITH_TEXT является наиболее распространенной категорией. Это потому, что я сделал это резервной категорией, и это, по сути, означает, что они просто следовали стандартному шаблону. Если транскрипция вообще не соответствует шаблону, она получает категорию OTHER. Гистограмма без IMAGES_WITH_TEXT ниже показывает количество других категорий с более высокой точностью.

Далее: базовый подход

В следующей записи блога я описываю базовый подход к проблеме.