среда, 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.


понедельник, 26 ноября 2012 г.

Simplicity of XML/JSON RPC is very convenient for performing quick experiments and prototyping.

As I said before, we are working on several artificial intelligence agents. Experiments are being performed on amazon AWS server (http://korobov-labs.com), and now we need to make some features available via web services. It is convenient way to integrate some parts of our code into a smart system. We wanted to avoid complex solutions like SOAP or separate REST server launched via Apache or something similar...
So, what about xml-rpc or json-rpc web service? This kind of services is not always a good choice for real production, but good enough for quick experiments or internal communication. Old thing, but works good today. Open your python and just try this client code (at the time server is running):

from xmlrpclib import ServerProxy
connect = ServerProxy("http://korobov-labs.com:8001")
print connect.classify_text('Put your English text here...')

In three lines we have very convenient call to remote xml-rpc service. Cool thing.

пятница, 23 ноября 2012 г.

Learn how to solve problems: Rubik Hackathon part 2.


previous part of this article was about the Rubik hackathon arranged for my friends. Guys who were expected to take a part in this hackathon are not as experienced in programming and problem solving techniques as probably some readers, so if you are really familiar with Rubik’s solvers you might not be interested in reading further.
I would say that this hackathon is oriented for beginners, for students who like mathematics, algorithm development and analysis, and for guys who have already got an engineering education and now are concentrated on learning how to solve complex discrete problems with programming.





We have special github repo with a simple for use Rubik’s model and solver template.


понедельник, 19 ноября 2012 г.

Учимся problem solving: Rubik Hackathon.


О целях хакатона.

У меня в окружении есть несколько человек, которые любят математику и имеют развитое аналитическое и алгоритмическое мышление. Они хотели бы участвовать в создании интересных программных решений, но при этом имеют достаточно ограниченные навыки программрования. А как известно - лучший способ улучшить свои навыки прогаммирования - программировать. Так же участвующие имеют возможность поразвивать свои problem solving skills.



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

четверг, 15 ноября 2012 г.

Вспоминая дискретную математику...

Любить математику "платонически" нельзя, её периодически нужно касаться и решать проблемы несколько более сложные и увлекательные чем базовые операции с которыми сталкивается обычно программист в рабочих буднях. Даже те, чья работа сильно зваисит от математики, обычно используют знания из небольшого количества разделов.

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

суббота, 3 ноября 2012 г.

Прощай BizSpark...

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

Сегодня запусился korobov-labs.com

Для дальнейших эксперементов вместо сервера запущенного на старом ноутбуке с выделенным IP нам требуется нормальная веб площадка. Как это водится, теперь все мы "ветаем в облаках".. а именно вместо обычного хостинга используем облачный instance от Amazon AWS. Итак, все эксперементальные сервисы буду располагать на ресурсе
http://korobov-labs.com ну и его поддоменах.

пятница, 26 октября 2012 г.

Kyiv PyCon 2012


На прошлых выходных прошла одна из самых мной любимых конференций. Kyiv PyCon 2012. Двухдневная конференция, хоть и привлекает довольно молодую аудиторию обычно, тем не менее интересна для меня очень, потому что во первых она о Python и местами о Computer Science. Обе темы мне интересны, плюс - пайтон комьюнити мне всегда нравилось ) Я не думаю, что был единственным C# разработчиком там, но думаю таких немного, особенно учитывая накладку событий.

четверг, 25 октября 2012 г.

Управление временем и сознанием.


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



Основные сложности с которыми сталкиваешься следующие:

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

пятница, 19 октября 2012 г.

AForge.NET & Accord.NET

Сегодня обнаружил, что AForge.net и Accord.net доступны даже в nuget (aforge, accord).
Для тех, уто вдруг забредет случайно в мой блог на всякий случай поясню:

NuGet is a Visual Studio extension that makes it easy to install and update third-party libraries and tools in Visual Studio

среда, 17 октября 2012 г.

Обучение для меня стало работой на этот месяц.


Я нахожусь в творческом и оздоровительном отпуске. И использую его по зазначению - программирую, учусь и улучшаю здоровье.

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

Dart is celebrating bithday

Нашел ролик в Гугл Блоге посвященный дню рождения языка Dart. Раньше я слышал о нем только как о лабоработоном эксперементе гугл. Год назад был первью, потом относительная тишина, и вот:


вторник, 9 октября 2012 г.

Хорошая книга оказалась Effective Java (2nd Edition)...

Я конечно не Джавист, как принято у нас называть фанатов или, скорее, знатоков Java. Однако это очень широко распространенный язык, часто попадающийся в гетерогенных системах, и в реальной жизни на нем нужно писать. Потому что в реальной жизни проекты гетерогенные. Да и вообще, нельзя быть дотнетозомби или питонозомби (не говоря про С/C++зомби). Нужно быть развитым и не зацикливаться. И если писать на чем то, то делать это с любовью.

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

