Quantas Inteligências Artificiais são necessárias para se ligar um timer?

(Fonte: Pixelbay, liberada para reuso)

Meu post anterior, sobre Inteligência Artificial Para Pessoas não Técnicas, teve uma aceitação interessante pelo que vi nas análises do site, e por algumas poucas mensagens que recebi. Fiquei feliz. Além disso, recebi alguns e-mails com comentários e dúvidas. E devido a um pedido de esclarecimento, resolvi escrever essa sequência ao artigo anterior detalhando um pouco mais a estratégia para um projeto de IA mais poderoso, usando “AI Pipelines“.

Esse artigo talvez seja um pouco mais técnico que o anterior, ao falar de componentes e até citar arquitetura de software, mas acredito que não seja técnico o suficiente para impedir o entendimento para quem não é da área de software, vejamos…

Nota importante: Recomendo fortemente a leitura do artigo anterior, que serve de base para o entendimento desse artigo.


Pipelines de IA

Se estamos assumindo que hoje em dia temos uma proliferação de Inteligências Artificiais Rasas (ou ANIs), nas quais uma máquina pode “decidir” apenas coisas simples, em tarefas e domínios bem específicos, e que essa decisão simples é – quase sempre – somente a capacidade de mapear um conjunto de entradas para uma possível saída, como vemos coisas complexas como carros auto dirigíveis sendo possíveis através dessa tecnologia?

A resposta está em projetar um ecossistema mais complexo, onde vários algoritmos de machine learning, por exemplo, se complementam e são orquestrados por um software que coordena tudo isso.

Um exemplo: assistente de voz do Android

Eu utilizo Android, então escrevo meu exemplo com essa tecnologia, mas o mesmo modelo se aplicaria em várias alternativas, somo Siri, Cortana, Alexa, DuerOS, etc.

Eu posso, com minha voz, dizer algo assim para meu telefone:

"Hey Google, me avise quando minha pizza ficar pronta em 10 minutos, por favor!" (em inglês funciona melhor, pelo que eu vejo, talvez os algoritmos estejam mais treinados nessa língua).

E posso fazer inúmeras outras coisas com o Google Assistant: pedir piadas, enviar mensagens, etc. Mas vamos nos manter em um único exemplo.


Como criar um sistema de Inteligência Artificial para isso?

Nota: não estou afirmando que foi isso que as equipes fa Google fizeram, apenas mostrando uma possível maneira de planejar um projeto similar.

Sabemos que um determinado algoritmo de Machine Learning aprende fazer mapeamentos simples, sem conceitos ou contextos, certo? Com isso em mente, seria muito difícil treinar um algoritmo para aprender todo o contexto da frase acima, e de todos os outros possíveis comandos disponíveis no Google Assistant, de uma maneira integral.

Mas a equipe de desenvolvimento, composta de humanos, pode entender todo esse contexto, e dar uma ajudinha para a IA. Dá pra fazer isso quebrando esse problema em pequenos pedaços.

Dividir pra conquistar (como já dizia Jack, o Estripador… ou não).


Vamos por partes

Como dividir o problema em pedaços? Numa visão inicial podemos pensar em 5 componentes para essa funcionalidade, que são:

Componente 1: Detecção de gatilho (Trigger word detection): Um sistema de machine learning simples, que simplesmente reconhece o som das palavras “Hey Google”. O mapeamento nesse caso seria esse da tabela abaixo, e é algo relativamente simples de se treinar:

EntradaSaída
ÁudioÉ “Hey Google”? (saída binária, Sim ou Não)

Componente 2: Reconhecimento de voz (voice recognition, ou speech to text): Esse componente é mais complexo que o anterior, e exige treinamento mais complexo também. O lado bom é que, por se tratar de um uso comum e genérico, já existem opções disponíveis para se reusar. Se for o caso de criar esse componente inteiramente em sua empresa/organização, é um projeto de grande escala e alto grau de complexidade (sotaques, línguas, etc.).

EntradaSaída
ÁudioTexto
(ex: “me avise quando minha pizza ficar pronta em 10 minutos, por favor“)

Componente 3: Detecção de Intenção (Intent detection): Outro sistema de machine learning simples, que recebe um áudio e detecta qual a intenção do usuário. Nesse caso, a intenção é iniciar um timer. O aprendizado de máquina é um pouquinho mais complexo que o componente 1 (mas menos complexo que o componente 2), já que há várias maneiras de se pedir a mesma coisa, e quanto mais treino mais maneiras diferentes serão reconhecidas. Eu poderia dizer, por exemplo “toque um alarme em 20 minutos“. Mesmo mais complexo, e exigindo mais dados, ainda assim é um mapeamento totalmente possível com aprendizagem de máquina, e é esse:

