誰もがやさしく微笑みあえる、その日まで

東日本大震災で被災された方々、心を痛めた方々に送ります。

Python(パイソン) ~その45:『Chainerによる実践深層学習』の紹介~


 今回は、「Python(パイソン) ~その45:『Chainerによる実践深層学習』の紹介~」です。

  Python (パイソン) はプログラミング言語です。
 オランダ人のグイド・ヴァンロッサムさんが開発しました。
 名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』です。
 Pythonには次のような特徴があります。
  ・とても読みやすい文法
  ・直感的なオブジェクト指向
  ・広範囲に及ぶ標準ライブラリ
 詳細は、以下のリンクをご参照ください。
  http://www.python.jp/about/
  https://ja.wikipedia.org/wiki/Python

 ※注1
「オブジェクト」は、「データと処理の集まり」です。
「オブジェクト指向」は、「オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方」です。
 以下のリンクをご参照ください。
  http://tdak.hateblo.jp/entry/20140406/1396773476

 ※注2
 「ライブラリ」は、一種の「道具箱」です。
 様々なライブラリがPythonで記述されており、テキスト処理、画像処理、音声処理、WEBから情報収集、機械学習など様々な機能を持ったライブラリ(道具箱)を利用することができます。
 →SB Creativeから出版された『Python「超」入門』p158を参照しました。
  本にご興味がある方は下記のリンクをご覧ください。
  http://www.sbcr.jp/products/4797384406.html



 私は人工知能を理解するために、Pythonを学びます。
 Pythonには、人工知能に関連したライブラリが豊富にあります。
 以下の順番で学ぶ予定です。
  ①Pythonの文法を理解し、プログラムを書けるようになること
  ②Pythonの各種ライブラリを理解し、使いこなすこと
  ③人工知能に関連したライブラリを理解し、使いこなすこと
  ④現実の問題を人工知能を使って解くこと





 今回は、オーム社から発刊された『Chainerによる実践深層学習』(著者:新納浩幸様)を紹介します。
 この本には、深層学習を用いて自然言語処理を行う方法について、基礎的なことが丁寧に書かれています。
 本の中のソースコードは下記のリンク先からダウンロード可能です。
  →http://www.ohmsha.co.jp/data/link/978-4-274-21934-4/
  →「本ファイルは、本書をお買い求めになった方のみご利用いただけます。本書をよくお読みのうえ、ご利用ください。また、本ファイルの著作権は、本書の著作者である、新納浩幸氏に帰属します」とのことです。
  →ソースコードの意味や実行方法は、本をご参照ください。


 Chainerは、ニューラルネットワークの計算および学習を行うためのオープンソースソフトウェアライブラリです。
 Preffered Networks社が開発しました。
 複雑なニューラルネットワークの構築を必要とする深層学習で主に用いられています。
 Chainerの特徴は、「Flexible(柔軟性)」「Intuitive(直感的)」「Powerful(高機能)」です。
 詳細は、下記のリンクをご参照ください。
  →https://chainer.org/
  →https://www.ossnews.jp/oss_info/Chainer
  →https://ja.wikipedia.org/wiki/Chainer


 Chainerには豊富なチュートリアル(使用方法に関する技術的な説明書)があるので、コードを書いてプログラムを動かしながら、Chainerの使い方を学ぶことができます。
 詳細は、下記のリンクをご参照下さい。
  →https://play.chainer.org/book/1/1/1
  →https://docs.chainer.org/en/stable/tutorial/index.html



 今回は、『Chainerによる実践深層学習』の第4章「Chainerの利用例」を紹介します。
 第4章では、アヤメのデータを用いて、深層学習する例が挙げられています。

・3種類のアヤメの分類問題
 →3種類のアヤメは、setosa、versicolor、virginica
 →データ数は50セットずつで、総計150セット

・アヤメデータの詳細
 →下のデータは、左から、花びらの長さ、花びらの幅、がく片の長さ、がく片の幅(スペース区切り)
 →下のデータを見ると、がく片の長さ、がく片の幅で、アヤメの種類を分類できそうな雰囲気

