Чем хороша именно “прочность шампанского” в вопросах для ИИ LLM? Тем, что “прочность” – это ещё и “крепкость”, а “крепкость” – это почти “крепость”, а “крепость” – это и замок, как строение, и характеристика алкогольных напитков. При этом “прочность” – применимо к хлопку (к ткани).

Вообще, конечно, лексическая изобретательность винных критиков практически гарантирует, что самые неожиданные обозначения характеристик в текстах прицепляются к шампанскому через описания цвета и, особенно, вкуса, который “шелковистый, с нотками отвара дубовой коры” (условно). С хлопковой тканью всё несколько более прямолинейно.



Комментарии (1) »

Кстати, ещё немного про Go (Golang). Одна из самых странных особенностей Go – это использование комментариев для управления компиляцией. Например, вот такая директива:

// +build !amd64

– это “обычный” комментарий в исходном коде, но его читает препроцессор и использует указание +build для того, чтобы определить платформу (всё, что не amd64; скажем, так сделано у меня в исходниках ассемблерной реализации “Кузнечика”; современный вариант: “//go:build“). Идея снабдить комментарии двойным дном – довольно богатая, в лингвистическом, так сказать, смысле.

Формально, “// +build !amd64” – это, действительно, комментарий. То есть, здесь обозначено, что строка не относится к, собственно, исходному коду. Это верно. А то, что там потом будет копаться препроцессор – ну так, как бы, и в комментариях бывает написано, что “данная функция нужна только для 8-битной конфигурации, поэтому здесь вызов спрятан в комментарий”. Неявно предполагается, что роль препроцессора играет непосредственно разработчик, а в случае “+build” в Golang – просто этот процесс автоматизируется. Это, конечно, не какой-то там особенный и исключительный случай использования комментариев: вспомните что-нибудь типа “#!/usr/bin/perl”. Тем не менее, ситуация, когда содержание комментария непосредственно влияет на процесс сборки, всё же выглядит необычно.

Вместе с Golang идёт собственный (псевдо)ассемблер. Это очень удобно в специальных случаях. Например, я использую этот ассемблер для реализации криптографических примитивов (и не только: при всём качестве компиляторов, некоторые задачи поиска и обработки данных могут работать существенно быстрее, если самостоятельно реализовать их с упором на особенности конкретной аппаратуры). Так вот, ассемблер в Go тоже необычный. Там своеобразные синтаксис и семантика. Например, “перевёрнутое” отношение операндов: MOV R1, R2 – пишет из R1 в R2, то есть, слева направо. Это вопрос соглашения, бывает разный подход, но естественным вариантом всё же представляется наоборот – R2 в R1, справа налево.

Очень многие мнемоники команд заменены на собственные мнемоники go-ассемблера, причём, трансляция не всегда очевидная, результат замены отличается от платформы к платформе, а сама замена сопровождается неожиданными дополнительными ограничениями.

Например, на arm64 go-ассемблерное “ADD $8, RSP, R2” соответствует оригинальному “ADD X2, SP, #0x8”. RSP превращается в SP потому, что ассемблер Go использует псевдорегистры, среди которых есть SP (и не только), поэтому совпадающие по названию аппаратные регистры переименованы. Псевдо-SP – это, как бы, указатель стека, но с хитростями: псевдо-SP может иногда совпадать по значению с аппаратным SP, в частности, если на подходящей платформе указана нулевая длина “собственного” стека ассемблерной процедуры (но это детали). При этом, ссылки с использованием смещения от значения псевдорегистра SP должны (это прямо строгое требование Go) оформляться с символьными именами, вот так: len-8(SP), где “минус” это не совсем вычитание, а len – это даже не “синтаксический сахар”, но что-то вроде комментария наоборот, поскольку никакой языковой интерпретации len здесь не имеет, ничего из len не вычитается, да и вовсе не обязательно, чтобы эта строка совпадала с именем аргумента в определении прототипа функции или ещё с чем-то совпадала (или не совпадала). Но если не указать произвольный символьный префикс – компилятор выдаст ошибку. Этому, естественно, имеется историческое объяснение, которое называется Plan 9.

Отрицательные и положительные смещения для SP – тоже отдельная забавная история: если SP совпадает с аппаратным регистром по семантике, – что задаётся правилами определения процедуры и входа в процедуру, – то, на некоторых платформах, можно использовать привычные положительные смещения, вот так: len+8(SP), однако где-то в документации написано (попробуйте найти), что “при ручном кодировании” необходимо использовать (только) “отрицательные смещения”. Да. Ну или наоборот, потому что лучшей документацией тут оказывается исходный код – как самого Golang, так и генерируемый компилятором.



Комментировать »

Воскресное чтение манускриптов. Точнее – иллюстрация с пальмами и антилопой из “Христианской топографии” Козьмы Индикоплова, в варианте из Апостольской библиотеки Ватикана, датируемом девятым веком (н.э).

Picture of palm trees and antelope

Подпись к иллюстрации утверждает следующее:

ΤΑΥΤΑ ΕΙϹΙ ΤΑ ΛΕΓΟΜΕΝΑ ΜΟΖΑ
ΟΙ ΦΥΝΙΚΕϹ ΟΙ ΪΝΔΗΚΙΝΟΙ

В переводе: “Это что называют “моза” – финиковые пальмы индийские”. Почему-то в русскоязычной “Википедии” пальмы с этой иллюстрации названы “двумя банановыми деревьями“. “Моза” – созвучно арабскому или персидскому названию банана, но пальмы на картинке выглядят так, как если бы иллюстратор из девятого века хотел изобразить именно финиковые (хоть значение слова и можно толковать как “просто пальма”).



Комментировать »

В Кембриджском словаре словом 2023 года назвали hallucinate, а в Институте Пушкина – тоже выбрали слово года из области ИИ, однако вариант максимально прозаичный: “нейросеть”. (Сайт института хоть и размещается в оригинальном домене верхнего уровня, но устроен несколько странно: непонятно, как можно сослаться на страницу с конкретным сообщением, поэтому будет ссылка на главную страницу.)



Комментировать »

Сервис “Метасловарь” на новом сайте gramota.ru выдаёт несколько неожиданные, но занимательные, результаты. В прошлый раз в ответ на запрос “ключом” сайт выдал “крючок”. Однако если спросить “крючком“, то в ответе уже будет “крючок” и “клочок”. Если вы думаете, что словарь должен работать только в именительном падеже, да в единственном числе, то это не так для некоторого метасловаря, результаты которого являются центральным элементом страницы, а сам метасловарь настроен по умолчанию на обработку запросов “общего поиска”. И, всё же, вывод словарной статьи про “ключ”, в ответ на запрос “ключом”, выглядит несколько более полезным, чем “крючок”.

Посмотрим другие варианты. Запрос “книги” – выводит “книгу” и “книжку”; “стены” – “стенку”. Чрезвычайно сложный вариант “донья” – выдаёт словарную статью про донью из Испании; заметьте, что “донья” – это ещё и множественное число для “дно”, что, впрочем, соответствует едва ли не запредельному (“рутовому”) уровню владения русским языком, даже для образованных носителей (о “доньях”, конечно, на “Грамоте” всё написано). Запрос “дома” – возвращает “дог”, “дож”, но и “домик”. А вот “крабы” приводят к выводу слов “кран”, “краб” и “крабб”, что занятно, поскольку в ответ на “краном” метасловарь выдаёт только “рань” и, – вспоминайте про расстояние Левенштейна, – “каноэ”.



Комментировать »

Если на новом сайте Gramota.ru ввести в поиск слово “ключом”, то, видимо, сработает некий “метасловарь”, который выдаст слово “крючок”, что, конечно, не очень удобно, но зато очень модно, очень на уровне ИИ – см. скриншот.

gramota.ru screen

(При этом озвучка омографов пока не работает.)



Комментировать »

Воскресное чтение манускриптов. Kubernetes (который K8s для контейнеров) происходит от древнегреческого κυβερνήτης – тот, кто непосредственно управляет кораблём при помощи руля, кормчий. Однако на русском это же слово используется и напрямую, но в другом значении – “губернатор”, в английском варианте искажений чуть больше: governor. От κυβερνήτης происходит и “кибернетика”, потому что принцип управления кораблём при помощи рулевого весла соответствует одной из древнейших искусственных систем управления с обратной связью (так определено у Винера).

В “Илиаде” именно κυβερνήτης встречается один раз (и ещё один раз – “кормчие”, во множественном числе; в “Одиссее” – чаще). Вот на скриншоте ниже пример “кормчего” из “Илиады”: это манускрипт Venetus A десятого века (библиотека Марчиана).

Manuscript screen

Как обычно, запись выглядит непривычно (κυβερνήτης выделено). Всё потому, что начертания букв не соответствуют современным. Например, здесь β больше похожа на современную русскую рукописную строчную “и”, но другие буквы узнать несколько проще.

Если на скриншоте взять сроку выше и строку ниже строки с “кубернетесом”, то это будут строки 315-317 из книги (песни) 23 “Илиады”. Контекст: советы Антилоху к спортивным состязаниям. Вот соответствующая часть текста с подстрочным переводом (в котором важно слово “тёмному”):

μήτι τοι δρυτόμος μέγ᾽ ἀμείνων ἠὲ βίηφι:
(уменьем ведь плотник [действует] много лучше чем силой)
μήτι δ᾽ αὖτε κυβερνήτης ἐνὶ οἴνοπι πόντῳ
(уменьем же снова кормчий по тёмному* морю)
νῆα θοὴν ἰθύνει ἐρεχθομένην ἀνέμοισι
(корабль вёрткий направляет, сбиваемый ветрами)

*) οἴνοπι – “тёмному”; вообще, должно бы означать, что “тёмно-винному”; то есть, цвет явно сравнивается с цветом вина; ну или какой-то подобный цвет, точнее сказать трудно. Дело в том, что с цветопередачей в гомеровских текстах проблема – там неожиданным образом “повёрнута” цветность и переставлен “баланс белого”. В переводах это явление практически не сохраняется, потому что переводчику нужно привести текст к понятийной основе целевого языка, однако проблема касается не только “бледных собак” и, предположим, “пурпурных овец”: так, Гомер вообще не называет море синим или голубым, но часто сравнивает по цвету с вином. Вот точно как в рассматриваемом “кубернетическом” фрагменте (но можно вспомнить и старую интернет-историю про цвет платья на фотографии). Так или иначе, но основной цвет для логотипа Kubernetes явно выбран неправильно.



