Interface2017-12号第2章メカニズム実験 勝手に成長する人工知能を読む

ステップ1 実行環境を準備する

pip install gym
pip install gym[atari]

gym[atari]でエラーがでた。
xorg-devをinstallするとエラーが収まった。
掲載されていたソースを実行させたところ
すぐ終了するのでrange(1000)を10000000まであげた。  

f:id:bitop:20171119111012p:plain

Interface2017-12号第1章メカニズム実験 対話する人工知能を読む

仮想環境からtensorflow1.4.0を削除
pip uninstall tensorflow
改めてtensolflow1.0.1をインストール
(GPUなし python version=3.5.*)
pip install --ignore-installed --upgrade https:storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.1-cp35-cp35m-linux_x86_64.whl

実行させてみるが学習ループが何回か回るとInvalidArgumentErrorで止まるのでrun.py内のstep_times = 10000を5にすると最後まで行く
20にするとエラーがでる。15にしてstep_per_checkpoint を 100から3にする
十分学習しているとは思えないが先に進む
学習後に
dictionary_i2w.json,dictionary_w2i.json
tmp/checkpoint,model.ckpt.data-00000-of-00001,model.ckpt.index,model.ckpt.meta
のファイルが作成されている

slackのアカウントを取得しAPIをもらう
Botをつくる。

こちらの仮想環境にslackbotをインストールする
pip install slackbot
/home/user_name/anaconda3/envs/tesorflow/lib/python3.5/site-package/slackbot/内にsetting.pyが
あったのでそちらにAPI Tokenを書き込む

$python run.pyとしてボット対話可能となったので
slackサイトにいきbotに質問を入力する

run.pyにデバッグ用のprint文をいれておき
message変数もprintするようにしておいたが
出力せず。
学習不足?

f:id:bitop:20171118181958p:plain

Interface2017-12号第1章メカニズム実験 対話する人工知能を読む

ステップ3 Neural Conversational Modelの構築

tensorflowはver 0.9.0をいれていたが最新版にアップグレードする
仮想環境に入ってpip instal -U tensorflowでver1.4.0になった。

GitHubよりseq2seq_model.py,train.py,util.pyをdownloadする
$python train.pyとするが(4)モデル作成のところでSeq2SeqModelが呼び出している  
seq2seq.pyの内部でエラーがでる。  

テンソルフローのGithubにいきseq2seq_model.pyとseq2seq.pyを差し替え、
data_utils.pyを追加したがエラーが収まりそうにないので今日はここまで。

ローカル名前解決構築

宅内のサーバにアクセスするときIPアドレスを直接入力していた(数が少ないので暗記していた)
まったく困ってはいなかったが「ホスト名だけでサーバーにアクセスできる」という記事が あったので ラズパイに名前解決ソフトを導入してみることにした。

Avahiですでにラズパイには入っていたが稼動はしていなかった。

$systemctl start avahi-daemon
$systemctl list-unit-files -t service | grep avahi
avahi-daemon.service enabled
とでたので
python -m http.server 
#(ver 2.* ではpython -m SimpleHTTPSerVer 8080)
としてWindow機のブラウザーのURL欄の
http://パソコンのホスト名.local:8080でアクセスできた

Interface2017-12号第1章メカニズム実験 対話する人工知能を読む

STEP 2 日本語解析の処理(つづき)

TensorFlowのinstall

condaの仮想環境を使ってinstallする

仮想環境管理のコマンド
◆仮想環境を作る
    conda create -n(または--name) py27(これが仮想環境の名前) python=3.5(pythonのバージョンを指定可能)
  パッケージが全部入っている仮想環境を構築する
    conda create -n <my_env_name> anaconda(これを最後に追加する)
◆すでにある仮想環境をクローンして新しい仮想環境を作る
    my_env -> cloned_envの場合
      conda create -n cloned_env --clone my_env 
◆仮想環境をアクティベート(有効化)
    source activate py27(仮想環境名)
    通常状態だとrootがデフォルトなので他の仮想環境を有効にするにはこれが必要
      仮想環境が有効化するとプロンプトの前に仮想環境名がつく
◆仮想環境をディアクティベート(無効化:環境がなくなるのではない)
    source deactivate
◆現在currentな仮想環境
      conda info -e(または--envs)
      現在カレントな環境にはアスタリスクがつく

◆パッケージのinstall(仮想環境に入ったあと)
    conda install <package name>
◆パッケージのuninstoall(仮想環境に入ったあと)
     conda uninstall <package name>
◆仮想環境の削除
  conda remove -n <my_env_name> --all
◆その他
   ヘルプ
   conda help

ここを参考にinstall

Ubuntu Linux に TensorFlow をインストール – Python でデータサイエンス

GPUが使えない、Pythonのバージョンは3.5

$conda create -n tensorflow python=3.5 anaconda
全部いれておきかたので文末にanacondaを追加した

$conda info -e
tensorflow /home/user_name/anaconda3/envs/tensorflow
root * /home/user_name/anaconda3

source activate tensorflow

$pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp35-cp35m-linux_x86_64.whl
最後にinstallが成功したとのメッセージがでたので

import tensorflow as tf  
hello = tf.constant('Hello, TensorFlow!')  
sess = tf.Session()  
print(sess.run(hello))  
#結果  
b'Hello, TensorFlow'      

pipでinstall したパッケージとcondaでinstallしたパッケージしたものの差

str_pip = !pip list
pip_list = []
for s in str_pip[3:]:
    pip_list.append(s.split(' ')[0].strip())
pip_set = set(pip_list)

str_conda = !conda list
conda_list = []
for s in str_conda[2:]:
    conda_list.append(s.split(' ')[0].strip())
