Google выпустил открытый фреймворк для парсинга естественого языка

Наука и мир
Понимание живого человеческого языка машиной, распознавание контекстов, объектов, субъектов и фактов отношений между ними — одна из главнейших задач современной науки и одна из главных перспектив практического применения машинного обучения. И в этой области все двигается довольно быстро вперед (впрочем, как и с сопредельными областями ML).



Вчера Google выкатила целый открытый фреймворк на базе своей же открытой ML-библиотеки TensorFlow для парсинга естественного языка — SyntaxNet, доступный любому и каждому. В задачи системы, построенной с применением глубоких нейронных сетей, входит понять, о чем идет речь в предложении и максимально, насколько это возможно, без фактического знания окружающего мира, а располагая лишь текстовой информацией, снять все неоднозначности. То есть, вот это вот «казнить нельзя помиловать».

Фреймворк поставляется с уже натренированной моделью с благородным именем Parsey McParseface, работающей пока только с английским языком. В Google заявляют, что на данный момент это самый точный парсер естественного языка в мире, способный дать точность распознавания на уровне 96-97%, что уже сопоставимо с обычным человеком, читающим текст. Правда, для этого обрабатываемый материал должен быть правильно написанным и оформленным. Комменты из интернета со всеми вытекающими жаргонизмами, пофигистичным подходом к структуре предложений и пунктуации (да еще и с кучей ошибок) будут парситься с куда более низкой точностю (но это, конечно, просто дело времени и техники).

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

Преподаватель вуза оказался системой ИИ IBM Watson

Наука и мир
Впечатляющая новость из области разработок ИИ и просто красивый и показательный развод:

Преподаватель Джилл Уотсон около пяти месяцев помогала студентам Технологического института Джорджии в работе над проектами по дизайну программ. Нюанс в том, что Джилл — это робот, система искусственного интеллекта, работающая на базе IBM Watson, но никто из студентов, обсуждая работы с преподавателем, за все это время ничего не заподозрил. А кто-то из студентов до этого открытия даже собирался назвать ее «выдающимся педагогом». Это были студенты из класса по изучению искусственного интеллекта. Историю Джилл рассказывает The Wall Street Journal.

С января этого года «Джилл», как ассистирующий преподаватель, вместе с еще 9 преподавателями-людьми помогала около 300 студентам разрабатывать программы, которые помогают компьютерам решать определенного вида проблемы, к примеру – как подобрать картинку, чтобы последовательность картинок была логичной.

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

«Она должна была напоминать нам о датах дедлайна и с помощью вопросов подогревать обсуждения работ. Это было как обычный разговор с обычным человеком», – рассказала изданию студентка вуза Дженнифер Гевин.

Другой студент, Шрейяс Видьярти, представлял себе Джилл как дружелюбную белую женщину 20-ти с чем-то лет, скорее всего, работающую над докторской. «Меня как громом поразило», – делится впечатлениями студент.

Дошло до того, что робота в мисс Уотсон не признал даже студент Баррик Рид, который два года работал на IBM, создав некоторые из программ, с помощью которых действует сам робот. Но намека в имени «Уотсон» он не разглядел. «Я должен был догадаться, но нет», – говорит он.

Зачем Джилл включили в программу обучения? Проблема в том, что студенты задают слишком много вопросов – порядка 10 000 сообщений в семестр, объясняет Ашок Гоэл, профессор компьютерных наук Технологического института Джорджии. Преподаватели-люди с валом вопросов не всегда справляются. Именно Ашок решил ввести робота в обучающую программу для своего класса по изучению искусственного интеллекта.

Над роботом работала вузовская команда, обучая его отвечать на вопросы, учитывая предыдущие ответы. Не стоит путать Джилл с обычными чатботами. Если большинство чатботов – новички, то Джилл – эксперт, она не отвечает на вопрос, пока не достигнет 67% уверенности в ответе, утверждает Гоэл. По его словам, Джилл еще далеко до Авы из Ex Machina, но это такой же волнующий опыт.

По оценкам профессора, всего за год Джилл обучится настолько, что сможет отвечать на 40% вопросов от студентов, оставляя за людьми право заниматься более серьезными техническими или философскими проблемами.

Источник.

Частотный словарь mc.hertzbeat.ru

Техника и IT


Для собственных небольших исследований сделал частотный словарь из базы статей агрегатора mc.hertzbeat.ru. Было обработано около 600 МБ очищенного текста (~130 тысяч новостных статей), в основном — это срез избранных и самых популярных статей российской прессы (с уклоном в IT-издания) за последние два года. Общий размер словаря — 840 тысяч слов.

