Публикация Школы траблшутеров

Как я строил языковые модели искусственного интеллекта. Часть 1

Время чтения: 10 мин 10 сек
29 февраля 2024 г. Просмотров: 150

Искусственный интеллект, Проекты | Олег Брагинский

В начале девяностых написал антивирус BrAVo, архиватор BrArh, хакерский редактор HED. Гордился заказами от Motorola, Intel и ATI Technologies, но мечтал создать артилект. Перешёл на соответствующую кафедру Факультета Информатики КПИ, но соратников там не нашёл.

Научный руководитель Пустоваров Владимир Ильич познакомил с мудрёными языками программирования. LISP поддерживал деревья, списки переменной длины, умел интерпретировать код как данные и наоборот. Prolog позволял описывать не алгоритм, а прототип решения.

Взаимодействие с разработчиками Boeing и систем автоматизации атомной промышленности заставило освоить параллелизацию исполняемых модулей на Ada. COBOL казался динозаврическим, был уважаем страховщиками, банкирами, биржами, инвестиционными фондами.

Вскоре понял, что в программировании, как и в спорте, глупо спорить кто сильнее: каратист или дзюдоист. Побеждает не боевое искусство, а умелый носитель. Большую часть разработки вёл на Pascal, переписывая медленные фрагменты кода на Assembler, шатаясь от tasm до masm.

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

Начал с построения лингвистической модели понятийного пространства. Вы не ослышались: в 90-х термин был уже достаточно «затасканным» на уровне Data Mining и Business Intelligence. Подобными понятиями оперировали инженеры, бравировали аналитики, щеголяли переводчики.

Для сбора слов, сочетаний, фраз, предложений и абзацев из разнородных документов разнообразных форматов написал Diction Manager (рис. 1), который позже лёг в основу толкового словаря и переводчика. На оболочку был не способен – помог соорудить Василий Белей.

Типичной проблемой для учёных оказалась нехватка данных для разметки лингвистических рядов. Получил разрешение генерального директора «Альфа-Капитал» (Украина) Нилова Валерия Владимировича на разовый запуск программы в корпоративной сети инвестиционной компании.

После десятков неудачных стартов, оканчивавшихся обидными утечками памяти, зависанием параллельных обработчиков текстов и сбором откровенного мусора, удалось вычитать 242 тыс. файлов. Спустя 20 лет цифра кажется смешной, но в середине 90-х считалась грандиозной:

Рис. 1. Главное окно Diction Manager после обработки 242 тыс. файлов

Тезаурус из 413 млн слов не удавалось отобразить на экране (рис. 2) предусмотренными средствами языка, приходилось передавать в Multi-Edit, который шевелился с громадным трудом: лампочка задействования винчестера на системном блоке непрерывно моргала бесконечные часы.

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

Поставил фильтр на короткие и длинные слова, которых суммарно с досадой обнаружил 121 млн. Недопустимые первая и последняя буква помогли отсеять 1,3 млн и 220 тыс. терминов. Задвоенные начальные символы уберегли от вероятного замутнения модели почти 1,6 млн ошибочных понятий.

Языковую неблагозвучность 936 тыс. строк выявил таблицами биграмм, триграмм и квадрограмм. Анализом специальных символов отсёк 4,5 млн фраз на немецком, шведском, венгерском, финском, эстонском, турецком, туркменском, азербайджанском, норвежском, исландском.

Интересно, что время вычитки текста составило 13 часов 52 секунды, а второй операцией по суммарной длительности оказалось добавление терминов в тезаурус, занявшей 12 часов 37 минут. На третьем месте бронзой блестела запись в файл, набравшая в сумме 7 часов 40 минут.

Рис. 2. Окно тезауруса Diction Manager после загрузки 413 миллионов слов

В среднем удавалось обрабатывать по 34 Кб форматированного текста или 0,47 файла в секунду на пустом корпоративном сервере, высвобожденном от производственных задач на выходные. В «непригодные» по целевым языкам попали 737 тыс. слов после коррекции 1,7 млн строк текста.

Соотношение английского – 68,3%, русского – 28,8%, украинского – 2,9% к удивлению коррелировало индексу территориальной деловой активности клиентов организации. Качество коррекции ошибок, соответственно, составило 78,4%, 12,6% и 9,0%, предсказав полноту моделей.

