Девлог #3. Про Пироги, Скриншоты Платформы И Доклад
Готовим детективные пирожки
Если подумать, наша платформа сродни детективному инструменту: пользователь по тексту пытается понять, хочет ли наблюдаемый выйти в окно или нет. Наш пользователь должен понять контекст жизни наблюдаемого и оценить, насколько у него всё плохо. В этом ему помогают наши модели, который сразу подсвечивают «интересные» посты.
Хорошо, вот наш пользователь нашел человека на грани, дальше что? Пустить в ход разное психотерапевтическое дзюдо, чтобы отвадить его от смертоносной затеи. А если наблюдаемый уже шагает за перила, как его остановить? Звонить в полицию, друзьям, в школу, работу и так далее. Это единственный способ.
Но есть нюанс — вы должны знать, кому и куда звонить и о ком сообщать. Беда в том, что люди не часто подписываются хотя бы своим настоящим именем, что говорить об адресе или месте работы-учеёбы? Но надежда есть: иногда наблюдаемые в постах выкладывают информацию, по которой их можно идентифицировать, вплоть до телефона или банковской карты. «Банковской карты?» — спросите вы. Да всё просто: иногда у людей настолько все плохо, что просят скинуть деньги на поесть.
Чтобы не шерстить все 100500 постов в поисках персональной информации, мы разработали небольшой сервис kitoboy-pie
(personal information extraction). Суть его работы предельно проста: на вход подаете текст, на выход получаете метки с типом персональной информации, которая содержится в тексте. В базовом исполнении сервис поставляется с моделью NER от slovnet, которая по сравнению с другими известными решениями неплохо справляется с базовым набором именованных сущностей (персоны, локации, организации). Однако нужно помнить, что модель в первую очередь предназначена для новостного домена. Оценку того, как она работает на наших данных, мы проводим прямо сейчас.
Другой базовый компонент нашего «пирога» — детектор сущностей на основе регулярных выражений. Он прекрасно подойдет для сущностей, вариативность которых невелика. Это как раз мобильные телефоны, банковские карты, электронные почты ещё. Управляется компонент конфигом, в который в виде словаря прописываются регулярки и соответствующие им сущности.
Если вы хотите реализовать что-то своё, то вам надо просто упаковать это в наследника класса AbstractIE
и реализовать метод make_prediction
, который на выход должен отдать список классов.
class AbstractIE(InterfaceInformationExtractor):
def predict(self, texts: str|list[str]):
if isinstance(texts, str):
texts = [texts]
preds = []
for t in texts:
entites = self.make_prediction(t)
entites.sort()
preds.append(";".join(entites))
return preds
def make_prediction(self, text: str) -> list[str]:
pass
Не забудьте только потом инициализировать класс в главном файле.
Чтобы обеспечить единообразие сервисов, мы сделали его похожим на Тритон. Правда, реализовывать всё, как в тритоне, конечно, мы не стали. Лишь необходимый минимум, который позволит встроить этот сервис на равне с реальными тритон-сервисами.
Мы выложим еще чуть позже, напишем об этом в тг.
Картиночки с платформой
Разработка нашей платформы на финишной прямой. Мы начинаем тестить базовые варианты использования и писать документацию. Решили вам показать немного скринов.
Вот так будет выглядеть окно загрузки данных. Да, пока предполагается, что в платформу загрузка будет производиться через CSV файлы. Каких-то парсеров не предусмотрено.
Добавляя данные, вы сможете выбрать, создать профиль нового человека или присоединить к существующему.
Еще в копилку детективности нашей платформы. Аккаунт в социальной сети принадлежит какому-то человеку, но у одного человека может быть несколько аккаунтов в разных социальных сетях. Да даже в одной соцсети может быть сколько угодно, вообще говоря. Часто бывает связка из реального и «фейкового» аккаунта. Поэтому у нас аккаунт в социальной сети — аватары, как мы их называем — и реальная персона отделены друг от друга. При этом у одной персоны может быть несколько аватаров.
Едем дальше. Когда вы создатите несколько страниц аватаров, то будете видеть вот такое окно, где можно визуально отслеживать прогресс по обработке постов моделями:
А вот так выглядит окно с постами аватара:
Тут и происходит вся магия. Когда модели отработают, пользователь может отфильтровать посты по присвоенным атрибутам — так внутри платформы называются предсказания моделей. Именно этим мы нанесём непоправимое повышение КПД волонтеров.
Чтобы получить дополнительные инсайты, пользователь может посмотреть временную диаграмму, на которой можно оценить интенсивность сигналов в разные моменты времени. Это особенно полезно, если какой-то аккаунт поставлен на мониторинг. Если количество сигналов в единицу времени растет, значит надо пристальнее следить за ним.
Нравится? Нам очень. Не забудьте поставить звезду нашей репе, чтобы нас поддержать.
Доклад на Moscow Python
23 апреля мы выступали на Moscow Python, где рассказали про то, как собирали наш датасет. Смотреть можно на Ютубе и Рутубе.
К сожалению, презентация сшакалилась. Скачать ее можно по этой ссылке.
До скорого.