setosaのうち、5セット
['5.10', '3.50', '1.40', '0.20']
['4.90', '3.00', '1.40', '0.20']
['4.70', '3.20', '1.30', '0.20']
['4.60', '3.10', '1.50', '0.20']
['5.00', '3.60', '1.40', '0.20']

versicolorのうち、5セット
['5.00', '2.00', '3.50', '1.00']
['5.90', '3.00', '4.20', '1.50']
['6.00', '2.20', '4.00', '1.00']
['6.10', '2.90', '4.70', '1.40']
['5.60', '2.90', '3.60', '1.30']

virginicaのうち、5セット
['6.70', '3.00', '5.20', '2.30']
['6.30', '2.50', '5.00', '1.90']
['6.50', '3.00', '5.20', '2.00']
['6.20', '3.40', '5.40', '2.30']
['5.90', '3.00', '5.10', '1.80']


・オーム社のウェブサイトからダウンロードした"iris0.py"を実行して、学習回数と正答率(アヤメの種類を正しく分類できた確率)を比較
 →100回    : 15 / 75 = 0.20
 →1000回   : 53 / 75 = 0.71
 →10000回   : 72 / 75 = 0.96
 →100000回  : 72 / 75 = 0.96
  ※損失関数は、「平均二乗誤差」
 →損失関数を「クロスエントロピー」にすると、73 / 75 = 0.97
  「平均二乗誤差」より精度向上
 →残り2~3個のデータは、versicolorとvirginicaの境界に分布していて、分類するのが難しい。


 次回も、『Chainerによる実践深層学習』を紹介します。


 以上、「Python(パイソン) ~その45:『Chainerによる実践深層学習』の紹介~」でした。




スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

Python(パイソン) ~その44:形態素解析エンジンMeCab~


 今回は、「Python(パイソン) ~その44:形態素解析エンジンMeCab~」です。

  Python (パイソン) はプログラミング言語です。
 オランダ人のグイド・ヴァンロッサムさんが開発しました。
 名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』です。
 Pythonには次のような特徴があります。
  ・とても読みやすい文法
  ・直感的なオブジェクト指向
  ・広範囲に及ぶ標準ライブラリ
 詳細は、以下のリンクをご参照ください。
  http://www.python.jp/about/
  https://ja.wikipedia.org/wiki/Python

 ※注1
「オブジェクト」は、「データと処理の集まり」です。
「オブジェクト指向」は、「オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方」です。
 以下のリンクをご参照ください。
  http://tdak.hateblo.jp/entry/20140406/1396773476

 ※注2
 「ライブラリ」は、一種の「道具箱」です。
 様々なライブラリがPythonで記述されており、テキスト処理、画像処理、音声処理、WEBから情報収集、機械学習など様々な機能を持ったライブラリ(道具箱)を利用することができます。
 →SB Creativeから出版された『Python「超」入門』p158を参照しました。
  本にご興味がある方は下記のリンクをご覧ください。
  http://www.sbcr.jp/products/4797384406.html



 私は人工知能を理解するために、Pythonを学びます。
 Pythonには、人工知能に関連したライブラリが豊富にあります。
 以下の順番で学ぶ予定です。
  ①Pythonの文法を理解し、プログラムを書けるようになること
  ②Pythonの各種ライブラリを理解し、使いこなすこと
  ③人工知能に関連したライブラリを理解し、使いこなすこと
  ④現実の問題を人工知能を使って解くこと



 今回は、MeCabについて紹介します。
 MeCabは、オープンソースの形態素解析エンジンです。
 インストール方法などの詳細は、下記のリンクをご参照ください。
  →http://taku910.github.io/mecab/
  →https://ja.wikipedia.org/wiki/MeCab

 検索エンジンなど、日本語の言語処理では、文を単語に分割することが重要です。
 MeCabは、高速に精度よく、文を単語に分割できます。
 今回は、MeCabの実力を確認します。

 入力文1:「すもももももももものうち」
 入力文2:「今日は晴れです。」 
  →この二文はOK
 入力文3:「ピコ太郎のYoutube動画を見た。」
  →「ピコ太郎」が認識されず。
  →おそらく未知語(MeCabの辞書に登録されていない単語)の問題。 



 入力文4:「れいかやかんげんには上手なことではなくて楽しいことを見つけられる人になって欲しいです。」
  →人の名前を平仮名で書いた場合、解析精度が落ちる。
   ※入力文4は、市川海老蔵さんのブログより
    →https://ameblo.jp/ebizo-ichikawa



 入力文5:「ピンクリボンイベントということで衣装は全体的にピンク」
 入力文6:「今日は1日ゾロリDay!」
  →この二文はOK
 入力文7:「ももクロが出演させていただきます」
  →「ももクロ」が認識されず
  →おそらく未知語(MeCabの辞書に登録されていない単語)の問題。
 入力文8:「今日は朝かられにちゃんとロケ!」
  →平仮名の名前の場合、解析精度が落ちる。
  ※入力文5~8は、ももいろクローバーZの百田さんのブログより
   →https://ameblo.jp/momota-sd/
  




 次回以降は、機械学習や深層学習について紹介する予定です。


 以上、「Python(パイソン) ~その44:形態素解析エンジンMeCab~」でした。




