Анализируйте заголовки и текст истории с помощью Streamlit, Transformers и FastAPI

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

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

Что, если мы сможем использовать НЛП, чтобы лучше понимать заголовки? Можем ли мы обнаружить объективность, сентиментальность и / или скрытый фаворитизм по отношению к делу? Эта статья знакомит с tldrstory, фреймворком на базе искусственного интеллекта для понимания заголовков и текста рассказов.

Представляем tldrstory

tldrstory - это платформа для понимания заголовков и текстового контента, связанного с историями, с помощью ИИ. tldrstory применяет метки с нулевым кадром к тексту, что позволяет динамически категоризировать контент. tldrstory имеет открытый исходный код и доступен на GitHub.



tldrstory построен на надежном стеке с открытым исходным кодом, показанном ниже.







tldrstory также построен на основе txtai, поисковой системы на базе искусственного интеллекта. В следующей статье txtai обсуждается более подробно.



Установите и запустите tldrstory

tldrstory можно установить через PyPi. Рекомендуется создать виртуальную среду, так как будет установлено множество зависимостей.

pip install tldrstory

Настройка приложения tldrstory

Приложение tldrstory состоит из трех отдельных процессов.

  • Индексирование
  • Бэкэнд API
  • Приложение Streamlit

В этом разделе показано, как запустить приложение «Спортивные новости».

  1. Скачайте конфигурацию приложения «Новости спорта».
mkdir sports
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/app.yml -O sports/app.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/api.yml -O sports/api.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/apps/sports/index-simple.yml -O sports/index.yml
wget https://raw.githubusercontent.com/neuml/tldrstory/master/src/python/tldrstory/app.py -O sports/app.py

2. Запустите процесс индексации.

python -m tldrstory.index sports/index.yml

3. Запустите процесс API.

CONFIG=sports/api.yml API_CLASS=tldrstory.api.API uvicorn "txtai.api:app"

4. Запустите Streamlit.

streamlit run sports/app.py sports/app.yml "Sports" "🏆"

5. Откройте веб-браузер и перейдите по адресу http: // localhost: 8501.

Если все работает правильно, результат будет похож на изображение выше.

Индексирование

Процесс индексации - это отправная точка в приложении tldrstory. Индексирование определяет источник данных, маркировку, тип индекса и место для хранения выходных данных.

tldrstory использует для маркировки конвейер с нулевым выстрелом, предоставляемый Hugging Face Transformers. Этот конвейер использует большую языковую модель (по умолчанию bart-large-mnli) для маркировки вводимого текста. Zero-shot означает, что данные для обучения не нужны, и мы будем полагаться на обширную базу знаний, хранящуюся в языковой модели.

В следующем примере показано, как пометить тональность текста с помощью этого метода.

labels:
  sentiment:
    aggregate: [happy]
    values: [happy, sad, angry]

Приведенная выше конфигурация определяет метку с именем настроения. Определены три отдельные категории: счастливые, грустные и злые. Эти метки передаются классификатору нулевого выстрела и объединяются в одно значение, определенное в агрегированном параметре.

Тональность - это совершенно произвольный ярлык, это может быть любое сочетание значений и совокупности. Вот где проявляется истинная сила этой методологии. Новые метки можно настроить в файле YAML или изменить метки, просто изменив пару строк текста.

Распространенной задачей будет выбор терминов для ярлыков, часто поиск синонимов для лучшего описания ярлыка. Мы можем спросить себя, разработчик мы или лингвист. Удивительно, насколько легко Transformers и Streamlit делают это, позволяя нам сосредоточиться на поставленной задаче.

Теперь измените значения меток и повторно запустите индексирование, чтобы увидеть, как изменятся результаты.

API

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

API считывает параметр пути из index.yml. Это используется для загрузки базы данных и встраиваемой модели.

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

wget http://localhost:8000/search?query=Latest&limit=100

заявка

Внешнее приложение построено на Streamlit. Streamlit - фантастическая библиотека для быстрого создания приложений на основе науки о данных / машинного обучения на Python. tldrstory создает приложение Streamlit, управляемое конфигурацией YAML.

Файл app.yml настраивает параметры фильтрации, диаграммы и столбцы таблицы для отображения. Эти поля управляются тем, что определено в index.yml. Например, тональность - это только поле, поскольку index.yml определил это поле. Значения сначала настраиваются в index.yml с соответствующей записью в app.yml.

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



Пользовательские источники

По умолчанию tldrstory поддерживает чтение данных из RSS и Reddit API. Можно определить и настроить дополнительные источники данных.

Ниже показан пример определения настраиваемого источника данных. Neuspo - это приложение для просмотра спортивных событий и новостей в режиме реального времени. Этот источник данных загружает 4 предопределенных записи в базу данных статей.

Давайте еще раз выполним описанные выше шаги, используя neuspo в качестве источника данных. Сначала удалите каталог sports / data, чтобы создать новую базу данных. Затем мы можем загрузить изложенную выше суть в спортивный каталог.

# Delete the sports/data directory before running
wget https://gist.githubusercontent.com/davidmezzetti/9a6064d9a741acb89bd46eba9f906c26/raw/7058e97da82571005b2654b4ab908f25b9a04fe2/neuspo.py -O sports/neuspo.py

Отредактируйте sports / index.yml и удалите раздел rss. Замените его следующим.

# Custom data source for neuspo
source: sports.neuspo.Neuspo

Теперь повторите шаги 2–4 из инструкций выше.

Если все работает правильно, результат будет похож на изображение выше. Обратите внимание, что на самом деле выше всего два разных события. Но, учитывая точку зрения на событие, настроение другое.

Примеры

Установить новые приложения относительно просто. На следующем сайте показаны дополнительные примеры приложений, созданных с помощью tldrstory. Все файлы конфигурации можно найти здесь: https://github.com/neuml/tldrstory/tree/master/apps

Дополнительные приложения можно найти на https://tldrstory.com

Подведение итогов

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