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.
- Cada participante conectado ao bot pode assumir o papel de o jogador responder a perguntas ou o juiz fazer essas perguntas.
- 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.
- Se um participante decide ser jogador, o bot procura similarmente ele emparelhar um participante-juiz.
- 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.
- 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)
, . , - , . , .
:
- , . , .
- -, , , , . .
, «» , , — , . , , — .
"
, , 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), , . « » , .
:
"…
, , , , ; , , ."