Ce que le test de Turing vérifie vraiment

Il y a quelque temps, j'ai suggéré de jouer au test de Turing avec mon bot Misha. Celui qui l'a essayé sait que le joueur robot est déterminé élémentairement. Ceux qui n'ont pas essayé peuvent en lire davantage dans le premier commentaire de cet article.

Le moment est maintenant venu d'organiser un débriefing, de parler de l'appareil du bot et de tirer des conclusions.



Règles du jeu


Les règles du jeu étaient listées dans un article précédent, je vais répéter ici pour que vous et moi ne courions pas sur les liens.

  1. Chaque participant connecté au bot peut jouer le rôle du joueur répondant aux questions, ou le juge posant ces questions.
  2. Si un participant décide d'être juge, le bot sélectionne au hasard un joueur pour lui - soit parmi les joueurs humains, soit connecte un robot. Autrement dit, dans le jeu, il y a toujours quelqu'un qui répond, et le juge ne pose des questions qu'à lui.
  3. Si un participant décide d'être un joueur, le bot le cherche également pour jumeler un juge participant.
  4. Le jeu est divisé en séries de 5 questions. À la fin de chaque tour, le juge décide avec qui il communique, avec une personne ou avec une machine - c'est la fin de la partie. S'il ne peut pas décider, alors il peut commencer le prochain tour ou abandonner, arrêtant le jeu.
  5. Le robot joue le rôle du petit garçon Misha, âgé de cinq ans. Afin de ne pas faciliter la tâche du juge, il est recommandé que la personne joueur réponde également au nom de Misha.


Du lancement au moment de la rédaction, 256 jeux ont été joués (un peu étrange, mais vrai).

Parmi ceux-ci, ils se sont soldés par un résultat évident, c'est-à-dire que les deux parties ont joué jusqu'à la fin du tour suivant (personne n'a joué plus d'un tour) et le juge a décidé - 115 matchs

  • Solution de robot - 74
  • la dĂ©cision "homme" - 41

Il y a eu 26 mauvaises décisions, dont:

  • solution "robot" (en fait une personne) - 15
  • solution humaine (en fait un robot) - 11

Comme vous pouvez le voir, plus souvent une personne a été confondue avec un robot qu'un robot avec une personne.

En conséquence, le robot a été correctement identifié dans (74-15) / 115 = 51% des jeux, et le robot a été confondu avec une personne dans 11/115 = 9,5% des jeux, c'est-à-dire que nous pouvons dire avec confiance que le bot Misha n'a pas passé le test.


A titre de comparaison, lors d'un concours en 2012, dans 29% des 150 conversations, les juges ont pris Odessa bot Zhenya Gustman par personne, et en 2014, 33% des juges sur la base de 300 conversations.

Sous le capot


Le bot est écrit en Python et se compose généralement de trois modules:

  • en fait un bot avec un moteur de jeu
  • gestionnaire de robot
  • le robot

L'algorithme principal du jeu est contenu dans la classe Game, qui stocke l'ID des participants et implémente une machine à états simple:

  • DĂ©but du jeu
  • En attente d'une question du juge
  • En attente d'une rĂ©ponse du joueur
  • En attente d'une dĂ©cision du juge
  • Game over


Lors des transitions entre les états, le bot transmet les questions du juge au joueur, les réponses du joueur au juge. Un seul message est transmis et le bot passe à l'état suivant, donc si quelqu'un a essayé de demander ou de répondre avec deux, il a vu que le bot ne le permettait pas.

Lorsque le bot reçoit une réponse du robot, il ne la transmet pas immédiatement, mais avec un retard - il n'est pas apparu immédiatement, je l'ai ajouté selon la remarque galqiwi , merci.

Chaque changement d'état est enregistré dans la base de données SQLite, en cas de situations imprévues - pannes de courant, redémarrages du système d'exploitation, ou simplement le propriétaire du bot (je veux dire) voulait l'arrêter et refaire quelque chose. Avec un nouveau départ, le bot charge les parties enregistrées de la base de données et le jeu continue.

De plus, il y a deux files d'attente - les juges attendent les joueurs et les joueurs attendent les juges. Lorsqu'un participant commence une nouvelle partie, la file d'attente correspondante est visualisée s'il a un partenaire. Sinon, le participant est mis en file d'attente.

Le gestionnaire de robot vit dans un fil distinct. Il passe en revue périodiquement la liste des juges qui attendent les joueurs et crée une copie du robot pour eux. Il le retarde délibérément pour que le robot n'ait pas toujours le temps d'intercepter le juge et que le joueur humain ait également la possibilité de se connecter au jeu. Le gestionnaire a la possibilité de créer diverses options pour les robots, il vous suffit d'enregistrer leurs classes. Mais jusqu'à présent, un seul a été mis en œuvre.

Et enfin, le module robot. Mais avant de parler de l'intérieur du robot, je vais vous parler de la base des questions et réponses avec lesquelles il fonctionne.

J'ai d'abord bourré ce fichier texte:

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), , . « » , .

:
"… , , , , ; , , ."

Source: https://habr.com/ru/post/fr427259/


All Articles