Огляд нових можливостей Mathematica 11 і мови Wolfram Language


Переклад поста Стівен Вольфрам (Stephen Wolfram) "Today We Launch Version 11!".
Висловлюю величезну подяку Поліні Сологуб за допомогу в перекладі і підготовці публікації

Зміст
Перше, що ви помітите...
3D друк
Машинне навчання і нейронні мережі
Аудіо
Вбудовані дані про що завгодно: від скелетної структури та продуктів харчування до відомостей про нашого Всесвіту
Обчислення з реальними об'єктами
Передові можливості географічних обчислень і візуалізації
Не забудемо про складні задачі математичного аналізу і теоретичної фізики...
Освіта
Поєднання всіх функцій в одне ціле
Візуалізація
Від рядків тексту
Сучасний підхід до програмування систем
Робота в інтернеті
Хмарні дані
Підключайтеся до будь-яких зовнішніх сервісів: Facebook, Twitter, Instagram, ArXiv, Reddit і багатьом іншим...
WolframScript
Нове в ядрі мови Wolfram Language
І ще багато нового...
Я радий оголосити про вихід нової версії системи Mathematica і 11-ї версії мови Wolfram Language, доступною як для Desktop-комп'ютерів, так і в хмарному вигляді. Протягом останніх двох років сотні людей наполегливо працювали над її створенням, а кілька тисяч годин і я особисто. Я дуже схвильований; це важливий крок вперед, що має важливе значення для багатьох найбільших технологічних областей.



Минуло більше 28 років з тих пір, як вийшла 1-я версія, — і майже 30 років з тих пір, як я зайнявся її розробкою. І все це час я продовжував втілювати зухвалу мрію — будувати все більший і більший стек технологій. Велика частина програмного забезпечення через кілька років і кілька версій, за винятком дрібних доробок, практично не змінюється. З системою Mathematica і Wolfram Language склалася зовсім інша історія: протягом трьох десятиліть ми з кожною новою версією просувалися вперед, поступово завойовуючи величезну кількість нових областей.

Це дивовижне інтелектуальна подорож для мене і для всіх нас. З самого початку у нас був серйозний набір основоположних принципів і сильна основна структура, так що протягом трьох десятиліть ми могли просто продовжувати будувати на цьому фундаменті все більше, створюючи все те, що стало тепер величезною системою, зберігає свою єдність, елегантність, і, відверто кажучи, сучасність. У перші роки ми зосередилися на абстрактних областях зразок математики. Але з часом ми охоплювали все більше видів обчислень і знань.

Кожна нова версія це безліч нових ідей і багато тисяч годин важкої роботи. Більше того — вона являє собою постійно зростаючу систему важелів, створену з допомогою нашої технології. Це відбувається тому, що одним з наших ключових принципів є автоматизація, і в кожній новій версії ми використовуємо всі попередні досягнення з цієї області, — так що, по суті, у нас з'являється все більше і більше будівельних блоків, завдяки яким ми можемо все швидше рухатися далі. У створення і підтримання єдиної для всієї структури системи протягом багатьох років вкладалися величезні зусилля, так що в результаті всі ці будівельні блоки з різних областей ідеально підходять один до одного.

При використанні традиційних підходів до розробки програмного забезпечення нам було б дуже багато років для створення того, що ми додали до 11-ї версії. І той факт, що ми можемо уявити зараз нову версію, є прямим відображенням ефективності нашої технології, наших принципів і нашої методології. Мені дуже приємно бачити, що ми так далеко просунулися не тільки в плані вмісту системи, але і в тому, наскільки ефективно ми можемо розвивати його. Не кажучи вже про те, що всі ці напрямки, якими ми займалися протягом багатьох років у рамках логічного розвитку нашої системи, опинилися зараз саме тим, що потрібно для багатьох найбільш активно розвиваються технологічних областей.

Багато років ми називали нашу основну систему Mathematica. Однак після того, як ми додали нові напрямки, а також вийшли далеко за межі речей, пов'язаних яким-небудь чином з «математики», ми вирішили ввести поняття Wolfram Language, щоб передати суть всього того, що ми робимо. І зараз Wolfram Language визначає роботу не тільки системи Mathematica, а також Wolfram Development Platform і Wolfram Programming Lab, а також інших продуктів і платформ. І завдяки єдності нашої разработоки програмного забезпечення ми можемо сьогодні випустити 11-ю версію усіх наших систем, заснованих на Wolfram Language.



ОК, так що ж такого грандіозного і нового в 11-ій версії? Ну, ми підготували навіть не одне велике нововведення, а багато. Щоб ви могли оцінити масштаб: ми додали 555 абсолютно нових функцій, представляють величезну кількість нових функціональних можливостей (в порівнянні з першою версією, в якій була 551 функція цілому). Насправді, дане число функцій не включені навіть поглиблені варіанти багатьох існуючих функцій.

Ми керуємо розвитком компанії таким чином, що у нас завжди є портфель актуальних проектів — від дрібних до тих, які можуть вимагати на реалізацію п'ять або більше років. 11-я версія включає в себе результати декількох п'ятирічних проектів. Ми зацікавлені в тому, щоб якомога швидше доносити результати наших досліджень до користувачів, так що з моменту виходу 10-ї версії у нас було кілька проміжних релізів; в результаті 11-я версія фактично являє собою поєднання багатьох абсолютно нових розробок, які ми вже анонсували у версіях 10.1, 10.2 10.3 і 10.4 (багато функцій, які були позначені як «експериментальні» 10.x випусках, доступні тепер повністю у версії 11.0).

Перше, що ви помітите...
При першому запуску 11-ї версії на робочому столі першим, що ви помітите, новий вигляд документів з більш чіткими шрифтами і строгим дизайном. При введенні коду з'являється багато нових варіантів автозаполнения (стає все важче набрати щось неправильно), а також при введенні тексту працює новий спеллчекер в режимі реального часу, який ми будемо постійно оновлювати, щоб бути впевненими в тому, що в нього включені останні слова.

