Skip to content

Summarizing websites using LLM for steel company news digest

Notifications You must be signed in to change notification settings

allseeteam/NLMK_AIProdHack

Repository files navigation

NLMK Hack

Это приложение автоматизирует процесс поиска, сбора, и анализа новостей для создания новостного дайджеста. Оно работает в несколько этапов:

  1. Поиск новостей: Использует запросы для поиска актуальных новостей через Google Search API и News API.

  2. Извлечение текста: С помощью специальных инструментов, приложение загружает веб-страницы, извлекает из них чистый текст.

  3. Анализ текста: Используя модель GPT-4o, приложение анализирует тексты, присваивает им оценку релевантности от 0 до 10, и генерирует краткие изложения и ключевые моменты. Также оно классифицирует тексты по типу (например, новости или блоги).

  4. Удобный интерфейс: В конечном интерфейсе, новости ранжируются по их релевантности. Пользователи могут фильтровать новости по категориям и датам публикации.

.github/demo.png


Overview по коду и детали реализации.

  1. Мы написали запросы, по которым будет происходить поиск новостей: search_queries_merged.json

  2. По этим запросам мы ищем и собираем url страниц с актуальными новостями, которые далее предстоит распарсить и обработать.

  3. Web Scraper. Здесь мы открываем страницы и скачиванием raw html. Затем очищаем текст от тэгов и ненужных частей страницы, которые не относятся к тексту новости. Чем чище получится текст, тем точнее будут ответы LLM.

    • Для загрузки страниц использовали AsyncChromiumLoader и AsyncHtmlLoader из Langchaing extract_texts.py
    • Для очистки - BeautifulSoup и html2text (оба инструмента также реализованы в Langchaing) extract_texts.py
    • В конце хакатона мы нашли еще один хороший инструмент для очистки текста - Jina: extract_texts_jina.ipynb
  4. Далее, просим LLM проставить relevance score для каждой новости от 0 до 10. Это полезно по двум причинам: 1) выдача гугла часто выдает совершенно нерелевантные новости, которые нужно убрать; 2) по relevance score будем ранжировать итоговый дайджест, отправляя самые релевантные новсти в топ. Помимо скора, LLM генерирует summary, key_events, title, text_type (является ли текст новостю, блог постом, или чем-то еще?)

Мы ждем от модели JSON такого формата:

{
  "summary": "Предоставьте краткое содержание текста, выделив его основные моменты",
  "key_events": "Кратко перечислите ключевые события, описанные в новостном тексте",
  "title": "Дайте тексту название на русском языке",
  "relevance_score": "Присвойте оценку от 0 до 10, основываясь на релевантности текста для стальной промышленности",
  "text_type": "Классифицируйте текст как один из следующих типов: [news, blog_post, forum, review, educational]"
}
  1. Объединяем всё в удобный интерфейс, сделанном на Streamlit. Новости ранжируются по relevance_score, их можно фильтровать по категориям и по дате публикации.

About

Summarizing websites using LLM for steel company news digest

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published