テーマ:プログラミング - ジャンル:コンピュータ

Python(パイソン) ~その43:自然言語処理ライブラリNLTK~


 今回は、「Python(パイソン) ~その43:自然言語処理ライブラリNLTK~」です。

  Python (パイソン) はプログラミング言語です。
 オランダ人のグイド・ヴァンロッサムさんが開発しました。
 名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』です。
 Pythonには次のような特徴があります。
  ・とても読みやすい文法
  ・直感的なオブジェクト指向
  ・広範囲に及ぶ標準ライブラリ
 詳細は、以下のリンクをご参照ください。
  http://www.python.jp/about/
  https://ja.wikipedia.org/wiki/Python

 ※注1
「オブジェクト」は、「データと処理の集まり」です。
「オブジェクト指向」は、「オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方」です。
 以下のリンクをご参照ください。
  http://tdak.hateblo.jp/entry/20140406/1396773476

 ※注2
 「ライブラリ」は、一種の「道具箱」です。
 様々なライブラリがPythonで記述されており、テキスト処理、画像処理、音声処理、WEBから情報収集、機械学習など様々な機能を持ったライブラリ(道具箱)を利用することができます。
 →SB Creativeから出版された『Python「超」入門』p158を参照しました。
  本にご興味がある方は下記のリンクをご覧ください。
  http://www.sbcr.jp/products/4797384406.html



 私は人工知能を理解するために、Pythonを学びます。
 Pythonには、人工知能に関連したライブラリが豊富にあります。
 以下の順番で学ぶ予定です。
  ①Pythonの文法を理解し、プログラムを書けるようになること
  ②Pythonの各種ライブラリを理解し、使いこなすこと
  ③人工知能に関連したライブラリを理解し、使いこなすこと
  ④現実の問題を人工知能を使って解くこと



 今回は、NLTKについて紹介します。
 NLTKは、"Natural Language ToolKit"の略です。
 NLTKは、英語や日本語などの言語データを扱うPythonプログラムを構築するための、Pythonのライブラリです。
 分類、トークン化、ステミング、タグ付け、解析、意味論的推論などの一連のテキスト処理を実行できたり、WordNetのような50以上のコーパスを使えたりします。
 
 詳細は、下記の本やリンクをご参照下さい。
 ・『入門 自然言語処理』 O'Reilly Japan, 2010
 ・http://www.nltk.org/
 ・http://www.nltk.org/book/



 順次、NLTKでできることを紹介します。

