O que o Teste de Turing realmente verifica

Há algum tempo, sugeri jogar o Teste de Turing com minha bot Misha. Quem tentou, sabe que o jogador robô é determinado elementarmente. Aqueles que não tentaram podem ler sobre isso no primeiro comentário desse artigo.

Agora chegou a hora de organizar uma reunião, falar sobre o dispositivo do bot e tirar conclusões.



Regras do jogo


As regras do jogo foram listadas em um artigo anterior, repetirei aqui para que vocĂŞ e eu nĂŁo corremos nos links.

  1. Cada participante conectado ao bot pode assumir o papel de o jogador responder a perguntas ou o juiz fazer essas perguntas.
  2. Se um participante decide ser juiz, o bot seleciona aleatoriamente um jogador para ele - entre jogadores humanos ou conecta um robô. Ou seja, no jogo sempre há quem responde, e o juiz faz perguntas apenas para ele.
  3. Se um participante decide ser jogador, o bot procura similarmente ele emparelhar um participante-juiz.
  4. O jogo é dividido em rodadas de 5 perguntas. No final de cada rodada, o juiz decide com quem ele se comunica, com uma pessoa ou com uma máquina - este é o fim do jogo. Se ele não puder decidir, poderá começar a próxima rodada ou desistir, parando o jogo.
  5. O robô faz o papel do menino Misha, de cinco anos de idade. Para não facilitar a tarefa para o juiz, é recomendável que a pessoa do jogador também responda em nome de Misha.


Desde o lançamento até o momento da escrita, foram jogados 256 jogos (um pouco estranhos, mas verdadeiros).

Destes, eles terminaram com um resultado óbvio, ou seja, os dois lados disputaram até o final da próxima rodada (ninguém jogou mais de uma rodada) e o juiz decidiu - 115 jogos

  • Solução de robĂ´ - 74
  • a decisĂŁo "homem" - 41

Houve 26 decisões erradas, das quais:

  • solução "robĂ´" (na verdade uma pessoa) - 15
  • solução humana (na verdade um robĂ´) - 11

Como vocĂŞ pode ver, mais frequentemente uma pessoa foi confundida com um robĂ´ do que um robĂ´ para uma pessoa.

Como resultado, o robô foi identificado corretamente em (74-15) / 115 = 51% dos jogos, e o robô foi confundido com uma pessoa em 11/115 = 9,5% dos jogos, ou seja, podemos dizer com segurança que o bot Misha não passou no teste.


Para comparação, em uma competição em 2012, em 29% das 150 conversas, os juízes levaram Odessa bot Zhenya Gustman para uma pessoa e, em 2014, 33% dos juízes basearam-se em 300 entrevistas.

O que há sob o capô


O bot Ă© escrito em Python e, em geral, consiste em trĂŞs mĂłdulos:

  • na verdade, um bot com um mecanismo de jogo
  • gerente de robĂ´
  • o robĂ´

O principal algoritmo do jogo está contido na classe Game, que armazena a identificação dos participantes e implementa uma máquina de estado simples:

  • InĂ­cio do jogo
  • Ă€ espera de uma pergunta do juiz
  • Ă€ espera de uma resposta do jogador
  • Ă€ espera de uma decisĂŁo do juiz
  • Fim do jogo


Nas transições entre estados, o bot passa as perguntas do juiz ao jogador, as respostas do jogador ao juiz. Somente uma mensagem é transmitida e o bot fica no próximo estado; portanto, se alguém tentar perguntar ou responder com duas, ele verá que o bot não permite isso.

Quando o bot recebe uma resposta do robô, ele não o transmite imediatamente, mas com um atraso de tempo - ele não apareceu imediatamente, eu o adicionei de acordo com a observação galqiwi , obrigado.

Cada alteração de estado é salva no banco de dados SQLite, em caso de situações imprevistas - falha de energia, reinicialização do sistema operacional ou simplesmente o proprietário do bot (quero dizer) queria pará-lo e refazer algo. Com um novo começo, o bot carrega os jogos salvos do banco de dados e o jogo continua.

Além disso, existem duas filas de espera - juízes aguardando jogadores e jogadores aguardando juízes. Quando um participante inicia um novo jogo, a fila correspondente é visualizada se ele possui um parceiro. Caso contrário, o participante está na fila.

O gerenciador de robôs vive em um encadeamento separado. Ele revisa periodicamente a fila de juízes que aguardam os jogadores e cria uma cópia do robô para eles. Ele deliberadamente atrasou, para que o robô nem sempre tivesse tempo de interceptar o juiz e o jogador humano também tivesse a chance de se conectar ao jogo. O gerente tem a capacidade de criar várias opções para robôs, basta registrar suas classes. Mas até agora apenas um foi implementado.

E, finalmente, o mĂłdulo do robĂ´. Mas antes de falar sobre o interior do robĂ´, vou falar sobre a base de perguntas e respostas com as quais ele funciona.

Primeiro, coloquei este arquivo de texto:

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/pt427259/


All Articles