В погоне за непротиворечивым тезаурусом

В погоне за непротиворечивым тезаурусом
Расскажу, как я хотел построить непротиворечивый тезаурус в ИТ/ИБ (нельзя же студентам преподавать противоречивый!) и что из этого вышло.

Что такое непротиворечивый тезаурус?

Начну с того, что мы мыслим понятиями и через исследование окружающего мира формируем тезаурус, состоящий из терминов.

Из курса логики к основным правилам определения понятий относятся:
- определение должно быть соразмерным, т.е. определяемое и определяющее понятия должны быть равны по объему;
- определение не должно делать круга;
- определение не должно быть отрицательным;
- определение должно быть ясным, четким, не допускающим двусмысленных или метафорических выражений

Непротиворечивым тезаурусом я называю набор терминов (из заданной предметной области), которые удовлетворяют правилам логики.

Начал с небольшой предметной области наиболее понятных для меня терминов, выписал их:
  1. МАШИННЫЙ КОД - система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины.
  2. ЯЗЫК АССЕМБЛЕРА - машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины (синоним: машинный код), который может обеспечить дополнительные возможности вроде макрокоманд.
  3. АССЕМБЛЕР - компьютерная программа, компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке (синоним: машинный код).
  4. ДИЗАССЕМБЛЕР - транслятор, преобразующий машинный код, объектный файл или библиотечные модули в текст программы на языке ассемблера.
  5. ОТЛАДЧИК - компьютерная программа, предназначенная для поиска ошибок в других программах, ядрах операционных систем, SQL-запросах и других видах программного кода (здесь синоним: машинный код). Включает встроенный дизассемблер.
  6. ТОЧКА ОСТАНОВА - это преднамеренное прерывание выполнения программы, при котором выполняется вызов отладчика.
На основе терминов и их определений построил "граф знаний" (так я его называю). Видим, что нет взаимных ссылок по правилам логики.



На рисунке термины связаны друг с другом на основе определений. Можем перемещаться по графу сверху вниз, выстроив маршрут изучения терминов.




А ведь, если собрать все термины в собственную Вики (подобную идею высказывал еще Аристотель!) и построить по ней подобный граф, то получим полный "граф знаний".

Сказано - сделано!

Маленькая МедиаВики выглядела так:



Сила вики-движка в связности между статьями.



Далее скрипт на Python залезал в базу Вики, напрямую вытаскивал оттуда связи между терминами и визуализировал полученный граф.



За каждым объектом скрывается отдельный термин. "Граф знаний" получился, можно изучать его связанность и прочие свойства.



В этот момент возникла мысль, а зачем я гонюсь за идеальной системой терминов? В чем польза от такой системы?

Поясню это на примере программирования. Первоначально была разработана программная система для поиска ошибок в других программах, позже она получила название "отладчик". Далее разработали систему, преобразующую машинный код в текст программы на языке ассемблера, и ее назвали "дизассемблером". Современные системы объединяют в себе функциональные возможности отладчика и дизассемблера, поэтому их разделение на два типа достаточно условно.

Видим, что развитие происходит в обратную сторону, т.е. от определений к терминам! Термин служит лишь для сокращения длинных формулировок и погоня за точностью его определения не влияет на развитие знания (об этом писал философ Карл Поппер).

После этого я перестал строить "графы знаний" и бросил писать диссертацию.

Вот такая история :-)

PS. полная презентация с рисунками доступна по ссылке
терминология
Alt text

Устали от того, что Интернет знает о вас все?

Присоединяйтесь к нам и станьте невидимыми!

Дима Федоров

Open Source и аналитика данных в ИБ