・形態素解析アルゴリズム
 入力が仮名べた書き文の形態素解析を行う。
 形態素解析とは、文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する作業である。 
 詳細は、下記のリンク参照
  →https://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90

 アルゴリズムの概要は、以下のとおりである。
  1:入力文に対して、辞書を参考にしながら、可能な形態素をすべて求める。
  2:1で求めた形態素に対して、文法に合う解を選択する。

 入力文は、「かれのくるまでまつ」である。 

 この入力文に対して、dict_entries のように表層形をキーにして、エントリに品詞(pos)と見出し形(lemma)の情報を持つデータ構造(トライ)を作る。

 単一のキー(表層形)に対して複数のエントリが対応できるようにinsert関数を定義する。

 dict_entriesとinsert関数を使って、辞書エントリをトライmatrieに追加する。

 共通接頭辞探索(その文字から始まる文字列の接頭辞をキーに持つ辞書エントリを列挙する処理)を行うために、common_prefix_search関数を定義する。

 連接可能な品詞の順序付きペアを判定するis_connectable関数を定義する。
 
 与えられたノードから文末までのすべてのパスのリストを求めるenum_solutions関数を定義する。

 最後に、入力文の形態素解析を行うanalyze_simple関数を定義する。

 入力文「かれのくるまでまつ」に対して実行した結果は、
  BOS/彼/の/来る/間/で/待つ/EOS
  BOS/彼/の/来る/まで/待つ/EOS
  BOS/彼/の/車/で/待つ/EOS
 である。
  →感覚的には、「彼の車で待つ」か「彼の来るまで待つ」が正しそう。

 参考までに、matrieも表示する。



 今回は、プログラムを確認する中で、データ構造とアルゴリズムの関係を意識しました。
 ちゃんとデータ処理の流れと、各関数の役割を理解しないといけないな、と思いながらコードを確認しました。
 一日でも早く、すっと読めるようになりたいですね。




 以上、「Python(パイソン) ~その43:自然言語処理ライブラリNLTK~」でした。




テーマ:プログラミング - ジャンル:コンピュータ

Python(パイソン) ~その42:自然言語処理ライブラリNLTK~


 今回は、「Python(パイソン) ~その42:自然言語処理ライブラリNLTK~」です。

  Python (パイソン) はプログラミング言語です。
 オランダ人のグイド・ヴァンロッサムさんが開発しました。
 名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』です。
 Pythonには次のような特徴があります。
  ・とても読みやすい文法
  ・直感的なオブジェクト指向
  ・広範囲に及ぶ標準ライブラリ
 詳細は、以下のリンクをご参照ください。
  http://www.python.jp/about/
  https://ja.wikipedia.org/wiki/Python

 ※注1
「オブジェクト」は、「データと処理の集まり」です。
「オブジェクト指向」は、「オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方」です。
 以下のリンクをご参照ください。
  http://tdak.hateblo.jp/entry/20140406/1396773476

 ※注2
 「ライブラリ」は、一種の「道具箱」です。
 様々なライブラリがPythonで記述されており、テキスト処理、画像処理、音声処理、WEBから情報収集、機械学習など様々な機能を持ったライブラリ(道具箱)を利用することができます。
 →SB Creativeから出版された『Python「超」入門』p158を参照しました。
  本にご興味がある方は下記のリンクをご覧ください。
  http://www.sbcr.jp/products/4797384406.html



 私は人工知能を理解するために、Pythonを学びます。
 Pythonには、人工知能に関連したライブラリが豊富にあります。
 以下の順番で学ぶ予定です。
  ①Pythonの文法を理解し、プログラムを書けるようになること
  ②Pythonの各種ライブラリを理解し、使いこなすこと
  ③人工知能に関連したライブラリを理解し、使いこなすこと
  ④現実の問題を人工知能を使って解くこと



 今回は、NLTKについて紹介します。
 NLTKは、"Natural Language ToolKit"の略です。
 NLTKは、英語や日本語などの言語データを扱うPythonプログラムを構築するための、Pythonのライブラリです。
 分類、トークン化、ステミング、タグ付け、解析、意味論的推論などの一連のテキスト処理を実行できたり、WordNetのような50以上のコーパスを使えたりします。
 
 詳細は、下記の本やリンクをご参照下さい。
 ・『入門 自然言語処理』 O'Reilly Japan, 2010
 ・http://www.nltk.org/
 ・http://www.nltk.org/book/



 順次、NLTKでできることを紹介します。

