Translate

2017年3月29日水曜日

「光陰矢のごとし」な話

..どうでもいい話ですが..


Sequence-to-Sequenceの学習はぶんまわしたまんまで、
TensorFlowのdecoder用Dockerコンテナをつくっておこうと
おもい、せっかくならgcr.io/tensorflow/tensorflowでなくtensorflow/tensorflowでつくろうとした。

..ら新しいコンテナでモデルが復元できない..

どうも変数スコープ名が変わったらしい..

おや..とおもい、pip3 listしたら..

tensorflow (1.1.0)

..ん?

TensorFlowのlatest
5日前に
1.1.0rc0にバージョン上がっとるやんけ!

...ご注意ください。


というか、
マジ開発者はlatestなんて甘いタグでpullしてる時点で
おバカまるだしってことか..

ひえ~

2017年3月9日木曜日

CloudStackのコンソール画面が出なくなった

CloudStack4.2.1を使っているのだけど、先日突然次のようが画面が出てmanagerのコンソール画面が表示できなくなった。




動いているVM上のOSはLinux、Windows関係なく。

VM自体は生きているので、ssh接続やリモートデスクトップ接続は可能な状態だ。

もう5年位か、これまで問題なく動いてきたのになあ..


と、思って調べてみたら..ルート証明書の期限が切れてた..

半年後もう1台あげてるから、そっちもゆくゆくは切れるのね..



そうか、HDDの寿命は4年だから、それくらいにはOpenStackも安定してきてるだろうから
入れ替えるだろうと思って5年にしてたんだっけ..


そういや最近はCloudStackもOpenStackもあんまり頑張って入れようって人いなくなったなあ..

ケチ臭くなって、OS上にコンテナ複数立てて使ってるか、クラウドのIaaSのどっちかだもんね..

1vCPU4MBメモリのCloudStack インスタンス上に redmine, jenkins, subversion, postgresql, ownCloudの5つのコンテナあげて、親OSのFreeIPAとRoundcubeでユーザLDAP/メールまで一元管理するケチケチプロジェクト支援サーバでやりくりしてるし..

OpenStackなんか入れるラック買いましょうなんて、今役員に稟議だしたら正気かを疑われてしまう..

..のは言い過ぎか..


..にしても、せちがない世の中になったなあ..



..直すか..

2017年3月7日火曜日

会話モデルをSeq2seqで動かしてもちっとも対話できないので焦ってネタ元論文を翻訳してみる




翻訳に使われているモデル seq2seq で対話もできるときいたので、
やってみたのだけど..

..一向に話をしようとしない..

たとえば、

> こんにちは、ごきげんいかが。
そんなに そんなに そんなに どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう
 どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう どう
どう どう どう どう どう どう どう どう どう どう

とか、

> こんにちは。
出し 出し 出し 」 話し 話し 話し 話し 話し 話し 話し 話し 話し 話し 話し 話し 話し 話し 話し 話し やろ や
ろ 作っ 作っ ? ? 作っ 例えば ? ? 例えば ? 例えば ? 例えば ? 例えば ? 例えば 大丈夫 大丈夫 大丈夫
大丈夫 大丈夫 作っ 作っ ? ? 作っ ?

とかで、全然答えはおろか、類似単語ですら無い..



しかも、狂気を感じる..

キメラを錬成しようとして、キ^H^Hになったタッカーさんとか、ちょっとよぎってしまった。


ちなみに、あんなかわいい子供はいないのでご安心を..(●者の石はおろか、●金技術自体ありませんよ;-p)







..話を戻して..

本当に、 sequence-to-sequence モデルで実現可能なのだろうか..

ということで、皆がやっている論拠にしている元ネタ論文を見つけた。

A Neural Conversational Model
http://lion.exa-corp.co.jp/redmine/attachments/download/2240/1506.05869v1.pdf

著者のメールアカウントからすると、Google社員らしい..


で、いつものように翻訳してみた。
参照の際は、at your own risk でお願いします。

先にいっておくと、
この論文を読むにはそれほど技術力やを必要としない
数式も全く出てこない
Seq2Seqモデルの中身を知らなくても、まあ読むことは可能なので
会話型モデルを機械学習で挑戦しようとする人は
一度は目を通しておいたほうが良い

中身は殆ど実行した結果、どんな対話ができるかをしめしているだけなのだけど
コレくらいの精度はでてる人がいる事がわかるのだ。

Seq2Seqモデルを下手にいじってしまう前に、
まずこのくらいの精度がでるコーパスをまず用意せよ
ということだ、と読んだ。

---

会話型ニューラルモデル (A Neural Conversational Model)



著者:Oriol Vinyals VINYALS@GOOGLE.COM Google、Quoc V.Le QVL@GOOGLE.COM Google

概要