Якщо на вашому комп'ютері встановлений один з дюжини інших мов, крім англійської, ви побачите, що кожна функція автоматично позначається "подписью" на обраній вами мові:



Коли ви запустите код, то помітите, що сообщения також виглядають по-різному, — і, що дуже зручно, вони дозволяють відразу побачити, які функції були викликані під час створення повідомлення.

3D друк
У 11-й версії з'явилося багато нових областей. Давайте перейдемо до одного з них: 3D-друку. Вперше я надрукував в 3D ще в 2002 році. Протягом багатьох років ми експортували в STL. Для 11-ї версії ми створили повний цикл, який починається від створення 3D-геометрії і закінчується в той момент, коли готовий виріб лежить на вашому 3D-принтері.



Раніше мені хотілося взяти креслення в 3D і просто роздрукувати його — теж в 3D. І іноді мені щастило і це було легко здійснити. Але в більшості випадків це незручно й складно, оскільки графіки, які висвічуються на екрані, не обов'язково відповідають геометрії, яка може бути надрукована на 3D-принтері. Так що зручно налаштувати або исправить геометрію так, щоб вона дійсно працювала на 3D-принтері, виявляється важким завданням (і так — якщо ви зробите це неправильно, з принтера може бризнути пластик).

У 11-й версії стало можливим взяти будь 3D-графіка і просто надрукувати його в 3D. Або ви можете отримати структуру молекули або перепад висот навколо гори, і теж просто надрукувати їх в 3D. За ці роки я багато друкував у 3D, і кожен раз це було свого роду маленьке пригода. Але тепер, завдяки 11-ї версії, легко роздрукувати на 3D практично все, що завгодно. І тепер, коли я думаю про це, мені здається потрібна 3D-роздруківка того, як зростав Wolfram Language по різним областям

Машинне навчання і нейронні мережі
У певному сенсі, Mathematica і Wolfram Language завжди займалися штучним інтелектом (ШІ). Протягом багатьох років ми були піонерами у вирішенні серії проблем, пов'язаних з ІІ: від математичного рішення автоматизації естетики до розуміння природної мови. Але ще в 10-ї версії ми зробили великий крок вперед щодо машинного навчання — мова йде про розробку максимально автоматизованих головних функцій (Classify і Predict).

Повинен сказати, що я не розумів, добре ці функції будуть працювати на практиці. Чудово було спостерігати, наскільки добре вони працюють, — і дуже здорово бачити, що багато з наших користувачів можуть запровадити машинне навчання у свою роботу виключно за допомогою розробленої нами автоматизації і без консультації у фахівців з машинного навчання.

У 11-й версії ми неабияк просунулися вперед в області машинного навчання. Тепер у нас є нові способи здійснювати не тільки класифікацію та прогнозування, але і операції виділення ознак, зменшення розміру, кластеризації і так далі. І ми також дуже багато «навчаємо» нашу систему, щоб надавати користувачам готові функції машинного навчання. Машинне навчання — це новий цікавий напрямок розробки. По суті, це процес курирування. Це як якщо б замість того, щоб, скажімо, збирати дані про різних відео, ви збираєте стільки зображень різних видів тварин, скільки можливо.

В 11-ю версію вбудовані такі функції, як ImageIdentify, яка ідентифікує більше 10000 різних видів об'єктів. Завдяки загальній структурі досить просто взяти вже виділені характеристики і використовувати їх для навчання нових класифікаторів зображень більш ефективно, ніж раніше.



Ми багато зробили для автоматизації найбільш поширених з сьогоднішніх завдань машинного навчання. Але тільки в останні роки стало ясно, що з допомогою сучасних методів машинного навчання (і, зокрема, з використанням нейронних мереж) може бути вирішено безліч завдань. Це воістину дивовижний епізод з історії науки: та область нейронних мереж, якою я займався майже 40 років, з удаваною майже безнадійної стала однією з найгарячіших областей, в якій майже щотижня робляться нові відкриття.

