пятница, 13 апреля 2018 г.

суббота, 4 января 2014 г.

Наконец-то я хорошо вник в Нейросети.

Я долгое время игнорировал нейронные сети как раздел машинного обучения. Причина такого отношения в том, что есть великое множество псевдонаучных измышлений на тему нейронных сетей и мистификаций. Я рассуждал так: "если даже такие псевдоученые как **** умничают на тему нейронных сетей, можно представить какой бардак творится в этом научном направлении"... В результате, когда-то я принял решение не заниматься чушью, а отложить детальное изучение темы до тех пор, когда я дорасту до того, чтобы осилить первоисточники. То есть обратиться к исходным научным трудам и практическим рекомендациям от самих создателей современной теории нейросетей и лучших примеров их применения. Однажды я понял что дорос.

31-го декабря у меня был свой праздник и рубеж - я закончил ряд эксперементов с нейронными сетями. К этому моменту я вполне прилично изучил современное стостояние дел в отношении нейросетей. Сделал несколько прототипов и пару бибилиотек для практческого использования как простых нейросеток, так и весьма прилично освоил сети с "глубоким" обучением и т.п. Теперь это мой инструмент надолго.

У меня появились наработки для нейронных сетей, которые можно эффективно использовать в продакшине, подобрал и частично написал сам реализации на python, lisp, java, octave, C. При необходимости можно использовать C#.

Еще один кусочек счастья.


**** - Намеренно не называю имени, просто этот человек в ВУЗе где я учился является кем-то вроде "профессора и доктора наук", проректор, хотя на самом деле весьма недалекая личность в общем, один из примеров недостойного состояния науки и высшей школы в Украине, популист и безграмотный шарлатан.

понедельник, 28 октября 2013 г.

Спасибо Вам за компьютеры, unix, и языки программирования!

Читая недавно письмо молодому программисту от Гвидо Ван Россума, еще раз задумался, на сколько же это круто и классно, что Вы, уважаемые ученые, и Вы, блистательные инженеры, создали компьютеры.

вторник, 22 октября 2013 г.

Модель для расчета интересности, популярности или сходных величин.

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

Итак, есть задача подсчитать популярность или важность чего либо. Например фильма, события, персоны. Для чего? Отвечу кратко. Варианты могут быть такие:
  • Показать правильное количество звездочек 
  • Сделать сортировку по принципу интересности и популярности
  • Добавить данные в индекс поисковой системы, для того чтобы повысить релевантность (например Elastic Search)
  • и тп.

четверг, 17 октября 2013 г.

Ubuntu 13.10 не переключается раскладка клавиатуры?

[UPD: BUG FIXED]

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

Вот временная заплатка: 
  • Удаляем indicator-keyboard вообще (к сожалению индикатора пока не будет видно)
  • Добавляем в "startup applications" следующую строку: "setxkbmap -layout us,ru -option grp:ctrl_shift_toggle,compose:menu"
  • Можно так же добавить опцию, чтобы загорался индикатор капс grp_led:caps 

суббота, 7 сентября 2013 г.

Давайте использовать английский в работе.

Логично разговаривать на родном языке на работе. И комфортно. Но например в IT сфере может оказаться очень не профессиональным вести дела не на английском. Skype чаты. Митинги. Переписка. Доклады. Всё должно быть в основном на английском. Потому что рядом много людей, которые не знают вашего родного. Они в какой-то степени готовы терпеть неудобства. Но это определенно снижает эффективность.

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

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

Вчера я общался с человеком, профессионалом высокого класса, который покидает украинскую компанию и уезжает в Америку. Одна из основных причин - в офисе реально сложно работать и участвовать в совещаниях. Переписка зачастую непонятна. Страдают и работа и уровень комфорта. Ясное дело, что согласно внутренним соглашениям компании все должно быть на английском... По факту 90% коммуникаций сводится к русскому и зачастую неформальному языку. Немцу, Японцу, Американцу и Шведу в таких условиях работается очень сложно. Они боятся пропустить важное. И очень боятся быть непонятыми. Не говоря уже о простых бытовых ситуациях.

Учить наши языки пробуют почти все, кто приезжает в Украину работать из-за границы. Это долго и сложно. Русский, определенно сложнее английского. И это не входит в сферу их профессиональных обязанностей. А в наши обязанности это входит. Иначе, для чего мы приглашаем хороших профессионалов из-за границы работать с нами или зачем создаем распределенные команды?

пятница, 16 августа 2013 г.

Для моих друзей, кто учится программировать. Тренируемся писать агента artificial intelligence для игры в реверси.

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

Это может быть итересно любому начинающему программисту или более опытному, но недавно заинтересовавшемуся исскуственным интеллектом, алгоритмами, структурами данных и, местами, с умением решать проблеммы (так я перевел Problem Solving Skills).