EntradaSaída
Texto
(exemplo: “me avise quando minha pizza ficar pronta em 10 minutos, por favor“)
Qual a intenção do usuário, dentre as funcionalidades providas pelo assistente .
(Exemplo: “timer“)

Componente 4: Extrator de informação (Information/Parameter extractor): Esse componente é treinado para receber um texto e, conhecendo qual a intenção do usuário, extrair desse texto a informação necessária para a execução dessa intenção, ignorando todo o resto. Esse componente, portanto, é específico para cada intenção ou funcionalidade do sistema (um domínio específico). Portanto o treinamento do algoritmo se enquadra em algo facilmente executável por machine learning. Ou seja:

EntradaSaída
Texto
(ex.: “me avise quando minha pizza ficar pronta em 10 minutos, por favor“)
Informação necessária para o timer, ou seja, quantidade de minutos (exemplo: 10)

Os componentes 1 a 4 acima são todos componentes de software com Inteligência Artificial ou Machine Learning. Cada um deles pode ser criado por uma equipe diferente (em um próximo artigo vou falar sobre uma equipe ideal em um projeto de Inteligência Artificial).

Podemos imaginar um quinto e último (ao menos nessa arquitetura simplificada), que não se trata de um componente de Inteligência Artificial, mas sim se um software padrão, que é:

Componente 5: Timer. Sem maiores segredos aqui, esse é um software padrão, sem machine learning ou inteligência artificial, que simplesmente executa um timer dado uma entrada que seria a quantidade de minutos necessária e executa a notificação necessária após esse tempo.

Olhando a floresta e não as árvores

Finalmente, uma vez tendo todos os componentes acima devidamente treinados, o assistente de voz que consegue criar um timer te escutando seria:

Na imagem acima mostramos os componentes do exemplo utilizado, ou seja, a funcionalidade de timer, e também como novas funcionalidades poderiam ser adicionadas ao assistente de voz (nesse caso, previsão do tempo ou tocar uma música). As cores dos blocos significam:

A essa cadeia de diferentes inteligências artificiais – conectadas em sequência para um resultado mais significativo – normalmente chamamos pelo termo em inglês “AI Pipeline“.

Pode-se perceber que os componentes 1 (Detecção de Gatilho), 2 (Reconhecimento de Voz) e 3 (Detecção de Intenção) são os mesmos para todas as funcionalidades do sistema. Já os componentes 3 e 4 são específicos para cada funcionalidade.


Quantas equipes de IA mesmo?

Nesse exemplo temos 4 componentes que envolvem machine learning. Cada um pode ser treinado independentemente, com conjuntos de dados distintos. Além disso, um dos componentes, relacionado à Reconhecimento de Voz, tem um alto grau de complexidade mas por outro lado existe disponível como um serviço de nuvem.

Com isso em consideração, poderíamos ter 3 equipes de Inteligência Artificial em paralelo, e terceirizar a IA do componente 2 a um serviço (algumas opções nos links ao final do artigo).

Mas claro que nesse caso estaríamos falando de uma grande empresa, com pessoas o suficiente e preocupada com o tempo. Uma mesma equipe poderia trabalhar sequencialmente nos 3 componentes, aumentando significativamente o tempo já que todo o processo de criação dos sistemas, coleta de dados, treinamento de algoritmos em laboratório e depois refinamento em produção pode levar muitos e muitos meses.

Quer tentar algo mais simples, e sem gastar com serviços de nuvem? Pense na mesma arquitetura acima, mas em um chatbot em vez de comandos por voz!

Quer pensar mais complexo? Como usar a mesma ideia para a arquitetura de um carro auto-dirigível (deixo essa como lição de casa).

E como seria a equipe?

Esse é o tema do terceiro e último artigo dessa série, Uma Equipe de IA.


Nota: Esse artigo também está compartilhado em meu Linkedin, onde você pode colaborar com comentários, sugestões, etc.


Fontes:

  1. Curso Machine Learning , do Andrew Ng no Coursera.
    (termos utilizados nesse artigo vêm todos do curso e dos artigos do Andrew Ng)
  2. Google Voice Assistant.
  3. Smart Speakers.
  4. Serviços da Google para Digitação por voz.
  5. Serviços da Microsoft de Digitação por voz.