Лекция Стивена Вольфрама

ВНИМАНИЕ!!!

БЛОГ ПЕРЕЕХАЛ НА НОВЫЙ АДРЕС https://blog.wolframmathematica.ru

Онлайн машина вычисления знаний Wolfram|Alpha ®

Онлайн машина вычисления знаний Wolfram|Alpha ®

четверг, 27 декабря 2012 г.

Представляем Предсказательный интерфейс Mathematica 9
Predictive_interface_In_Mathematica_9_Large.png
“Что бы Вы хотели сделать далее?”
Представляем Предсказательный интерфейс

Перевод поста Стивена Вольфрама (Stephen Wolfram), основателя и CEO компании Wolfram Research, Inc., создателя Mathematica, Wolfram|Alpha и A New Kind of Science
Оригинальный пост: “What Are You Going to Do Next?” Introducing the Predictive Interface
Перевод сделал Алик Клименков, студент 4-го курса механико-математического факультета КНУ им. Т. Г. Шевченко
В современном мире имеется не очень много качественно различных типов компьютерных интерфейсов. Но, с выходом Mathematica 9, я полагаю, мы получили первый по-настоящему качественно новый тип интерфейса — вычисляемый предсказательный интерфейс.
Если иметь дело с системой, которая имеет небольшой фиксированный набор возможных действий или вводов, то, как правило, можно создать интерфейс из таких элементов, как меню или формы. Но если иметь более гибкие системы, то можно определить что-то наподобие языка. В основном это будет текстовый язык (это справедливо для большей части Mathematica); а иногда он может быть визуальным (как в случае с Wolfram SystemModeler).
Задача состоит в том, чтобы сделать язык обширным и мощным, но при этом оставив его максимально понятным для людей. Как человек, преданно занимающийся разработкой компьютерного языка уже более 30 лет, я приложил огромное количество усилий к этому.
Но насчет Wolfram|Alpha у меня была другая мысль. Не нужно пытаться создать наилучший искусственный компьютерный язык, который люди потом изучат. Вместо этого следует использовать естественный язык, типа того, на котором общаются люди между собой, а затем заставить компьютер сделать все возможное, чтобы понять его. Сначала было не совсем ясно, как внедрить эту идею. Но одна из основных вещей, которые мы уяснили из Wolfram|Alpha, это то, что с достаточным количеством усилий (и с достаточным количеством внесенных данных) это возможно сделать. И, действительно, два года назад в Mathematica 8, мы использовали то, что мы делали в Wolfram|Alpha: добавили в Mathematica возможность ввода языка в свободной форме и автоматической генерации из него кода для Mathematica.
Допустим, мы только что получили какой-то вывод из Mathematica. Что делать с ним дальше? Дальше можно писать код на языке Mathematica. Или, по крайней мере, можно выразить то, что мы хотим сделать с помощью понятного языка. Но в обоих случаях необходимо проявить своего рода креативность: не имея ничего, нужно выяснить, что именно следует сообщить.
Так можем ли мы облегчить этот процесс? Я думаю, что ответ — да. И это то, что мы сейчас сделали с помощью Предсказательного интерфейса (Predictive Interface) в Mathematica 9.
Концепция Предсказательного интерфейса заключается в том, чтобы из результатов, которые Вы получили, предсказать несколько вариантов действий, которые, Вы, вероятно, хотели бы сделать.
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_1.gif
В Mathematica 9 это происходит так: когда Вы поставили курсор в вывод, под ним появляется Панель предложений (Suggestions Bar) с набором кнопок для возможных дальнейших действий. Какие именно кнопки отображаются — это определяется из расчетов, которые выполняются в реальном времени, когда вы запрашиваете Панель предложений.
Есть два вида ввода для этих вычислений. Первый — это те действия, которые являются общими между структурой вывода и недавними действиями вашей сессии. И второй — те действия, которые могут привести к полезным результатам.
Со временем, Предсказательный интерфейс сможет пополняться с помощью запросов людей, которые им пользуются. Для начала мы использовали несколько крупных источников. Первый — это коллекция тщательно настроенных эвристических алгоритмов, которые Wolfram|Alpha использует для определения, что нужно выводить для данного конкретного ввода. Второй — миллиарды фактических запросов, которые мы наблюдаем в потоке запросов Wolfram|Alpha. Третий — это опубликованные коды Mathematica, например, огромное количество примеров в Wolfram Documentation Center (встроенный в Mathematica центр документации) и Wolfram Demonstrations Project (огромная коллекция готовых приложений, реализованных в виде динамических моделей). И четвертый — это наш очень большой образец кода Mathematica, состоящий из исходного кода как Mathematica так и Wolfram|Alpha .
На основе потока запросов и эвристических алгоритмов Wolfram|Alpha мы узнали множество априорных вероятностей действий, которые могут быть произведены над разными объектами, равно как и возможные дальнейшие последовательности действий. С помощью образцов кода Mathematica мы узнаем, какие действия происходят вместе, например, какова вероятность для разных функций быть применеными к различным типам аргументов.
В первом приближении, Предсказательный интерфейс работает так: всевозможные выводы разделяются на сотни различных общих типов, каждый из которых представлен символическим выражением, которое кодирует определенные свойства и атрибуты. Затем, используя информацию из различных источников, устанавливается большое количество вероятностных правил, чтобы определить возможные действия, которые могут быть предложены для конкретных комбинаций типов. Какие действия имеет смысл предложить, на самом деле зависит от того, какие из них приведут к полезным результатам. Итак, то что Предсказательный интерфейс в основном осуществляет, заключается в том, что он проверяет возможные действия (или тесты, на них основанные), а затем с помощью эвристики оценивает полезность результатов, которые они дадут.
В процессе своей работы Предсказательный интерфейс часто находит довольно большое количество возможных действий. Затем они должны быть упорядочены таким образом, что лучшие варианты представляются в первую очередь. И это делается с помощью достаточно сложной системы оценки, которая сочетает особые эвристические алгоритмы с вероятностной информацией и оценками полезности результатов.
В конечном счете, после всех этих сложных вычислений, пользователь видит только простой список кнопок для возможных действий.
Давайте посмотрим на примере:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_2.gif
Предсказательный интерфейс дает несколько советов, что можно было бы сделать с полученным числом. И они кажутся довольно разумными. Но на самом деле они даже лучше, чем мы могли бы ожидать (на рисунке: prime factorization — разложение на простые множители, scientific notation — представление числа в научном стиле, prime? — проверка, является ли число простым, next prime — ближайшее простое число, большее данного числа, more... — дополнительные возможности). Поскольку Предсказательный интерфейс использует информацию, которую он получает, фактически делая вычисления, которые сам предполагает нужными. Давайте попробуем другое число:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_3.gif
Опять же предложения кажутся довольно разумными (на рисунке: perfect number? — проверка, является ли данное число совершенным). Но они отличаются от предыдущих. А причина в том, что Предсказательный интерфейс знает, что именно это число — простое. Он подсказывает, что, например, стоило бы сделать проверку этого числа на простоту. Иногда можно ужаснуться, насколько предвидящим является Предсказательный интерфейс. Но я обнаружил, что, когда привыкаешь к этому, он удивительно полезен не только для своей основной цели: показывать, что можно делать, но и для подсказок о свойствах того, что вы видите.
Любопытно сравнить концепции Предсказательного интерфейса с тем, как Wolfram|Alpha генерирует отчеты. Если в Wolfram|Alpha, задать конкретный ввод (например, целое число) Wolfram|Alpha сгенерирует последовательность "блоков вывода", отображающихся далее на странице отчета по запросу, которые дают результаты тех вычислений, которые эвристические алгоритмы сочли интересными. В Предсказательном интерфейсе также есть набор возможных дальнейших вычислений, но уже не для того, чтобы отображать результаты этих вычислений. Вместо этого, после того, как все внутренние расчеты завершатся, все, что на самом деле отобразится, будет последовательностью кнопок, предоставленных для пользователя, чтобы он выбрал, что делать дальше.
Конечно, можно объединить эти подходы, и, когда Предсказательный интерфейс сочтет, что результаты Wolfram|Alpha были бы полезны, он "подсветит" логотип Wolfram|Alpha на Панели предложений. Если вы затем нажмите его, Вы получите весь результат запроса в Wolfram|Alpha, из которого Вы сможете выбрать отдельный блок вывода для создания нового конкретного ввода для Mathematica.
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_4.gif
Предсказательный интерфейс делает предложения, которые приводят к действиям различных видов. Но мы обнаружили то, что лучше всего представить каждое предложение более или менее однообразно — используя одно или несколько простых слов на английском языке, которые будут написаны на кнопках. Иногда нажатием кнопки можно просто запускать отдельные функции Mathematica, как Solve (для решения уравнений), или FactorInteger (для разложения числа на простые множители). И в этом смысле, следующий ввод показывает то вычисление, которое было проделано:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_5.gif
В некоторых случаях Предсказательный интерфейс может сам завершать фрагменты написанного кода, что можно сделать при помощи соответствующих кнопок:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_6.gif
Часто эти фрагменты кода достаточно просты, и их легко полностью отобразить. Но иногда лучше “скрыть” их по умолчанию, и сделать кнопку “показать” нажав на которую, вы сможете увидеть код:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_7.gif
А иногда код — это на самом деле обращение к Wolfram|Alpha:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_8.gif
Предсказательный интерфейс располагает предложения по степени полезности, и сразу отображает несколько самых полезных. Если вы нажмете кнопку more..., вы получите панель, которая покажет множество других предложений, расположенных по категориям:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_9.gif
Иногда есть лишь один из вариантов конкретного предложения. Но очень часто есть альтернативы или опции. Когда имеется небольшое количество очевидных вариантов, Предсказательный интерфейс просто перечисляет их по названию в выпадающем меню:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_10.gif
Или, если дано что-то посложнее, он показывает предварительный просмотр тех результатов, которые были бы для различных вариантов:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_11.gif
Во многих случаях это не просто перечень возможных вариантов; вероятно, придется “заполнить форму”, чтобы сообщить то, что нужно:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_12.gif
Вообще, Предсказательный интерфейс может представить по существу произвольный пользовательский интерфейс. Внутренне, это просто генерирование символьного выражения Mathematica, которое затем можно использовать во всем на языке интерфейса Mathematica, например, чтобы получить специально созданную, подобную “мастеру”, панель:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_13.gif
В простых случаях, Предсказательный интерфейс просто выдает ряд кнопок с предложениями. Но довольно распространено то, что встречаются самые разнообразные виды предложений в зависимости от конкретной ситуации. И в таких случаях мы обнаружили, что вместо смешивания предложений, основанных на разных значениях, гораздо лучше просто выбрать значения по умолчанию, а затем предлагать другие значения, как альтернативы, аналогично тому, как в Wolfram|Alpha работает механизм “догадок”:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_14.gif
При пользовании Предсказательным интерфейсом, довольно часто в конце расчетов получается целая цепочка вводов и выводов. Предсказательный интерфейс устроен так, что каждый новый ввод содержит предыдущий вывод. Вот последовательность с Панелями предложений Предсказательного интерфейса для каждой строки:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_15.gif
Если Вы захотите повторить последовательность вычислений, вы наверняка захотите “свернуть их” в единую строку, что и сделает значок спирали на Панели предложений:
Predstavljaem_Predskazatel'nyj_interfejs_Mathematica_9_16.gif
Сейчас Предсказательный интерфейс сосредоточен на создании предложений для одиночных выводов, хотя он часто использует контекст и предысторию. В будущем мы планируем сделать гораздо больше для предложений для нескольких вводов и различных форм реорганизации, так же, как и для полноценных программ Mathematica.
Когда мы приступили к созданию Предсказательного интерфейса, было не совсем ясно, как он собирается решать такие задачи. Предыдущие примеры "предлагающих" интерфейсов не были в целом хорошо восприняты (как, например умная скрепка Microsoft "Clippy", которую я всегда считал очаровательной, хотя не особенно полезной). Но я подозревал, что проблема была не в общей идее предоставления контекстных предложений, а в том, как они создаются и представляются.
Ключевая идея, которая привела к нашему Предсказательному интерфейсу для Mathematica 9, состоит в том, чтобы реальными вычислениями выяснить, что можно предложить. Никогда не будет полного, точного алгоритма для определения того, что человек захочет делать дальше (хотя люди часто более предсказуемы, чем можно было бы ожидать). То, что следует сделать вместо него — иметь полную коллекцию эвристических алгоритмов, которые приближаются как можно ближе к тому, чтобы быть способными заставить компьютер "делать то, что я хочу".
Я должен сказать, что в последние годы я всегда скептически относился к эвристике. Потому что я думал, что она будет очень раздражать людей. Если иметь точный язык и систему, такую, как Mathematica, то суть хорошего проекта состоит в том, чтобы сделать все совершенно последовательным, чтобы люди могли легко предсказать, что система будет делать в каждом конкретном случае. Но эвристика двигается в обратном направлении, основательно пытаясь охватить распространенные случаи, но, вовсе не беспокоясь об общей последовательности и логичности.
Но вот один ключевой момент, который я узнал из создания Wolfram|Alpha: если эвристику сделать хорошо, с серьезными вычислениями и большим количеством внутренних данных, она на самом деле работает, и люди ее очень любят. Wolfram|Alpha полон эвристики: для понимания языкового ввода в свободной форме, для выяснения, какой вывод сгенерировать, и т. д. И, как это часто бывает с компьютерными системами, пока все "просто работает", люди никогда не задумываются об эвристике, никогда не пытаются разобрать ее, и никогда не замечают или не смущаются отсутствием полной согласованности системы.
Предсказательный интерфейс технически на самом деле сильно отличается от Wolfram|Alpha. Но общее понятие целостной эвристической сети, основанной на серьезных вычислениях и знаниях у них одинаково. На практике, при работе с Предсказательным интерфейсом часто является важным то, что он представляет сам себя с соответствующим уровнем визуального выделения: он есть, к нему легко обратиться, если вам это нужно, но в тоже время он не мешает вашей работе, если вы не нуждаетесь в нем.
Я должен сказать, что, следуя из моего опыта в Mathematica, кажется, он хорошо работает. Если бы я знал, что делать после того, как я получаю конкретный вывод, я просто ввел бы следующий ввод, не отвлекаясь на Предсказательный интерфейс. Но как только я останавливаюсь на минуту, я стараюсь взглянуть на Предсказательный интерфейс. И часто он подсказывает мне и выдает именно то, что я хотел бы делать дальше.
Я имел возможность понаблюдать за несколькими начинающими пользователями Mathematica, которые использовали Предсказательный интерфейс. Похоже, что он действительно хорошо работает. С одной стороны, он позволяет прогрессировать намного быстрее, чем прежде, и невзначай подталкивает пользователя к более широкому набору возможностей в Mathematica, который он не смог бы найти в течение длительного промежутка времени.
Mathematica является довольно большой системой, и я не думаю, что кто-то (даже я) сможет сразу запомнить все, что она делает. Таким образом, это значит, что, в частности, если используется, в некоторой степени, незнакомая часть системы, Предсказательный интерфейс будет крайне полезен. И даже в тех местах системы, которые я хорошо знаю, будет быстрее нажать кнопку Предсказательного интерфейса, чем напечатать ввод.
Предсказательный интерфейс состоит из своего рода бесконечной сети предложений. И довольно забавно начинать с чего-нибудь простого и видеть, насколько далеко можно зайти, просто следуя предложениям Предсказательного интерфейса. Это поразительно, как быстро можно закончить работу с довольно сложными вещами.
Одна из основных вещей, которую я всегда пытался сделать в Mathematica (и в Wolfram|Alpha и т. д.) это максимальная автоматизация: сделать так, чтобы все, что компьютер мог автоматически обработать, он автоматически обрабатывал. В прошлом мы много сделали  для автоматизации выбора алгоритмов, автоматизации того, как представлять вывод и визуализацию или того, как строить интерфейсы и, в Wolfram|Alpha, автоматизация того, как интерпретируется ввод. С помощью Предсказательного интерфейса мы осадили еще одну «башню автоматизации»: автоматизация выбора того, что нужно делать далее.
С точки зрения дизайна интерфейса, я нахожу Предсказательный интерфейс чрезвычайно интересным. Предыдущие интерфейсы, типа меню или форм или компьютерные языки  или языки в свободной форме, сделали некоторые вещи простыми. Предсказательный интерфейс сделал новый тип вещей простыми. И, так как я работаю над будущим дизайном для Mathematica (так же, как и над другими нашими продуктами), я уже замечаю, что мое мышление изменяется в результате пользования Предсказательным интерфейсом.
Хочется, чтобы в конструкции языка был минимальный набор названий и понятий для того, чтобы людям было проще запомнить. В свободной форме языкового ввода хочется отсеивать то, что нужно людям в данный момент и это едва ли стоит того, чтобы скрыть то, что человек никогда не подумает спросить. Но в Предсказательном интерфейсе существует новый механизм. Как только люди двигаются в определенном общем направлении, можно представить им предложения, которые дадут им возможность обнаружить те вещи, о которых они бы и не подумали.
Это особенно важно для такой глубокой и широкой системы, как Mathematica. Люди довольно легко годами используют только небольшую часть системы и не пользуются выгодами ее широких возможностей. Но сейчас Предсказательный интерфейс непрерывно ведет людей к другим частям системы, с которыми они могут сразу же ознакомиться и использовать.
Предсказательный интерфейс в Mathematica 9 — это только начало. Со временем станет возможным делать еще более богатые и сложные предсказания. Используя информацию не только из текущего сеанса, а и из всей истории, данных и аналитики о пользователе. Конечной целью является максимальная автоматизация. Чтобы помочь пользователю определить цель, и потом заставить компьютер найти как можно больше способов достижения этой цели. Иногда пользователь сможет установить цель с помощью обычного или компьютерного языка. Но часто на них не сформулируешь этого полностью. И, вместо этого, они просто укажут общее направление. И в этом месте Предсказательный интерфейс сможет взять инициативу, делая предложения и позволяя пользователю направляться в том направлении, в котором он хочет.
Сегодня Предсказательный интерфейс доступен в Mathematica 9. Мы также работаем над тем, чтобы и другие продукты использовали его. В будущем я ожидаю везде увидеть сложные компьютерные предсказательные интерфейсы в качестве, так сказать, новой парадигмы для взаимодействия с компьютерами.

Блог принадлежит “Русскоязычной поддержке Wolfram Mathematica
При любом использовании материалов блога, ссылка на блог обязательна.
SpikeyСоздано с помощью Wolfram Mathematica 9

Комментариев нет:

Отправить комментарий