GNU-GPL and Free инструменты для ученых и студентов. Python, Maxima, Octave и не только...

Статья пока еще не закончена, и она не нова конено, но выкладываю ее, так как мне нравится популяризировать замечательные GNU и просто свободные иструменты очень удобные и общепринятые в науке но несколько находящиеся в тени для тех, кто развивался как ученый в постсоветской научной вертикали, и был изолирован в некотором смысле от многих западных наработок. Буду давать ссылку на нее своим знакомым, тем, кто в состоянии оценить величие рекомендуемых инструментов и постепенно дорабатывать её.

Сначала немного о питоне

Питон местами слабоват в плане производительности, многопоточности, и конечно не идеален как язык, как не идеален любой другой. И тем не менее я люблю его, хотя и пока еще знаю хуже чем C# например. Причин, почему я  использую Python, будучи разработчиком на C# и немного на Java и C, много.

воскресенье, 30 сентября 2012 г.

Переворот сознания.

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

Изменился.

Я не могу точно сказать для чего я это сделал. Потому что вернее будет сказать почему. Но обо всем по порядку.

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

пятница, 21 сентября 2012 г.

Наивная классификация. Naive Bayes multiclass classifier.

Предпосылки.

Проходя курсы и изучая материалы по машинному обучению и обработке натуральных языков я конечно же неоднократно сталкивался с задачами в которых нужно было применять классификаторы. Самым простым случаем классификатора, который мне попался, был пример из лекции про Sentiment Analysis с помощью которого решалась задача бинарной классификации текса (позитивный или негатиыный). Я выполнил это задание, чему-то научился, но мне этого было мало, и я набросал прототип и поставил пару эксперементов с использованием мультиклассового Naive Bayes классификатора. В этой статье я хочу описать то, что и как получилось.

среда, 19 сентября 2012 г.

Знания и опыт. Или ценность "ползанья на пузе"

Когда я был на 2-м курсе у меня небыло ни компьютера ни удобных условий для обучения, и тем не менее, я был захвачен идеей научиться программировать. А информации как учитья небыло никакой. Ну прочел несколько умных книжек, на которые хватило студенческих коепеек. Иногда даже купленных невпопад. Ну поэксперементировал с различными моделями донести какой-то отпрограммированный функционал конечному пользователю. С теми моделями, которые были доступны для меня в компьютерном классе.. NT 4.0, Visual Basic, Delphi, DHTML+JavaScript, WSH ... В общем не лучший и не самый передовой зоопарк технологий. И тем не менее, мне нравилось...

воскресенье, 26 августа 2012 г.

Нехватка computer-science tools для .net платформы.

Современная реализация .net очень хороша. Конечно нет предела красоте узора. Но .net действиетельно мощная и крутая платформа, плюс для нее очень много всего реализованно как самим Майкософтом так и 3-rd part сторонами. И мэйнстримовый для .net язык C# очень радует. Сделан действительно хорошо. Будучи так же знакомым с Java, Python и С я бы сказал, что C# наиболее зрелый и развитый инструмент для создания целых семейств бизнес решений. Однако есть свои "но". Для меня, например, очень важно что .net не реализован для unix.

воскресенье, 5 августа 2012 г.

Bogosort algorithm.

Сегодня я узнал что в computer science наряду с нормальными и практически применимыми подходами к упорядочиванию (sorting) элементов есть еще один алгоритм сортировки (bogosort) который всерьез применяют, по крайней мере для оценки сложности и при обсуждении вопросов в глубоком CS а так же для сравнения с другими алгоритмами...  Но то детали.

четверг, 2 августа 2012 г.

К слову о незрелости NLP библиотек на C#

Работая в grammarly нередко сталкиваешься с задачами natural language processing. Как разработчик, посвятивший несколько лет разработке на C# и осзнавая его мощность я конечно был заинтересован в том чтобы разобраться, а какие решения есть для C# или вообще .net.

А оказалось что в сети с этим не густо. А то, что таки было найдено зачасую, после пристального взгляда не выдерживает критики... Сами посмотрите на код этого токенизатора:

четверг, 19 июля 2012 г.

Книги... По следам прошедшего года.

В течении последнего года мои знания и представления о софтверной инженерии изменились. Эволюционировали. Очень много понятий  и областей узнал обзорно. Некоторые копнул полгубже. Было много чего - изучение онлайн курсов, посещение семинаров, общение с отличными профи. Но это ведь только направляющие вещи. Важным является не только то, чтобы понять куда можно копать. Более важная составляющая - это писать код. Ставить эксперементы. Непонимая пытаться понять. И читать. Что касается кода и эксперементов - это тема для других статей. Эту же я хочу посвятить своим спутникам этого года, а именно - книгам, которые я читал и продолжаю читать. Книгам, которые мне нравятся. Тем, которые я считаю нужными и полезными для разработчика и человека, полного духа исследования.
И тем, которые мне хочется прочесть.