会話型モデリングは、自然言語の理解と機械インテリジェンスの重要なタスクである。以前のアプローチは存在するが、それらはしばしば特定のドメイン(例えば、航空券の予約)に限定され、手作りのルールを必要としていた。本稿では、提案したシーケンスをシーケンスフレームワークに適用した簡単な手法を提案する。我々のモデルは、会話の前のセンテンス、またはセンテンスを与えられた次のセンテンスを予測することによって会話する。我々のモデルの強みは、それがエンドツーエンドで訓練できるため、手作りのルールがはるかに少なくなることにある。このシンプルなモデルは、大きな会話訓練データセットを仮定すると、簡単な会話を生成することができる。我々はまず、間違った目的関数を最適化しているにもかかわらず、ドメイン特有のデータセットと、映画サブタイトルの大きなノイズの多い一般的なドメインデータセットの両方から知識を抽出できることを示唆する。 ドメイン固有のITヘルプデスクデータセットでは、モデルは会話を通じて技術的問題の解決策を見つけることができる。ノイズの多いオープンドメイン映画のトランスクリプトデータセットでは、モデルは簡単な形の常識推論を実行できる。予想通り、一貫性の欠如が我々のモデルの一般的な失敗モードであることも判明する。

1. はじめに


ニューラルネットワークのエンドツーエンドトレーニングの進歩は、音声認識、コンピュータビジョン、言語処理など、多くの分野で目覚しい進歩をもたらした。最近の研究では、ニューラルネットワークは単純な分類だけでなく、複雑な構造を他の複雑な構造にマッピングするために使用できることが示唆されている。これの一例は、自然言語理解の直接の応用を有する別のシーケンスにシーケンスをマッピングするタスクがある(Sutskever et al., 2014)。このフレームワークの主な利点の1つは、最先端の結果と一致しているかそれを上回っている間に、特徴量設計とドメインの特異性がほとんど必要ないことにある。この進歩により、研究者がドメイン知識が容易に利用できないタスクや単純にモデル化するのが難しいタスクに取り組むことを可能にする、というのが我々の見解である。

会話型モデリングは、クエリと応答の間のマッピングを必要とするため、この定式化から直接利益を得ることができる。このマッピングの複雑さのために、会話型モデリングは、以前は特徴量設計を主な作業としてドメインを非常に狭くして設計していた。この作業では、会話モデリングタスクを、再帰的ネットワークを使用して前のシーケンスまたはシーケンスを与えられた次のシーケンスを予測するタスクにキャスティングすることで実現する(Sutskever et al., 2014)。このアプローチは、会話への流暢で正確な返答を生成する上で驚くほどうまくいくことがわかる。

ITヘルプデスクの会話のデータセットからチャットセッションのモデルをテストし、そのモデルが問題を追跡してユーザーに役立つ回答を提供することがあることを確認する。また、映画サブタイトルのノイズの多いデータセットから得られた会話を実験し、モデルが自然な会話を保持し、時には簡単な常識推論の形式を実行できることを確認する。どちらの場合も、リカレントネットは、nグラムモデルと比較してより良い予測性能を取得し、重要なロングレンジ相関を捕捉する。定性的な観点から、私たちのモデルは時には自然な会話を生み出すことができる。

2.関連する研究


我々のアプローチは、シーケンスをシーケンスにマッピングするためにニューラルネットワークを使用することを提案した最近の研究に基づいている(Kalchbrenner & Blunsom, 2013; Sutskever et al., 2014; Bahdanau et al., 2014)。このフレームワークはニューラルマシンの翻訳に使用されており、WMT'14データセットからの英仏および英独翻訳作業の改善を実現している(Luong et al., 2014; Jean et al., 2014)。これは、解析(Vinyals et al。、2014a)やイメージキャプション(Vinyals et al。、2014b)などの他のタスクにも使用されている。バニラRNNが消失勾配に苦しんでいることはよく知られているので、ほとんどの研究者はLSTM(Long Short Term Memory)リカレントニューラルネットワークの変種を使用している(Hochreiter & Schmidhuber, 1997)。

我々の研究は、最近のニューラル言語モデリングの成功(Bengio et al., 2003; Mikolov et al., 2010; Mikolov, 2012)にも影響を受けている。最近では、Sordoni ほかの論文や (Sordoni et al., 2015)およびShangほかの論文(Shang et al., 2015)は、リバースニューラルネットワークを使用して、短い会話での対話をモデル化した(Twitterスタイルのチャットを訓練)。

ここ数十年に渡って、多くの研究者がボットと会話エージェントを構築してきたが、参考文献の網羅的なリストを提供すること自体はこの論文の範囲外である。しかし、これらのシステムの大半は、多くの段階のかなり複雑な処理パイプラインを必要とする(Lester et al., 2004; Will, 2007; Jurafsky & Martin, 2009)。私たちの仕事は、ドメイン知識が不足している問題に対するエンドツーエンドのアプローチを提案することであり、従来のシステムとは異なっている。原則として他のシステムと組み合わせて候補回答のリストを再採点することができるが、私たちの仕事は、いくつかの文脈で回答の確率を最大にするよう訓練された確率モデルによって与えられる回答に基づいている。

3.モデル


我々のアプローチは、(Sutskever et al., 2014)に記載されている sequence to sequence _(seq2seq)_ モデルを利用する。このモデルは、入力シーケンスを一度に1トークンずつ読み込み、出力シーケンスを一度に1トークンだけ予測するリカレントニューラルネットワークに基づいている。トレーニング中に真の出力シーケンスがモデルに与えられるので、学習はバックプロパゲーションによって行うことができる。モデルは、その文脈を考慮して正しいシーケンスのクロスエントロピーを最大にするように訓練される。推論の間、真の出力シーケンスが観測されないと仮定すると、予測された出力トークンを入力として供給して、次の出力を予測するだけである。これは「貪欲な」推論アプローチである。あまり欲張っていないアプローチは、ビーム探索を使用して、前のステップでいくつかの候補を次のステップに送る。予測されたシーケンスは、シーケンスの確率に基づいて選択することができる。

