すなぶろ

フリーランスのWebエンジニアがPythonを中心にプログラミング情報を紹介していきます。Rubyも書きますが、今はPython勉強中。一緒にPythonista目指しましょう!

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的には、ファイルの読み込み、リスト内包表記、正規表現を扱います。

続きを読む

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

前回はAIを作るにあたって、全体の骨組みとインターフェイスを作ってみました。結果として「○○ってなに?」としか発言しない、とてもAIとは呼べないものになっていますが、今回はもう少し反応を改善してみます。

sandmark.hateblo.jp

前回のおさらい:

  • Responderクラス
    • 入力にもとづいて応答を返す思考エンジン。
  • Unmoクラス
    • 人工無脳コア。
    • 思考エンジンResponderを持ち、ユーザーと思考エンジンを接続する。
  • フロントエンド
    • とりあえずコンソールアプリケーション。
    • ユーザーからの入力を受け取り、Unmoオブジェクトへ渡し、応答結果を表示する。

しかし改善するといっても、どうやって行えばいいのでしょうか。また、Responder, Unmo, インターフェイスがひとつのmain.pyに記述されているのもいただけません。ひとつひとつ見ていきましょう。

f:id:sandmark:20171007192138j:plain
改善(?)されたAIとの会話

今回のソースはsandmark/unmoに置いてあります。

続きを読む

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

f:id:sandmark:20171007025609j:plain
プログラムと会話(?)しよう!

昨今、機械学習ディープラーニングといったキーワードで注目を集めているPython。簡潔な文法から初心者向けの学習目的にも採用されています。

とはいえ、入門書を読んだだけではよくわからないという人も多いはず。「何をどうやって作ればいいの?」「文法はわかったけど書き方がわからない」という疑問は初心者にありがちで、「英語の文法はわかっても読めない・書けない」のと似ています。解決方法はズバリ、人と会話したり、手を動かしてみることです。

この記事ではPython初心者、ひいてはプログラミング初心者に「チャットbotを作る」という目標を設定してもらって、具体的な作り方や設計方法を見てもらいます。Microsoftりんなほど高度なものではありませんが、プログラムとチャットする楽しさを感じながら、プログラミングテクニックを身に着けてもらえればと思います(今回扱うAIは機械学習とは無関係です)。

初めて'Hello, World!'を出力させたときの感動をもう一度味わってください。

今回の目標は「とりあえずプログラムと会話する」です。最初はバカバカしいくらい退屈ですが、徐々に成長させていくのでゆっくりやっていきましょう。

続きを読む

django-rest-frameworkのチュートリアルを超意訳してみた。第07回「スキーマとクライアントライブラリ」

このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。

欲しかった機能はこんな感じ。

  • モデルデータのCRUD
  • モデルの特定フィールドの検索
  • 多対多(ManyToMany)でよろしくやる
  • 登録ユーザのみ許可する認証処理
  • pythonスクリプトからAPIを使う(おまけ)

可能なのかどうか半信半疑で使ってみましたが、チュートリアルに全部書いてあったので参考になれば。

今回はTutorial 7: Schemas & client libraries(version 3系)の超意訳です。

続きを読む

django-rest-frameworkのチュートリアルを超意訳してみた。第06回「ViewSetとRouter」

このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。

欲しかった機能はこんな感じ。

  • モデルデータのCRUD
  • モデルの特定フィールドの検索
  • 多対多(ManyToMany)でよろしくやる
  • 登録ユーザのみ許可する認証処理
  • pythonスクリプトからAPIを使う(おまけ)

可能なのかどうか半信半疑で使ってみましたが、チュートリアルに全部書いてあったので参考になれば。

今回はTutorial 6: ViewSets & Routers(version 3系)の超意訳です。

続きを読む