Кстати, пока сижу тут в мюнхенском макдаке, а за окном поливает дождь, расскажу про свой проект. Хотел освещать его более подробно, но не выходило. Компенсируем.
Итак. В самом начале проекта предполагалось делать чат-бота для поиска по документам. А ткже индексировать документы. У нас ежедневные созвоны с представитедем нашего заказчика, во время которых сыпятся "хотелки", которые, как вы понимаете, со временем могут противоречить друг другу. За это время я стал очень ценить бизнес-аналитиков, работа которых заключается в общении с заказчиком и формировании требований для разработки.
Теперь мы имеем уже не чат-бота, а просто поисковую систему с интерфейсом в стиле гугла. Помимо этого, индексация идет не одного типа документов (предполагался только пдф), а всего подряд. Для этого в данный момент используется библиотека Apache Tika, которая умеет парсить разные типы документов. Индексируются документы не только с виндовской шаред папки, а также с системы box (что-то типа корпоративного дропбокса).
Если брать все целиком, то вся система состоит из трех модулей.
1. Индексатор, который мониторит папку в системе box и расшаренную виндовскую папку. В случае каких-то изменений они обрабатываются - например, в случае удаления данные стираются из elasticsearch, который выполняет поиск по тексту документов. При добавлении нового документа к его тексту добаляется различная мета-информация, список доступа и вытягиваются отношения между entity (с помощью анализатора). Например, для текста про Apple он выделит отношение ceo -> tim cook и т.п. Все эти отношения группируются и также добавляются к документу отдельным полем. Затем все это отпраляется в хранилище - в индекс elasticsearch.
2.Это питоновский сервис, который классифицирует документ и вытаскивает из него те самые отношения, о которых я писал выше (для этого индексер отправляет хттп запрос и ответ обрабатывает) Для выделения отношений используется библиотека nltk. Что там с машинным обучением для классификации документа - не знаю, этим не занимался.
3. Поисковик. У него есть интерфейс в виде поисковой строки. Запрос фильтруется и обрабатывается, а затем формируется запрос в elasticsearch. Обработка идет с помощью StanfordNLP, еще одной библиотеки для раюоты с натуральным языком. Если стенфорд определяет, что в вопросе есть имя организации/места/человека, то для этого слова выдается повышенный коэффициент при поиске. Также распознаются запросы из серии "дай мне Х последних доков о компании АБВ" - в таком случае документы сортируются по дате (по дефолту - наиболее подходящие) и вывожится только Х результатоы.
Результаты запроса подсвечиваются в случае совпадения. Также в запросах на определение места ижет подсветка всех слов, которые система трактует как место (с помощью того же стенфорда).
Короче, свистелок всяких прикручено порядком, но еще больше всякой фигни впереди.
Я упоминал, что для вытягивания отношений в тексте используется nltk. Также используется и stanfordNLP, однако разница в их работе просто колоссальна - один и тот же текст нлтк процессит за десяток секунд, а стенфорд пыхтит по 20+ минут, и умирает если ему не предоставить достаточно много памяти (почти 2Гб на процесс).
P.S. на хабре не так давно была статья, где чуваки запили систему наподобие нашей.
https://m.habrahabr.ru/post/340518/Оттуда позаимствовали несколько вещей.
В плане зарплаты важно понимать, что она будет зависеть не только от твоего уровня, но от уменя преподать себя и уменя торговаться.
Да, только на hh.