・平文コーパス
 日本語の平文コーパス(分かち書きされていないコーパス)の読み込みと言語処理について、紹介する。

 青空文庫にある宮沢賢治の「銀河鉄道の夜」の第一章を例示する。
  →http://www.aozora.gr.jp/cards/000081/card43737.html

 ここでは、同一文字種(ひらがな、カタカナ、漢字、記号)ごとにトークンとして検出する。
 
 まずは、第一章「午後の授業」を表示する。
 (二重括弧《》は、漢字のルビ)

 次に、トークンの間に「/」を入れて表示する。
 半分くらいは適切に分割できたトークンがあるが、残りの半分は不適切であることが分かる。
 主人公の友人である「カムパネルラ」は適切に分割できた。

 最後に、「カムパネルラ」が登場する文を抽出する。 




 言語処理の初歩を学んでいますが、一つひとつプログラムを実行してその意味を理解しているところです。
 その歩みはとても遅いですが、今は一歩一歩確実に前に進むのみです。



 以上、「Python(パイソン) ~その42:自然言語処理ライブラリNLTK~」でした。




テーマ:プログラミング - ジャンル:コンピュータ

Python(パイソン) ~その41:自然言語処理ライブラリNLTK~


 今回は、「Python(パイソン) ~その41:自然言語処理ライブラリNLTK~」です。

  Python (パイソン) はプログラミング言語です。
 オランダ人のグイド・ヴァンロッサムさんが開発しました。
 名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』です。
 Pythonには次のような特徴があります。
  ・とても読みやすい文法
  ・直感的なオブジェクト指向
  ・広範囲に及ぶ標準ライブラリ
 詳細は、以下のリンクをご参照ください。
  http://www.python.jp/about/
  https://ja.wikipedia.org/wiki/Python

 ※注1
「オブジェクト」は、「データと処理の集まり」です。
「オブジェクト指向」は、「オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方」です。
 以下のリンクをご参照ください。
  http://tdak.hateblo.jp/entry/20140406/1396773476

 ※注2
 「ライブラリ」は、一種の「道具箱」です。
 様々なライブラリがPythonで記述されており、テキスト処理、画像処理、音声処理、WEBから情報収集、機械学習など様々な機能を持ったライブラリ(道具箱)を利用することができます。
 →SB Creativeから出版された『Python「超」入門』p158を参照しました。
  本にご興味がある方は下記のリンクをご覧ください。
  http://www.sbcr.jp/products/4797384406.html



 私は人工知能を理解するために、Pythonを学びます。
 Pythonには、人工知能に関連したライブラリが豊富にあります。
 以下の順番で学ぶ予定です。
  ①Pythonの文法を理解し、プログラムを書けるようになること
  ②Pythonの各種ライブラリを理解し、使いこなすこと
  ③人工知能に関連したライブラリを理解し、使いこなすこと
  ④現実の問題を人工知能を使って解くこと



 今回は、NLTKについて紹介します。
 NLTKは、"Natural Language ToolKit"の略です。
 NLTKは、英語や日本語などの言語データを扱うPythonプログラムを構築するための、Pythonのライブラリです。
 分類、トークン化、ステミング、タグ付け、解析、意味論的推論などの一連のテキスト処理を実行できたり、WordNetのような50以上のコーパスを使えたりします。
 
 詳細は、下記の本やリンクをご参照下さい。
 ・『入門 自然言語処理』 O'Reilly Japan, 2010
 ・http://www.nltk.org/
 ・http://www.nltk.org/book/



 順次、NLTKでできることを紹介します。

・自然言語理解
 次の質問文(query)に対して、適切に答えるためにはどうすればいいか?
 "What cities are located in China?" 

 ここでは、質問文(query)を構文解析してSQLに変換して、SQLデータベースを参照して、解答する。
 SQLは、関係データベース管理システム (RDBMS) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)である。
 詳細は、下記のリンク参照。
  →https://ja.wikipedia.org/wiki/SQL

 文法"sq10.fcfg"では、質問文(query)を構文解析する文法が示されている。

 構文解析した結果、
 SQL文「SELECT City FROM city_table WHERE Country="china"」
 が得られる。 

 得られたSQL文を"city.db"に適用すると、質問文(query)に対する解答
 "canton chungking dairen harbin kowloon mukden peking shanghai sian tientsin"
 が得られる。
 
 参考までに、"city.db"に登録されている都市名を表示する。




 SQL文はあまりなじみがありませんが、多くのデータベースで使われている言語なので、少しずつ学びます。





 以上、「Python(パイソン) ~その41:自然言語処理ライブラリNLTK~」でした。




テーマ:プログラミング - ジャンル:コンピュータ

次のページ

FC2Ad