Нейронная сеть на php пример
Построение нейронных сетей в php используя FANN, пример реализации
Пример. Распознавание языка текста на странице
Для примера возьмем задачу легкую, но недалекую от нашей реальности и от серьезных задач. Допустим есть 1000 документов, на 3-х разных языках. Пусть это будут французский, английский и польский. Наша задача научить нейронную сеть распознавать язык документа. Для этого мы используем самый простой частотный механизм. Но тем не менее его результаты неплохи. Его суть в том, что у каждого языка с разной частотой в тексте встречаются одни и те же символы. Мы подготавливаем 3 больших куска текста для каждого из языков (английский, французкий, польский), посчитаем для каждого символа частоты. Эти данные мы передадим в нейронную сеть, с указанием какой набор частот принадлежит каждому из языков. Дальше нейронная сеть все сделает сама.
Начнем с установки FANN
Пример, установки привожу для Ubuntu.
1) Нужно установить пакеты libfann1 и libfann1-dev
2) Добавить поддержку fann в php
У меня стоит Apache и установлен модуль php5-dev, поэтому я делаю так
Если при компиляции появиться ошибки и среди них будет вот такая
fann.c:393: error: “zif_fannOO___set” undeclared (first use in this function)
то следует отредактировать файл php_fann.h и за комментировать строчку 28 #define PHP_FANN_OO 1
После этого заново скомпилировать.
В итоге у нас генерируются модули которые нужно подключить к php
И в php.ini дописать
Перегрузили апач и проверили что все ок
Решение задачи
Для этого нужно выполнить 2 шага:
1) Обучить сеть (первый листинг)
2) И использовать готовую модель для классификации (второй листинг)
Приведу пример для первого этапа и сразу укажу ссылку на документацию
Код я максимально снабдил комментариями, что бы было понятно что к чему и не разбирать его отдельно.
В коде выше мы только сгенерили модель. А теперь проверим ее в деле, код ниже анализирует текст и выдает оценку принадлежности к тому или иному языку.
Результат
Наша модель сгенерировала следующие ответы по текстам.
В первом случае модель решила что ей на вход передали английский язык (98%) и она права
Во втором тексте она приняла решение в пользу французского и снова оказалась права
Третий текст она тоже правильно распознала, как польский
Некоторые пользователи жалуются что нейронные сети выдают вероятности, а не конкретный ответ. Для тех кто в танке добавлю, что в нашем мире все основано на вероятностях. За правильный ответ нужно считать тот который верен хотя бы на 90%, если меньше то сеть нужно до обучать, что бы улучшить классификацию.
Не смотря на такую простую систему нейронная сеть дает хорошие показатели. Можно сделать n-граммы и по ним классифицировать, это будет еще надежнее, можно оба варианта комбинировать. Нейронные сети мощный инструмент, нужно лишь научиться им пользоваться
Нейронная сеть на php пример
Суть задачи
С помощью нейронных сетей я постарался определить безопасно ли плавать в море, с учетом следующих параметров: время суток (день/ночь), туман (задается дробным числом), волны (есть/нет), акулы (есть/нет).
В следующих строчках входные и выходные данные чередуются (сначала входные, а затем выходные).
Теперь осталось создать еще один php-файл для проверки того, как обученная нейронная сеть решает нашу задачу. Код в этом файле должен быть следующим: Результаты работы нейронной сети вы можете видеть в таблице:
| День (-1) / Ночь (1) | Туман: | Волны: есть (1), нет (-1) | Акулы: есть (1), нет (-1) | Опасно (1), нет (-1) |
| 1 | 0,00 | -1 | -1 | -0.97 |
| 1 | 0,60 | -1 | -1 | 1.00 |
| 1 | 0,10 | -1 | -1 | -0.86 |
| 1 | 0,45 | -1 | -1 | 0.95 |
| 1 | 0,10 | 1 | -1 | 0.99 |
| -1 | 0,10 | 1 | -1 | -0.98 |
| -1 | 0,10 | -1 | 1 | 1.00 |
Наглядный пример работы нейронной сети с одним из наборов входных данных: 
Дополнение. О том как установить FANN в Линуксе
Я работал с FANN в Linux Mint, соответственно все нижеизложенное подойдет и для другой Debian-системы.
В первую очередь нужно установить библиотеку libfann, если она не установлена. Затем нужно установить php-pear и php-dev той же командой (apt install).
Построение нейронных сетей в php используя FANN, пример реализации
Передо мной предстала задача анализа большого количества информации и выявления закономерностей. И первое, что пришло в голову — построить математическую модель с помощью нейронной сети.
Поскольку данные для анализа формируются в php и мне этот язык сейчас ближе всего, то искалась библиотека с интерфейсом для php. В связи с этим мне порекомендовали FANN (Fast Artificial Neural Network) — открытое программное обеспечение для построения сетей. У этого решения есть апи для 15 языков, так что почти каждый сможет выбрать что-то для себя.
Пример. Распознавание языка текста на странице
Для примера возьмем задачу легкую, но недалекую от нашей реальности и от серьезных задач. Допустим есть 1000 документов, на 3-х разных языках. Пусть это будут французский, английский и польский. Наша задача научить нейронную сеть распознавать язык документа. Для этого мы используем самый простой частотный механизм. Но тем не менее его результаты неплохи. Его суть в том, что у каждого языка с разной частотой в тексте встречаются одни и те же символы. Мы подготавливаем 3 больших куска текста для каждого из языков (английский, французкий, польский), посчитаем для каждого символа частоты. Эти данные мы передадим в нейронную сеть, с указанием какой набор частот принадлежит каждому из языков. Дальше нейронная сеть все сделает сама.
Начнем с установки FANN
Пример, установки привожу для Ubuntu.
2) Добавить поддержку fann в php
У меня стоит Apache и установлен модуль php5-dev, поэтому я делаю так
Простой пример использования нейронной сети в PHP
С помощью нейронных сетей я постарался определить безопасно ли плавать в море, с учетом следующих параметров: время суток (день/ночь), туман (задается дробным числом), волны (есть/нет), акулы (есть/нет).
Для обучения нейронной сети я использовал следующие данные:
| День (-1) / Ночь (1) | Туман: | Волны: есть (1), нет (-1) | Акулы: есть (1), нет (-1) | Опасно (1), нет (-1) |
| -1 | 0,50 | -1 | -1 | -1 |
| -1 | 0,10 | -1 | -1 | -1 |
| -1 | 0,00 | 1 | -1 | -1 |
| 1 | 0,00 | -1 | -1 | -1 |
| 1 | 0,00 | 1 | 1 | 1 |
| 1 | 0,30 | 1 | -1 | 1 |
| 1 | 0,00 | 1 | -1 | 1 |
| 1 | 0,50 | -1 | -1 | 1 |
| -1 | 0,50 | -1 | 1 | 1 |
| -1 | 0,00 | -1 | 1 | 1 |
Реализация
Для начала создадим файл данных, я его назвал sea.data. В этот файл внесем параметры из таблицы.
В следующих строчках входные и выходные данные чередуются (сначала входные, а затем выходные).
Создадим php-файл, в котором обучим нейронную сеть решать нашу задачу. Код в этом файле должен быть следующим:
Теперь осталось создать еще один php-файл для проверки того, как обученная нейронная сеть решает нашу задачу. Код в этом файле должен быть следующим:
Результаты работы нейронной сети вы можете видеть в таблице:
| День (-1) / Ночь (1) | Туман: | Волны: есть (1), нет (-1) | Акулы: есть (1), нет (-1) | Опасно (1), нет (-1) |
| 1 | 0,00 | -1 | -1 | -0.97 |
| 1 | 0,60 | -1 | -1 | 1.00 |
| 1 | 0,10 | -1 | -1 | -0.86 |
| 1 | 0,45 | -1 | -1 | 0.95 |
| 1 | 0,10 | 1 | -1 | 0.99 |
| -1 | 0,10 | 1 | -1 | -0.98 |
| -1 | 0,10 | -1 | 1 | 1.00 |
Наглядный пример работы нейронной сети с одним из наборов входных данных:
Дополнение. О том как установить FANN в Линуксе
Я работал с FANN в Linux Mint, соответственно все нижеизложенное подойдет и для другой Debian-системы.
В первую очередь нужно установить библиотеку libfann, если она не установлена.
Затем нужно установить php-pear и php-dev той же командой (apt install).
А также само расширение FANN для PHP:
Читайте также
Стандартные библиотеки PHP умеют генерировать только целые случайные числа. Однако, возникают задачи где нужно не целое рандомное число с максимально…
Иногда при обработке с помощью PHP больших и не очень данных, можно словить досадную ошибку посреди выполнения скрипта: PHP Fatal…
Команда git cherry-pick позволяет забрать один коммит из другой ветки и вставить его в текущую. В качестве параметра передаётся идентификатор…
Машинное обучение и нейронные сети на PHP: библиотека PHP-ML
Согласно Википедии, машинное обучение (англ. Machine Learning) — обширный подраздел искусственного интеллекта, математическая дисциплина, использующая разделы математической статистики, численных методов оптимизации, теории вероятностей, дискретного анализа, и извлекающая знания из данных.
Это словосочетание, ровно как и «Нейронные сети», на слуху уже 2 года, и, как заявляют разнообразные эксперты, именно за этими вещами будущее.
Принято считать, что для всех этих проявлений искусственного интеллекта нужно использовать специальные языки, как, например, R или хотя бы Python. Но это не так.
PHP-ML — полноценная библиотека для работы с искусственным интеллектом, разработанная командой PHP-AI. В последнее время PHP-ML стала одной из самых популярных на GitHub. Как говорят сами создатели, пакет является «свежим подходом к машинному обучению на PHP». Из требований — установленная версия интерпретатора не ниже 7.0. Добавить разработку к своему проекту можно через Composer:
Простой пример по работе с классификацией
Также в отдельном репозитории доступны и другие примеры:
Конечно, PHP-ML не избавит вас от необходимости изучения некоторых теоретических данных (например, ознакомьтесь с нашей подборкой материалов для изучения машинного обучения), но если вы разрабатываете веб-проект, то использование машинного обучения в нем стало как никогда просто.

