チューリングテストが実際にチェックするもの

少し前に、ボットのミシャとチューリングテストをすること提案しました 。 誰が試したのか、彼はロボットプレイヤーが基本的に決定されていることを知っています。 試したことがない人は、その記事の最初のコメントでそれについて読むことができます。



今、デブリーフィングを準備し、ボットのデバイスについて話し、結論を出す時が来ました。











ゲームのルール



ゲームのルールは前の記事に記載されていましたが、私はここで繰り返しますので、あなたと私はリンクを実行しません。



  1. ボットに接続された各参加者は、質問に答えるプレーヤー、またはこれらの質問をする裁判官の役割を引き受けることができます。

  2. 参加者がジャッジになることを決めた場合、ボットは彼のためにプレイヤーをランダムに選択します-人間のプレイヤーの中から、またはロボットを接続します。 つまり、ゲームには常に答える人がいて、裁判官は彼だけに質問をします。

  3. 参加者がプレイヤーになることに決めた場合、ボットは同様に参加者とジャッジをペアにするために彼を検索します。

  4. ゲームは5つの質問に分かれています。 各ラウンドの終わりに、ジャッジは誰と、または機械と通信するかを決定します。これがゲームの終わりです。 彼が決定できない場合は、次のラウンドを開始するか、あきらめてゲームを停止できます。

  5. ロボットは、5歳の小さな男の子のミーシャの役割を果たします。 審査員にとってタスクが簡単にならないようにするために、プレイヤー-プレイヤーはミーシャに代わって答えることも推奨されます。









発売から執筆まで、256ゲームがプレイされました(少し奇妙ですが、本当です)。



これらのうち、彼らは明らかな結果で終わりました。つまり、両側が次のラウンドの終わりまでプレイし(誰も複数のラウンドをプレイしませんでした)、裁判官は決定しました-115ゲーム





26の間違った決定がありました。





ご覧のとおり、人のロボットよりも人のほうがロボットと間違われていることがよくあります。



その結果、ロボットは(74-15)/ 115 =ゲームの51%で正しく識別され、ロボットは11/115 = 9.5%のゲームで人と誤解されました。つまり、Mishaボットはテストに合格しなかったと自信を持って言えます。









比較のために、 2012年のコンテストでは、150件の会話の29%で裁判官が1人のオデッサボットZhenya Gustmanを取り上げ、2014年には300件のインタビューに基づいて裁判官の33%を取り上げました。

ボンネットの下にあるもの



ボットはPythonで書かれており、概して3つのモジュールで構成されています。





ゲームのメインアルゴリズムはGameクラスに含まれており、参加者IDを保存し、シンプルなステートマシンを実装します。











状態間の遷移で、ボットは裁判官の質問をプレーヤーに渡し、プレーヤーからの回答を裁判官に渡します。 1つのメッセージのみが送信され、ボットは次の状態になるため、誰かが2つで質問または回答しようとした場合、ボットはこれを許可しないことがわかりました。



ボットがロボットからの応答を受信すると、すぐに送信しませんが、少し遅れて-すぐには表示されなかったので、 コメントgalqiwiで追加しました、ありがとう。



予期しない状況(停電、OSの再起動、または単にボット所有者(つまり)がそれを停止して何かをやり直したかった場合)の場合、各状態の変更はSQLiteデータベースに保存されます。 新たなスタートにより、ボットはデータベースから保存されたゲームをロードし、ゲームは続行します。



さらに、2つの待機ラインがあります-プレーヤーを待っているジャッジと、ジャッジを待っているプレーヤー。 参加者が新しいゲームを開始すると、対応するキューは、パートナーがいるかどうかを表示します。 そうでない場合、参加者はキューに入れられます。



ロボットマネージャーは別のスレッドに住んでいます。 彼は定期的にプレイヤーを待っている審査員の列を見て、彼らのためにロボットのコピーを作成します。 それは故意にそれを遅らせ、ロボットが常にジャッジをインターセプトする時間がないようにし、人間のプレイヤーもゲームに接続する機会を持つようにします。 マネージャーにはロボットのさまざまなオプションを作成する機能があり、クラスを登録するだけです。 しかし、これまでのところ1つだけが実装されています。



そして最後に、ロボットモジュール。 しかし、ロボットの内部について話す前に、それが機能する質問と回答のベースについてお話しします。



まず、このテキストファイルを詰めました。



T: 
T:   
Q:   ?
Q:   ?
Q:   ?
Q:   ?
Q:  ?

T: 
Q:   ?

T:  
T: 
Q:  ?
Q:   ?
Q:   ?

T:  
T: , 
Q:  ?
Q:  ?
      
      





… . — , , --. . , . pymorphy2 kmike, YARN, XML SQLite — 22 , …



:



    def normalSynonyms(self,orig):
        r = self.morph.parse(orig)
        res = []
        for parse in r:
            word = parse.normal_form
            syns = self.yarn.synonyms(word)
            for g in syns:
                words = self.yarn.words(syns[g])
                res = res + words
        return res
      
      





.



getAnswer(self, text)
      
      





, . , - , . , .



:



  1. , . , .

  2. -, , , , . .





, «» , , — , . , , — .



" , , 12000 . «-» 300 . ."



, , , . , .





, , , , , .



, , , . , , .   - , . , , .



— , , . , .



. ,   , — - - . - , . , , « » — . , , .



, , , , - . , , , .





, -:









Raspberry Pi 3. SSD, , , .



, .





, , — . , , , , , , .



, , , " ?" ( «Computing Machinery and Intelligence»)   « ». , , — , . .



:

"    ,   « »   ,     .   , ,   - .   ,   , ,  , ."



- , , , , . , .









:

"     , ,  ,   .    ."



, , . , , , , , , — « [] ?», , .



:

"2018-10-23 13:01:53,385 186 Player2Judge , ?"



— , :







, , . , , ?



. « » ? R2-D2 C-3PO « »? «A.I.»? « »? « »? - ? , , , , - .



— , ? , , .



, R2-D2 -, , .



, , — . ( « » ) , , , , , , , .



, C-3PO , , , , . - , .



. , , :





, —   . .



, . , « ?», (1950), , . « » , .



:

"… , , , , ; , , ."



All Articles