Оказалось, что по «популярности» в прессе Android (10 692 упоминания) превосходит iOS (4 664 упоминания) и iPhone (9 431 упоминание), а Google (18 045) заборола Apple (17 080), но всех, конечно же, победил Путин (20 878 упоминаний). При этом Обама (3 783) конкурирует с Песковым (3730), а Навальный (3 443 упоминания) затмил wi-fi (3 109) и ИГИЛ (1037).

Подумалось, что такой частотный словарь (своего рода свежий срез СМИ) может кому-то пригодиться, поэтому наслаждайтесь:

В несжатом виде (~10 МБ)
В сжатом виде (~3 МБ)
То же самое на github-е, плюс там наверняка будут появляться обновления…

Termux — почти полноценная консоль Linux на Android-устройствах



Приложение Termux — настоящая находка для сисадмина или разработчика, привыкшего к окружению Linux, имеющего свежее Android-устройство и компактную беспроводную bluetooth-клавиатуру. Теперь можно устроить рай в шалаше, с родной средой, ssh, apt-get-ом, Grep-ом по SMS-кам (и контактам), Emacs-ом, Vim-ом, Python-ом, Perl-ом, Node.js, Ruby, полноценным башем, fish-ем или zsh, и прочей тяжелой артиллерией без «большого компьютера».



Очень и очень круто, телефоны уже умеют практически 100% того, что умеют десктопы — с ростом производительности полным ходом подтягивается и десктопный софт. Вообще, не перестаю удивляться, в какое интересное время живем! Ждем Termux на умных часах и в умных очках (шутка).

Взлом смартфонов несылшимыми человеком голосовыми командами

Мобильные устройства
Исследователи из университетов Беркли и Джорджтауна (США) разработали звуковые команды для Siri и Google Now, нераспознаваемые для человеческого слуха. Эти команды звучат как белый шум с примесями человеческого голоса и могут использоваться для взлома и заражения телефонов, сообщает Popular Science.

Вредоносный шум для устройств под Android и iOS различается. Услышав команду, браузер загружает определенную страницу или вредоносную программу без ведома владельца устройства. В ходе экспериментов устройства распознали 90% таких команд. Эти сигналы, незаметные для человеческого слуха, можно передавать даже через радиопередачи. — Apparat.cc

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

Инструменты для пыток

Культура


Базовые пыточные принадлежности:

Аддресс
Аккустика
Алладин
Андронный коллайдер
Анимэ
Асвальт
Безплатно
Болелемение
В крации
В купе
Вкурсе
Броется
Вообщем
Вротарь
Всмысле
Впринцепи
Врятле
Выйграл
Делема
Дёшего
Дибил
Едит
Завтро
Зделать
Извени
Ихний
Какуето
Касяк
Канечно
Конешно
Касатка
Киллограм
Координально
Лудше
Низнаю
Ньюанс
Однёрка
Пасспорт
Пачему
Прасти
Пожалуйсто
Помойму
Правельно
Пробывать
Ризетка
Симпотичный
Скаченный
Сосиська
Спосибо
Траффик
Тубаретка
Удолить

Уф, все, это уже через чур!

Бум нейронок

Общество
История изобилует случаями, когда перспективная и крутая технология из научно-фантастических романов грозилась ворваться в быт, уже вот-вот практически врывалась, а после некоторого периода эйфории все понимали, что шумиха поднята рановато, и технология пока представляет собой лишь непрактичный, но хорошо разрекламированный proof-of-concept, облепленный компаниями и людьми, стремящимися на этой теме нажиться.

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



Вспомните электрокары, «бум доткомов», 3d-кино. Примеров на самом деле очень много.

И вот главные вопросы поста, касательно этой мысли — в какой фазе находятся нейронные сети, создающие сейчас хайп на фоне AlphaGo (но не могущие распознать наличие человека на определенных фотографиях)? И на какой стадии сейчас находятся человекообразные роботы (с учетом, что Google вроде как купила Boston Dynamics, но вроде как уже продает за ненадобностью)?

Вся суть пакетного менеджера NPM и высокой культуры модульности NodeJS

Техника и IT
Как гласит недавний отчет Stack Overflow (а также отчеты GitHub), самый популярный язык программирования в мире на данный момент — JavaScript. Отчасти язык популярен своей небывалой распространенностью в браузерах, отчастью он обязан своей популярностью и серверной платформе NodeJS, позволяющей писать программы, выполняемые не только в браузерах клиентских машин, но и на серверах.

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



Такая модульность стала своего рода традицией экосистемы NPM. Модули стали писать по случаю и без. На каждый чих — свой модуль, и вряд ли еще остались слова английского (и не только) языка, не занятые под название модуля с модной припиской “JS” на конце.

