Проблемы
- Где взять источники с описанием микротопонимов Москвы
- Словари, GLR-parser, машинное обучение?
- Что делать с контекстами вроде "Он свернул с Маяковской на Тверскую"?
- Как оценивать точность, полноту? Какой будет baseline?
Источники
- Для словаря: список улиц Москвы.
- Проблема: что делать с транформацией имен?
- Для источников: список романов о Москве
- Проблема: даже в них встречаются микротопонимы других городов
- Далее: оценка по ключевым словам
12 стульев
В круге первом
Война и мир
Дети Арбата
Доктор Живаго
Дом на Набережной
Коронация, или Последний из романов
Мастер и Маргарита
Метро 2033
Метро 2034
Москва 2042
Москва Андрея Белого: Московский чудак, Москва под ударом, Маски
Московская сага
Ночной Дозор (роман)
Распознавание образов (роман)
Свечка (роман)
Смерть Ахиллеса
Статский советник (роман)
Теория Невероятности
Generation «П»
Томита-парсер от Яндекса - БОЛЬ
Особенно под OS X
- Для адекватной работы с парсером нужно его собирать руками из исходников
- Очень печально с документацией
- Под OS X все очень плохо. Даже если удастся сбилдить проект, отсутствуют биндинги для mystem под OS X :( Единственный реальный вариант - Docker
- Очень прожорливый: запаситесь 4 ядрами и 8 гб ОЗУ на контейнер (на 5 романов ~12-15мб)
- Доступен только бинарник, тяжело интегрировать в пайплайн
Томита-парсер.Боль
TAbbreviation "д."
{
key = { "abbreviation_д." type = CUSTOM }
text = "д."
type = NewerEOS
}
TAbbreviation "корп."
{
key = { "abbreviation_корп." type = CUSTOM }
text = "корп."
type = NewerEOS
}
TAbbreviation "ул."
{
key = { "abbreviation_ул." type = CUSTOM }
text = "ул."
type = NewerEOS
}
Томита-парсер.Боль
StreetW -> 'проспект' | 'проезд' | 'улица' | 'шоссе' | 'набережная' | 'площадь';
StreetSokr -> 'пр' | 'пр.' | 'просп' | 'просп.' | 'пр-д' | 'ул' | 'ул.' | 'ш' | 'ш.' | 'наб' | 'наб.' | 'пл' | 'пл.';
StreetDescr -> StreetW | StreetSokr;
StreetNameNoun -> (Adj<gnc-agr[1]>) Word<gnc-agr[1],rt> (Word<gram="род">);
NumberW_1 -> AnyWord<wff=/[1-9]?[0-9]-?((ый)|(ий)|(ой)|й)/> {outgram="муж,ед,им"};
NumberW_2 -> AnyWord<wff=/[1-9]?[0-9]-?((ая)|(яя)|(ья)|я)/> {outgram="жен,ед,им"};
NumberW_3 -> AnyWord<wff=/[1-9]?[0-9]-?((ее)|(ье)|(ое)|е)/> {outgram="сред,ед,им"};
NumberW -> NumberW_1 | NumberW_2 | NumberW_3;
StreetNameAdj -> Adj<h-reg1> Adj*;
StreetNameAdj -> NumberW<gnc-agr[1]> Adj<gnc-agr[1]>;
Street -> StreetDescr interp (Street.Descr) StreetNameNoun<gram="род", h-reg1> interp (Street.StreetName::not_norm);
Street -> StreetDescr interp (Street.Descr) StreetNameNoun<gram="им", h-reg1> interp (Street.StreetName::not_norm);
Street -> StreetNameAdj<gnc-agr[1]> interp (Street.StreetName) StreetW<gnc-agr[1]> interp (Street.Descr);
Street -> StreetNameAdj interp (Street.StreetName) StreetSokr interp (Street.Descr);
Street -> StreetW<gnc-agr[1]> interp (Street.Descr) StreetNameAdj<gnc-agr[1]> interp (Street.StreetName);
Street -> StreetSokr interp (Street.Descr) StreetNameAdj interp (Street.StreetName);
Томита-парсер
Нашлось 120 упоминаний улиц
Большой Пушкинской улица
Денисовская улица
Красная площадь
Советская улица
Советский улица
Ленских событий улица
Малая Арнаутской улица
Малая Арнаутской улица
Ленских событий улица
Маркса улица
Ленских событий улица
Парижской Коммуны площадь
Кооперативная улица
Плеханова улица
Плеханова улица
Английская набережная
Плеханова улица
Лассаля улица
замечательная улица
Лубянская площадь
Театральная площадь
Лубянская площадь
Арбатская площадь
Театральная площадь
Плеханова улица
Плеханова ул.
Виноградная улица
Виноградная улица
Театральная площадь
Свердлова площадь
Свердлова площадь
Рождественская улица
Свердловская площадь
Нашлось 120 упоминаний улиц
{ 'Английская набережная': 2,
'Арбатская площадь': 9,
'Белинского улица': 1,
'Болотная площадь': 1,
'Большая Лубянскую улица': 1,
'Большой Калужской улица': 1,
'Большой Пушкинской улица': 1,
'Веснина улица': 1,
'Виноградная улица': 2,
'Владыкинский шоссе': 1,
'Герцена улица': 3,
'Горького улица': 1,
'Грановского улица': 2,
'Денисовская улица': 1,
'Дзержинского улица': 1,
'Драматический театр им улица': 1,
'Замоскворецкий улица': 1,
'Им улица': 4,
'Калужская улица': 3,
'Каменщиков улица': 1,
'Кооперативная улица': 1,
'Котельническая набережная': 1,
'Красная площадь': 9,
'Кремлевская площадь': 1,
'Кутузова улица': 1,
'Лассаля улица': 1,
'Ленских событий улица': 3,
'Лубянская площадь': 5,
'Малая Арнаутской улица': 4,
'Маркса улица': 1,
'Матросская Тишина улица': 1,
'Миусская площадь': 1,
'Москворецкая улица': 1,
'Москвы улица': 4,
'Москвы-реки набережная': 1,
'Мясницкая улица': 1,
'Наполеона проезд': 1,
'Неаполя улица': 1,
'Низкий арочные проезд': 1,
'Ногина площадь': 1,
'Парижской Коммуны площадь': 1,
'Петербурга улица': 1,
'Петровка улица': 2,
'Плеханова ул.': 1,
'Плеханова улица': 4,
'Поварской улица': 1,
'Покровка улица': 1,
'Рижского вокзала площадь': 1,
'Рождественская улица': 1,
'Саша улица': 1,
'Свердлова площадь': 2,
'Свердловская площадь': 1,
'Сенатская площадь': 2,
'Смоленская площадь': 3,
'Советская улица': 1,
'Советский улица': 1,
'Солянка улица': 1,
'Старая площадь': 1,
'Страстной площадь': 1,
'Таганская площадь': 1,
'Театральная площадь': 5,
'Театральный проезд': 1,
'Тимофея улица': 1,
'Триумфальная площадь': 1,
'Шота Руставели проспект': 1,
'вся улица': 1,
'замечательная улица': 1,
'неосвещенная улица': 1,
'окраинный московские улица': 1,
'привозная площадь': 1 }
Томита-парсер
Проблемы
Французы вошли в ворота и стали размещаться лагерем на Сенатской площади . EOS
Солдаты выкидывали стулья из окон сената на площадь и раскладывали огни . EOS
Другие отряды проходили через Кремль и размещались по Маросейке , Лубянке , Покровке . EOS
Третьи размещались по Вздвиженке , Знаменке , Никольской , Тверской . EOS
Томита-парсер
Проблемы
Самый большой дом на Арбате – между Никольским и Денежным переулками , теперь они называются Плотников переулок и улица Веснина . EOS
Томита-парсер
Проблемы
Как-то он встретил на улице Тимофея . EOS
Томита-парсер
Проблемы
По утрам , выпив из причудливого ( морозного , с жилкой ) стакана свою порцию горячего молока , поданного Клавдией Ивановной , он выходил из полутемного домика на просторную , полную диковинного весеннего света улицу "Им . тов . EOS
Губернского" . EOS
Улица "Им
Томита-парсер
Проблемы
Неосвещенная улица пустыми глазами смотрела в комнаты . EOS
Комнаты отвечали тем же взглядом . EOS
Вся улица была застлана тучей черного дыма . EOS
Томита-парсер
Проблемы
Так опять проел он в пути свою вторую шубу и пиджачную пару , и на улицах Москвы появился в серой папахе , обмотках и вытертой солдатской шинели , которая превратилась без пуговиц , споротых до одной , в запашной арестантский халат . EOS
Томита-парсер
Проблемы
А вот и Мясницкая . EOS
Замечательная улица . EOS
Здесь можно подохнуть с голоду . EOS
Томита-парсер
Проблемы
Окраинные московские улицы тянулись за окнами . EOS
Метод
- Берем Томита-парсер и локальный справочник
- Смотрим на предложение источника. Сначала ищем слова из нашего словаря, затем скармливаем контекст Томите, сохраняем все контексты улиц в районе 5 слов
- Строим вектора полученных контекстов, кластеризуем
- Самые одинокие/далекие кластеры - вероятные кандидаты на ошибку.
- Улицами из самых популярных кластеров дополняем локальный словарь
- Обходим источник еще раз
Метод
Что делать с контекстами вроде "Он свернул с Маяковской на Тверскую"?
Пока что кажется, что решит только локальный словарь.
С машинным обучением проблема в том, что:
- Нет корректно размеченных данных для обучения. Обучаемся только на результатах парсинга
- Сравнивать контексты - это в данном случае очень затратно. Очень. Нужны очень грамотные критерии для того, чтобы сравнивать только неоднозначные случаи - способ выявления этой неоднозначности (претендент - отсутствие дескрипторов и признака "с заглавной буквы")
Что с точностью и полнотой?
Все плохо.
Спасибо за внимание!
toponyms
By Artur Kenzhaev
toponyms
- 595