Я набросал простенький сервер с которым можно сыграть по XML-RPC используя любимый язык программирования (python, lisp, C, C#, Java - кому что ближе), и некоторое количество людей уже пишет (или написали) свои решения.
У меня так же в круге знакомых есть ребята, изучающие программирование и computer science, которым хорошо бы потренироваться в таких вещах... В общем, публикую.

воскресенье, 28 июля 2013 г.

Ubuntu 13.04 x64. Setup software notes. Skype. Java. Chrome. Utils.

Эта статья о том, как быстро мне и моим коллегам настроить Ubuntu 13.04 x64 с Java (JDK7 from Oracle), Skype, Chrome, а так же разнообразные утититы и программы, нужные разработчику.
Я устал каждый раз перерывать отдельно сохраненные ссылки на тему как поставить неглючный Skype в убунту, и вручную вбивать весь сценарий установки JDK7 с заходами на сайт Oracle.
Сценарии, приведенные в этом посте, сразу будут работать на убунте, и это мне упрощает жизнь.

вторник, 14 мая 2013 г.

Twitter is a great data source for Machine Learning experiments - quick recipe.

Why did I need twitter's live stream?

I'm working on several machine learning algorithms. Research and experimenting in this area require some data to run algorithms on. Previously, I had local corpuses, twitter dumps and a bit of data I captured from users (grammarly users). Not bad data sources, but the problem is that them are static. Once taken snapshot.
My further work did require dynamic data, a live stream of messages. There are several options to get them. Twitter is a good one. So, I went through the twitter API documentation and obtained all the streamed data I needed. Here is a quick overview how to use them in python.

вторник, 2 апреля 2013 г.

Побывал в офисе Viewdle.

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

Вот вчера побывал в офисе компании Viewdle. И дело не в том, что я там много плюшек увидел каких-то. Просто у меня была возможность пообщаться с некоторыми интересными людьми в рамках интервью и вдохнуть правильный воздух в свои лёгкие. Мне просто очень приятно.

суббота, 23 марта 2013 г.

Names for clusters...


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

среда, 13 марта 2013 г.

Курс Advanced Python. Взгляд со стороны слушателя.

Итак, я часто использую питон.  Много применяю и на windows и на ubuntu, и, одно время на MacOS. Я согласен с тем, что питон несовершенен. По большому счету, когда говорят что он просто плохой, медленный, неоптимизированный, и т.п. - это в определенной степени правда. 
Но я его люблю, потому что он очень человечный, удобный, и не смотря на явные слабые места - очень мощный и эффективный, широко применяемый в продакшне. И еще больше люблю Python комьюнити и энтузиастов. Для меня так же важно то, что он стандартный почти для всех юниксов. 
Поэтому пытаюсь вникать в его устройство и правильно применять. Я много изучал Python самостоятельно, достиг результата. Могу эффективно использовать сильные стороны, и обойти слабые. Но нет предла совершенству и Поэтому я решил пройти курс Advanced Python от Андрея Светлова. И прошел его. Этот пост - краткий отчет о прошедшем курсе.
Так же всем, кто интересуется тематикой Python, очень рекомендую блог Андрея


Курс проходил впервые, и, обошлось конечно, не без подводных камней. Но учитывая открытость Андрея к диалогу и то, что он прислушивался к пожеланиям аудитории, я бы сказал, что всё прошло вполне замечательно. Да, еще пару слов об авторе. Андрей Светлов разработчик с отличным опытом и просто хороший человек, некоторое время назад стал Python Core Developer и с тех пор принисмает активное участие в развитии языка и всячески способствует популяризации Python.

четверг, 7 марта 2013 г.

Sniffing traffic - памятка мне.

Для разработки и отладки нужно иметь возможность просматривать содержимое отправляемых и получаемых по сети пакетов. Будь это wifi, ethernet или еще какой-нибудь физический уровень, в большинстве случаев уже есть решения для мониторинга того, что делается на уровне транспорта. Или же выше транспорта. Получить например наглядное представление Post Data и их контент отобразить как XML, JSON ну или что то подобное.


Но я устал забывать конфигурацию и синтаксис используемых утилит. В общем, конспектирую, чтобы не забыть снова.

воскресенье, 3 марта 2013 г.

Advanced Python с Андреем Светловым

Скоро заканчивается недавно закончилась серия из 12 встреч, посвященных расширенному изучению Python, организованных одним из разработчиков ядра языка (Python Core Developer), Андреем Светловым. Уже через неделю будем делать разбор полетов, я постараюсь написать готовлю подробный отчет о том, что я успел узнать и попробовать за это время. На текущий момент я начал работать над причесыванием полученной информации, и как всегда, строю mind-map (по-русски вроде называется "когнитивная карта", но не уверен)

Вот, собственно, набросок. Через неделю будет дополненный вариант. Вот окончательный вариант:

суббота, 2 марта 2013 г.

5-я встреча AI клуба. Или мотивы Стругацких в наши дни )

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

вторник, 26 февраля 2013 г.

Очень приятно, что у яндекса есть публичное API для перевода.


Искренне радуюсь, когда такие вещи публичны и общедоступны. В 2009 году у меня было несколько программок, в которых я использовал доступный тогда Google translate API. Однако корпорация добра вскоре закрыла свой сервис, и мои программки сразу же стали бесполезны, ибо они небыли платными и зависеть от платного сервиса не могли.