И вот эта страсть к высокодробной модульности и вышла NPM и его обитателям боком. На неделе разгорелся небольшой скандал на почве обрушения части NPM из-за смешного инцидента. Некий Азер Кочулу (Azer Koçulu), автор более 250 модулей к NodeJS, являвшийся владельцем модуля под названием kik, получил письмо от сотрудников мессенджера Kik, попросившего его уступить им «кошерное» название в NPM. Азер отказался пойти навстречу, и сотрудники мессенджера Kik отправили аналогичное письмо руководству платформы NPM. NPM решила отнять у Азера красивое имя для модуля и отдать его мессенджеру Kik. Тут Азер, по понятным причинам, негодуя от такой несправедливости, выпилил весь свой зоопарк модулей с NPM (напомню, это более 250 наименований)…

И тут главный прикол всего цирка: оказалось, что от его модулей зависит куча крупных проектов, в числе которых такие монстры, как Фейсбуковский React, JavaScript-транскомпилятор Babel и, по цепочке, огромное количество других модулей и программ. А так как Азер отозвал свои поделия, то вся эта инфраструктура рухнула как карточный домик. И что еще более смешно в этой непростой ситуации, модуль под названием leftpad, от которого зависило множество других крупных проектов, состоял из… 11 строчек кода! И ладно бы в этих 11 строках кода были бы заключена вселенская мудрость или хотя бы результат большой научной работы, сконцентрированный в лаконичную формулировку (E = mc²). Нет, модуль делал довольно тупую и банальную вещь — добавлял нули или пробелы в левой части заданной строки или числа!

module.exports = leftpad;
function leftpad (str, len, ch) {
  str = String(str);
  var i = -1;
  if (!ch && ch !== 0) ch = ' ';
  len = len - str.length;
  while (++i < len) {
    str = ch + str;
  }
  return str;
}


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


'{0:06d}'.format(6)


То есть, крупнейшие и сложнейшие проекты включили в себя модуль из десятка строк тупого кода, который можно было бы оформить буквально за две минуты самостоятельно (без создания лишних зависимостей). И в среде NPM такое на каждом шагу — это часть культуры! Прекрасным примером этому может послужить небольшое исследование Дэвида Хейни (David Haney), который прошерстил NPM на предмет наличия подобных «модулей».



Например, оказалось, что есть такой замечательный модуль, как isArray. Этот модуль скачало 880 000 человек за один день, кроме того, он был загружен 18 миллионов раз только в одном феврале этого года! От этого модуля напрямую зависят 72 пакета в NPM. И что же это за чудесный модуль такой?


return toString.call(arr) == '[object Array]';


А модуль этот состоит из одной. ОДНОЙ! Строчки дурацкого кода, приведенного выше. И призван проверять — не массив ли перед нами…

Есть еще один чудесный модуль с говорящим названием is-positive-integer (GitHub), до смешного банальный — он проверяет, положительное ли целое число ему передано. Состоит из целых четырех строк кода (!!!) и (внимание!) требует три зависимости для своей работы! То есть требовал, недавно автор «отрефакторил» свой код, и теперь его важнейший модуль не требует зависимостей вообще (вот он — подвиг программиста)!



А вот еще один пример, приведенный в комментариях на Хабре — очередной модуль «для проверки типа» — isnumber. Одна тупая строчка:

return !isNaN(parseFloat(n)) && isFinite(n);


И вот такая вот развесистая система приводит к тому, что какой-нибудь Babel включает в себя 41 000 файлов (и это свежеустановленный пакет!), а также генерирует чистый шаблонный проект (jspm/npm) с… более чем 28 000 файлов! Эта, вроде бы неплохая изначально идея компактных модулей, была доведена до полнейшего, абсолютного, феерического абсурда. Мало того, что с каждой такой дурацкой зависимостью вы добавляете еще одну точку отказа в своем коде (которую нельзя потом оперативно отладить), так еще и автоматически полагаетесь на качество кода горе-программистов (типа упомянутого выше, что проверял положительность целого числа тремя зависимостями).



P.S. Кстати, теперь уже печально известный модуль leftpad, удаленный Азером, в итоге восстановили без его одобрения, в качестве экстренной меры, чтобы не «поломать систему».

Double Commander — лучший двухпанельный файл-менеджер под Linux

Техника и IT
Самый замечательный в плане функционала, а также наиболее симпатичный и удобный в плане интерфейса двухпанельный файловый менеджер в Linux на данный момент — это Double Commander. Я перепробовал много всяких поделок, 99% из которых не то чтобы далеки от идеала, а даже близко к нему не приближаются. То это уродливый кривой монстр с диким интерфейсом, могущий все-все-все, и тянущий с собой миллион зависимостей KDE, то это унылая программа, в которой ничего нет, и которая отличается от банального примитивного однооконного менеджера только своей двухпанельностью (но этого явно недостаточно).



В общем, до того, как я наткнулся на Double Commander (Википедия), для меня в природе не существовало хорошего аналога для каноничного™ Total Commander'а — а он является ярким образчиком (почти) идеального двухпанельного менеджера, который может кучу всего, имеет лаконичный интерфейс, а также быстр и компактен.

