Да, в этих предметных областях огромное число различий (терминологии, типичных модулей, требований к мультимодальности, наличии собранных корпусов и т.д.), но это нам не помешает. Всё это определённого сорта работа с текстами на естественном языке (хотя внутри текста мы понимаем, что есть и картинки и структурированные данные -- формулы, таблицы). И пост этот вызван тем, что возможности для автоматизированной обработки текстов сегодня существенно меняются, методы машинного обучения делают доступными решение задач, о которых раньше и мечтать было нельзя. А сегодня о таких задачах, как содержательная помощь компьютера в сведении знаний, можно не только мечтать, сегодня такие задачи можно ставить -- и решать.
Документированные знания мультимодальны (текст на естественном языке, формулы и прочие формальные языки, графики и другие картинки, таблицы и базы данных) и раздроблены по разным текстам. Для каждого отдельного проекта (или даже группы как-то связанных проектов) требуются не все знания человечества, а только какой-то маленький их кусочек, сведённый вместе. Назовём этот кусочек ситуационным сводом знаний.
Свод знаний (по аналогии со сводом нормативно-правовых актов -- собрание текущей конфигурации нормативных текстов с учётом всех обновлений, дополнений, исключений, подразумевающий также некоторую полноту охвата предметной области и официальный статус, см., например тут) из каких-то его модулей вовне головы нужен тогда, когда:
-- знания нужно ставить под контроль конфигурации (находить противоречия и дублирование знаний), например в инженерии требований или нормотворческой работе (они ведь про одно и то же, по большому счёту)
-- требуется найти минимальный маршрут в обучении (вытащить то знание, которое нужно для преодоления inference distance для понимания какого-то аргумента -- http://wiki.lesswrong.com/wiki/Inferential_distance), задача составления учебной программы (задача тьюторства -- http://ailev.livejournal.com/1145422.html, curriculum mining).
Для того, чтобы помочь сводить какие-то знания "в голове", нужно занять позицию конструктивизма: знание в голове строится только путём приращения к уже имеющимся в голове знаниям, по кусочку за раз. Если для одного человека "номинальный диаметр" это чёткое указание на известный ему стандарт, то для другого человека это малопонятное знание. Если для одного человека "статистический вывод" это чётко определённое понятие из знакомых ему современных учебников, тьюториалов и статей (поскольку даже учебников по этой теме сейчас ещё немного), то другой человек вообще не поймёт о чём речь. Сведение знаний ситуативно не только потому что предметная область каждого проекта имеет разный охват для каждого проекта, но и потому как для каждого отдельного человека граница его знания и незнания проходит по-разному -- и для одного человека потребуется свести три документа, а для другого тридцать три, чтобы после их усвоения эти люди обладали сравнимым пониманием. Так что что для одного pandect (a treatise covering all aspects of a particular subject), т.е. какой-то свод, то для другого может оказаться загадочными письменами, для расшифровки которых требуется добавить довольно обширное дополнительное знание. Своды субъективны, как и любые другие определения: "свод в глазах смотрящего".
Все эти знания обрывочны: иногда требования явно поминают использующийся стандарт, а иногда просто используют термин из стандарта (типа "номинальный диаметр") -- и для понимания нужно затем подтягивать знания из стандарта по номинальному диаметру (а эти знания ещё и разные для России и США), затем подтягивать знания стандартов по метрологии, а для самых тупых придётся ещё и подтягивать знания из учебника геометрии (ибо что такое "диаметр" тоже нужно определять!). Так что верхний уровень пирамиды взаимоопределяющих знаний свода ещё как-то можно определить, а вот низ обычто "в тумане". Например, свод знаний по механической инженерии включает в себя знания по сопромату, которые могут включать в себя знания матанализа, а они могут потребовать знаний алгебры (и современные ВУЗы в России с этим в сведении curriculum уже сталкиваются: я писал, что в ЛЭТИ отдают первый семестр нормальному обучению школьной программе вместо обучения программе ВУЗовской).
Согласованную сборку части всего доступного знания из кусочков -- сведение знаний в одно целое -- нужно делать не только "в голове", но и вовне головы: нас ведь интересует не только воплощение целевой системы (головы со всеми новыми уже усвоенными знаниями, или даже целого коллектива, если мы понимаем про неизбежность разделения труда -- все необходимые для выполнения проекта знания в одну голову ведь не упакуешь!), нас интересует также определение целевой системы. Для этого мы должны сначала отмоделировать совокупное знание вовне головы, собрать его каким-то образом из модулей -- прописать явно интерфейсы и указать порядок сборки.
В инженерии требований это постановка требований под контроль конфигурации, анализ требований на непротиворечивость и отсутствие конфигурационных коллизий. В законодательстве это прежде всего кодификация и своды, но это только частные постановки задач (правоведение не любит пока формальных методов). В образовании это составление образовательных траекторий (тьюторство индивидуальное и составление curriculum для студенческих групп).
Ситуационный свод знаний довольно трудно получить, ибо знания существенно переплетены, плохо ставятся под контроль конфигурации и сводятся в какое-то содержательное целое обычно только "в голове". Например, знания:
-- о требованиях раскиданы по фрагментам требований из ТЗ, стандартам, техрегламентам, справочникам и учебникам (определения базовых понятий). Инструментальные системы управления требованиями как раз помогают осуществлять ситуационный свод требований. Но если брать требования стандартов, то своды стандартов существуют главным образом как наборы текстовых документов и плохо ставятся под контроль конфигурации, плохо сводятся.
-- законодательстве раскиданы по отдельным нормативно-правовым актам. Справочно-правовые системы типа "Консультант Плюс" или "Кодекс" осуществляют только самые общие функции по сведению таких знаний, а уж о ситуационном сведении пока только можно мечтать (хотя всякие "семантические информационные системы" предлагают именно такого сорта сервисы)
-- магистерской специальности раскиданы по разным учебникам, конспектам лекций и справочникам, и далее по всем интернетам. Никакого распространённого (да и не распространённого) инструментария для свода знаний учебной программы (curriculum), состоящей из множества содержательно связанных между собой отдельных курсов, нет. Ну, разве что совещания с устными согласованиями программ отдельных учителей-предметников. Но в ВУЗах и таких совещаний нет, курсы авторские и магистерские, например, программы составляются "по наитию" -- в надежде, что "образовательный салат" (http://ailev.livejournal.com/1160014.html) будет дан в правильном порядке и затем как-то слипнется в головах студентов в хоть как-то сведённое вместе знание.
В любом случае, речь идёт сейчас не столько о создании какой-то автоматической системы по сведению требований, норм, учебных курсов, описаний методов работы и прочей подобной автоматической знаниевой работе, сколько о помощи человеку для работы по сведению знаний -- прежде всего:
-- постановке под контроль конфигурации исходного знания и сведённого для какой-то конкретной технической или учебной задачи знания (случай со сводом законов, в котором сводится всё законодательное знание -- это предельный случай, мы его не рассматриваем. Всегда мы из какого-то "мешка со всем имеющимся несведённым знанием, потенциально могущим пригодиться" мы достаём некоторое заведомо меньшее число необходимых знаний и конструируем/сводим их соответственно ситуации). Контроль конфигурации позволит перейти от "творческого беспорядка" к какой-то инженерной проработке.
-- контроль коллизий (противоречивость, дублирование) знаний в своде, обеспечение ревизии знаний. Конечно, речь идёт только о каких-то определённых классах коллизий, при полном понимании, что сегодня до автоматической работы с коллизиями -- как до луны. В принципе, инженерные коллизии в современных САПР тоже обнаруживаются отнюдь не все, но даже то, что обнаруживается сейчас, даёт существенный выигрыш в усилиях по разработке.
Для примера помощи в ситуационном сведении знаний можно взять curriculum mining -- этот термин сегодня имеет два значения:
-- одно означает что-то типа process mining для знаниевой работы: как студенты пробегают через учебные модули. Curriculum mining includes three main kinds of tasks: (i) actual curriculum model discovery, i.e. constructing complete and compact academic curriculum models that are able to reproduce the observed behavior of students, (ii) curriculum model conformance checking, i.e. checking whether the observed behavior of students match their expected behavior as defined by the previously discovered or pre-authored curriculum model, and (iii) curriculum model extension, i.e. projecting information extracted from the observed data onto the model, to make the tacit knowledge explicit, facilitate better understanding of the particular academic processes and enable decision making processes. (http://files.eric.ed.gov/fulltext/ED537074.pdf и там стр. 230, CurriM: Curriculum Mining. Страница проекта -- http://www.win.tue.nl/~mpechen/projects/edm/index.html#currim, там прямо говорится о родстве с process mining).
-- второе ровно то, что нам нужно: to construct a curriculum network from a large sample of academic and quasi-academic (non peer-reviewed) resources on the web by relying on local (linguistic surface features) and global (network structure) cues. The network can then be used for the tasks of targeted curriculum path recommendations. (Это пишет Игорь Лабутов, http://creativemachines.cornell.edu/igorlabutov, заявляя тему "Automatic curriculum extraction from quasi-academic texts, а страница проекта -- http://creativemachines.cornell.edu/curriculum_mining). Mining там уже не процессов (поведения студентов), а веба (знаний) -- как раз на предмет сведения воедино нужных для какого-то цельного курса знаний.
Главная проблема понятна: модулей знаний (lecture excerpts from courses, book chapters, Scholarpedia pages, and "quasi-academic" sources, such as tutorials, technical blogs, Stack Exchange posts, Wikipedia вдобавок к учебникам и полновесным курсам типа встречающихся в Coursera) раскидано заведомо больше, чем нужно для освоения какого-то материала -- но и тут нельзя быть уверенным, что не пропустил какого-то модуля с определением важного для конкретного студента понятия. Даже в случае взаимной перелинковки друг с другом гиперссылками такой набор текстов ни разу не даёт основы для образования: образование требует некоторой последовательной проработки, разворачивания какого-то маршрута на знаниевом графе (я обсуждал этот вопрос несколько раз -- гиперкниготексты в 2003 с обсуждением разных view для читателя и писателя: http://ailev.livejournal.com/103692.html, эскиз образовательного проекта в 2011 -- но там с упором на задачи и упражнения и меньшим упором на curriculum: http://ailev.livejournal.com/961237.html).
Как же сшивать модули в определении знаний? Для этого нужно ввести направленные отношения между фрагментами текста (часто с картинками и таблицами), в котором какое-то знание определяется, а в другом используется. Когда всё знание не будет содержать неопределённых по отношению к какому-то базису фрагментов (мы считаем что-то уже известным изначально), процесс останавливается -- мы вытащили ровно те модули, которые нужны для полного понимания в случае образовательных программ или полной определённости в требованиях или нормах. Ну, или нам придётся признать наличие дублирования в определениях, противоречий в определениях, а также отсутствие каких-то определений (то есть упущенные стандарты, учебники, нормы) -- и тогда выйти на инженерные задачи свода знаний (так, предварительным необходимым условием создания Свода законов является осуществление ревизии законодательства).
В принципе, довольно легко сказать, что в одном тексте какое-то понятие используется, а в другом определяется -- хотя в реальной ситуации сплошь и рядом понятие А из одного учебника будет определяться через понятие Б из другого, а для понимания объяснения в учебнике Б будет требоваться учебник С, который без понятий из учебника А будет невоспринимаем. Учебник тут слишком большая единица, учебники нужно бить на какие-то более маленькие единицы-компоненты и учиться работать с ними -- весь вопрос в том, что это за такие функциональные единицы.
Конечно, эти функциональные единицы (определения, объяснения, упражнения) нужно будет как-то совмещать с единицами модульности текста (параграфами, главами, разделами, учебниками) -- то есть тут стоит традиционная задача архитектурного синтеза.
Сегодня довольно легко выявить определения в тексте -- как классическими лингвистическими технологиями (даже Гугль может такое: попробуйте поискать какое-то слово, снабдив его префиксом "define:"), так и новыми технологиями машинного обучения (при этом начальный учебный корпус можно делать в том числе и при помощи классических технологий -- см., например, как обучали нейронные сети распознавания голоса в Гугле, http://googleresearch.blogspot.ru/2015/08/the-neural-networks-behind-google-voice.html -- we developed a delicate iterative pipeline to retrain the models. Using improved acoustic models, we could recognize existing voicemails offline to get newer, better transcriptions the language models could be retrained on, and with better language models we could recognize again the same data, and repeat the process. Step by step, the recognition error rate dropped, finally settling at roughly half what it was with the original system!).
Конечно, тут предстоит ещё изобрести множество эвристик, но даже скромные результаты тут будут лучше, чем никакие. Сведение знаний -- типовая практика, требует какого-то типового инструментария, имеет множество приложений. Свод знаний нельзя готовить впрок, это неподъемная и ненужная работа. Свод знаний ситуативен. Технологии машинного обучения сегодня уже позволяют говорить о какой-то автоматизации, каком-то компьютерном инструментарии для этой практики. Я знаю о том, что самые разные команды по всему миру берутся за очень похожие задачи -- от свода требований для классического системноинженерного проекта с помощью IBM Watson до того же curriculum mining с использованием уже ставших классическими word embedding алгоритмов.