Комментировать »

Control desk. Credits: DodgertonSkillhause, morguefile.comПредставьте, что какой-то человек управляет некоторой сложной системой, например, электростанцией, об устройстве которой не имеет никакого представления, а также и не изучал никаких инструкций, однако у него имеется иной подход к предмету. Способ управления состоит в том, что этот человек нажимает какие-то произвольные кнопки на пульте, передвигает рычажки и крутит ручки там же, а кроме того, предположим, тыкает отвёрткой в разные разъёмы. Такой персонаж, например, встречается в видеоигре Fallout: New Vegas. “Похоже, ты вообще не понимаешь, что делаешь”, – говорят этому персонажу. На что он уверенно возражает: “Нет. Я точно понимаю, что именно я делаю. Просто, я не знаю, какой эффект это вызовет”. Тут важен уровень рефлексии – так, персонаж уверен, что выполняет осмысленные действия: вращает именно те ручки, которые планировал вращать, нажимает именно те кнопки, именно в том порядке, как и планировал. А что до эффектов воздействия – ну, что ж, эти эффекты он может наблюдать и делать свои выводы о ручках и рычажках на пульте: “каждый день выясняю что-то новое”. С одной стороны, данный метод персонажу представляется вполне научным (ну, так действительно можно подумать, за вычетом модели изучаемого явления и некоторых других важных деталей), с другой – присутствует чёткий, деятельный подход, состоящий в аккуратном “нажимании на кнопки”.

