воскресенье, 29 мая 2016 г.

Создаем API Wrapper в Node js

Если вам нужно использовать API в NodeJS одно из сервисов и не хочется каждый раз писать один и тот же запрос только с разными параметрами много раз. В этом случае лучше написать отдельный пакет, как это сделать можно прочитать в этом посте.
Для примера мы возьмем EasyWay API. Это сервис для отслеживания актуальных данных о маршрутах  и маршрутках доступный в нескольких странах.

Писать наш пакет буду в c9.io. Но вы можете выбрать любой другой вариант в котором есть возможность создавать и выполнять NodeJS проекты.

Создадим package.json и заполним нужными данными.

{
  "name": "node_eway",
  "version": "0.0.1",
  "description": "Api Wraper for Eway.",
  "main": "index.js",
  "repository": "",
  "author": "Edik Goryach <gorachedik96@gmail.com>",
  "dependencies": {
    "urlencode": "latest",
    "request": "latest"
  }
}

Теперь подключим наши пакеты и создадим конструктор для нашего обьекта в index.js

var request = require('request');
var urlencode = require('urlencode');

const APIURL = 'https://api.eway.in.ua/?';

//создание объекта
var Eway = function (login, pass) {
this.login = login;
this.pass = pass;


Напишем первый метод для нашего объекта:

Eway.prototype.get = function (method, params, callback){
  request({
  method: 'GET',
  url: APIURL + 'login=' + this.login +'&password=' + this.pass + '&function=' + method +'&'  + params,
  headers: {
    'Content-Type': 'application/json',
  }
}, function (err, response, body) {
   if (err) {
    callback('err');
    return console.error('Error:', err);
  }

  callback(JSON.parse(body))
});
}

Создадим test.js и попробуем вызвать конструктор и  наш метод
//подключаем index.js
var Eway = require('./index.js');

var EwayLib = new Lafka('Your login', 'Your pass');

EwayLib.get('cities.GetRoutesList', 'city=lviv', function(data) {
   console.log(data);
 return data;
});

Вот таким способом можно организовать обертку для Api  с помощью callback.

воскресенье, 22 мая 2016 г.

Deep Learning для чат ботов (Часть 1)


Чат ботов также называют диалоговыми агентами или диалоговые системами, сейчас это очень горячая тема. Microsoft сделала большую ставку на чат ботов, и после этого такие компании как Facebook (M), Apple (Siri), Google, WeChat, and Slack. Это новая волна стартапов попытается изменить для пользователей взаимодействие с сервисами с помощью построения пользовательских приложений подобных Operator и x.ai, бот платформами как Chatfuel, и бот библиотеками как Howdy’s Botkit. Также Microsoft недавно предоставила свой Бот фреймворк.

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

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

СИСТЕМАТИКА МОДЕЛЕЙ

Поисково ориентированная vs. Генеративная модель

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

Генеративная модель (сложнее) не полагается на предопределенные ответы. Эта модель генерирует новые ответы с нуля. Генеративная модель обычного базируется на методах Машинного Обучения, но вместо перевода из одного языка к другому, она переводит из ввода в вывод(ответ).



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