Создание конвейера NLP для извлечения функций за восемь недель

Авторы: Гаган Бхатия и Пратюш Приядарши.

Пошаговое руководство по конвейеру анализа обработки естественного языка (NLP) для извлечения функций, парсинга Twitter, Google и 1200 файлов PDF с помощью автоматизированных API. Общий подход позволил нам собрать данные, которые визуализируют данные о некоммерческих грантах на несколько миллиардов долларов для дальнейшего анализа НЛП в шести странах. Наконец, команда создала интерактивную панель управления, на которой отображается распределение грантов.

Эта статья изначально была опубликована в блоге Омдены.

Чтобы прочитать больше статей о приложениях НЛП и практических рекомендациях, проверьте здесь.

Заявление о проблеме

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

По оценкам, ежегодно выделяется до 80–90 миллиардов австралийских долларов грантов.

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

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

НО подождите, где данные?

Как и любая другая проблема, которая пытается использовать искусственный интеллект для поиска жизнеспособного решения, недостаток данных может помешать любому реальному прогрессу.

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

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

В этой статье мы в основном сосредоточимся на том, как мы генерируем данные из различных неструктурированных источников.

Фото Austin Distel на Unsplash

Как мы получили неструктурированные данные

Основные фрагменты данных хранились в формате PDF, что могло дать ценную информацию, и поэтому их нельзя было игнорировать.

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

Мы использовали фреймворк для разработки API-интерфейсов RESTful, которые затем были развернуты на AWS EC2 как контейнерный сервис с использованием докеров. В сервис загружается файл CSV, содержащий ссылки на все файлы PDF. Файлы pdf автоматически загружаются в EC2, и файлы анализируются с помощью службы grobid. Затем проанализированные данные из всех PDF-файлов были собраны в один файл, который затем был загружен через AWS S3.

Источник: RedHat

Это самое замечательное в микросервисах; они представляют собой автономные программы, которые можно разработать и легко развернуть, чтобы сделать доступными для разных пользователей. Мы хотели, чтобы наш код можно было использовать повторно, поэтому разработка микросервиса для использования RESTful API казалась легкой задачей. Flask - это микро-фреймворк на основе Python, который пригодится при необходимости быстрой разработки небольших веб-приложений.

К этому моменту стало очевидно, что Google должен стать нашим основным инструментом, поэтому мы, конечно же, не могли останавливаться на достигнутом. Мы решили автоматизировать процесс парсинга, чтобы собрать все данные, возвращаемые поиском Google на основе определенных ключевых слов, которые были получены с помощью Apify.

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

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

Spacy поставляется с функцией распознавания именованных сущностей (NER) и тегами частей речи (теги pos). NER помогает находить и классифицировать именованные объекты, упомянутые в неструктурированном тексте, по заранее определенным категориям, таким как имена людей, организации, местоположения, медицинские коды, выражения времени, количества, денежные значения, проценты и т. Д. С помощью NER spacy мы определили основные особенности, включая страны-грантодатели и присужденные деньги. Это стало нашим последним набором данных для визуализации.

Теперь, наконец, анализ и визуализация НЛП

После первоначального обременительного процесса разработки функций мы наконец достигли точки визуализации наших структурированных данных на прекрасно созданной приборной панели. Мы создали дашборд с помощью StreamLit и Plotly. Чтобы визуализировать фрейм данных, который был создан после извлечения признаков, мы отобразили набор данных с интерактивными функциями, чтобы помочь пользователю лучше понять данные.

Помимо обработки неструктурированных данных с помощью NLP, команда написала множество специфичных для сайта парсеров для извлечения данных из Интернета, которые уже были структурированы в виде таблиц.

Общий подход позволил нам собрать данные о грантах на несколько миллиардов долларов для анализа по шести странам.

Извлеченный набор функций из Apify

Чтобы дать вам представление об окончательной дашборде, оставлю вам снимок экрана.

Интерактивная панель управления, показывающая распределение грантов

Признание

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

Спасибо нашим менеджерам по задачам и всем сотрудникам.

Присоединяйтесь к высокоэффективным проектам Omdena и получайте новые впечатления.