Course project for NLP course
"Побудова хронології подій у новинах, пов’язаних із заданим об’єктом"
Тренувальні дані були наскрейплені з українських новинних сайтів (https://korrespondent.net, https://www.pravda.com.ua, https://www.liga.net, а також компанія Semantrum дала трохи своїх даних). Всього - близько 13000 новин
На жаль, проанотовано було лише близько 1500 статей, із яких вийшло трохи більше 3000 прикладів. Основний критерій анотування - чи є новина подією
Класифікатор має визначити, чи новина є подією, чи ні. Основні метрики: precision, recall, та, як результат, f1-score
Було натреновано модель LogisticRegression класифікатора. В якості фіч використані структурні особливості побудови речень: наявність патерну subject-predicate-object та їх частин мови, час присудка (якщо це дієслово), наявність дат та ключових слів, тощо.
Якість:
precision recall f1-score support
False 0.78 0.57 0.66 458
True 0.71 0.87 0.78 564
accuracy 0.73 1022
macro avg 0.75 0.72 0.72 1022
weighted avg 0.74 0.73 0.73 1022
Користувач вводить певне слово в якості пошукового запиту, система шукає новини за цим запитом та відфільтровує їх, повертаючи тільки ті, що вона вважає за подію. Результат відобраєаться у вигляді таймлайну
- Для скрейпингу даних - утиліта Apify
- Для анотування - TagTog (потім ще довго довелось писати парсер для проанатованих
.tsv
-шок...)
Ось приклад, як виглядає документ із анотацією:
- NLP - stanza
- Для пошуку новин - гугл сьорч апішка від SerpWow
- Бекенд - простенький HTTP сервачок на
python
- Фронтенд - юайка на
TypeScript
,React
, для візуалізації таймлайну - react-vertical-timeline
- Анотування - процес дуже повільний, тому потребує багато ресурсу. Плюс не так легко часом визначити, чи є новина подією, чи не ні
- Пошук фіч для класифікатора (розбір дерева залежностей, пошук патернів, притаманних подіям/не подіям тощо)