Ну добре, припустимо, ви теж хочете зайнятися цим. Так, ви можете щось збирати з допомогою цілого ряду низькорівневих бібліотек. Але при створенні 11-ї версії ми поставили перед собою мету створити оптимізований символьний спосіб налаштування і навчання нейромереж, в яких повинно бути автоматизовано якомога більше з того, що вони в принципі можуть робити. У 11-й версії є тепер функції начебто NetGraph і NetChain поряд зі всілякими "спеціальними функціями нейронних мереж" типу DotPlusLayer або ConvolutionLayer. І за допомогою цих функцій можна взяти новітні мережі і швидко налаштувати їх Wolfram Language (рекурентні мережі у 11-й версії поки не зовсім дороблені, однак вони з'являться найближчим часом).



Звичайно, все це добре працює завдяки інтеграції з Wolfram Language. Нейронна мережа — це просто Graph об'єкт, як і будь-який інший. І такі дані, що вводяться, як зображення або тексти, можуть негайно і автоматично оброблятися за допомогою стандартних можливостей Wolfram Language у формах, придатних для нейромережевих обчислень.

З їх назви («нейронні мережі») здається, що вони пов'язані з мозком. Однак насправді це абсолютно загальні обчислювальні структури: вони відповідають складним комбінаціям простих функцій. Вони не пов'язані з тими найпростішими програмами, які я так довго вивчав, хоча і володіють спеціальними характеристиками, налаштованими так, щоб легко навчатися на прикладах.

У нас завжди були функції статистичної підгонки даних і інтерполяції. Однак у нейронних мереж значно багатшими простір можливих обчислювальних структур для підгонки даних або навчання. Чудово, що тільки за останні пару років стільки різних областей зазнали революційні зміни, — і скоро їх стане ще більше.

Я сподіваюся, що ми зможемо прискорити цей процес за допомогою 11-ї версії. Нам вдалося зробити «нейромережеве програмування» просто ще однією парадигмою програмування, нарівні з іншими інтегрованої в Wolfram Language. Це дуже результативно і дозволяє взаємодіяти з величезними навчальними последвательностями. Але в кінцевому підсумку, думаю, найсильніша річ — це те, що воно відразу ж вписується у все, що робить Wolfram Language. Навіть у 11-й версії ми вже використовували його при роботі з нашими внутрішніми алгоритмами в таких областях, обробка зображень, сигналів і тексту. Історія «нейромережевого програмування» ще дуже молода, і я радий, що Wolfram Language буде грати центральну роль в ній.

Аудіо
Добре, давайте звернемося до ще однієї нової області 11-ї версії: аудіо. Наша мета — мати можливість обробляти будь-які дані безпосередньо в Wolfram Language. У нас вже є такі об'єкти, як графічні примітиви (з яких можна будувати як завгодно складну векторну 2D і 3D графіку), растрові зображення (також 2D і 3D), геометричні обчислювані елементи, графи та мережі формули і безліч інших функцій, послідовно представлених у мові у вигляді символьних структур. І, починаючи з 11-ї версії, тепер став доступний ще один тип даних — аудіо.



З аудіо працювати складно через його розміру. Однак у 11-й версії можна безперешкодно обробити, скажімо, годину аудіо безпосередньо в Wolfram Language. Безумовно, за цим стоять технології кешування, потокової передачі даних і так далі. Але це все автоматизовано — і в мові це просто об'єкт, що задається функцією Audio. Цей Audio-об'єкт можна відразу ж піддати вкрай складній обробці й аналізу, які доступні тільки в Wolfram Language.

Вбудовані дані про що завгодно: від скелетної структури та продуктів харчування до відомостей про нашого Всесвіту
Wolfram Language — мова, заснований на знаннях. А це означає, що в нього вбудовано безліч знань — як про обчисленнях, так і про все у світі. На сьогоднішній день Wolfram Language охоплює тисячі областей знань реального світу — починаючи від країн і фільмів до компаній і планет. Всі нові дані надходять в головну хмарну базу знань Wolfram, і ми ретельно займаємося дані про те нове, що з'являється у світі (хто знав, наприклад, що в Австрії з'явилися нещодавно нові адміністративні підрозділи?). Багато ці дані доступні в Wolfram|Alpha. Але тільки в Wolfram Language дані оживають для повноцінних обчислень — і тоді стають очевидними всі ті зусилля, які ми вкладаємо в забезпечення узгодженості і послідовності всієї системи.

Ми постійно працюємо над тим, щоб розширити сферу знань, що охоплюються Wolfram Language. Ті кілька напрямків, над якими ми працювали впродовж багатьох років, у 11-й версії, нарешті, готові до роботи. Особливо складно було з даними по анатомії. Однак у 11-й версії ви побачите докладні 3D-моделі всіх значущих структур людського тіла. Ви зможете побачити, як складні кістки ноги прилягають один до одного. І ви зможете зробити розрахунки. Або надрукувати їх в 3D. Ви зможете вивчити мережу навколо артерій серця. Повинен сказати, що, коли я досліджував це, я більш ніж коли-небудь був вражений рівнем морфологічної складності, властивої людському тілу. Однак тепер ми можемо легко робити розрахунки в цій області. Для їх обслуговування з'явилися нові, і, можливо, несподівані функції, такі, як AnatomyPlot3D. Безумовно, з ними ще доведеться попрацювати: приміром, наші анатомічні дані — це дані "середнього дорослого чоловіка", а суглоби не можуть рухатися, і т. д.



Зовсім інша область даних допрацьовується також в даний час в Wolfram Language — це їжа. У цій області багато складнощів. По-перше, онтологічні проблеми. Що таке яблуко? Є загальне поняття — «яблуко», а також існує безліч специфічних типів яблук. Також постає питання визначення «кількості їжі». Чашка полуниці. Три яблука. Чверть фунта. Нам знадобилося багато років, щоб отримати надійний символьний спосіб відображення продуктів, за допомогою якого ми можемо відразу вирахувати поживні властивості і багато чого ще.



Ще одна довгоочікувана новинка — історичні дані країнам. У нас були дані про країни у новітній час (як правило, з 1960-х або 1970-х рр..). А щодо більш раннього періоду? Щодо Пруссії? Що можна сказати про Римської імперії? Загалом, у 11-й версії ми нарешті отримали принаймні приблизну інформацію про кордони всіх серйозних країн протягом всієї історії. Таким чином, за допомогою Wolfram Language можна зробити розрахунки щодо піднесення і падіння імперій.



Говорячи про історію, хочеться відзначити невелике, але дуже корисне доповнення до 11-ї версії: історичні дані про частоту вживання слів. Просто отримати за допомогою функції WordFrequencyData часовий ряд частот вживання слів, і ви дізнаєтеся, як багато людей говорили про слово «війна» (або «турнепс») в різний час. Майже кожен графік — це урок історії.



Ще одна зручна функція з 11-ї версії — WikipediaData, яка за запитом видає будь-яку статтю з Вікіпедії (або різні види даних, які в ній містяться). Також є функція WolframLanguageData, яка дозволяє отримувати обчислювані дані про самому мовою Wolfram: приклади, наведені у документації, зв'язку між функціями і так далі.

У багатьох сферах ми в основному маємо справу зі статичними даними ("Яка густина золота?"; "Яким було населення Лондона в 1959 році?"). Але є й інші сфери, в яких інтерес до статичних даними невеликий. У 11-й версії є кілька нових прикладів. Наприклад, дані про смертність людей (“Яка ймовірність померти в проміжку між віком X і віком Y?), стандартні дані про океанах ("Який тиск на глибині X?"), дані про енергії гальмування радіоактивних частинок в речовині (radioactive stopping power) і дані про зростання людини — а також відомості про всій Всесвіту згідно стандартної космологічної моделі.

Крім того, у 11-й версії з'являються такі функції, як WeatherForecastData (прогноз погоди в будь-якій точці світу) і MathematicalFunctionData база даних про математичних формулах, що містить сотні тисяч математичних формул, уявлень функцій тощо). О, а ще дані про покемонах та багато інших корисних речей.



Обчислення з реальними об'єктами
Однією з найбільш потужних можливостей Wolfram Language є його здатність виробляти безпосередні обчислення з реальними об'єктами. США, або Росія, або навіть ящірка, — для Wolfram Language це просто об'єкти, якими можна маніпулювати в якості символьних конструкцій з використанням загальної символьної парадигми мови. Самі об'єкти не мають значення; вони просто символи. Але їх властивості можуть мати значення, скажімо, обчислення властивості «Population» у entity [[USA]] дасть 322 млн.

Однак давайте припустимо, що ми хочемо не просто взяти деякий об'єкт (наприклад, США) і знайти значення його властивостей. Скажімо, замість цього ми хочемо знайти об'єкти з певними властивостями і значеннями. Скажімо, ми хочемо знайти 5 найбільших країн у світі по чисельності населення. У 11-й версії ми можемо зробити це по-новому. Замість того, щоб вказати конкретний явний об'єкт, ми вказуємо обчислення, яке неявно визначає клас об'єктів. Так, наприклад, ми можемо отримати список 5 найбільших за чисельністю населення країн ось так:



TakeLargest[5]операторна форма нової функції, що працює з самими великими елементами списку. Неявні об'єкти в кінцевому підсумку часто використовують операторні форми — як у запитах Dataset. І в деякому сенсі вони використовують символьний характер Wolfram Language, тому що вони працюють з функціями, які визначають їх як дані.

Механізм об'єктів і властивостей і неявних об'єктів працює для всіх різних типів об'єктів, які існують у мові Wolfram. Однак починаючи з 11-ї версії він не обмежується вбудованими типами об'єктів. Нова конструкція, яка називається EntityStore, дозволяє визначати власні типи об'єктів, а також вказувати їх властивості та значення і так далі, а потім використовувати їх в будь-яких обчислень.

Подібно до того, як Dataset є потужним ієрархічним узагальненням типових понять баз даних, EntityStore є свого роду символічним узагальненням типовою реляційної бази даних. І якщо ви створили складний об'єкт EntityStore, ви можете просто використовувати функцію CloudDeploy, щоб розгорнути його в хмарі і використовувати, коли захочете.

