Мотивация
В этот праздничный сезон я хотел сохранить свои навыки машинного обучения острыми и отправился на поиски гвоздей, чтобы забить их. Я прошел через несколько идей, прежде чем отбросить их как слишком сложные, слишком простые, слишком неосуществимые или слишком длинные. Удрученный, я решил сделать свой 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
ниже показывает количество других категорий с более высокой точностью.
Далее: базовый подход
В следующей записи блога я описываю базовый подход к проблеме.