すなぶろ

Pythonistaを目指しているつもりが、Hyのおかげで無事脱線。Clojurian目指すことになりました。

Python初心者が中級者になるためのスタートダッシュ 【ググるのは時間の無駄】編

皆さん今日もググってますか? 私のようにRubyから転向したPython初心者にとっては、Googleは神のようなサービスです。「Rubyではこう書けたけど、Pythonではどう書けばいいの?」という質問に、Google先生は(基本的には)誠実に応えてくれます。

しかし、この学習方法には大きな問題があります。RubyのコードをいくらPythonに移植しても、Pythonらしい書き方が身に付くわけではないからです。キーワード引数デコレータジェネレータイテレータ……似たようなものはRubyにもありますが、決して同じ使い方をするものではないはずなのです。

ひとつひとつ調べていたのでは、いつまで経っても初心者を卒業できません。できたとしても膨大な時間が必要でしょう。あくまでも包括的な説明を読んで、芯からPythonic Wayを身に着けたいのです。

ではどうすればいいのか。簡単です。教科書を使いましょう。ただの教科書ではいけません。Pythonの教科書です。Javaで説明するには一工夫も二工夫も必要なくらいPythonらしい書き方を説明してくれる、Pythonにどっぷり浸かったPythonの教科書です。

スマートPythonプログラミング、略してスマパイです。そこらの入門書は読破したけど、「Pythonらしい」という感覚がわからないあなたにお勧め。私はこの本でPythonistaの仲間入りをします。

続きを読む

Python初心者に送る「人工知能の作り方」 Part7(終)

前回はマルコフ連鎖で学習・応答するモジュールを作りました。それなりに複雑な処理が含まれていましたが、設計時点で仕様を決めておき、それをコメントを含めたコードにすることで、メンテナンス性を保っています。

sandmark.hateblo.jp

今回はmarkov.pyDictionaryクラスに組み込み、新たにMarkovResponderを追加します。といっても、学習も応答もmarkov.py内で完結しているのでほとんど変更を加える必要はありません。

その代わりといっては何ですが、辞書ファイルが存在しなかった場合の例外処理を組み込んでみます。今回のソースコードはこちら

f:id:sandmark:20171013214817p:plain
結論:ハムスターはAI。作者もAI

続きを読む

Python初心者に送る「人工知能の作り方」 Part6 後編

前回は「マルコフ連鎖とはなんぞや」に始まり、それをプログラムの設計に落とし込むところまで行きました。今回はいよいよ実装に移ります。

sandmark.hateblo.jp

Python的には『オブジェクトのコピー』『オブジェクトの永続化』を扱っていきます。今回のソースコードはこちら

f:id:sandmark:20171013001115p:plain
坊っちゃん、「ぞなもし」と言う

続きを読む

Python初心者に送る「人工知能の作り方」 Part6 前編

このシリーズも佳境となり、ついにAIが初めての自分の言葉を発しました。人間の赤ちゃんだって親の真似をするのですから、前回は猿真似をする猿から一気に人間の赤ちゃんまで進化したと言えます。

sandmark.hateblo.jp

今回はさらに踏み込んで、「ゼロから言葉を作る」という試みをやってみましょう。しかし課題が課題なので、今回は実装方法の説明に留め、次回から本格的にコーディングしていきます。

f:id:sandmark:20171012013103p:plain
ゼロから始めるマルコフ連鎖

続きを読む

Python初心者に送る「人工知能の作り方」 Part5

前回は形態素解析による学習と、名詞に関連した文章を返すPatternResponderを追加しました。キーワードで連想的に応答を生成させることで、そこそこ文脈を保った会話が実現した気がします。とはいえ一文をまるごと保存しているため、オウム返しされている感は否めません。

sandmark.hateblo.jp

そこで今回は本格的に「文章を生成させる」ことに焦点を当ててみます。ゼロから生成させるのは手がかりがないので、形態素解析を応用してユーザーの発言を分解してテンプレートとして学習し、そこから文章を作り出してみます。今回のソースコードはこちら

f:id:sandmark:20171011001912j:plain
ごくまれに絶妙なボケをかますAI

続きを読む

Python初心者に送る「人工知能の作り方」 Part4

前回はリスト内包表記と正規表現を使って新しい思考エンジンを作りました。しかし依然として辞書はユーザーが手作業で作らなければならず、チャットをしても新しい発見があるとは思えません。

sandmark.hateblo.jp

今回はDictionaryに学習機能を組み込みます。Python的にはファイルへの書き込みと、形態素解析ライブラリを使ってみます。今回のソースコードこちら

f:id:sandmark:20171010012436j:plain
Unmo + 吾輩は猫である = ???

続きを読む

Python初心者に送る「人工知能の作り方」 Part3

前回はAIに思考エンジンを追加しました。まだまだ会話にはなりませんが、継承を使ってコードを簡潔に保つことで、機能を追加しやすい状況にしています。今回のソースはこちら

sandmark.hateblo.jp

f:id:sandmark:20171009033450j:plain
チャットボットっぽくなってきた?

今回のテーマは『Responderの動的切り替え』『データとプログラムの分離』『新たなResponderの追加』です。Python的には、ファイルの読み込み、リスト内包表記、正規表現を扱います。

続きを読む