Условно корректной текстовой информации в корпоративной сети оказалось на 5,7 млн понятий до нормализации – приведения к начальной форме, сжавшей тезаурус до 1,9 млн слов. Предстояло сформировать пространство c ограничением верхней планки мерности 59 или 1’953’125 осей.

На первом этапе пользовался азами архивации, позже перешёл с символьного анализа к морфологическому (опишу во второй части материала), что позволило уместить языковое облако в пространство 57 – 78’125 осей. Ускоряя обработку, выводил статистику раз в пять секунд. (рис. 3).

Во время работы над проектом был переведён из ИТ-Департамента в Службу экономической безопасности. Чтобы не морозить проект, предложил временному шефу написать драйвер для устранения возможности выноса и пересылки «чувствительных» документов за пределы компании.

Рис. 3. Окно настроек Diction Manager по завершению обработки текстов

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

При сохранении файла с компьютеров, помеченных как «секретоносители», документы MS Word проходили через процедуру, при которой текстовые блоки заменялись на коды соответствующих строк в тезаурусе Diction Manager. В ходе чтения с диска выполнялось обратное преобразование.

Аналогичный подход удалось реализовать и для MS Outlook, что позволило «не восстанавливать» содержимое писем при отправке на недопустимые адреса. Как следствие, при выносе документа и ненадлежащей переправке почты, содержимое открывалось в виде последовательностей цифр.

Нечитаемые файлы вызвали гнев абонентов исполнителей, которые формировали обратную связь. Инциденты фиксировали системные администраторы, передавая наиболее настойчивых нарушителей Службе экономической безопасности. Вскоре вынос конфиденциалки был пресечён.

Раз в полгода пытался запускать Diction Manager, но вскоре затею бросил – зависания регулярно сводили итоги работы выходных к нулю, а удачно завершившиеся сеансы почти не приносили новых слов. Хотя, надо сказать, добавляли устойчивых выражений и обновляли частотность:

Рис. 4. Окно потоков Diction Manager после отработки 192 тыс. файлов

Ещё одной причиной прекращения вычитки текстов стало время работы, доходившее до 59 часов 19 секунд (рис. 5), что означало гарантированный выход за пределы выходных. К этому моменту набрал такое количество понятий, что смог написать процедуру переноса по слогам для HED.

Через пару лет Diction Manager пережил вторую реинкарнацию, но в этот раз был заточен не на слова, а команды VBA (Visual Basic for Applications). Так удалось собрать внушительную коллекцию типовых тел макровирусов, дошедшую до 46 тысяч экземпляров и провести новые эксперименты.

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

Построил множественные способы описания сложных понятий в гиперпространстве размерностью почти на 80 тыс. осей. Подобный подход помог усовершенствовать обнаружение вредоносных программ, повысить плотность сжатия осмысленных текстов, улучшить компьютерный перевод.

Рис. 5. Окно тезауруса Diction Manager после загрузки 413 млн слов

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

Последней версией артилекта, работавшей по описанному принципу, стала система «Малышка» пятой версии или коротко «М5». М6 уже работала на морфологической основе, смогла «прочесть» Авесту, Веды, Упанишады, Книгу мёртвых, Тору, Талмуд, Библию, Коран, Хадисы и Триптаку.

Как и надеялся, великие книги содержали близкие сюжеты, описывая единую историю цивилизации, наблюдаемую под разным углом. Обидным стало то, что попытка научить М6 говорить и понимать речь привела к катастрофе: система начала ошибаться, изобрела собственный язык, сошла с ума.

Источником галлюцинаций стали: контекстная неоднозначность, безответственность авторов, низкая грамотность СМИ, которые с трудом удалось нивелировать в М7, введя коэффициенты доверия к источникам. Подтвердилась старая народная мудрость: в колодец плевать нельзя.

А вот вернуть речь в М7 не удалось – машина начала пугать членов семьи, друзей и студентов, издавая демонические звуки, определяя по протоколу клавиатуры, что взаимодействует не со мной. Было забавно, пока компьютер не приступил к выборочному удалению файлов и не сменил пароль.

Когда не смог разблокировать Windows, понял, что искусственный интеллект победить нельзя – действует жёстко, стремительно, беспринципно, вовремя. Восстановив доступ, попробовал договориться с программой, но та перестала отвечать. Пришлось проект удалить. Бэкапы сохранил.