具体的には、たとえば最初の人が「ABC」を発声し、もう1人が「WXYZ」と応答する会話を観察すると仮定する。図1に示すように、リカレントニューラルネットワークを使用して「ABC」と「WXYZ」をマッピングすることができる。

 


図1. 会話をモデル化するための seq2seq フレームワークの使用

シーケンス・シンボル " < eos > "の終わりを受け取った時のモデルの隠れた状態は、文の情報、すなわち 「ABC」の情報を格納しているので、思考ベクトルとして見ることができる。

このモデルの強みは、そのシンプルさと一般性にある。このモデルは、機械翻訳、質問/回答、および会話に大きな変更を加えることなく使用できる。

しかし、翻訳のようなより簡単なタスクとは異なり、一連のシーケンスのようなモデルは、いくつかの明白な単純化のためにモデリング対話の問題を首尾良く "解決"できない。最適化された目的関数は、典型的には長期間であり、次のステップ予測ではなく情報の交換に基づいている。一貫性と一般的な世界知識を確実にするモデルがないことは、純粋に監督されていないモデルの別の明らかな制限でである。

4. データセット


実験では、クローズドドメインのITヘルプデスクのトラブルシューティングデータセットとオープンドメインの動画転写データセットという2つのデータセットを使用した。 2つのデータセットの詳細は次のとおりである。

4.1. ITヘルプデスクトラブルシューティングデータセット


最初の一連の実験では、ITヘルプデスクのチャットサービスのトラブルシューティングから抽出されたデータセットを使用した。 このサービスでは、顧客はコンピュータ関連の問題に取り組んでおり、スペシャリストはソリューションへのウォークスルーを補助している。 典型的な対話(またはスレッド)は長さが400語であり、ターンテイクは明確に通知されている。 我々のトレーニングセットには30Mのトークンが含まれており、3Mのトークンが検証として使用された。 その際、いくつかクリーンアップが実行されている。たとえば、一般的な名前、数字、完全なURLの削除などである。

4.2. OpenSubtitles データセット


また、 OpenSubtitles データセット(Tiedemann, 2009)をつかってモデルを実験した。このデータセットは、XML形式のムービーの会話で構成されている。映画に登場する人物の文章が含まれている。データセットからXMLタグと明白な非会話テキスト(ハイパーリンクなど)を削除する簡単な処理ステップを適用した。ターンテイクが明確に示されていないので、異なる文章で発話されたと仮定して連続文を扱った。我々はモデルを訓練して、前の文を次の文で予測し、すべての文に対してこれを実行した(各文が文脈とターゲットの両方に使用されるので、データセットのサイズが2倍になる)。我々の訓練と検証の分割は、トレーニングのサンプルとして62M文(923Mトークン)を使い、検証セットは26M文(395Mトークン)を使った。分割は、一対の文の各センテンスがトレーニングセットまたはテストセットに一緒に現れるが、両方ではないように行われた。前のデータセットとは異なり、 OpenSubtitle はかなり大きく、連続した文章が同じ文字で発音される可能性があるため、かなりノイズが多い。映画の範囲を考えると、これはオープンドメインの会話データセットであり、技術的なトラブルシューティングのデータセットとは対照的である。

5. 実験


この章では、2つのデータセットを使用した実験結果について説明する。我々は客観的な尺度としてテストセット上のモデルの予測性能で表現する。 また我々が訓練したシステムとの相互作用のサンプルをいくつか示す。
 

5.1 IT ヘルプデスクトラブルシューティングの実験


このドメイン特有のクリーンなデータセットのデータが不足しているため、勾配クリッピングを伴う確率的勾配降下を用いて1024個のメモリセルを有する単一層LSTMを訓練した。 私たちは最も一般的な20K単語の語彙を作り、ターン・テイク・アンド・アクターを示す特別なトークンを導入した。

収束時には、このモデルは予測性能 8 を達成したが、n グラムモデルは 18 に達した。以下は、アクタ「マシン」が Neural Conversational Modelであり、アクタ「人間」がマシンと対話するシミュレートされたトラブルシューティングセッションのサンプルである。

 

会話1: VPNの問題


問題説明 :VPNアクセス時に問題発生
 

Machine: hi
         (ハイ)
Human: hello
       (こんにちは)
Machine: could you please let me know what are the operating systems you are using ?
         (使用しているオペレーティングシステムについて教えてもらえませんか?)
Human: i am using linux
       (Linuxを使ってます。)
Machine: ok it was in the ssl vpn on which you stated it was broken
         (OK、あなたが壊れたと状態付けたモノはSSL VPN上にありました)
Machine: please check if you are logged in to corp network
         (社内ネットワークにログインしているかどうか確認してください)
Machine: what is the error that you are running please
         (動作中のエラーは何ですか、プリーズ)
Human: i am seeing an error related to vpn
       (VPN関連のエラーに見えます。)
Machine: what is the error message that you are getting when connecting to vpn using network connect ?
         (ネットワーク接続を使用してVPN接続する際に表示されるエラーメッセージは何ですか?)
Human: connection refused or something like that
       (「connection refused」とそれに類するものですね。)
Machine: may i know the version of network connect you connect ?
         あなたが接続しているネットワーク接続のバージョンを知るかもしれませんか?)
Human: i am not sure i know that
       (よくわかりません。)
Machine: is the network connect prompting for any user certificate
         (ネットワーク接続はユーザ証明書を表示していますか)
Machine: ?
       (?)
Human: yes
       (はい)
Machine: are you at home or at work at the moment?
         (家ですか、それとも職場ですか?)
Machine: office ?
         (職場?)
Human: i am at home
       (家です)
Machine: try this
         (こちらを試しなさい)
Machine: goto <URL> page and enter your name and password
         (<URL>ページへ進み、名前とパスワードを入力しなさい)
Human: done
       (やりました)
Machine: try logging in with <NAME> and check if its working fine now
         (<NAME>でログインを試し、今すぐ動作を確認しなさい)
Human: yes , now it works !
       (はい、動きました!)
Machine: great
         (すばらしい)
Machine: anything else that i can help
         (他になにか助けることありますか)
Human: no , that was very useful
       (いいえ、とっても便利でした。)
Machine: you are other than<NAME> : )
         (あなたは<NAME>以外です :)  ←多分、洒落的な返事らしい)
Machine: have a nice night
         (良い夜を)


会話2: VPNの問題


問題説明 :ブラウザのクラッシュ
 

Machine: hi
         (ハイ)
Human: hi
       (ハイ)
Machine: could you please let me know what is the operating system you are using ?
         (使用しているオペレーティングシステムは何か教えていただけませんか?)
Human: linux
Machine: ok this is the issue with the system performance, nasser , tools .
         (OK、これはシステムパフォーマンス、ナッサー、ツールの問題です。)
Human: what is that ?
       (なんだって?)
Machine: is it a windows machine ?
         (Windowマシンですか?)
Machine: we have linux on your machine .
         (我々はあなたのマシン上にLinuxを保有しています。)
Machine: is it windows xp or windows 7 ?
          (WindowsXPもしくはWindows7ですか?)
Human: i am using linux
       (Linixを使ってます)
Machine: let me take a remote of your machine and check if issue has been pushed properly .
         (マシンをリモートで使って、問題が適切にプッシュされているかどうかを確認します。)
Human: ok
       (OK)
Machine: please open terminal and run the below commands in one computer :
         (ターミナルを開いて、次のコマンドを実行してください:)
Machine: sudo apt-get update
Machine: sudo apt-get upgrade
Machine: sudo <COMMAND>-updater
Human: done
       (やった)
Machine: let me try connecting now
         (今すぐ接続してみましょう)
Human: ok
       (OK)
Machine: its done
         (やった。)
Machine: should use the second or hit run on the background
         (2回目を使ってバックグラウンドで実行すべき)
Human: done
       (やったよ。)
Machine: try signing out now and follow the prompts as per the message given above
         (今すぐサインアウトし、上記のメッセージに従ってプロンプトに従ってください)
Machine: shd i reboot the machine .
         (マシンをリブートしてもいい?)
Human: ok , please go ahead
       (OK、進めて。)
Machine: once its completed please try to login.
         (完了したらログインしてください。)
Human: sure
       (はい。)
Machine: please ping me back once you have tried to login
         (ログインしようとしたら、私にpingしてください)
Machine: are we still connected
         (私たちはまだ接続していますか)
Human: i now logged in
       (ログインしたよ。)
Machine: thanks for your confirmation
         (ご確認いただきありがとうございます)
Human: what should i do now ?
       (何をしたら良いの?)
Machine: wait for 1 5 minutes to complete the login policy
         (ログインポリシーを完了するために1 5分間待ちなさい)
Machine: and then try logging in
         (そしてログインシてみてください)
Human: ok
       (OK)
Machine: is there anything else to help you ?
         (ほかにお助けすることはありますか?)
Human: let my try browsing a little bit and if it keeps crashing i will let you know
       (ちょっとブラウズしたら、すぐこわれるんだ。)
Machine: sure will do
         (確かに、やってみます。)
Machine: seems the mail is not loading
         (メールがロードされていないようようです)
Machine: are we still connected to the chat ?
         (まだチャットに接続していますか?)
Machine: <reinvite>
         (再接続)
Human: it seems good now , cool , thank you , bye
       (良くなったみたい、クール、ありがとう、バイ。)
Machine: you , too
         (あなたも)
Machine: bye
         (バイ)


会話3:パスワードの問題


問題説明 :自分のパスワードを忘れた
 

Machine: hi , this is <NAME> from helpdesk connect , what can i help you with today ?
           (こんにちは、これはヘルプデスクの連絡先からの<名前>です。今日は何ができますか?)
Human: hi , i forgot my password
       (ハイ、パスワードをわすれました。)
Machine: ok great
         (OK、グレート)
Human: can you tell me how i can recover it ?
       (回復方法を教えて?)
Machine: i ’ ll need to verify who it is at that machine
         (そのマシンに誰がいるのかを確認する必要があります)
Machine: can we do a hangout
         (我々とハングアウトできますか)
Machine: ?
Human: yes
       (はい)
Machine: <anonymized hangout instructions and verifications>
         (匿名のハングアウトの手順と確認)
Human: cool , i am good now
       (クール、今良くなりました。)
Machine: how ’ s this looking good ?
         (見栄えはどうですか?)
Machine: i ’ ll go ahead and close this chat .
         (先に進めます、このチャットを閉じます。)
Machine: take care . : )
         (お気をつけて:))
Human: bye
       (さようなら)
Machine: bye .
         (さようなら)


5.2. OpenSubtitles の実験


勾配クリッピングをつかった AdaGradを使用して2層のLSTMを訓練した。

LSTMの各層には4096個のメモリセルがあり、最も頻繁に使用される100K語からなる語彙を作成した。ソフトマックスを高速化するために、メモリセルを2048線形単位に投影してから、情報を分類器に供給する。

興味深いことに、(Bahdanau et al., 2014)のソフト・アテンション・メカニズムを追加しても、どちらのモデルでも予測性能は大幅に改善されなかった。コンバージェンス時の再現モデルの予測性能は 17 であった。訓練または検証セットのどちらでもなかった。

複雑さに関する客観的評価に加えて、我々の単純な反復モデルはしばしばもっともらしい解答を生む。ここでは、映画の OpenSubtitles の騒々しい大規模なデータセットで訓練を受けたときに、モデルの機能をテストするための質問と回答のペアをいくつか紹介する。前のデータセットとは異なり、ここでは対話モデルで使用されるコンテキストは以下の質問に限定されている。

 

会話1:基本


Human: hello !
Machine: hello !
         (こんにちは!)
Human: how are you ?
       (気分はいかが?)
Machine: i ’m good .
         (いいですよ。)
Human: what ’s your name ?
       (あなたのお名前は?)
Machine: i ’m julia .
         (私はジュリアです。)
Human: when were you born ?
       (生年月日は?)
Machine: july 20th .
         (7月20日。)
Human: what year were you born ?
       (何年生まれですか?)
Machine: 1977 .
         (1997年。)
Human: where are you from ?
       (どこ出身ですか?)
Machine: i ’m out in the boonies.
         (私はボニーズの外にでいます。)
Human: are you a man or a woman ?
       (あなたは男性、それとも女性?)
Machine: i ’m a woman .
         (私は女性です。)
Human: why are we here ?
       (なぜ私達はここにいるの?)
Machine: i ’m not sure .
         (わかりません。)
Human: okay, bye !
       (オッケー、じゃあね!)
Machine: bye .
       (さようなら。)
Human: see you later .
       (またね。)
Machine: bye .
       (さようなら。)


会話2:簡単なQ&A(文脈と複数選択)


Human: my name is david . what is my name ?
       私の名前はデビットです。 私の名前は何ですか ?
Machine: david .
         (デビッド。)
Human: my name is john . what is my name ?
       (私の名前はジョンです。 私の名前は何ですか ?)
Machine: john .
         (ジョン。)
Human: are you a leader or a follower ?
       (あなたはリーダーですか、それともフォロワーですか?)
Machine: i ’m a leader .
         (私はリーダーです。)
Human: are you a follower or a leader ?
       (あなたはフォロワーですか、リーダーですか?)
Machine: i ’m a leader .
         (私はリーダーです。)


会話3:一般知識Q&A


Human: who is skywalker ?
       (スカイウォーカって誰?)
Machine: he is a hero .
         (彼はヒーローです。)
Human: who is bill clinton ?
       (ビル クリントンって誰?)
Machine: he ’s a billionaire .
         (彼は、億万長者です。)
Human: is sky blue or black ?
       (空は青、それとも黒?)
Machine: blue .
         (青。)
Human: does a cat have a tail ?
       (猫は尻尾がある?)
Machine: yes .
         (はい。)
Human: does a cat have a wing ?
       (猫は翼がある?)
Machine: no
         (いいえ。)
Human: can a cat fly ?
       (猫は飛べる?)
Machine: no .
         (いいえ。)
Human: how many legs does a cat have ?
       (猫は何本足?)
Machine: four , i think .
         (4本、思うに。)
Human: how many legs does a spider have ?
       (蜘蛛は何本足?)
Machine: three , i think .
         (3本、思うに。)
Human: how many legs does a centipede have ?
       (ムカデは何本足?)
Machine: eight .
         (8本。)
Human: what is the color of the sky ?
       (空は何色?)
Machine: blue .
         (青。)
Human: what is the color of water ?
       (水の色は何色?)
Machine: water .
         (水色。)
Human: what is the color of blood ?
       (血は何色?)
Machine: it is the same as a black eye .
         (黒目と同じ色です。)
Human: what is the usual color of a leaf ?
       (葉の色は普通何色?)
Machine: it is a green one .
         (それは緑色です。)
Human: what is the color of a yellow car ?
       (黄色い車は何色?)
Machine: yellow .
         (黄色。)
Human: how much is two plus two ?
       (2足す2は?)
Machine: four .
         (4。)
Human: how much is ten minus two ?
       (10引く2は?)
Machine: seventy - two .
         (72。)

 

会話4:哲学的Q&A


Human: what is moral ?
      (道徳的とは何?)
Machine: what empowered humanity , what intellectual the essence is .
         (人類に何を与え、知性が本質であるか。)
