Petea's conference room

エンジニア目線で語ります

MENU

【3日目】初心者だからまず無料APIを使って簡単なAIを作ってみよう!

初心者が10分もあれば作れるAIがあるだと!?

そんなHappyなことあるわけなかろう…

ということで作ってみました。

 

―――――――――――――――――――――――――――

こんにちは。アラサーサラリーマンです。

 

今回は、既に世の中に出回っている無料APIApplication Programming Interface)を使って、簡単なAIを作ってみようと思います。

APIを使うので、AIを作るというか、AIを使える枠組み・仕組みを作ってみる感じになるんですかね?

APIとは何ぞやということについては、後ほど私の理解をさっと書いておきます!

 

これをやることで、自分が今後詳しくやっていくべきことを学べれば今回の目標は達成です!

 

0. そもそもAPIって何?

 

そもそもAPIって何?ってことを私がざっと調べて理解したイメージで書きます!

(自分が理解しやすいイメージで覚えておけばまあ問題はないでしょう!)

APIアプリケーション プログラミング インターフェースの略だそうです。

これだけではイマイチよく分からんのですが、

我々は、APIに変数を渡せば、APIを通してAPI開発元(ライブラリ)の機能を使えるようになるそうです。それもライブラリの中身を知らなくとも。

 

つまり、高性能なスマート調理器みたいなものですね。

食材を入れてスイッチ押すだけで完成した料理を出してくれるのがAPIですね。開発元が育成してきたノウハウを使って、混ぜたり煮たり色々してくれるんでしょうけど、その過程はユーザーはわからないです。

 

とにかく我々はAPIに食材を渡せば具体的な結果を返してくれると覚えておきます。

(下図みたいな感じですね)

調理家電に具材入れたらカレーが出てくるイメージ

 

1. 必要なDoを整理しよう!

 

まずは今回必要なDoを調べました。

  • 使用するAPIを決める
     今回はリクルートが公開している無料APITalk API」を使ってみようと思います。決め手は料金です。
     NTTのAPIもありましたが、私が調べた限りでは料金がかかりそうだったので、やめました。(もしかしたら調べ方がまずかっただけかもしれませんが、、、)
  • 作成したAIを使うためのUI(User Interface)を準備する
     …ココ、盲点でした。確かにUIがなければAIを実行できませんね。
     私が最終的にやりたい自動文章作成AIも何らかの見やすいUIを介して実行していく感じにしたいです。
     わかりやすいUIにするためにはHTMLなども使いこなさないとできそうにないので、
     今回は(UIを最終的にはどうやって作るのか考えながら)、UIにこだわらず実行結果が確認できればOKということにします。
  • APIを呼び出して使うコードを記述する
     …ええ、今気づきましたが、コード書けないと始まらないじゃん!
     この業界にたった今生まれ落ちた私のような存在はこの初歩のAIもできないじゃん!
     …よし、ここは世の中の猛者達の技術を使わせてもらおう…
     …もはやこれはAIを作るというよりかは、コピペして使っただけになるが…まあ許してもらおう…

…気を取り直して、順番にDoをつぶしていこう!

 

2. Talk APIを使えるようにしよう!

 

前項でも書きましたが、今回はリクルートの出しているTalk APIを使います。

使えるようにするための手順は下記サイトを参考にさせていただきました。

5分くらいでAPIを利用できる権利を得ることができました!(簡単!)

auto-worker.com

 

リクルートのサイト(PRODUCT | A3RT (recruit.co.jp))によれば、Talk APIとは、

Chatbotを作成するためのAPIです。 Recurrent Neural Network(LSTM)を用いた入力文からの応答文生成による日常会話応答機能を提供します。 Talk APIを活用したChatbotによって様々なアプリケーション上でユーザとの対話を自動化し、 どのようなタイミングにおいても即座にユーザからの問いかけに対して応答することができます。

とのこと。おそらく会話を入力したらAPIさんが答えを探してきて返答を返してくれます

このRecurrent Neural Networkというのは、ニューラルネットワークのように各層の入力が次の層に影響を与えるだけでなく、ある時点での入力がそれ以降の時点の入力による出力にも影響するらしい。

ヘエースゴイネ-、アラサービックリシチャッタヨ。

 

3. Talk APIを呼び出す環境を考えよう!

 

モシカシテ、イロンナホウホウデ エーピーアイッテ ヨビダセルノカナ?

って状態なんですが、今後のことを考えてGoogle Colaboratory(Colab)を使ってみたいと思います!

Colabを使えばWEB上でPythonの記述・実行ができるらしく、

PCのこと正直よくわかんな~い。環境整備とか自分でやるのたいへ~ん。」と思っている私にはうってつけだな! ということで実はちょっと知ってました。

ちなみにPythonプログラミング言語の1つです。コンピュータと人間がおしゃべりするときに使う言葉です。猫と話すとき人間も「にゃ~」と言いますよね。あれです。

 

早速Google Colaboratoryと検索してサイトに行ってみると、下図の画面が出てきて、、、

なんとなんと、何もしてないけどもう使える感じ!?

試しにcolab開いてみると既に使えるようになっていた…!

 

Googleにログインしているだけで使えそうです!

小さくて見づらい(赤線部)ですが、環境構築不要、ブラウザ上で記述・実行可能と書いてありますね~

初心者にとてもやさしいですね!

 

実行結果は味気ない感じのようですが、今回の目的としては十分です!

 

4. Talk APIを呼び出して自然対話AI(チャットボット)を使ってみよう!

 

先に謝っておきますが、私はまだPythonコードを十分に書けませんので、

先人のコードを拝借して実行するだけです。

繰り返しになりますが、AIを使うための仕組みを理解して、今後やるべきことを学ぶのが今回の目的です。

 

今回拝借させていただくコードの主のリンクはこちらです。

blog.tkrel.com

 

上記リンク先に紹介されているコードをcolabのセルにコピペして実行して、Talk APIのkeyを入力するだけです!

すると下記画面が出てきました!

こんだけのコードで初心者でもチャットボット作れるんや…! と私は声に出しました。

 

まず初めに、上図赤枠で囲った実行結果欄(出力欄)に

自分:(空白)
と出てきたので、
(空白)に「おはよう」と入れたら、なんと「おはようございます」と返してくれるではありませんか!
私の初めてのAI(コピペしただけ)BOTちゃん素直で可愛い…!
可愛すぎたのでちょっと意地悪してみたら、私のことが邪魔になったのか寝てほしいって意思が出ちゃってお礼言ってくるのも可愛い…!
 
 
これだけのコードでAPIを呼び出すことで自作AIができちゃうんですね。
世の中の進歩にびっくりするとともに、ちょっと希望が見えました。
(まあその呼び出したものをどう作るかが大変なんだと思いますが、、、)
 
…ということで、強引に(コピペ)自作AIを初めて作れた、ということにして、
コピペしたコードの構造を初心者なりに分析してみましょう。
 

5. コードを分析して理解し、次につなげよう!

 
今回のコピペを次につなげないと行なった意味がないので、ネットで検索しながらコードを分析します
文末が断定表現になっていますが、調べながら書いているだけなので、本当は「~らしい」と書きたいくらいです。
 
(半分自分の頭の整理に書き出しているので、読みづらいです。破線と破線の間は読み飛ばしてください。)
----------------------
  • 1行目:Requestsモジュールをインポートして使えるようにしている。7行目に使っているんですかね。
  • 3,14行目:talk_api関数とmain関数を定義している。変数messageを受け渡しているよう。
  • 20行目:本流はここですね。あるときにmain関数を呼び出せっていう命令が出ていますね。プログラミングってこうやって関数呼び出して終了って感じなんかな。_name_==_main_ってやつはコマンドラインから入力された場合を指す。なんのこっちゃねん!
  • 14~18行目:main関数の中は、Trueの間(Falseになることないから切らない限りずっと続くわけね。)、以下を繰り返す。
    • 「自分:」を出力する。ただし改行しない。
    • message変数に自分がリアルタイムで入力した文字を代入。
    • BOT:」とtalk_api関数にmessageを渡して返ってきた結果を出力する。
  • 3~12行目:talk_api関数の中では受け取ったmessageを使って何かをreturnしている。
    • 4,5行目:Talk APIのkeyとURLの文字列を変数に代入。
    • 6行目:「apikey」と「query」キーと変数apikeyとmessageの値を対応させている。
    • 7~12行目:requests関数でURLを指定してapikey、queryを渡して、モデルで出力されたjson形式の変数をreturnして、モデルで出力できなかった場合は、「ごめんなさい」をreturnしているってことか。この文章はこっちが決めて良いわけね。
      念のため、「自分:」に続いて空白のままEnterするとリクルートのサイトに記載のステータスコードとメッセージも返してくれてた。これが11行目の部分というわけね。
----------------------

覚えることが多すぎて、もうお腹いっぱいなので、jsonjava scriptの何かだということだけは覚えておきます。。。

モデルで出力できなかったときのメッセージは、APIは返してくれないんですね笑

 

APIを使ったのでモデルの中身はブラックボックスですが、

文章を入力させて、それを関数に渡して、既に作ってあるモデルに横流しして、計算してもらって、元の画面に返してやれば1対1で対応した回答が返ってくる構造になっているって思っておけばよさそうです。

 

私がやりたいことは、

キーワードを入力させて、それを関数に渡して、これから試行錯誤するモデルに横流しして、計算してもらって、元の画面に文章を返す構造にすればよさそうなので、

ほとんどこの形式と同じっぽいですね。

 

APIが隠したノウハウの部分を習得しようとしたら、

既にあるものを組み合わせたり、改造すればイケるものなのか、

自分で一から作るものなのか全くわからないので、次はそこら辺のお勉強をすることになりそうですね。

ではまた次の日に!

 

※ブログも初心者なもので文字ばかりになってしまい、見ていただいた皆様には恐縮です。徐々に見やすくできればと思いますので、しばらくの間お付き合いください。