実装例であるFANNを使用してPHPでニューラルネットワークを構築する

大量の情報を分析し、パターンを特定するという課題に直面しました。 そして最初に思いついたのは、 ニューラルネットワークを使用して数学モデルを構築することでした。



分析用のデータはphpで生成され、この言語は私に最も近いため、phpのインターフェースを備えたライブラリを検索しました。 この点で、 FANN(Fast Artificial Neural Network) -ネットワーク構築用のオープンソースソフトウェアが推奨されました 。 このソリューションには15言語のapiがあるため、ほとんどの人が自分で何かを選択できます。



例。 ページ上のテキストの言語を認識する


例として、私たちは簡単なタスクを取りますが、現実や深刻なタスクからそれほど遠くありません。 3つの異なる言語で1000のドキュメントがあるとしましょう。 フランス語、英語、ポーランド語にしましょう。 私たちの仕事は、ドキュメントの言語を認識するようにニューラルネットワークに教えることです。 このために、最も単純な周波数メカニズムを使用します。 それにもかかわらず、その結果は悪くありません。 その本質は、テキスト内の異なる周波数を持つ各言語が同じ文字を持っているということです。 各言語(英語、フランス語、ポーランド語)ごとに3つの大きなテキストを準備し、各記号の頻度にカウントします。 このデータをニューラルネットワークに送信し、各言語に属する周波数のセットを示します。 さらに、ニューラルネットワークはそれ自体をすべて行います。



FANNをインストールすることから始めましょう


例として、Ubuntuのインストールを示します。



1)パッケージlibfann1およびlibfann1-devをインストールする必要があります

apt-get install libfann*
      
      







2)PHPでファンのサポートを追加する

Apacheがインストールされており、php5-devモジュールがインストールされているので、これを行います

 # wget http://pecl.php.net/get/fann # tar xvfz fann # cd fann-0.1.1 # phpize # ./configure # make
      
      







コンパイル中にエラーが発生し、その中にエラーがある場合



fann.c:393: error: 'zif_fannOO___set' undeclared (first use in this function)







php_fann.hファイルを編集して、28行目#define PHP_FANN_OOにコメントする必要があります1

その後、再コンパイルします。



