|
Навигация
|
Главная » Новости Построение нейронных сетей в php используя FANN, пример реализацииИсточник: habrahabr rechik Передо мной предстала задача анализа большого количества информации и выявления закономерностей. И первое, что пришло в голову - построить математическую модель с помощью нейронной сети. Поскольку данные для анализа формируются в php и мне этот язык сейчас ближе всего, то искалась библиотека с интерфейсом для php. В связи с этим мне порекомендовали FANN (Fast Artificial Neural Network) - открытое программное обеспечение для построения сетей. У этого решения есть апи для 15 языков, так что почти каждый сможет выбрать что-то для себя. Пример. Распознавание языка текста на страницеДля примера возьмем задачу легкую, но недалекую от нашей реальности и от серьезных задач. Допустим есть 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) И использовать готовую модель для классификации (второй листинг) Приведу пример для первого этапа и сразу укажу ссылку на документацию Код я максимально снабдил комментариями, что бы было понятно что к чему и не разбирать его отдельно. Файл train.php В коде выше мы только сгенерили модель. А теперь проверим ее в деле, код ниже анализирует текст и выдает оценку принадлежности к тому или иному языку. Файл run.php
РезультатНаша модель сгенерировала следующие ответы по текстам.В первом случае модель решила что ей на вход передали английский язык (98%) и она права Во втором тексте она приняла решение в пользу французского и снова оказалась права Третий текст она тоже правильно распознала, как польский Некоторые пользователи жалуются что нейронные сети выдают вероятности, а не конкретный ответ. Для тех кто в танке добавлю, что в нашем мире все основано на вероятностях. За правильный ответ нужно считать тот который верен хотя бы на 90%, если меньше то сеть нужно до обучать, что бы улучшить классификацию. Не смотря на такую простую систему нейронная сеть дает хорошие показатели. Можно сделать n-граммы и по ним классифицировать, это будет еще надежнее, можно оба варианта комбинировать. Нейронные сети мощный инструмент, нужно лишь научиться им пользоватьсяCrystal Applications экономит время и деньги. Специфика DDoS-атак в России. Тонкая оптимизация бизнес-процессов. MoReq: Европейские типовые требования к автоматизированным системам электронного документооборота (документация, download). Из "айтишников" в директора. Главная » Новости |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |