AIによるチャットボットの作り方 - 更新

AIによるチャットボットの作り方へようこそ

AIゆめ
AIゆめ
   本サイトの目的はAI(Artificial Intelligence:人工知能)を使用した廉価で実用的なチャットボットを一から作成することができるような情報を提供することです。 ここで、チャットボットとはチャット(会話)できるボット(ロボット)のことであり、私自身、夢占いに特化したチャットボットである AIゆめの夢占いチャット を提供しています。
   私はAIの専門家ではありませんでしたが、書籍やウェブサイトを使用して ニューラルネットワークの勉強をしながら「AIゆめの夢占いチャット」を約2か月間で構築することができました。 本サイトが、チャットボットを構築したいけれども一から構築する自信は無いという方のお役に立てれば幸です。
また、既に市販のAIを使っている方は多いと思いますが、チャットボットを日々進化させるためには機械学習が必要です。 そして、実用レベルで機械学習を行って行くにはCPU(Central Processing Unit:中央処理装置)ではなくGPU(Graphics Processing Unit:グラフィック処理装置)環境を構築しておく必要があるでしょう。 しかし、市販のGPU環境は意外に高価であるため簡単には利用できませんし、GPU環境を構築する際には、意外な落とし穴に嵌ってしまう可能性もあります。 本サイトでは、そのようなお悩みを抱えている方に十数万円で構築できる実用的なGPU環境の作り方もご紹介して行きます。

チャットボットの作り方の目次

  1. AIによるチャットボットの作り方
  2. AIとは - ニューラルネットワーク
  3. チャットボット用AIの作り方
  4. AIチャットボット環境の作り方

AIの歴史

   AI(Artificial Intelligence:人工知能)という言葉は1956年のダートマス会議ではじめて使われて以来、何度かブームを巻き起こしました。 特に、1980年代~1990年代にブームを巻き起こしたエキスパートシステムは有名ですが、結局、 ルールの構築やパラメータの調整のコストが膨大にかかってしまうということから一時的なブームに終わってしまいました。
その後、2012年の ILSVRC(大規模画像認識チャレンジ) で、Toronto大学のHinton教授(現在はグーグルの研究員でもある)が率いるチームが開発したディープラーニング(Deep Learning:深層学習)を適用した 深層畳み込みニューラルネットワーク (Deep Convolutional Neural Networks:CNN) が圧勝して注目を集め、AIブームの口火を切りました。 その後、イギリスのAI会社DeepMind Technologies社(2014年にGoogleにより買収)が開発したAIによる囲碁システム「AlphaGo」が、2016年に世界トップレベルの韓国のプロ棋士に圧勝したことから、 AI技術が単なる一時的なブームではなく一般的な技術として普及して来ています。

自然言語処理用AIの歴史

word2vecとは

   チャットボットは言語を扱いますので、自然言語処理用AIの歴史についても触れておきましょう。自然言語処理用AIの分野で長年研究されているのがword2vecという技術です。 word2vecは主に文章の中で空欄になった部分を埋めるような試験問題を解決する手段として使用されることが多いようです。 例えば、下記の文章で、赤の「挨拶」や緑の「こんにちは」などのウィンドウが空欄になっていた場合に、 前後の文脈から空欄を予測するようなニューラルネットワークモデルがCBOW(Continuous Bag-Of-Words)モデルです。 CBOWモデルとは、多数の単語が詰まった袋の中から空欄に入る確率が最も高い単語を選び出すという課題の解決手段でありword2vec技術の一つです。
「今日、鈴木さんに会って挨拶しました。彼は元気にこんにちはと言ってくれました。」

word2vecとその実用性

   CBOWモデルを始めとするword2vec技術では、単語の分散表現(Distributed Representation)が使用されます。 単語の分散表現とは、単語の意味を的確に表す多次元ベクトルで単語を表現する方法であり、この単語の分散表現がword2vec技術です。 色が光の三原色であるRGBベクトルとして表現されているいることから連想すれば、単語の意味を多次元ベクトルを表現することも理解しやすいでしょう。 そして、全てのword2vec技術は、単語の意味は周囲の単語(文脈:Context)により決まるという「分布仮説(Distributional Hypothesys)」に基づいていると言っても過言ではないでしょう。
しかし、この分布仮説は、文章の穴埋め問題などの試験問題を解決する手段としてはある程度有効でしょうが、新たな文章を創造するなどといった実用性には乏しいと考えています。 分布仮説は、CBOWモデルをはじめとするword2vec技術を構築する際に設けられた都合の良い仮説であり、実用に耐えうる汎用性はないと言えるでしょう。 子供が文章を学習して行く過程で、単語の意味を理解しなければ文章を理解できなかったり、誤解してしまったりするという事象は数多く発生しますので、 CBOWモデルでもそのような事象は多く発生して当然でしょう。
CBOWモデルを新たな文章を創造するという課題を解決する用途に発展させたモデルが言語モデルです。 即ち、CBOWモデルは前後の文脈からその中間に入る単語を統計的に予測する課題を解決していましたが、言語モデルでは前の文脈から次に来る単語を統計的に予測する課題を解決することになります。 そして、word2vec技術の実力を知るため、言語モデルを使用して自分のサイトを学習させて文章を創作してみました。
その結果、一見するとまともな文章に見える部分もありましたが、意味が通じない部分や全く逆の意味になっている部分も数多く発生しました。 言語モデルでは、次に来る単語として最大確率を持つ単語を選ぶよう設定すれば学習した文章と同一文章になってしまいますし、 ある程度のバラツキを持たせて次に来る単語を選べばまともな文章になる部分もあれば、意味不明になったり、学習した文章とは全く逆の意味になったりする部分も発生します。 言語モデルでは、単語の意味の類似性は理解できているのでしょうが、単語の本来の意味を理解できていませんので、この結果は当然の結果と言えるでしょう。
なお、word2vecでは大量の文章が与えられるだけで特別な教師データが不要であることから教師なし学習と呼ばれることもあります。 本サイトでは、AIによるチャットボットの実現という目的を持っていますので、Encoder-Decoderモデルとも呼ばれるニューラルネットワークの中でもAttentionという技術に注目しますので、 入力に対応する教師データが与えられる教師あり学習に限定して解説して行きます。

AIの用語説明

ニューラルネットワーク(Neural Network:神経網)

   ニューラルネットワークは、知的な問題解決能力を持った脳のニューロン(neuron:神経細胞)内の計算情報の流れを模擬した図1のようなシステムであり、 AIと同義語と考えても良いでしょう。 下記で解説するRNNと比較して図1のようなニューラルネットワークは、FF(Feed Forward:フィードフォワード)ニューラルネットワークと呼ばれることもあります。詳細は、 AIとは - ニューラルネットワーク をご覧ください。
三層ニューラルネットワーク
図1 三層ニューラルネットワーク

ディープラーニング(Deep Learning:深層学習)

   ニューラルネットワークは入力層、隠れ層(中間層と呼ばれることもあります)、出力層で構成されています。 そして、人間の脳と同様、ニューラルネットワークの層を深くすることにより、より複雑な課題に柔軟に対応できることが知られています。 深いニューラルネットワークの最適な重みやバイアスなどのパラメータを決定する行為がディープラーニング(Deep Learning:深層学習)と呼ばれています。

RNN(Recurrent Neural Network:再帰ニューラルネットワーク)

   従来の FF(Feed Forward:フィードフォワード)型のニューラルネットワーク では扱えなかった時系列情報を扱うことを可能にした時間循環型のニューラルネットワークであり、 その中でもゲート付きRNNに分類されるLSTMやGRUが会話や翻訳などの自然言語処理に活用されています。 RNNの詳細は、 時系列情報に対応したRNN をご覧ください。

LSTM(Long Short-Term Memory:長期の短期記憶を備えたニューラルネットワーク)

   RNNの課題の一つである 長期依存性のある言語モデルの学習における勾配消失を解決するために導入されたモデルであり、ゲート付きRNNモデルの一種です。 シンプルなRNNに記憶セルを設け、inputゲート、forgetゲート、outputゲートという3種類のゲートにより、記憶セルと隠れ層状態との情報交換をコントロールする方法です。 LSTMの詳細は、LSTMによる勾配消失の解決法 をご覧ください。

GRU(Gated Recurrent Unit:ゲート付き再帰ユニットによるニューラルネットワーク)

   学習を効率的に行うことを目的に開発されたモデルであり、LSTMよりも少ないパラメータを用いたゲート付きRNNモデルの一種です。 しかし、GRUではLSTMと同様、活性化関数 としてtanh関数を使用していますが、近年の研究では活性化関数としてReLU関数(Rectified Linear Unit)を用いる研究が増えていますので、本サイトではこれ以上の解説は行いません。

CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)

   畳み込み演算を備えたニューラルネットワークであり、画像処理などで実用的に広く使用されています。 ここで、畳み込み演算とは、例えば、原画像に一定のフィルターウィンドウを適用することにより特徴を抽出する演算であり、フィルターウィンドウのパラメータが学習すべき重みとなります。 また、CNNでは、活性化関数 として単純なReLU関数(Rectified Linear Unit)を使用することが標準となっています。 ただし、自然言語処理の分野ではあまり使用されることはありませんので、本サイトではこれ以上の解説は行いません。

誤差逆伝播法(Back-propagation of Errors)

   ニューラルネットワークの各層の状態変数の変化を表す勾配(偏微分)が、掛け合わせることにより上流に逆伝播しているように振舞う原理のことであり、 ディープラーニング(Deep Learning:深層学習)では、出力層の誤差から重みやバイアスを逐次修正して行く手法として活用されています。 誤差逆伝播法の詳細は、 誤差逆伝播法 をご覧ください。

参考文献および参考サイト

   全般的に参考にさせて頂いた参考書籍を以下に示します。 特定の個所で参考にさせて頂いた参考論文や参考サイトについては、本文中にリンクして示します。


ページトップへ

運営会社情報 | プライバシー・ポリシー
Twitter Twitter Facebook Mail Line

* 無断転載禁止。
* どのページでもご自由にリンクして下さい。
* ご意見・ご質問等がございましたら こちらからメールをご送付下さい。 無料SEO対策 -153.121.92.88。