conda_set = set(conda_list)
print("pip install count =   %d" % len(pip_set))
print("conda install count = %d" % len(conda_set))
print("すべての要素(重複なし)= %d 共通の要素 = %d 片方にしかないもの = %d" % (len(pip_set | conda_set),len(pip_set & conda_set),len(conda_set - pip_set)))

結果
pip install count = 185
conda install count = 241
すべての要素(重複なし)= 272
共通の要素 = 154
片方にしかないもの = 87
condaが多かった。

Interface2017-12号第1章メカニズム実験 対話する人工知能を読む

ステップ1会話データ・セット構築

Jupyter notebookで構築していく
フォルダ構造

.
├── data
│   ├── conversation_data.txt
│   └── urllist.txt
└── 対話する人工知能.ipynb

urllist.txt
http://www.aozora.gr.jp/cards/000148/files/773_14560.html
http://www.aozora.gr.jp/cards/000148/files/789_14547.html

get_data.pyはgithub.comに行ってもらってくる。dataフォルダの構造が
違うので若干手直しする。

get_data.pyで会話部分を抽出してファイルに書き出したのが  
conversation_data.txt  
文書の一部  

これから折々お宅へ伺っても宜ござんすか   ええいらっしゃい  
誰の墓へ参りに行ったか、妻がその人の名をいいましたか  いいえ、そんな事は何もおっしゃいません  
これは何と読むんでしょう    アンドレとでも読ませるつもりでしょうね  
すぐお宅へお帰りですか   ええ別に寄る所もありませんから  
....  
わからんですか、困りますな。寒月君は出てくれるでしょうね。今までの関係もあるから    きっと出る事にします、僕の作った曲を楽隊
が奏するのを、きき落すのは残念ですからね
そうですとも。君はどうです東風君    そうですね。出て御両人の前で新体詩を朗読したいです
大分遅くなった。もう帰ろうか  僕も帰る

ステップ2日本語解析

まずはMecabをinstallする

MeCab: Yet Another Part-of-Speech and Morphological Analyzer

このページのダウンロード UNIX:ソースmecab-0.996.tar.gzをダウンロード

$ tar zxfv mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure 
$ make
$ make check
$ sudo make install

次に辞書(推奨)IPA 辞書をダウンロード

$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure
$ make
$ sudo make install

makeのところで「 libmecab.so.2: cannot open shared object file: No such file or directory Makefile:253: ターゲット 'matrix.bin' のレシピで失敗しました 」とでて進まない。 ネットで調べて以下のサイトを参考に解決した

MeCab 用の辞書インストール - 今日もBlueSky

ldconfigを打って共有ライブラリーの依存関係状態を更新させる
ldconfigコマンド自体はこちらを参考

Linuxコマンド集 - 【ldconfig】共有ライブラリの依存関係情報を更新する:ITpro

つづいてsudo make installと打って
最後にmecabを起動

$ mecab
今日も一日ありがとう  <-ユーザが入力する
今日  名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も 助詞,係助詞,*,*,*,*,も,モ,モ
一 名詞,数,*,*,*,*,一,イチ,イチ
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
ありがとう 感動詞,*,*,*,*,*,ありがとう,アリガトウ,アリガトー
EOS

pythonバインディングのインストールをおこなう

MeCab downloads - Google ドライブ

mecab-python-0.996.tar.gzをダウンロードする(mecabのバージョンと合うものを選んだ)

$ tar xzf mecab-python-0.996.tar.gz
$ cd mecab-python-0.996
READMEにinstall方法が書いてあったので
python setup.py buildと打つ
string関係のエラーがでる。ver2.*とver3.*の違いに起因するものと思われる。
修正が終わって
$ sudo python setup.py installと打って
付属していたsampleスクリプト test.pyを使って動作テストを行うが
エラーがでるのでネットを調べる。

qiita.com

pip install mecab-python3と打って
>>>import sys
>>>import MeCab
でインポートエラーがでる
ImportError: /home/beetle/anaconda3/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found 
(required by /usr/local/lib/libmecab.so.2)

ネットでしらべると

blueskydb.blog.jp

$ conda install libgcc
Fetching package metadata ...
........
Solving package specifications: 
.

Package plan for installation in environment /home/beetle/anaconda3:

The following NEW packages will be INSTALLED:

libgcc-ng:    7.2.0-h7cc24e2_2
libstdcxx-ng: 7.2.0-h7a57d05_2

The following packages will be UPDATED:

libgcc:       4.8.5-2          --> 7.2.0-h69d50b8_2

Proceed ([y]/n)? 
libgcc-ng-7.2. 100% |################################| Time: 0:00:01   4.75 MB/s
libstdcxx-ng-7 100% |################################| Time: 0:00:00   4.69 MB/s
libgcc-7.2.0-h 100% |################################| Time: 0:00:00   4.13 MB/s

$python
>>>import sys
>>>import MeCab
>>>>>> m = MeCab.Tagger ("-Ochasen")
>>> print(m.parse("今日も一日ありがとう"))
今日  キョウ   今日  名詞-副詞可能     
も モ も 助詞-係助詞        
一 イチ  一 名詞-数      
日 ニチ  日 名詞-接尾-助数詞     
ありがとう アリガトウ ありがとう 感動詞       
EOS

***************************************************************
直接MeCabに聞いたときの返答、Pythonから帰ってくるアンサーとは若干違いがあるようです
    今日も一日ありがとう  <-ユーザが入力する
今日  名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も 助詞,係助詞,*,*,*,*,も,モ,モ
一 名詞,数,*,*,*,*,一,イチ,イチ
日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ
ありがとう 感動詞,*,*,*,*,*,ありがとう,アリガトウ,アリガトー
EOS
****************************************************************