Сегодня нас радует Яндекс. Спасибо, ребята за очень полезный открытый API. Не закрывайте его пожалуйста!

суббота, 9 февраля 2013 г.

Книги. По седам последних месяцев.

Итак, в течении нескольких месяцев я неплохо поработал с литературой. В этом посте я перечислю книги, с которыми довелось провести приятные часы. Как ни странно, но среди них будут и те, которые я упоминал в августе. Они оказались достаточно хороши, чтобы вернуться к ним. Есть конечно и новые. В общем, вперед.

пятница, 11 января 2013 г.

Quick recipe how to launch simple daemonized web service using python

Writing linux daemon in C or C++  could be done easily. It is a native daemon creating approach for unix. What can we do if we need to use a python script like a daemon? There are several solutions how to daemonize your python code. In this post I just want to mention a simple and convenient pattern which I usually use. It is based on the linux deamon template written by Sander Marechal (2.X 3.X). This is a pretty good code, I integrated it into several prototypes and they work perfectly. It contains simple to use Daemon class which python daemon developer should inherit.

вторник, 8 января 2013 г.

Supervised Learning Model for lemmatization and thoughts about compression.

The lemmatizer is dependent on training data quality. It can  be generally used for any natural language except the Porter Stemmer part (current naive implementation supports Russian language only).

Code and functionality description:

The model is represented by LemmatizerModel java class.
Entry point and consuming code stored in Main.java
TrainDataParser ‘s purpose is to open and parse training data.

MODEL DESIGN

In order to make it fast to search through the trained data and to store the model in a packed data structure, the model is represented as a prefix tree, where word forms are represented by paths from the root, each node contains the value (Character) and two kinds of children nodes - the next characters and one special which contains a lemmas list for current tree layer.


In this picture you can see an example of the prefix tree with lemmas stored

среда, 26 декабря 2012 г.

Умничание вокруг лемматизации

Не то что бы я сильный любитель natural language processing, но так получилось что в исскуственном интеллекте этот раздел занимает очень уважаемую позицию. Да и в Grammarly нахватался кое-чего. Так что теперь это для меня родное, и следовательно, продолжаем разговор.

Итак, лемматизация. Начнем с того, почему это понадобилось. Как я уже писал ранее, я сталкивался с задачей классификации текстов. Есть много подходов, и немало эффективных техник основанно на подсчете частот вхождения слов. В общем речь о частотах и модели bag of words. И вот тут все хорошо в английском. Но неважно в русском или немецком. Потому как в этих языках очень большая вариативность словарных форм. Ответ простой. Привести все слова к  леммам. Однако все опять таки просто для английского, но для русского и немецкого правила намного разнообразнее и сложнее. 

пятница, 7 декабря 2012 г.

Встреча AI клуба. Тема: Natural Language Processing.

Вчера при поддержке Grammarly состоялась очередная встреча AI клуба. Я очень люблю эти встечи, огромное спасибо организаторам, плюс  оба спикера приятно удивили.

Первый докладчик Jordi Carrera, в некотором роде мой наставник в плане освоения техник в Natural Language Processing, и вообще приятный человек, рассказывал об определенноного рода кластеризации для задач категоризации текстов. Зная насколько действительно сложно из корпусов выделить признаки отдельных категорий и произвести кластеризацию я был впечатлен простотой и эффективностью подхода примененного Джорди.
Для непосвещенных поясню. Обычно для решения задачи категоризации / классификации текстов (как тут) применяется машинное обучение с учителем. То есть для того чтобы алгоритм работал, ему нужно "скормить" некоторое количество уже категоризированных (человеком) данных, чтобы он научился узнавать жанры(категории). Так работает и Naive Bayes Classifier и Support Vector Machine Classifier. Ключевым тут является то, что требуется иметь уже классифицированные корпуса для обучения. Что не всегда возможно, иногда дорого, а так же вообще более примитивная техника исскуственного интеллекта. Работа Джорди, по сути позволяет не только распознавать класс докуметов из большого набора таковых, но и ко всему прочему именно из самих этих докуметнов узнать, какие категории там представлены, то есть выдилить эти самые группы. В математике, машинном обучении и исск. интеллекте это называется словом "кластеризация".
См. Презентация.


Второй докладчик, Митя Сичинава, (очень рад знакомству), лингвист. Участвует в работе века над национальным корпусом Русского Языка, произвел впечатление не только очень образованного человека, но ко всему прочему и искренне влюбленного в лингвистику в целом и в корпусную лингвистику в частности. Работа в которой он активно участвует имеет огромное значение. Дело в том, что в исскуственном интеллекте качество и количество данных иногда намного важнее даже качества алгоритма использующего эти данные (Data Beats Algorithms). По этому, огромное спасибо за эту работу, а так же за презенацию.
Мы с ребятами давно планировали провести некоторые эксперементы по алгоритмам для обработки корпусов русского языка, теперь я знаю откуда брать эти самые корпуса. Да, кстати, yandex активно сотрудничает с научной группой, хостит у себя корпуса и использует данные для улучшения своих продуктов.

См. Презентация.

Презентации выложил, скоро ожидается видео на канале http://www.youtube.com/user/grammarlylabs.