その結果、PHPに接続する必要があるモジュールを生成します

 sudo cp -R ./modules/* /usr/lib/php5/20090626+lfs/
      
      







php.iniに追加します

 extension=fann.so
      
      







Apacheをオーバーロードし、すべてが正常であることを確認しました

 php -m | grep fann
      
      







問題解決


これを行うには、2つの手順を実行します。

1)ネットワークのトレーニング(最初のリスト)

2)そして、分類に既製のモデルを使用する(2番目のリスト)



最初の段階の例を挙げ、すぐにドキュメントへのリンクを示します



コードにできる限りコメントを付けて、何が起きているかを明確にし、個別に分解しないようにしました。



Train.phpファイル

 <?php /* *   . 256 -   ,      , *         ,     . * 128 -      .       . * 3    .     3 ,       * 1.0 - connection_rate -     * 0.7 - learning_rate -    http://www.basegroup.ru/glossary/definitions/learning_rate/ * */ $ann = fann_create(array(256, 128, 3), 1.0, 0.7); /* *   -    ,  -  . *   3  .        . *    ,    ,    ,    *     (array(1, 0, 0) // Outputs).            * generate_frequencies -   . * *  3   * -  -  * -  -  * -     * *   en.txt, fr.txt, pl.txt    -  10000     * */ fann_train($ann, array( array( generate_frequencies(file_get_contents("en.txt")), // Inputs array(1, 0, 0) // Outputs ), array( generate_frequencies(file_get_contents("fr.txt")), // Inputs array(0, 1, 0) // Outputs ), array( generate_frequencies(file_get_contents("pl.txt")), // Inputs array(0, 0, 1) // Outputs ), ), 100000, 0.00001, 1000 ); /* *     .        * */ fann_save($ann,"classify.txt"); /* *    * */ function generate_frequencies($text){ //     $text = preg_replace("/[^\p{L}]/iu", "", strtolower($text)); //      $total = strlen($text); $data = count_chars($text); //     array_walk($data, function (&$item, $key, $total){ $item = round($item/$total, 3); }, $total); return array_values($data); } ?>
      
      







上記のコードでは、モデルのみを生成しました。 それでは、以下のコードでテキストを分析し、特定の言語に属しているかどうかを評価してみましょう。



ファイルrun.php

 <?php /* *    .       . * */ $ann = fann_create("classify.txt"); /* *       3     *   * */ $output = fann_run($ann, generate_frequencies("ANN are slowly adjusted so as to produce the same output as in the examples. The hope is that when the ANN is shown a new X-ray images containing healthy tissues")); var_dump($output); $output = fann_run($ann, generate_frequencies("Voyons, Monsieur, absolument pas, les camions d'aujourd'hui ne se traînent pas, bien au contraire. Il leur arrive même de pousser les voitures. Non, croyez moi, ce qu'il vous faut, c'est un camion ! - Vous croyez ? Si vous le dites. Est-ce que je pourrais l'avoir en rouge ? - Bien entendu cher Monsieur,vos désirs sont des ordres, vous l'aurez dans quinze jours clé en main. Et la maison sera heureuse de vous offrir le porte-clé. Si vous payez comptant. Cela va sans dire, ajouta Monsieur Filou. - Ah, si ce ")); var_dump($output); $output = fann_run($ann, generate_frequencies("tworząc dzieło literackie, pracuje na języku. To właśnie język stanowi tworzywo, dzięki któremu powstaje tekst. Język literacki ( lub inaczej artystyczny) powstaje poprzez wybór odpowiednich środków i przy wykorzystaniu odpowiednich zabiegów technicznych. Kompozycja - jest to układ elementów treściowych i formalnych dzieła dokonanych według określonych zasad konstrukcyjnych. Kształtowanie tworzywa dzieła literackiego jest procesem skomplikowanym i przebiegającym na wielu poziomach. Składa się na nie:")); var_dump($output); ?>
      
      



generate_frequencies(「tworzącdziełoliterackieは、językuナpracuje。właśniejęzykstanowi tworzywo、dziękiktóremupowstaje tekst。Językのliteracki(LUB inaczej artystyczny)powstaje poprzezwybórodpowiednichśrodków私przy wykorzystaniu odpowiednichzabiegówtechnicznychへ。 <?php /* * . . * */ $ann = fann_create("classify.txt"); /* * 3 * * */ $output = fann_run($ann, generate_frequencies("ANN are slowly adjusted so as to produce the same output as in the examples. The hope is that when the ANN is shown a new X-ray images containing healthy tissues")); var_dump($output); $output = fann_run($ann, generate_frequencies("Voyons, Monsieur, absolument pas, les camions d'aujourd'hui ne se traînent pas, bien au contraire. Il leur arrive même de pousser les voitures. Non, croyez moi, ce qu'il vous faut, c'est un camion ! - Vous croyez ? Si vous le dites. Est-ce que je pourrais l'avoir en rouge ? - Bien entendu cher Monsieur,vos désirs sont des ordres, vous l'aurez dans quinze jours clé en main. Et la maison sera heureuse de vous offrir le porte-clé. Si vous payez comptant. Cela va sans dire, ajouta Monsieur Filou. - Ah, si ce ")); var_dump($output); $output = fann_run($ann, generate_frequencies("tworząc dzieło literackie, pracuje na języku. To właśnie język stanowi tworzywo, dzięki któremu powstaje tekst. Język literacki ( lub inaczej artystyczny) powstaje poprzez wybór odpowiednich środków i przy wykorzystaniu odpowiednich zabiegów technicznych. Kompozycja - jest to układ elementów treściowych i formalnych dzieła dokonanych według określonych zasad konstrukcyjnych. Kształtowanie tworzywa dzieła literackiego jest procesem skomplikowanym i przebiegającym na wielu poziomach. Składa się na nie:")); var_dump($output); ?>







結果


このモデルは、次のテキスト応答を生成しました。

最初のケースでは、モデルは英語が彼女に引き渡されたと判断し(98%)、彼女は正しかった

 array(3) { [0]=> float(0.98745632171631) [1]=> float(0.0094089629128575) [2]=> float(0) }
      
      







2番目のテキストでは、彼女はフランス人に有利になり、再び正しいことを証明しました。

 array(3) { [0]=> float(0) [1]=> float(0.99334162473679) [2]=> float(0) }
      
      







彼女はまた、3番目のテキストをポーランド語として正しく認識しました。

 array(3) { [0]=> float(0.015697015449405) [1]=> float(0) [2]=> float(1) }
      
      







一部のユーザーは、ニューラルネットワークが特定の答えではなく確率を与えると文句を言います。 戦車にいる人にとって、私たちの世界ではすべてが確率に基づいていると付け加えます。 正しい答えを得るには、少なくとも90%正しいものを検討する必要があります。それより少ない場合は、分類を改善するためにネットワークをトレーニングする必要があります。



このような単純なシステムにもかかわらず、ニューラルネットワークは優れたパフォーマンスを提供します。 N-gramを作成して分類することができます。さらに信頼性が高くなり、両方のオプションを組み合わせることができます。 ニューラルネットワークは強力なツールです。使用方法を学ぶ必要があります



FANNのWebサイトにアクセス



All Articles