Double Commander же максимально приблизился к этому идеалу. Он даже разрабатывается в той же среде — Free Pascal (в IDE Lazarus, что является прямой наследницей старого доброго Delphi), что интересно, в том же ФриПаскале скомпилирована 64-разрядная редакция Total Commander'а. Создан Александром Кобловым (и сообществом — это открытое ПО) в начале 2008 года. Продукт пока находится в активной стадии разработки и не добрался до первого релиза, на данный момент крайняя версия — 0.7.

Однако уже сейчас он прекрасно работает и отлично выполняет все свои функции, и без него уже никак не обойтись — DC стал настоящим инструментом, который активно применяется ежедневно. Я не буду перечислять то, что он умеет — привыкшие к Total Commander'у в Windows и затем перешедшие на Linux, лишившись любимого инструмента, оценят и все поймут, опробовав Double Commander в деле. К слову, о Windows — DC есть и под эту платформу (а также под Mac OS X и FreeBSD).

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

Увы, пока Double Commander сложно найти в репозиториях популярных дистрибутивов, поэтому придется подключать PPA и прочие сторонние репозитории (в 23-й Федоре, например, Коммандер нашелся в «русском репозитории Fedora»). Официальный сайт Double Commander'а находится по данной ссылке, страница загрузки.

Как включить типографскую раскладку Ильи Бирмана в Gnome3, и в любом другом окружении рабочего стола Linux?

Техника и IT
Если у вас в качестве Desktop Environment используется Gnome2 или аналог (а также если это перелицованный Gnome3 в форме какого-нибудь Cinnamon), то включить типографскую раскладку Бирмана не проблема — я уже довольно детально описывал способ ранее.



Однако, если у вас Gnome3, или другая среда рабочего стола, где типографской раскладки «из коробки» попросту нет, то задача может оказаться слегка нетривиальной. Типографская раскладка в работе (и вообще) пригождается довольно часто, и перейдя на Fedora 23, где по умолчанию включен Gnome3, пришлось немного повозиться. С результатами возни делюсь с читателем:

Раскладки, как таковые, не привязаны к конкретной DE — интерпретацией ввода с клавиатуры занимается подсистема xkb, встроенная в оконную систему X Window System (X11, или те самые «иксы»). И все раскладки, банально, лежат в директории X11, в виде текстовых конфигов. Типографская раскладка в 23-й Федоре, например, обнаружилась по адресу /usr/share/X11/xkb/symbols/typo, в других дистрибутивах она может располагаться аналогичным образом, но в подкаталогах /etc/X11/xkb/.... Заголовок обнаруженного конфига гласит:


// Typographic Keyboard
// Sergei Stolyarov <sergei@regolit.com>

// Initial contribution by Alexey Ten <alexeyten+deb@gmail.com>
// Additional contribution and code cleanup by Artur Dryomov <artur.dryomov@gmail.com>

// Mainly based on the layout proposed by Ilya Birman
// http://ilyabirman.ru/projects/typography-layout/


Итак, раскладка найдена, теперь ее необходимо подключить. Как оказалось, делается это довольно просто, командой в терминале:


setxkbmap -option "lv3:ralt_switch,misc:typo"


Синтаксис команды, в принципе, прост: программа setxkbmap с ключом -option меняет лишь дополнительные настройки клавиатуры не затрагивая остальное, а именно — в данном случае устанавливает правый альт (ralt_switch) в качестве модификатора для клавиш третьего уровня (lv3), а также подключает типографскую клавиатуру в качестве своеобразной «маски», добавляющей третий слой поверх любой вашей раскладки (будь то английская, русская или таджикская).

Опции устанавливаются на время сессии (или до того момента, как Gnome не решит их переписать своими), поэтому после перезагрузки или перелогина установленные настройки пропадут. И именно поэтому можно включить вышеупомянутую строку в какой-нибудь $HOME/.bashrc, чтобы опция устанавливалась при старте системы, но лучше так не делать.

Самым правильным вариантом будет воспользоваться механизмом инициализации X11, и поместить такой текст:


-option "lv3:ralt_switch,misc:typo"


… в текстовый файл .Xkbmap, расположенный прямо в домашней директории пользователя ($HOME/.Xkbmap). Скрипты инициализации (конкретнее — xinitrc-common) найдут его там при старте X11 и применят лежащие в нем настройки.

К слову, вышеупомянутый конфиг typo можно скопировать, обозвать его, например, mytypo и изменить по своему вкусу (изменения раскладки ограничены лишь фантазией), подключив свой вариант, формат объявлений там весьма простой:


key <код клавиши> {[ NoSymbol, NoSymbol, результат применения модификатора Level3 (обычно AltGr), аналогично для Shift+Level3  ]};