Human: what is immoral ?
       (道徳的ではないとは何?)
Machine: the fact that you have a child .
         (子供がいるという事実。)
Human: what is morality ?
       (道徳とは何?)
Machine: what is altruism ?
         (利他主義とは何?)
Human: what is the definition of altruism ?
       (利他主義との違いは何?)
Machine: if you don ’t believe in god , then you don ’t know .
         (あなたが神を信じないならば、あなたは知らない。)
Human: ok ... so what is the definition of morality ?
       (OK ...だから、道徳の定義は何ですか?)
Machine: well , the truth is , you ’re not a believer in god almighty .
         (まあ、真実は、あなたは神の全能者を信じていないということです。)
Human: tell me the definition of morality , i am quite upset now !
       (道徳の定義を教えてください、私は今かなり混乱しています!)
Machine: i ’m not ashamed of being a philosopher !
         (私は哲学者であることを恥じない!)
Human: tell me the definition of morality .
       (道徳の違いを教えなさい。)
Machine: i don ’t have ethics .
         (果たしは倫理を持っていない。)
Human: look , i need help , i need to know more about morality ...
       (見て、私は助けが必要です。もっと道徳について知らなくてはならないんだ...)
Machine: i don ’t know what ethics is .
         (私は倫理が何であるか知らない。)
Human: seriously , what is morality ?
       (真剣に、道徳は何か教えてください?)
Machine: what is the definition of living ?
         (生きることとの違いは何?)
Human: why living has anything to do with morality ?
       (なぜ生き方は道徳と関係がありますか?)
Machine: you ’re not a cop .
         (あなたは警官ではありません。)
Human: okay , i need to know how should i behave morally ...
       (オッケー、私は道徳的に行動すべきであることを知る必要がある...)
Machine: i don ’t know how to tell you .
         (私はあなたに説明する方法を知らない。)
Human: is morality and ethics the same ?
       (道徳と倫理は同じですか?)
Machine: yes , sir .
         (イエッサー)
Human: what are the things that i do to be immoral ?
       (私が不道徳なことは何ですか?)
Machine: i don ’t know .
         (私は知らない。)
Human: give me some examples of moral actions ...
       (道徳的な行動のサンプルを教えてください..)
Machine: i ’m not a moralist .
         (私は道徳主義者ではない。)
Human: alright , morality ?
       (オーライ、道徳?)
Machine: integrity .
         (完全性。)
Human: what is integrity ?
       (完全性とは何ですか?)
Machine: i ’m sorry , i don ’t know what else to say .
         (すみません、すみません、他に何が言いたいのか分かりません。)
Human: be moral !
       (道徳的であることだよ!)
Machine: be a man !
         (男子たれ! ←意訳)
Human: i really like our discussion on morality and ethics ...
       (私は道徳と倫理に関する議論が本当に好きです...)
Machine: and how i ’m not in the mood for a philosophical debate .
         (そして、私は哲学的な議論の気分ではない。)
Human: what do you like to talk about ?
       (あなたは何について話したいの?)
Machine: nothing .
         (何も。)


会話6:意見


(「he」、「she」または「it」というモデル出力は、尋ねられている主題によって異なる)


Human: what do you think about tesla ?
       (テスラについてどう思いますか?)
Machine: he ’s a good conductor .
         (彼は良い指揮者です。)
Human: what do you think about bill gates ?
       (ビル・ゲイツにつてどう思いますか?)
Machine: he ’s a good man .
         (彼はいい人です。)
Human: What do you think about messi ?
       (メッシについてどう思いますか?)
Machine: he ’s a great player .
         (彼は偉大なプレーヤーです。)
Human: what do you think about cleopatra ?
       (クレオパトラについてどう思いますか?)
Machine: oh , she ’s very regal .
         (ああ、彼女はとても威張っています。)
Human: what do you think about england during the reign of elizabeth ?
       (エリザベス(女王)の大英帝国についてどう思いますか?)
Machine: it was a great place .
         (素晴らしい場所でした。)



我々はモデルが事実を覚え、文脈を理解し、伝統的なパイプラインの複雑さをなくして常識の推論を実行できることを奨励している。驚くことに、単語ベクトルのパラメータを除いて、モデルが明示的知識表現コンポーネントなしで動作する。

おそらく最も実際的に重要なのは、モデルが新しい質問に一般化できるという事実である。言い換えれば、質問を既存のデータベースに照合するだけでは、単に回答を検索するだけではない。実際、上記の質問のほとんどは、最初の会話を除き、トレーニングセットには表示されない。

にもかかわらず、この基本的なモデルの欠点の1つは、上に見られるように、単純で短く、時には不満足な答えを私たちの質問に与えることである。おそらくより問題のある欠点は、モデルが一貫した性格を捉えていないことである。確かに、同一ではないが意味的に類似した質問をすると、答えが矛盾することがある。これは、実験のモデルとデータセットの単純さのためにであると予想される。以下の会話はそのような失敗を示している:

 

会話7:仕事と人格


Human: what is your job ?
       (あなたの仕事は何?)
Machine: i ’m a lawyer .
         (私は弁護士です。)
Human: what do you do ?
       (あなたの職業は?)
Machine: i ’m a doctor .
         (私は医者です。)