Для такого управления и понимания хорошо подходит выдача какой-нибудь LLM-системы искусственного интеллекта (ИИ), обученной на описаниях последовательностей взаимодействия с “кнопками-рычажками” на разных пультах, на текстах инструкций к разным “пультовым системам”. В ответ на предложение-запрос “Какие ручки на пульте крутить сегодня?” – ИИ выдаст инструкцию из разнообразных шагов. Если в инструкции встретятся упоминания кнопок, которых на реальном пульте нет, то можно переспросить: “На пульте нет фиолетовой кнопки. ИИ-GPT, а ты уверено, что нужно нажимать именно фиолетовую?”. LLM тут же исправится, не сомневайтесь. Подход ИИ, даже с учётом необходимости переспрашивания, не вызовет никаких особенных сомнений у вопрошающего, описанного в предыдущем абзаце, поскольку в точности укладывается в его привычную концепцию “понимания”. Он точно так же планировал, что нажмёт такую-то кнопку и покрутит такую-то ручку. Идея, что хорошо бы нажать фиолетовую кнопку, если бы такая кнопка была, – тоже могла рассматриваться. Так что ИИ LLM здесь не просто “отвечает мыслям”, но и помогает их сформулировать, выдав чёткие готовые ответы в виде перечня ручек, кнопок, а также параметров нажатий и вращений. Это “удобный компьютерный инструмент”, кроме того, он обучен на всех инструкциях, а поэтому “внутри у него может быть понимание устройства” той же электростанции, уровнем точно не хуже – ведь он тоже предлагает крутить ручки и нажимать кнопки.