Передові можливості географічних обчислень і візуалізації
Географія — один з аспектів «знань про реальний світ». Але Wolfram Language не просто має доступ до докладним географічним даними (для Землі, Місяць, Марса і навіть Плутона; він може також здійснювати обчислення з цими даними. У його арсеналі — колосальна колекція миттєво вычислимых гео проекцій і всі налаштування для підтримки детальної геодезії. Пам'ятайте сферичну тригонометрію? Wolfram Language не тільки знає, що Земля являє собою сферу, але і, використовуючи фактичну форму Землі, правильно обчислює відстані, будує області і так далі на карті з довільними проекціями.



Якщо говорити про створення карток, Wolfram Language тепер має доступ не тільки до карти вулиць всього світу, але і до таких речей, як історичні кордони країн, а також супутниковим знімкам, — з низьким дозволом (як мінімум). З урахуванням карт вулиць з'являється новий важливий клас можливих обчислень: туристичних напрямків (часу поїздки) звідки завгодно і куди завгодно.



Не забудемо про складні задачі математичного аналізу і теоретичної фізики...
У 11-й версії у всіх областях Wolfram Language з'явилося багато нових можливостей. Однак вони доступні тепер і в сферах, традиційних для Mathematica, — наприклад, математичного аналізу.

Наприклад, є функції (на зразок DEigenvalues) власними числами і функціями диференціальних операторів звичайних диференціальних рівнянь і рівнянь в приватних похідних. Щоб зробити це можливим, необхідний величезний стек алгоритмічних технологій, і ми вже більше 25 років рухаємося в цю сторону. Важливо, що це не той випадок, коли необхідно ставити ту чи іншу задачу за допомогою детально опрацьованих знань чисельного аналізу. Тут ви визначаєте тільки рівняння та їх граничні умови — і система автоматично з'ясовує, як їх вирішити.



Ще в 1976 році я написав програму на Fortran, призначену для пошуку власних функцій рівняння Шредінгера фізика елементарних частиц, яку я вивчав. У 1981 році я писав програми на C, щоб зробити те ж саме для деяких рівнянь релятивістської квантової механіки. Я терпляче чекав того дня, коли я зможу просто вбити ці завдання і відразу ж отримати відповіді. І зараз це стало можливим.

Звичайно, у 11-й версії все це носить набагато більш загальний характер. Я мав справу з простими граничними умовами; але у 11-й версії для того, щоб налаштувати граничні умови, можна використовувати весь геометричний подъязык Wolfram Language — і всі дані, які нам доступні. Так що знайти власні поверхні «барабана» будь-якої форми — наприклад, в формою США, — зовсім нескладно.



В даному випадку у нас немає ніякого вибору, окрім як робити всі обчислення чисельно. Тим не менш, у 11-й версії скоро стане можливим шукати власні числа та функції диференціальних операторів аналітично. В 11-ю версію також додані деякі нові можливості для вирішення у загальному вигляді (аналітично) диференціальних рівнянь. Зокрема, у нас був великий проект R&D, який підвів нас тепер до тієї точки, в якій ми можемо знайти символьне рішення практично для будь-якого диференціального рівняння в частинних похідних, яке може з'явитися в будь-якій науковій роботі або підручнику (якщо воно взагалі має аналітичне рішення).

Ще в 1979 році, коли я створив попередника системи Mathematica (див. пост на Хабре "Коротка історія появи Mathematica"), я склав список речей, які, як я сподівався, ми б в кінці кінців в стані були б здійснити. Один з пунктів цього списку — рішення інтегральних рівнянь. Що ж — радий повідомити, що 37 років, ми, нарешті, отримали стек алгоритмічних технологій, що дозволяє зробити це можливим і в 11-ій версії представлені вирішення багатьох класів інтегро-диференціальних рівнянь.

Є і ще дещо- наприклад, побудова функцій Гріна для диференціальних рівнянь. І, нарешті, довгоочікувана (принаймні, для мене) функція інтегрального перетворення Мелліна (воно було моїм фаворитом з тих пір, як стало центром моєї статті по фізиці частинок в 1977 році).

Ми вклали багато сил в те, що можна назвати "сучасним матанализом" — ті його аспекти, які необхідні для підтримки областей кшталт машинного навчання. Тепер у нас є більше ефективні і надійні методи мінімізації, а також складна байєсова мінімізація, призначена для неконтрольованого машинного навчання.

Освіта
Диференціальні рівняння в приватних похідних — складні з математичної точки зору, що відображається на застосуванні їх на практиці у фізиці і техніці і так далі. Але як щодо базової математики, відповідної рівню шкільної освіти? Що ж — протягом тривалого часу Mathematica цілком охоплювала цей рівень. Але, оскільки наш стек алгоритмічних технологій розширився, навіть для більш елементарної математики стали можливі деякі нові речі.

В якості одного з прикладів можна навести автоматичну обробку розривів, асимптот і т. д. на графіках функцій. Так що тепер, наприклад, функція Tan[х] будується ідеальним «шкільним» способом, без розривів від –∞ до +∞. У випадку з функцією Tan[х] все досить просто. Однак всередині є деякі серйозні алгоритмічні технології, призначені для роботи з набагато більш складними функціями.



І, до речі, у новій версії є дещо ще більш масштабне — це функція MathematicalFunctionData: доступ до сотням тисяч відносин і властивостей математичних функцій — у якомусь сенсі це інкапсуляції багатьох століть математичних досліджень (див. пост на Хабре "Обчислювані знання і майбутнє чистої математики") з метою зробити їх легкодоступними для обчислень.

Останнім часом ми використовуємо Wolfram Language як спосіб навчання алгоритмічного мислення на всіх рівнях. І, серед іншого, ми хотіли переконатися, що будь-математичне обчислення, c якими стикаються в початковій школі, можна дійсно елементарно здійснити з допомогою Wolfram Language. Тому у нас є такі маленькі функції, як NumberExpand — вона бере число, скажімо, 123 і розписує його у формі {100, 20, 3}; також ми додали функції, такі, як RomanNumeral інші.

І — почасти як данина поваги спадщини мови Logo, — ми створили функцію AnglePath — свого роду промисловий масштаб "черепашачою графіки (turtle graphics)", яка може бути корисна не тільки для початкової освіти, але й для серйозного моделювання — приміром, випадкових блукань.



Поєднання всіх функцій в одне ціле
Одна з головних цілей мови Wolfram Language — зробити так, щоб все легко працювало разом. А у 11-й версії є деякі нові приклади її досягнення.

Тимчасові ряди, наприклад, в даний час працюють безпосередньо з арифметикою. Таким чином, ви можете взяти два тимчасових ряду, скажімо, тиску повітря, а потім просто відняти їх. Звичайно, було б простіше, якби всі тимчасові точки в серії вишикувалися, однак у 11-й версії це і не потрібно: Wolfram Language автоматично обробляє нерегулярні часові ряди.

Інший приклад стосується одиниць вимірювання. У новій версії статистичні розподіли на сьогоднішній день безперешкодно працюють з одиницями виміру. Таким чином, нормальний розподіл може мати не тільки дисперсію 2,5, але і дисперсію 2,5 метра. Всі розрахунки, перетворення одиниць вимірювання обробляються повністю в автоматичному режимі.

Геометрія також була інтегрована в більш великі частини системи. Ті комп'ютери, які раніше просто брали змінні, можуть тепер оперувати довільними областями. Ще одна нова функція — ImageMesh — зв'язує зображення з областями: створює геометричну сітку з будь-якого зображення. Так, наприклад, якщо ви хочете, можете зробити серйозні геометричні обчислення вашої улюбленої картинки з котиком.

Ще один приклад: випадкові об'єкти. RandomInteger і RandomReal — це старі функції. 8-ї версії була представлена функція RandomVariate для того, щоб створити набір чисел, які мають задану імовірнісний розподіл. Потім 9-ї версії з'явилася функція RandomFunction, призначена для генерації функцій випадкових процесів. У 11-й версії з'явилося ще більше функцій для роботи з випадковістю — я кажу про функції RandomPoint, яка створює набір точок, випадково розподілених в будь-якій області (одно-, дво-, тривимірних і багатовимірних). Також з'явилася функція RandomEntity, яка вибирає випадковий об'єкт з вбудованої бази підвідомчих даних, а також функція RandomWord, необхідна для досліджень природної мови; а ще це хороший спосіб перевірити ваш словниковий запас — можна обрати слова з великого списку мов… І, нарешті, у 11-й версії з'явилася важлива нова область випадкові матриці — реалізована з усією глибиною і повнотою, які ми зробили візитною карткою системи Wolfram Mathematica і Language.

Візуалізація
Одним із серйозних досягнень Mathematica і мови Wolfram стало включення візуалізації в повсякденну роботу. Нашою метою завжди було максимально автоматизувати і візуалізувати як можна більше. І в 11-ій версії тепер представлена ціла колекція нових функцій автоматичної візуалізації.

Є дуже гнучка функція WordCloud для побудови хмар із слів, які дозволяють візуалізувати текст і рядки. Є функція TimelinePlot для візуалізації подій у часі. AudioPlot, які можуть візуалізувати аудіо різної довжини. Є функція Dendrogram, яка використовує методи машинного навчання для демонстрації ієрархічної кластеризації зображень, тексту або будь-якого іншого виду даних. GeoHistogram для побудови географічних гістограм. Функція TextStructure графічно зображує граматику англійських речень. І є функція AnatomyPlot3D, демонструє елементи людського тіла (використовуючи символічні специфікації, оскільки немає ніяких явних координат).



Що ще можна візуалізувати? Є одна річ, яку я багато візуалізував (особливо в моїх роботах в області фундаментальної науки) — це правила для простих програм на зразок клітинних автоматів, машин Тюрінга, правил підстановки та ін., А в 11-ю версію ми додали функцію RulePlot для автоматичної візуалізації правил в самих різних стилях.



Ще одна давня проблема візуалізації полягала в автоматизації 3D розподілу даних. Основна складність полягає в тому, щоб «побачити» обсяг в 3D. Але в новій версії у нас є тепер купа функцій, які вирішують по-різному, часто роблячи зрізи в місцях, які визначаються нашою системою обчислюваної геометрії.



Ще один важливий напрямок автоматизації в області візуалізації — маркування. У 11-й версії доступна функція Callout, вказує выноски для точок, ліній та областей (у нас вже є функції підпису, підказки і так далі). Є такий спосіб робити виноски — завжди поміщати їх, наприклад, зліва. Однак на практиці це не дуже зручно, тому що вони починають рано чи пізно плутатися. Замість цього у 11-й версії ми зробили щось набагато більш складне, яке включає в себе алгоритмічну викладку виносок для досягнення естетичних і комунікаційних цілей.



Від рядків тексту
За допомогою системи Wolfram Mathematica і Language завжди можна було обробляти рядка символів. У 10-й версії ми зробили величезний крок вперед з введенням функції Interpreter: ми використовували свої досягнення у розумінні природної мови і застосували їх до інтерпретації рядків в сотнях різних областей. Ну, а в 11-ій версії ми пішли ще далі, забезпечуючи різноманітність функцій для масштабної обробки природної мови і тексту.

Для розбиття тексту на слова і пропозиції є функції TextWords і TextSentences (це дозволить уникнути конфузів зразок помилок в написанні «Св.Іоанн» (в оригіналі — “St. John's St.")). Також є функції начебто TextCases, які дозволяють автоматично вибирати різні класи природної мови, — такі, як країни, або дати, або навіть іменники або дієслова.

Досить цікаво розглядати слова як дані: наприклад, функція WordList дає списки різних видів слів, а WordDefinition — визначення.

Є також багатомовні можливості. Завдяки функції Alphabet доступні майже будь-які алфавіти; Transliterate транслитерирует між різними системами письма. І, нарешті, функція WordTranslation може перекладати слова на 200 мов — прекрасний матеріал для будь-яких лінгвістичних досліджень.



Сучасний підхід до програмування систем
Wolfram Language — мова надвисокого рівня. Однак у 11-ю версію ми додали купу можливостей для охоплення низькорівневих комп'ютерних систем. В першу чергу це функція ByteArray, яка може зберігати й обробляти «сирі» послідовності байтів. Також існують функції, які мають справу з мережами, — це PingTime і SocketConnect.

Також з'явився новий фреймворк для каналів публікації-підписки. Ви можете створити канал, а далі Wolfram Language або зовнішня система буде посилати йому дані, і ви зможете створити «приймач», який буде здійснювати якісь дії за допомогою Wolfram Language, коли дані надійдуть. Багато чого ще можна зробити з допомогою цієї установки: підключення до зовнішнім сервісів або устройствам, обробка e-mail або стороння перевірка автентичності, або навіть створення свого власного чату.

Ще одна новинка — вбудована криптографія. Це виключно символьний фреймворк, який дозволяє налаштувати майже будь-який протокол, використовуючи публичные або частные системи ключів.

Але як щодо взаємодії з веб? Тут також потужно проявляється символьний характер мови Wolfram Language. Так, наприклад, він дозволяє взаємодіяти з HTTPRequest і HTTPResponse символьними структурами. Є ще функція URLSubmit для роботи з символьно певними функціями обробника для зворотного зв'язку від асинхронного виконання URL. З'явилася навіть функція CookieFunction, що відповідає за символьну обробку cookie.

Можна займатися програмуванням систем практично на будь-якій мові, або навіть, наприклад, в командному рядку. Однак я знайшов, що робити це в Wolfram Language набагато дієвіше. Скажімо, ви досліджуєте продуктивність (див. пост на Хабре "Пошук помилок в хмарі з наукової точки зору: несподівана пригода CEO") комп'ютерної системи. Все, що ви робите, гарно зберігається в документ, куди ви можете додавати коментарі і т. д. І далі все, що ви робите, може бути негайно візуалізовано. Або ви можете застосовувати машинне навчання, або що завгодно ще. Хочете перевірити продуктивність мережі? Використовуйте функцію PingTime для створення списку затримок при передачі даних; потім зробіть гістограму, корелює з іншими даними.

Функція FileSystemMap, — ще одна новинка, — в змозі обробити файлову систему як набір вкладених списків (або асоціацій), а потім застосувати яку-небудь функцію над ним. Так, наприклад, ви можете взяти цілий каталог зображень і скористатися FileSystemMap, застосувавши функції обробки зображень відразу для всіх зображень.

Так, і ще одне: в 11-ю версію також включені (хоча раніше помічені як експериментальні), системи промислового рівня для пошуку текстових документів як локально, так і в хмарі.

Робота в інтернеті
Неймовірною особливістю мови Wolfram є те, що він працює не тільки на столі, але і в хмарі. А в 11-ю версію ми додали багато нових прикладних можливостей для роботи в Інтернеті.

Давайте почнемо з простого. Функція CloudDeploy[FormFunction[...]] дозволяє негайно створити додаток на основі форм безпосередньо в Інтернеті. Але тепер можна зробити форму ще більш складною. З'являється багато нових «розумних полів», які автоматично використовують природне розуміння мови для інтерпретації введених даних. Є також нові конструкції на зразок RepeatingElement і CompoundElement, які автоматично встановлюють поля для отримання даних для списків і асоціацій. Новий програмований лінгвістичний інтерфейс, який дозволяє визначити вашу власну граматику для того, щоб розширити розуміння природної мови, вже вбудованого в Wolfram Language.

Ті форми, які ви символьно позначаєте в Wolfram Language, можуть бути досить складними — на кілька сторінок з великою кількістю взаємозалежностей і форматування. Але в кінцевому рахунку вони залишаються все тими ж формами, для яких ви встановили свої вхідні дані, а потім відправляєте їх. У 11-й версії представлений новий фреймворк — AskFunction, який дозволяє створювати більш складні взаємодії: наприклад, діалогові вікна, в яких ви «інтерв'юєте» користувача, щоб отримати дані. В Wolfram Language весь процес визначається символьної структурою, яка потім за допомогою функції CloudDeploy відразу ж стає активною в Інтернеті.

Мета Wolfram Language — мати можливість легко робити складні речі в інтернеті. В 11-ю версію ми включили функцію FormPage (wolframalpha.com, а також GalleryView, яка дозволяє створювати список зображень в Wolfram Language, а потім розгортати його в інтернеті як «галерею» (як в demonstrations.wolfram.com).



Якщо ви хочете працювати на більш низькому рівні — для цього є функції URLDispatcher, GenerateHTTPResponse, які дозволяють точно визначити, як веб-запити будуть оброблятися в залежності від ваших хмарних налаштувань.

Крім того, у новій версії з'явилися такі функції, як CloudPublish і CloudShare, які дозволяють контролювати доступ до того, що ви помістили в хмару. Ще одна невелика, але важлива функція, — SourceLink, яка дозволяє автоматично зв'язувати, скажімо, графічне зображення, яке ви розміщуєте у хмарі, з документом (також в хмарі), в якому воно було створено. Я думаю, що це відмінний інструмент, з допомогою якого кожне зображення, яке ви бачите в документі, що містить посилання на того, хто його створив. Я наполягаю на тому, щоб усередині нашої компанії автоматизовані звіти писалися на Wolfram Language, і, звичайно, включали б в себе вихідні посилання, щоб я завжди міг отримати вихідні дані та аналізувати їх сам.

Хмарні дані
Ви могли скористатися Wolfram Data Drop вже в 10-ї версії, але тепер доступна розширена версія, яка дозволяє накопичувати дані в Wolfram Cloud. Повинен сказати, що я недооцінював можливості Wolfram Data Drop. Я думав (див. пост на Хабре "Wolfram Data Drop — новий сервіс Wolfram Research"), що він буде використовуватися в першу чергу для зберігання даних від датчиків і т. п.. І, дійсно, за цими напрямами продумано багато додатків. Однак для Data Drop можна знайти застосування виключно всередині Wolfram Language. Скажімо, у вас є веб-форма, яка працює на Wolfram Language. Ви можете обробляти кожен запит, а потім закинути результат у форматі Databin Wolfram Data Drop, щоб проаналізувати всі відразу.

Wolfram Data Drop створений переважно для накопичення тимчасових рядів даних. У 11-й версії з'явився й інший спосіб зберігання даних у хмарі — CloudExpression. Ви можете помістити будь-який вираз на Wolfram Language в хмару, і воно буде там зберігатися, причому кожну його частину можна витягати або настроювати за допомогою звичайних функцій (наприклад, Part або AppendTo). CloudExpression — це відмінний спосіб зберігання структурованих даних, в яких постійно змінюються деталі, але самі дані зберігаються в хмарі незмінними.

Те, що ви ставите в хмару, залишається незмінним. У 11-й версії з'явилася також функція LocalObject — локальний аналог функції CloudObject, яка забезпечує постійне локальне сховище на вашому комп'ютері, і LocalCache, яка використовується для кешування в локальному сховищі об'єктів.

Підключайтеся до будь-яких зовнішніх сервісів: Facebook, Twitter, Instagram, ArXiv, Reddit і багатьом іншим...
З допомогою Wolfram Language ми займаємося безліч даних, які поміщаємо безпосередньо в Базу знань; також ми шукаємо способи отримання даних — таких, як зовнішні API. У 11-й версії з'явилося багато нових зв'язків з Flickr, Reddit, MailChimp, SurveyMonkey, SeatGeek ArXiv і так далі.



Wolfram Language — потужний засіб для розгортання власних API. А в новій версії є ряд механізмів автентифікації, які підтримуються для API: наприклад, PermissionsKey для присвоєння AppID. CloudLoggingData надає максимально докладні дані про те, як забезпечується доступ до будь-якого API або будь-якому іншому хмарного об'єкту.

Той API, за допомогою якого ви здійснюєте дзвінок різних сервісів в Інтернеті, отримує дані, передані йому через заданий URL. У 11-й версії доступний тепер новий вид API, який працює через електронну пошту, а не через інтернет та URL-адреси. Функція MailReceiverFunction подібна APIFunction за винятком того, що спочатку вона визначає адресу електронної пошти, а потім будь-яка надіслана на цю адресу пошта передається в код функції MailReceiverFunction. MailReceiverFunction дозволяє розділяти різні частини поштових повідомлень і їх заголовків, а потім за допомогою Wolfram Language проводити автоматизацію обробки електронної пошти практично будь-якого рівня складності. І для людей на зразок мене, які отримують величезна кількість електронних листів як від людей, так і від автоматизованих систем, це досить зручно.

WolframScript
Ви можете отримати доступ до мови Wolfram через ноутбук, десктоп або хмара. Ви можете отримати доступ до нього за допомогою відстрочених задач в хмарі або через API або функцію MailReceiverFunction. Wolfram Language завжди можна було запустити з командного рядка, але в новій версії стало можливим робити це, використовуючи WolframScript.

Ідея WolframScript полягає в створенні дуже простого, але гнучкого інтерфейсу до Wolfram Language. WolframScript дозволяє запускати на комп'ютері Wolfram Engine, що, в свою чергу, дає можливість запускати код з файлу або безпосередньо з командного рядка. Це дозволяє отримувати зворотний зв'язок у будь-якому форматі — включаючи текст, зображення, звуки, PDF, CDF та ін Якщо ви маєте справу з Unix, то ви можете використовувати #!wolframscript для створення сценарію, який можна назвати автономним і який буде працювати з WolframScript.

Є і ще дещо. Ви можете налаштувати роботу WolframScript подібно FormFunction, щоб витягувати аргументи будь-якого визначеного вами типу (і інтерпретувати, коли це необхідно). І ви також можете використовувати WolframScript для виклику API, вже створеного вами в хмарі.

У нашій компанії ми часто використовуємо Wolfram Language, як частина великої та розподіленої системи. WolframScript забезпечує прямий спосіб розміщення компонент в Wolfram Language.



Нове в ядрі мови Wolfram Language
Я вже розповів про всі види нововведень, які розширюють і поглиблюють алгоритмічні можливості Mathematica і Wolfram Language. Але як щодо структури ядра самого Wolfram Language? Звичайно, ми прагнемо підтримувати сумісність (хоча це нескладно, враховуючи той факт, що ми і так весь час зосереджені на розробці). Але ми також хочемо поступово зміцнювати і шліфувати мову.

Процес еволюції природних мов передбачає в тому числі побудова нових слів з ідіом. По суті, ми робимо те ж саме в Wolfram Language. Ми вивчаємо, які «скупчення» повторних розрахунків частіше всього з'являються в коді Wolfram Language. Тоді ми придумуємо гарна назва для цього конкретного набору обчислень і створюємо нову функцію.

На початку роботи над системою Mathematica я вважав, що було б класно, якщо б існували функції, які дозволяють зробити що-то з допомогою ідіом. Я зрозумів, що якщо ідіома стискається до однієї функції, з назви якої ясно, для чого вона потрібна, то ми отримуємо код, який легше читати. А той факт, що ідіоми не доведеться реконструювати багато разів, виправдовує введення нової функції.

Протягом останніх кількох років у нашій компанії активно розвиваються два напрямки: Розвиток мови (Incremental Language Development — ILD), і Узгодженість & Повнота мови (Language Consistency & Completeness — LCC). Основна ідея ILD — введення функцій, еквівалентних ідіомам. Основна ідея LCC — переконатися, що і шаблонні вирази, одиниці вимірювань, символьні URL підтримуються скрізь, де це має сенс.

Так, наприклад, стандартне додаток ILD в 11-ій версії — функція MinMax, яка повертає мінімальне і максимальне значення цього списку (дивно, від скількох складнощів при використанні Map вона вберігає). Стандартне додаток LCC — підтримка поиска по шаблону в асоціаціях.

У 11-й версії з'явилося багато доповнень до основного мові. Функції начебто Cases були поширені і з'явилися SequenceCases — пошук послідовностей замість окремих елементів у списку. Є ще функція SequenceFoldList, яка схожа на FoldList за винятком того, що може повернутися до послідовності елементів будь-якої довжини. Є ще подібна функція FoldPairList, яка узагальнює FoldList і повертає на кожному кроці результат, який відрізняється від досягнутого раніше. Це може здатися абстрактним, але це дуже корисна операція в тому випадку, коли ви хочете підтримувати окреме внутрішній стан, продовжуючи приймати дані.

Ще одна новинка, яка може на перший погляд здатися дивною, — функція Nothing. Незважаючи на свою назву, Nothing дещо робить: всякий раз, коли вона з'являється в списку, то негайно видаляється. Це означає, що, якщо ви хочете позбутися від елемента списку, ви повинні замінити його на Nothing.

Завдяки деяких нововведень користуватися 11-й версією стало зручніше. Наприклад, для функції First є тепер другий аргумент, який говорить, що робити в тому випадку, якщо немає першого елемента, і позбавляє від необхідності включати в цьому випадку If. Функція UpTo призначена для відображення певного числа об'єктів — ви можете задати: Take[список, UpTo[4]], щоб отримати до 4-х елементів список, (якщо їх менше — то стільки, скільки буде). UpTo багато де підтримується, і це сильно спрощує код.

Echo — ще одна зручна функція. Коли ви намагаєтеся простежити, що відбувається всередині шматка коду, вам може знадобитися надрукувати деякий проміжний результат. Echo — це функція, яка друкує, а потім повертає надруковане, так що ви можете використовувати її у вашому коді, не змінюючи того, що робить цей код.

Важко повірити, що можна додати ще щось до цього списку, однак це ще не все. Subdivide — функція, аналогічна Range за винятком того, що підрозділяє діапазон на рівні частини. TakeLargest і пов'язані з нею функції узагальнюють функції Max і подібні, щоб брати не тільки найбільші, а n найбільших елементів списку.

Є ще функція Groupings, структуру якої я продумував багато років: вона генерує всі можливі дерева, що формуються бінарними або іншими сумматорами («Які числа ви можете отримати, розставляючи в списку одиниць усіма можливими способами знаки додавання Plus і множення Times?»).

Функція Table зручна тим, що тепер ви можете задати Table[х, n], а не Table[х, {n}]. А взагалі є ще безліч речей, які роблять ядро 11-ї версії Wolfram Language більш елегантним і зручним у використанні.

І ще багато нового...
Це був довгий пост. Однак я навіть близько не описав все те нове, що з'явилося в 11-ій версії. В інтернеті більше інформації. Перевірте сторінку Нове в системі Wolfram Language 11, або переглянути інформацію для користувачів або короткий опис нових можливостей. Дивіться також список нових функцій починаючи з версії 10.4 і до 11.0.

Але найголовніше — починайте користуватися новою версією! Якщо ви хочете швидко (і безкоштовно) взаємодії з нею, запустіть її через Wolfram Open Cloud. Або просто почніть користуватися системою Mathematica 11 або 11-й версією будь-яких інших продуктів на основі Wolfram Language.

Вже деякий час я користуюся тестовими версіями, і 10-я версія для мене виглядає і відчувається як дуже „старомодна“ — мені не вистачає цих чудових нових функцій інтерфейсу, нових функціональних можливостей і маленьких зручностей. Я дуже задоволений тим, якою вийшла 11-я версія. Це ще один великий крок на нашому 30-річному шляху розвитку системи Wolfram Mathematica і Language. І я радий, що різні люди по всьому світу зможуть вперше робити дивовижні речі з Mathematica 11 та іншими продуктами 11-ї версії Wolfram Language.

З питань про технології Wolfram пишіть на info-russia@wolfram.com
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.