Технический пост для структурирования моих мыслей.
Попробуем посмотреть на типичные подходы к моделированию высказываний ЕЯ.
(Я смело пользуюсь в этом посте терминами: "фраза" = "мысль" = "высказывание" = "предложение")
Текстовая модель
Идея: Мысль представляем как последовательность слов.
T = [снег упал с крыши , но никто не пострадал]
Преимущества модели:
- сохраняется порядок слов
- 100%-ная точность воспроизведения
- компактность хранения
Недостатки модели:
- модель непригодна для переиспользования
- модель не самодостаточна (нужна "карта мира" и семантический парсер для преобразования)
Известные литературные отсылки: "паковщики" в Programmer's Stone.
Древовидная модель
Идея: Для каждой пары слов можно установить, какое слово "главнее"
T = [[[снег упал] [с крыши]] , [но [никто [не пострадал]]]
Преимущества те же, что и у текстовой модели.
Недостатки модели:
- модель не самодостаточна
- "главность" слов неоднозначна
- существуют не древовидные предложения
- требуется вводить другой тип связи для представления сложных понятий (MWU)
Известные литературные отсылки: "модель "Constituency parser (aka "Грамматика составляющих")
Сетевая (объектная) модель
Идея: Мысль представляем как иерархию слов, снабжённую ссылками на модель мира и друг на друга, пометим также номер слова в предложении.
T = но1(что? снег_упал_с_крыши, но? никто_не_пострадал)
снег_упал_с_крыши = упал#падать1(что? снег, откуда? с_крыши)
итд.
Преимущества модели:
- 100%-ная точность воспроизведения
- возможен поиск по ключевым словам
Недостатки модели:
- не определяется однозначно -- зависит от модели мира и от парсера
- не компактная
- нет поиска по синонимам
- зависит от модели мира (хотя и отделима)
- можно добавить номер слова в предложении
- трудность получения без качественный модели мира и качественного парсера
- линейный поиск затруднён, используются поисковые индексы
- неудобство для использования совместно с нейросетевыми моделями
- не имеет метрики близости между мыслями.
Известные литературные отсылки: синтаксическая структура в языках программирования (AST - Abstract Syntax Tree) представляется подобным способом.
Для описания зависимости от модели мира используется "runtime semantics" ,
для зависимости от парсера -- "language syntax model".
Векторная модель
Идея: Мысль представляем как вектор в многомерном пространстве. Данный вектор называем "смыслом". Для получения этого вектора объединяем вектора более простых мыслей с помощью специально обученной нейросети.
Преимущества модели:
- не 100%-ная точность обратного воспроизведения
- возможность введения естественной метрики "близости" между мыслями
- отсутствие иерархии
- естественное представление для нейросетей
- не требует построения строгой формальной однозначной модели для парсера
- не требует построения строгой формальной модели реального мира
- позволяет естественным образом моделировать неоднозначность парсера и реального мира
- позволяет моделировать неизвестные слова и окончания слов
- позволяет легко моделировать темы и синтактико-семантические группы слов ("съедобное", "глаголы", "летает", "транспорт").
Недостатки модели:
- низкая точность
- "вектора" определяются нейросетевой моделью мира
- неоднозначно определяется -- с точностью до формирующей модели
- зависит от модели мира (хотя и отделима)
- можно добавить номер слова в предложении
- трудность получения без качественный модели мира и качественного парсера
- линейный поиск затруднён, используются поисковые индексы
- неоднозначность кодирования для длинных предложений (отсюда неоднозначность "близости")
- теряет детали для длинных предложений
Известные литературные отсылки: работы по word2vec, GloVe , модель MemNN, работы по изучению ассоциативной памяти человека
В общем, как видно, векторная модель и объектная модель дополняют друг друга.
Интересно было бы попробовать их объединить.
Как может выглядеть их объединение?
Продолжение следует.