Квалифицированный инженер строил бы нудные предположения, в стиле, что “для увеличения скорости вращения турбины нужно приоткрыть впускной тракт номер пять ещё на тридцать процентов и соответственно скорректировать параметры клапанов, ограничивающих давление; поэтому требуется выставить ручку впуска с пятнадцати процентов на сорок пять и переключить клапана при помощи кнопок в красном секторе”. После чего уже крутил бы ручки и нажимал кнопки. Но это совсем другой подход. К тому же, реализуется он всё равно через пульт, значение которого в Новом Средневековье возрастает многократно.

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



Комментарии (1) »

На новой версии сайта Gramota.ru вообще много непонятного, но отдельный интерес представляет то, что для омографов, похоже, нет “озвучки” – сервер возвращает код 404. Например, “замок“, “хлопок” – звукозаписи нет. Но для многих редких слов, – скажем, “надысь“, “шлафрок“, “фуражир“, – есть звукозапись. Возможно, причина в том, что для генерирования “озвучки” использован простой синтезатор речи, а у синтезаторов – бывает проблема с “наведённой омонимией”, то есть, с расстановкой ударений в таких случаях.



Комментировать »

Кстати, почему объяснение, что кубит “находится в состоянии “единица” и в состоянии “ноль” одновременно” – не слишком полезное? Потому, что оно сбивает с толку, обычно, в самом начале повествования (и, как результат, позволяет легко развивать “хайп”).

Дело в том, что квантовые вычисления, концептуально, это превращения состояний кубитов, с интерференцией, которая позволяет нивелировать бесполезные для конкретного вычисления результаты и увеличивать вероятность результатов полезных. А “ноль” и “единица” – это не состояния, это базисные обозначения, используемые при описании результата. Квантовое состояние кубита, после измерения, может дать “ноль” или “единицу”, с той или иной вероятностью. А вероятность, при этом, внутри процесса квантовых вычислений полагается непрерывной (отдельная история, кстати) и “перетекающей” через квантовые схемы. Всё это максимально далеко от переключений в стиле “ноль” или “единица”. Поэтому-то и сбивает с толку эта “одновременность” “нулей” и “единиц”, которая едва ли не в каждом популярном тексте вводится незамедлительно (посмотрите, например, в русскоязычную “Википедию”).

Да, можно строить проекции состояния в базис из “нуля” и “единицы”, но это, опять же, не “одновременно”, а пара, кортеж значений с коэффициентами при каждом. Полезно ли объяснение, что слово “ключ”, взятое обособленно, одновременно находится в нескольких состояниях (“у истока”, “от двери”, “к шифру”, “на девятнадцать”)? Не очень. Потому что состояние-то этого слова, обычно, таково, что “ключ” может обозначать разные смысловые объекты в тексте: “ключ к шифру”. То есть, универсальное свойство “ключа” состоит не в самом наборе словарных значений, а в том, что “ключ” в тексте может вывести разное значение.



Комментировать »

Кстати, вот где и следовало бы проверить AI/ML и прочие ИИ с машинным перебором, так это на результатах двухщелевого опыта с квантовыми частицами. Напомню, что опыт состоит в пропускании отдельных квантовых частиц (например, электронов) через пару микрощелей с регистрацией прошедшей частицы на экране. В результате можно пронаблюдать, как точки попадания частиц в экран формируют интерференционную картину. Так что, предположим, взять несколько миллионов значений координат точек попаданий на экран, ввести их в качестве исходной выборки в нейросеть, обучить, а потом проверить, насколько точно предсказываются следующие точки попадания частиц; при необходимости – продолжить обучение. Да, понятно, что есть квантовая случайность. В теории. Поэтому важно проверять именно с двумя щелями.

Дополнение. Можно же даже так сделать: электрон попадает в экран детектора, координаты точки автоматически вводятся в нейросетевую систему ИИ, система корректирует собственные предсказания (известная схема). Электроны можно излучать быстро, нейросеть – тоже на быстром компьютерном оборудовании, с большим объёмом памяти. Осталось построить, запустить и ждать – сойдётся ли процесс. А если сойдётся, то выяснится, к чему это приведёт.



Комментировать »