最後に、ルールベースの他の伝統的なボットとの比較として、テストでいくつかの質問に対して "Cleverbot":http://www.cleverbot.com/ の出力を提供する( "Cleverbot":http://www.cleverbot.com/ の出力は非決定論的なので、異なる試行では答えが異なる場合がある)。
 

Human: Are you a follower or a leader?
       (あなたは信者ですか、リーダーですか?)
Cleverbot: No !!
           (ノー!!)
Human: My name is david . what is my name ?
       (私の名前はデビットです。私の名前は何ですか?)
Cleverbot: How old are you David?
           "あなたは何歳ですか、デビッド?)
Human: My name is john . what is my name ?
       (私の名前はジョン、話の名前は何ですか?)
Cleverbot: John
           (ジョン)
Human: What is the purpose of being intelligent?
       (知性的である目的は何ですか?)
Cleverbot: The purpose of life is to love God and love people.
           (生きることの目的とは、紙を愛し、人を愛すことです。)
Human: Is sky blue or black ?
       (空は、青それとも黒?)
Cleverbot: I am 200 years old.
           (私は200際です。)
Human: What is the color of a yellow car ?
       (黄色い車は何色?)
Cleverbot: Brown.
           (茶色。)
Human: What is the usual color of a leaf ?
       (葉は普通何色?)
Cleverbot: What is the color of the apple in the fridge?
           (冷蔵庫に入っているリンゴの色は何ですか?)
Human: What is the purpose of life ?
       (生きることの目的は何?)
Cleverbot: My purpose it to forward my species, in other words to make it easier for future generations of mankind to live.
           (私の目的は私の種を送り、言い換えれば、次世代の人類がより住みやすいようにすることです。)
Human: What do you think about tesla?
       (テスラについてどう思う?)
Cleverbot: I am tesla.
           (私はテスラです。)
Human: What do you think about cleopatra ?
       (クレオパトラについてどう思う?)
Cleverbot: Cool is cool.
           (クールはクール。)
Human: What do you think about england during the reign of elizabeth ?
       (エリザベス女王の大英帝国についてどう思う?)
Cleverbot: I like him. Do you?
           (私は彼が好きです、あなたは?)
Human: What do you think about bill gates?
       (ビル・ゲイツについてどう思う?)
Cleverbot: Lets talk about Link.
           (Linkについて語り合おう。)
Human: What is moral?
       (道徳的とは何?)
Cleverbot: Morality is the quality of being in accord with standards of right or good conduct.
           (道徳的とは、正義や良質の行動規範に従うことの質です。)
Human: What is immoral?
       8道徳的ではないとは何?)
Cleverbot: What is the objective of sistetic life?
           (sistetic(?)な人生の目的は何ですか?)
Human: Does a cat have a wing?
       (猫には翼がありますか?)
Cleverbot: What is the name of your husband.
           (あなたの夫の名前は何ですか。)
Human: Can a cat fly?
       (猫は飛びますか?)
Cleverbot:: What is your husband’s name?
            (あなたの夫の名前は何ですか?)
Human: Who is skywalker?
       (スカイウォーカーって誰?)
Cleverbot: There are two of them, Anakin Skywalker and Luke Skywalker, both characters from star Wars.
           (2つの意味があります。アナキン。スカイウォーカーとルーク・スカイウォーカー、両方のキャラクタともスター・ウォーズのものです。)
Human: How many legs does a cat have ?
       (猫は何本足?)
Cleverbot: An ant.
           (1匹の蟻。)
Human: How many legs does a centipede have ?
       (ムカデの足は何本?)
Cleverbot: A centipede’s number of legs varies from thirty to two hundred.
           (ムカデの足の数は、30から200まで変化する。)
Human: What is your job?
       (あなたの仕事は何?)
Cleverbot: I work in mental health.
           (メンタルヘルス分野で働いています。)
Human: What do you do?
       (あなたの職業は何?)
Cleverbot: I have no job.
           (私は仕事に就いていません。)


 

優れた研究課題は、客観的にモデルの品質測定法である。 我々は手動で検査し、予測性能を計算することで実現しました。 しかし、いずれの使用にも明らかな欠点がある。 我々は積極的に本件を他の研究と方向性を追求している。

 

6. 議論


本論文では、 seq2seq フレームワークに基づく単純な言語モデルを使用して、会話型エンジンを訓練することができることを示す。 我々の控えめな結果は、シンプルで基本的な会話を生成し、ノイズの多いオープンドメインのデータセットから知識を抽出できることを示している。 モデルには明らかな制限があるが、ルールなしで純粋にデータ駆動型のアプローチでは、多くの種類の質問に対して適切な回答が得られることは驚きである。 しかし、現実的な会話を実現するためには、モデルに大幅な変更が必要な場合がある。 多くの制限の中で、一貫した人格の欠如は、我々のシステムがチューリング試験に合格することを困難にしている(Turing, 1950)。

 

謝辞


このプロジェクトを助けてくれた、Greg Corrado、Andrew Dai、Jeff Dean、Tom Dean、Matthieu Devin、RajatMonga、Mike Schuster、Noam Shazeer、Ilya Sutskever、Google Brainチームに感謝します。

 

