Эта задача называется Named Entity Recognition (NER), и state-of-the-art решение в ней - это BiLSTM + CRF. Вот здесь есть пример:
https://github.com/farizrahman4u/keras-contrib/blo...
Основная проблема - это как разметить датасет. Я, когда решал недавно такую же проблему, придумал делать так:
1) Заменяем все цифры на какой-то один символ. Например, "0".
2) Разбиваем текст на слова.
3) Строим частотный словарь n-грамм (n = от 1 до какого-нибудь числа k, выбранного вручную), таких, чтобы в них входило хотя бы одно слово с цифрой. N-граммы нужны, потому что есть много числовых фактов из более чем одного слова - те же номера телефонов в формате 7 000 000 00 00 или номера паспортов 0000 000000.
4) Генерим векторные представления для этих n-грамм, используя word2vec или аналоги. Т.е. разбиваем фразу на слова, а потом вокруг какого-то слова с цифрами сливаем вместе n слов и отдаем в модель. Тем самым n-граммы различных вариантов написания телефонных номеров будут находится более-менее рядом.
5) Начинаем вручную размечать n-граммы, отсортированные по частоте. При желании потом можно взять какой-то размеченный кластер и поразмечать n-граммы, отсортированные по расстоянию до центра кластера. Т.е. сначала примерно определили, где находится кластер телефонных номеров, а потом четко обрисовали его границу. Я для всего этого написал бота в телеграмме.
6) В итоге получили кластеризацию n-грамм - далее легко получить маски фраз с метками и натравить на это ту нейронную модель.