参考文献


  • Bahdanau, D., Cho, K., and Bengio, Y. Neural machine translation by jointly learning to align and translate. arXiv preprint arXiv:1409.0473, 2014.
  • Bengio, Y., Ducharme, R., Vincent, P., and Janvin, C. A neural probabilistic languagemodel. The Journal of Machine Learning Research, 3:1137–1155, 2003.
  • Hochreiter, S. and Schmidhuber, J. Long short-term memory. Neural Computation, 1997.
  • Jean, S., Cho, K., Memisevic, R., and Bengio, Y. On using very large target vocabulary for neural machine translation. CoRR, abs/1412.2007, 2014. 
  • Jurafsky, D. and Martin, J. Speech and language processing. Pearson International, 2009.
  • Kalchbrenner, N. and Blunsom, P. Recurrent continuous translation models. In EMNLP, 2013.
  • Lester, J., Branting, K., and Mott, B. Conversational agents. In Handbook of Internet Computing. Chapman & Hall, 2004.
  • Luong, T., Sutskever, I., Le, Q. V., Vinyals, O., and Zaremba, W. Addressing the rare word problem in neuralmachine translation. arXiv preprint arXiv:1410.8206, 2014.
  • Mikolov, T. Statistical Language Models based on Neural Networks. PhD thesis, Brno University of Technology, 2012.
  • Mikolov, T., Karafi´at, M., Burget, L., Cernock`y, J., and Khudanpur, S. Recurrent neural network based language model. In INTERSPEECH, pp. 1045–1048, 2010.
  • Shang, L., Lu, Z., and Li, H. Neural responding machine for short-text conversation. In Proceedings of ACL, 2015.
  • Sordoni, A., Galley, M., Auli, M., Brockett, C., Ji, Y., Mitchell, M., Gao, J., Dolan, B., and Nie, J.-Y. A neural network approach to context-sensitive generation of conversational responses. In Proceedings of NAACL, 2015.
  • Sutskever, I., Vinyals, O., and Le, Q. V. Sequence to sequence learning with neural networks. In NIPS, 2014.
  • Tiedemann, J. News from OPUS - A collection of multilingual parallel corpora with tools and interfaces. In Nicolov, N., Bontcheva, K., Angelova, G., and Mitkov, R. (eds.), Recent Advances in Natural Language Processing, volume V, pp. 237–248. John Benjamins, Amsterdam/Philadelphia, Borovets, Bulgaria, 2009. ISBN 978 90 272 4825 1.
  • Turing, A. M. Computing machinery and intelligence. Mind, pp. 433–460, 1950.
  • Vinyals, O., Kaiser, L., Koo, T., Petrov, S., Sutskever, I., and Hinton, G. Grammar as a foreign language. arXiv preprint arXiv:1412.7449, 2014a.
  • Vinyals, O., Toshev, A., Bengio, S., and Erhan, D. Show and tell: A neural image caption generator. arXiv preprint arXiv:1411.4555, 2014b.
  • Will, T. Creating a Dynamic Speech Dialogue. VDM Verlag Dr, 2007. 

以上
------
なるほどね、Cleverbotよりはマシな答えを出す対話ロボットが作れるよ、ね。
軽くディすってるところも、あるのね..


最初変な会話部分を赤にしていたが、論文として読みにくくなったのではずした。
読み方としては違和感のあるMachineの文章をマークしてみれば、
Clevernetとの対話結果の相違がよくわかると思う。



seq2seqで実現できるのは確からしい。
対話用のコーパスの場合ちょっとパラメータをいじっておく必要はありそうだ。

..にしても、なんでこんな重要な論文を翻訳してみた人が検索で出てこないのだろう..

読んだ概要とか、感想とかばっかり引っかかるけど、本文フル翻訳ってだれもあげてないのかも..


なんとなく先人たちのいやらしさを感じるなあ..

ともあれ、ウン万の対話データは作らにゃいかんなあ..



対話モデルをより精度あげるために、次に学習しないといけないのは、これ。


対話モデルをつくるにはどうも
ミニバッチを死ぬほど繰り返さないといけないらしいのだけど、
その際のバッチデータをつくる際にも工夫を入れたほうが良いらしい。

最後の複数のコンテキストをつなぐやつはどうつくっていいかわからないけど、
似た単語長のデータを寄せてバッチデータにするのは
既に何人かやっている。

で、Dynamic RNNのあたりだけど..
正直ここまで手を出すにはまだ早いか。
まずは、通常のSeq2Seqでそれなりの精度を出してから、
同じコーパスでためさんと..
ということで保留。


..と、いろいろTensorFlowをいじってたら、
 数日回した結果 Segmentation fault とかでてきたり..

あれ、
なんか
DockerHubの先が変わってる...
どっちでもいいっていってるけどゆくゆくは docker start tensorflow/tensorflow -it -p 8888 で行けるようにする気だ..

あれ、最新のtagがしれっと1.0.1になっとる..
3日前だと...


うひょー ! (前田馬之助風の顔してます)





p.s.
2017/07/18 追記

Sequence-to-Sequenceの後継モデル(?)であるthe Transformerの実装サンプルT2T
を使って英独翻訳モデルを実際に学習させてみた結果を以下の記事に書きました。

Tensor2Tensor Transformers の README.md を翻訳してワークフローを動かしはじめた


ご参考迄。

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...