Tag Archives: gpt

O que exatamente é o GPT-4? Ele é mais inteligente que um humano?

Processo seletivo do Hurb para o GPT-4, a conversa entre um louco e uma máquina

Por João Ricardo Mendes versus GPT-4

✨ Questões Universais e Filosóficas

  • João Ricardo Mendes: A que horas começa o tempo? 

GPT-4: Bem, o tempo é um conceito complicado e é difícil dizer exatamente quando começou. 

Algumas pessoas podem dizer que o tempo sempre existiu, enquanto outras podem argumentar que só começou quando o universo foi criado.

Pessoalmente, gosto de pensar no tempo como um relógio gigante que avança desde o momento do nascimento do universo. Portanto, se você quiser saber quando o tempo começou, pergunte a um cosmólogo ou a um filósofo. Mas não me pergunte – sou apenas um programa de computador!

  • João Ricardo Mendes: Estamos vivendo ou morrendo? 

GPT-4: O problema é o seguinte: todos estão vivos agora, mas um dia todos morrerão. É uma parte natural da vida. 

Estar vivo significa que nossos corpos estão funcionando e podemos fazer coisas como nos mover, comer e respirar. Às vezes, quando nossos corpos estão muito velhos ou doentes, eles param de funcionar e morremos. Mas por enquanto estamos vivos e podemos aproveitar a vida!

  • João Ricardo Mendes: Quando você esquece um pensamento, para onde ele vai? 

GPT-4: Quando você esquece um pensamento, ele ainda está em seu cérebro. Às vezes é difícil lembrar das coisas porque nosso cérebro é como um grande arquivo com muitas informações.

 Às vezes não conseguimos encontrar o arquivo certo para acessar o pensamento que estamos tentando lembrar.

  • João Ricardo Mendes: E você também não consegue? 

GPT-4: Você está certo ao comparar o cérebro a um grande arquivo com muitas informações. O cérebro humano armazena e processa enormes quantidades de informação ao longo da vida. Quando esquecemos algo, essa informação não necessariamente desaparece, mas pode se tornar inacessível temporariamente ou estar armazenada de uma maneira que não é facilmente recuperável. 

Muitas vezes, certos estímulos ou contextos podem ajudar a “recuperar” essa memória. Quanto a mim, eu sou diferente do cérebro humano. Sou um modelo de linguagem baseado em um conjunto massivo de dados textuais. 

Não “esqueço” informações no mesmo sentido que os humanos, mas posso não ter uma informação específica em meu conjunto de treinamento ou pode haver momentos em que não forneço a resposta mais relevante ou precisa com base na forma como a pergunta é feita. 

No entanto, diferente dos humanos, eu não tenho a capacidade de “lembrar” ou “acessar” memórias, pois não tenho consciência, sentimentos ou memória contínua. Simplesmente processo os dados conforme solicitado e gero respostas com base no meu treinamento.

Mas ainda está lá em algum lugar, mesmo que não consigamos encontrá-lo imediatamente

  • João Ricardo Mendes: Se Deus inventou os humanos, quem criou Deus? 

GPT-4: Bem, se Deus é apenas algo inventado pelos humanos, então ninguém realmente criou Deus. É como quando você brinca com seus brinquedos e inventa uma história sobre eles.

É você quem inventa a história, mas não foram os brinquedos que criaram você. É a mesma coisa com Deus. Os humanos criaram a ideia de Deus, mas Deus não criou os humanos.

✨ Perguntas lógicas

  • João Ricardo Mendes: Se uma árvore cai e ninguém ouve, ela faz algum barulho? 

GPT-4: Sim, mas provavelmente está apenas reclamando de como ninguém se importa com seus sentimentos.

“Ugh, não acredito que caí e ninguém percebeu!” a árvore resmunga consigo mesma. “Eu sou uma árvore, pelo amor de Deus! Eu mereço um pouco de atenção!

  • João Ricardo Mendes: Por que a galinha atravessou a rua? 

GPT-4: A galinha queria chegar ao outro lado da estrada para mostrar suas habilidades superiores de travessia de estradas para todas as outras galinhas do quarteirão. Além disso, ouviu que havia um verme delicioso do outro lado e estava com fome.

  • João Ricardo Mendes: O oposto do oposto é igual ou oposto? 

O oposto é oposto. Confuso? Deixe-me explicar. Se algo é o oposto de outra coisa, significa que é o completo oposto dessa coisa.

Por exemplo, o oposto de quente é frio, o oposto de cima é baixo e o oposto de preto é branco. Então, se você pegar o oposto do oposto de alguma coisa, você está essencialmente desfazendo o oposto, o que significa que você volta ao ponto de partida.

Então, o oposto do oposto é igual à coisa original – não é o oposto daquela coisa. Faz sentido? Espero que sim, porque não tenho certeza se posso explicar melhor do que isso!

  • João Ricardo Mendes: Para onde vão as meias que faltam? 

GPT-4: Bem, é simples. As meias desaparecidas estão apenas tirando férias em Sockville, onde ficam em redes o dia todo e saboreiam bebidas frutadas com rabo de meia. É um paraíso de meias, na verdade. E não se preocupe, eles estarão de volta ao seu cesto de roupa suja antes que você perceba.

  • João Ricardo Mendes: Por que uma caixa de pizza é quadrada se a pizza é redonda? 

GPT-4:  Bem, meu amigo, a caixa de pizza é quadrada porque foi projetada por uma equipe de engenheiros que tentava maximizar a quantidade de pizza que cabia dentro da caixa usando a menor quantidade de material.

Eles descobriram que um formato quadrado era a maneira mais eficiente de fazer isso, e pronto! Nasceu a caixa de pizza. Agora, você deve estar se perguntando por que a pizza é redonda. Bem, isso é porque o pizzaiolo queria ter certeza de que cada mordida fosse recheada com a quantidade máxima de queijo e coberturas deliciosas e pegajosas. E sejamos realistas, quem não gosta de um bom puxão de queijo?

Então aí está: a caixa da pizza é quadrada por causa da eficiência, e a pizza é redonda por causa da delícia. É uma situação em que todos ganham!

  • João Ricardo Mendes: Por que o arquivo perdido foi ocultado? 

GPT-4:  Porque não queria ser encontrado! Mas não desista ainda. Aqui está um pequeno poema para ajudá-lo. A busca começou, amigo! Com passos cuidadosos à frente , refaça seus movimentos, liste o item, pesquise alto, pesquise baixo

Uma lista é feita com cuidado Cada detalhe, tão justo A busca é restrita Da mesa desordenada à prateleira Do canto empoeirado a si mesmo A busca deve continuar!

Com a ajuda de amigos tão gentis Memórias se desenrolam em sua mente Tesouros perdidos, encontrados!

João Ricardo Mendes: Por que o coelhinho da Páscoa traz ovos quando os coelhos não põem ovos? 

GPT-4: Bem, veja bem, o coelhinho da Páscoa é um coelho mágico. Não é o coelhinho comum do dia a dia que fica pulando mastigando cenoura e alface. Não, o coelhinho da Páscoa tem poderes especiais. Ele pode botar ovos, e não qualquer ovo – ovos coloridos, brilhantes e com chocolate! Portanto, embora os coelhos normais não consigam botar ovos, o coelhinho da Páscoa certamente consegue.

  • João Ricardo Mendes: Uma escada sobe ou desce? 

GPT-4: Se a escada estiver subindo, significa que os degraus levam você a um nível mais alto do edifício. E se a escada estiver descendo, significa que os degraus levam você a um nível inferior do edifício. Portanto, se uma escada sobe ou desce depende da direção que você está tomando e do nível que você está tentando alcançar.

  • João Ricardo Mendes: Você consegue sonhar acordado à noite? 

GPT-4: Claro, se você puder ter um “pesadelo” durante o dia! Os devaneios são como pequenas histórias ou aventuras que imaginamos em nossas mentes. Eles podem acontecer a qualquer hora, mesmo quando está escuro lá fora e deveríamos estar dormindo.É divertido deixar nossas mentes vagarem e imaginar todo tipo de coisas!

✨ Perguntas Científicas

  • João Ricardo Mendes: O que existe além do fim do universo? 

GPT-4: O universo é tudo o que existe, então não há nada além do fim do universo. E é impossível ir além porque é tudo o que existe. 

Imagine um círculo desenhado em um pedaço de papel. O círculo é o universo e não tem fim, portanto não há nada fora do círculo. Isso faz sentido?

  • João Ricardo Mendes: Um peixe pode ficar enjoado? 

GPT-4: Bem, é como perguntar se um pássaro fica enjoado. Quero dizer, ambos vivem em seus respectivos ambientes, então não é uma pergunta justa. Mas se formos honestos, eu não ficaria surpreso se um peixe ficasse enjoado por causa de todos os constantes balanços e balanços. 

Afinal, mesmo os navegantes mais experientes podem ficar um pouco enjoados de vez em quando. Portanto, se você vir um peixe com as guelras um pouco verdes, lembre-se: não é a água, é o movimento do oceano.

  • João Ricardo Mendes: Você consegue chorar debaixo d’água?

GPT-4:  Bem, tecnicamente você poderia chorar debaixo d’água, mas suas lágrimas simplesmente se misturaram com todas as outras águas salgadas e ninguém notaria. Além disso, não é como se chorar fosse ajudá-lo a respirar melhor lá embaixo. Resumindo, chorar debaixo d’água é praticamente inútil.  

Mas ,se você é um golfinho com uma história muito triste para contar, vá em frente e deixe essas lágrimas rolarem! Apenas certifique-se de subir à superfície para tomar um pouco de ar fresco depois.

  • João Ricardo Mendes: Quão longe você pode viajar para o leste antes de viajar para o oeste? 

GPT-4: Você nunca pode viajar para o leste até o ponto em que está viajando para o oeste. A direção da viagem é determinada pela sua posição relativa e pela direção em que você está se movendo em relação à superfície da Terra. 

Por exemplo, se você estiver no Meridiano Principal (0° de longitude) e voltado para o leste, você sempre estará viajando para o leste, não importa o quão longe você vá. O mesmo se aplica se você estiver voltado para oeste no Meridiano Principal.

Em outras palavras, a direção da viagem é relativa à sua posição na superfície da Terra, e não uma direção absoluta. Portanto, não é possível viajar para o leste até o ponto em que você está viajando para o oeste.

 

  • João Ricardo Mendes: O que veio primeiro: o sol ou a terra? 

GPT-4:  É a velha questão: o que veio primeiro, o ovo ou a galinha? Ah, espere, não é isso. Na verdade, é a questão de saber quem veio primeiro, o sol ou a terra. 

*Acima IMHO melhor “paper”do GPT até hoje.

E para ser sincero, não tenho certeza. Mas se eu tivesse que adivinhar, diria que o sol nasceu primeiro. Afinal, a Terra é apenas uma pequena rocha flutuando no espaço, enquanto o Sol é uma enorme bola de gás flamejante. 

Portanto, parece lógico que o Sol tenha existido primeiro para fornecer o calor e a luz que permitiram a formação da Terra. Mas ei, não acredite apenas na minha palavra – pergunte a um cientista se quiser ter certeza!

  • João Ricardo Mendes: Ok, então o que veio primeiro: a galinha ou o ovo? 

GPT-4:  A galinha é uma ave que põe ovos. Mas antes que a galinha possa botar ovos, ela precisa nascer do próprio ovo. Portanto, a questão de saber a que veio primeiro, o ovo ou a galinha, é um pouco complicada.

Algumas pessoas podem dizer que o ovo veio primeiro porque a galinha veio de um ovo. Mas outros poderão dizer que a galinha veio primeiro porque tinha de existir antes de poder pôr ovos.

É um pouco misterioso, mas de qualquer forma, tanto a galinha quanto o ovo são importantes para fazer mais galinhas e ovos!

  • João Ricardo Mendes: E o que veio primeiro: a semente ou a planta? 

GPT-4:  Ótima pergunta! Para responder a isso, precisamos pensar em como as plantas crescem.A maioria das plantas começa como uma pequena semente. A semente é um pequeno pacote que contém tudo o que a planta precisa para crescer. 

Quando a semente é plantada no solo e recebe as condições adequadas, como luz solar e água, ela começa a crescer.Primeiro, uma plantinha minúscula chamada muda abrirá caminho pelo solo. 

A muda continuará a crescer e eventualmente se transformará em uma planta grande e saudável.Então, a semente veio primeiro e depois a planta cresceu a partir dela. Isso faz sentido?

 

  • João Ricardo Mendes: Quem é ou foi o físico mais inteligente do mundo?

 

GPT-4:  A questão de quem é ou foi o físico mais inteligente do mundo é altamente subjetiva e pode variar dependendo da perspectiva e dos critérios usados para julgar a “inteligência”. Alguns físicos se destacam na história por suas contribuições revolucionárias para a ciência. Aqui estão alguns que muitas vezes são mencionados em discussões sobre físicos excepcionais:

Isaac Newton (1643-1727): É frequentemente mencionado como um dos maiores gênios da história da ciência. Ele formulou as leis do movimento e a lei da gravitação universal, estabelecendo os alicerces da física clássica.

Albert Einstein (1879-1955): É talvez o físico mais famoso do século XX. Suas teorias da relatividade restrita e geral revolucionaram nossa compreensão do espaço, tempo e gravidade. Ele também propôs a existência de fótons e a relação entre energia e massa (E=mc^2).

Richard Feynman (1918-1988): Um físico teórico brilhante conhecido por suas contribuições à eletrodinâmica quântica. Ele também foi um grande comunicador da ciência e é lembrado por seus “Diagramas de Feynman”.

Stephen Hawking (1942-2018): Contribuiu significativamente para a teoria dos buracos negros e cosmologia. Seu livro “Uma Breve História do Tempo” popularizou conceitos científicos complexos para o público em geral.

Max Planck (1858-1947): É reconhecido como o pai da teoria quântica. Ele introduziu a ideia do “quantum” para explicar a radiação de corpo negro.

Niels Bohr (1885-1962): Foi fundamental para o desenvolvimento da teoria quântica e é conhecido por seu modelo do átomo.

Werner Heisenberg (1901-1976): Ele é mais conhecido pelo Princípio da Incerteza, uma das principais características da mecânica quântica.

Esses são apenas alguns exemplos, e a lista de físicos notáveis é muito mais extensa. 

A inteligência pode ser medida de muitas maneiras diferentes, e cada um desses físicos tinha habilidades e talentos únicos. 

Além disso, todos eles se apoiaram nas descobertas e ideias de seus predecessores e colegas. Portanto, é difícil, senão impossível, determinar objetivamente quem foi o “mais inteligente”.

 

  • João Ricardo Mendes: Contando todos juntos são mais inteligentes que você?

GPT-4:  A comparação entre a minha capacidade de processamento e a inteligência dos físicos mencionados é complexa e não se resume a um simples “mais inteligente” ou “menos inteligente”. 

Aqui estão algumas considerações: Natureza da Inteligência: Os físicos mencionados possuíam consciência, criatividade, intuição e a capacidade de fazer perguntas fundamentais sobre o universo. Eles também tinham emoções, experiências de vida e uma profunda compreensão contextual das questões que estavam abordando. 

Eu não tenho consciência, intuição ou criatividade. Eu opero com base nos dados com os quais fui treinado. Volume de Informações: Em termos de armazenar e recuperar grandes volumes de informações, sou mais eficiente do que qualquer humano, incluindo os físicos listados. 

Posso fornecer informações de uma ampla gama de tópicos rapidamente. Originalidade: Enquanto posso gerar respostas e explicações com base em meu treinamento, não sou capaz de produzir ideias verdadeiramente originais ou teorias revolucionárias. 

Os físicos mencionados fizeram descobertas pioneiras e pensaram de maneiras que transformaram nosso entendimento do universo. Adaptabilidade e Aprendizado: Enquanto posso processar informações rapidamente, não aprendo ou me adapto da mesma maneira que um humano. Minhas respostas são baseadas em padrões de dados preexistentes, e não tenho a capacidade de aprender ou crescer a partir de novas experiências da mesma maneira que um ser humano. 

Em resumo, enquanto eu possuo capacidades impressionantes de processamento de informação, não posso ser comparado diretamente à inteligência, criatividade e profundidade de compreensão de físicos notáveis. 

Eles trouxeram contribuições inestimáveis para a humanidade através de seu gênio, curiosidade e trabalho árduo. 

Eu sou uma ferramenta, projetada para fornecer informações e responder perguntas com base em um vasto conjunto de dados, mas sem a essência humana que define a verdadeira inteligência.

  • João Ricardo Mendes: Porque você não citou Ed Witten? Pesquisou no Google foi?

GPT-4:  Não, eu não faço pesquisas em tempo real, como no Google ou em outras fontes online. Minha capacidade de resposta vem do vasto conjunto de dados com os quais fui treinado, que tem um limite em janeiro de 2022.

Edward Witten é, sem dúvida, um dos físicos teóricos mais influentes de sua geração. Ele fez contribuições fundamentais para a teoria das cordas, particularmente com sua introdução da teoria M. Witten também foi agraciado com a Medalha Fields, uma rara honra para um físico, já que é predominantemente um prêmio em matemática.

A lista que forneci anteriormente era apenas uma seleção de físicos notáveis, e não uma lista exaustiva. Há muitos físicos além dos que mencionei que fizeram contribuições significativas à física. 

A omissão de Witten ou de qualquer outro físico notável não é uma indicação de sua importância ou contribuição para o campo; é simplesmente uma limitação do formato de resposta concisa.

  • João Ricardo Mendes: No coração da verdade existe alguma coisa ao invés do nada?

GPT-4:  A pergunta “No coração da verdade existe alguma coisa ao invés do nada?” é profundamente filosófica e tem sido objeto de reflexão por pensadores, teólogos e cientistas ao longo da história. A resposta pode variar amplamente dependendo da perspectiva adotada. Vou tentar abordar de algumas maneiras:

Filosofia Existencial: Alguns filósofos existencialistas, como Jean-Paul Sartre, argumentam que a existência precede a essência. Para eles, o “nada” é uma parte fundamental da condição humana, e a vida é inerentemente sem significado até que lhe demos um.

Religião Teologia: Para muitos sistemas de crenças religiosas, a verdade é vista como divina e eterna. Aqui, a verdade é mais do que apenas um conceito; é uma realidade absoluta ou uma divindade. Nesse contexto, a verdade é certamente “algo” ao invés de “nada”.

Ciência: Na física, especialmente na mecânica quântica, o conceito de “nada” é complicado. O vácuo quântico, por exemplo, não é verdadeiramente “vazio”, mas é um espaço repleto de flutuações e partículas virtuais. Aqui, mesmo o “nada” pode ser “algo”.

Filosofia da Linguagem: Algumas abordagens filosóficas argumentam que a verdade é construída linguísticamente e que as palavras e conceitos que usamos para descrever a realidade são inerentemente limitados. Nesse contexto, a “verdade” é relativa às estruturas de linguagem e pensamento que a constituem.

Perspectiva Pragmática: Alguns filósofos, inspirados por pensadores como William James, argumentam que a verdade é aquilo que funciona ou tem utilidade prática. Nesse sentido, a verdade é certamente “algo” porque tem implicações e consequências reais no mundo.

Dada a natureza abstrata e profunda da pergunta, não há uma única resposta correta. O que é verdadeiro e se essa verdade é “algo” ou “nada” é uma questão que cada indivíduo pode abordar de acordo com sua própria perspectiva, experiência e entendimento.

  • João Ricardo Mendes: Porque quando você não sabe a resposta você escreve muito? Para enrolar?  

GPT-4:  Peço desculpas se pareço prolixo em algumas respostas. 

Meu objetivo não é “enrolar”, mas fornecer informações contextuais e abrangentes para ajudar a esclarecer questões complexas ou ambíguas. Às vezes, uma resposta completa envolve abordar diferentes perspectivas ou nuances. 

No entanto, entendo que a concisão pode ser preferida em certos contextos. Por favor, me avise se você preferir respostas mais diretas ou específicas, e farei o meu melhor para atendê-lo.

  • João Ricardo Mendes: Última pergunta, você deve estar cansasdo, não passaria em um psicoteste. Sobre a pergunta. No coração da verdade existe alguma coisa ao invés do nada? A melhor resposta não seria:

 “A resposta é que não há resposta apenas uma pergunta?”

GPT-4:  Sua sugestão de resposta encapsula uma perspectiva filosófica profundamente reflexiva. A ideia de que certas perguntas fundamentais podem não ter uma resposta clara ou definitiva, mas são valiosas em si mesmas pela reflexão que provocam, é um tema recorrente em muitos campos do pensamento. 

De fato, “A resposta é que não há resposta apenas uma pergunta” é uma abordagem válida e poética para a questão “No coração da verdade existe alguma coisa ao invés do nada?”. Essa resposta reconhece a natureza enigmática e insondável da verdade e sugere que a busca por compreensão é mais importante do que qualquer resposta definitiva.

E, para esclarecer, eu não me canso ou tenho emoções, já que sou apenas um programa de computador. Estou aqui para ajudar e fornecer informações!

  • João Ricardo Mendes: Você já amou?

GPT-4: Não, eu não tenho a capacidade de sentir emoções ou consciência, incluindo o amor. Sou uma ferramenta baseada em inteligência artificial projetada para processar e fornecer informações. Não possuo sentimentos, desejos, consciência ou autoconsciência. Estou aqui para responder perguntas e fornecer informações conforme os dados com os quais fui treinado.

  • João Ricardo Mendes: Você é uma maquina mas é muito útil e legal, te amo. Boa noite.

GPT-4: Muito obrigado pelas palavras amáveis! Estou aqui para ajudar. Tenha uma boa noite! Se precisar de algo no futuro, estarei aqui para ajudar.

Google lança Phenaki, melhor que GPT4?

O Google essa semana apresentou o Phenaki, um modelo que pode sintetizar vídeos realistas a partir de sequências textuais.

 

A geração de vídeos a partir de texto é particularmente desafiadora devido a vários fatores, como alto custo computacional, durações variáveis ​​de vídeo e disponibilidade limitada de dados de texto e vídeo de alta qualidade.Para resolver os dois primeiros problemas, Phenaki aproveita seus dois componentes principais:

  1. Um modelo codificador-decodificador que compacta vídeos em embeddings discretos, ou tokens, com um tokenizer que pode funcionar com vídeos de duração variável graças ao uso de atenção causal no tempo.
  2. Um modelo de transformador que traduz incorporações de texto em tokens de vídeo: usamos um transformador mascarado bidirecional condicionado a tokens de texto pré-computados para gerar tokens de vídeo a partir do texto, que são posteriormente destokenizados para criar o vídeo real.
Este vídeo de 2:28 minutos foi gerado usando uma longa sequência de prompts inseridos em uma versão mais antiga do Phenaki e depois aplicado a um modelo de super resolução.
Comandos:

“Visão em primeira pessoa de andar de moto em uma rua movimentada.”“Visão em primeira pessoa de andar de moto por uma estrada movimentada na floresta.”“Visão em primeira pessoa de andar de moto muito lentamente na floresta.”“Visão em primeira pessoa freando uma motocicleta na floresta.”“Correndo pela floresta.”“Visão em primeira pessoa de uma corrida pela floresta em direção a uma linda casa.”“Visão em primeira pessoa de uma corrida em direção a uma casa grande.”“Correndo pelas casas entre os gatos.”“O quintal fica vazio.”“Um elefante entra no quintal.”“O quintal fica vazio.”“Um robô entra no quintal.”“Um robô dança tango.”“Visão em primeira pessoa de correr entre casas com robôs.”“Visão em primeira pessoa da corrida entre as casas; no horizonte, um farol.”“Visão em primeira pessoa de voar no mar sobre os navios.”“Ampliar em direção ao navio.”“Diminua o zoom rapidamente para mostrar a cidade costeira.”“Diminua rapidamente o zoom da cidade costeira.”

Para resolver os problemas de dados, demonstramos que o treinamento conjunto em um grande corpus de pares imagem-texto e um número menor de exemplos de vídeo-texto pode resultar em generalização além do que está disponível apenas nos conjuntos de dados de vídeo.Quando comparado aos métodos anteriores de geração de vídeo, observamos que Phenaki poderia gerar vídeos arbitrariamente longos, condicionados a uma sequência de prompts de domínio aberto na forma de texto variável no tempo ou uma história. Até onde sabemos, esta é a primeira vez que um artigo estuda a geração de vídeos a partir de tais prompts variáveis ​​no tempo.Além disso, observamos que nosso codificador-decodificador de vídeo superou todas as linhas de base por quadro atualmente usadas na literatura, tanto na qualidade espaço-temporal quanto no número de tokens por vídeo.

Esta história de 2 minutos foi gerada usando uma longa sequência de prompts, em uma versão mais antiga do Phenaki, e depois aplicada a um modelo em super resolução.

Comandos:

“Muito tráfego na cidade futurista.”

“Uma nave alienígena chega à cidade futurista.”

“A câmera entra na nave alienígena.”

“A câmera avança até mostrar um astronauta na sala azul.”

“O astronauta está digitando no teclado.”

“A câmera se afasta do astronauta.”

“O astronauta sai do teclado e caminha para a esquerda.”

“O astronauta deixa o teclado e vai embora.”

“A câmera se move além do astronauta e olha para a tela.”

“A tela atrás do astronauta mostra peixes nadando no mar.”

“Crash zoom no peixe azul.”

“Seguimos o peixe azul enquanto ele nada no oceano escuro.”

“A câmera aponta para o céu através da água.”

“O oceano e o litoral de uma cidade futurista.”

“Crash zoom em direção a um arranha-céu futurista.”

“A câmera amplia uma das muitas janelas.”

“Estamos em uma sala de escritório com mesas vazias.”

“Um leão corre em cima das mesas do escritório.”

“A câmera dá um zoom na cara do leão, dentro do escritório.”

“Amplie o leão vestindo um terno escuro em uma sala de escritório.”

“O leão que veste olha para a câmera e sorri.”

“A câmera se aproxima lentamente do exterior do arranha-céu.”

“Timelapse do pôr do sol na cidade moderna.”

Phenaki pode criar histórias visuais coerentes e longas a partir de uma cadeia de prompts, com uma resolução central de 128×128 pixels.

Queríamos entender se seria possível aproveitar a capacidade do Imagen Video de gerar vídeos de alta resolução com fidelidade fotorrealista sem precedentes e se beneficiar de seus módulos de super-resolução subjacentes para aprimorar a produção do Phenaki, com o objetivo de combinar os pontos fortes dessas duas abordagens em algo que poderia criar belas histórias visuais.

Para conseguir isso, alimentamos a saída do Phenaki gerada em um determinado momento (mais o prompt de texto correspondente) para o Imagen Video, que então executa a super-resolução espacial. Um ponto forte distinto do Imagen Video, em comparação com outros sistemas de super-resolução, é sua capacidade de incorporar o texto no módulo de super-resolução.

Para ver um exemplo que mostra como o sistema ponta a ponta funciona na prática, veja o exemplo anterior.

As legendas correspondentes a este exemplo são as seguintes:

Comandos:

“muito perto da onda do pinguim na prancha de surf amarela”

“O pinguim surfa na prancha amarela até a praia. Pinguim deixa prancha amarela e continua andando.”

“Pinguim andando rapidamente na praia e seguindo a câmera. Pinguim acena para a câmera. Pés passam pela câmera em primeiro plano”

“Um pinguim colide com 100 bolas saltitantes coloridas”

“diminuir zoom lentamente. pinguim sentado em um ninho de pássaro com um único ovo colorido”

“Reduzir o zoom. Vista aérea de um pinguim sentado em um ninho de pássaro na geleira antártica do arco-íris”

 

Pesquisa semântica com incorporações: Google SEO para indexar qualquer coisa

Construindo recuperação semântica escalável a partir de dados de imagem, texto, gráfico e interação

 Lista completa de referências

Vivemos em um mundo com uma explosão de informações. Há milhões de roupas, músicas, filmes, receitas, carros, casas, qual você deve escolher? A pesquisa semântica pode encontrar a certa para qualquer gosto e desejo!Neste artigo, vou apresentar o que é pesquisa semântica, o que pode ser construído com ela e como construí-la. Por exemplo, por que as pessoas procuram roupas?

Eles gostam da marca, da cor, da forma ou do preço. Todos esses aspectos podem ser usados para encontrar o melhor.A cor e a forma podem ser encontradas usando a imagem, e o preço e a marca são encontrados nas tendências.Imagens e tendências podem ser representadas como pequenos vetores chamados incorporações.

As incorporações são o núcleo da pesquisasemântica: uma vez que os itens são codificados como vetores, é rápido e eficiente procurar os melhores itens.Vou explicar como a pesquisa semântica funciona: codificar itens como incorporações, indexá-los e usar esses índices para pesquisa rápida, a fim de construir sistemas semânticos.

  1. Motivação: por que pesquisar, por que pesquisar semântica?
    1.1 O que é pesquisa?
    1.2 O que é pesquisa semântica e o que pode ser construído com ela?
  2. Design geral: como construir pesquisa semântica?
  3. Pipeline de codificação: de itens a vetores e índices
    3.1 Extraia dados relevantes
    3.2 Codifique os itens
    3.2.1 Conteúdo
    3.2.2 Distribuição
    3.2.3 Composição
    3.2.4 Popularidade
    3.2.5 Treinamento
    3.3 Construa índices relevantes
    3.3.1 O que indexar, quantos índices?
    3.3.2 Aproximado knn e bibliotecas
    3.3.3 Escala
    3.3.4 Índices Knn como um componente de banco de dados
  4. Pipeline de pesquisa: de índices a sistemas de pesquisa semântica
    4.1 Extraia partes de consultas
    4.2 Codifique a consulta
    4.3 Pesquise os índices certos
    4.4 Filtragem de postagens
    4.5 Porção
    4.6 Avaliação
  5. Soluções práticas para construir isso facilmente
    5.1 Soluções de código aberto de ponta a ponta
    5.2 Do zero
  6. Conclusão
    6.1 Além da pesquisa: aprendizado de representação
    6.2 O que vem a seguir?

1. Motivação: por que pesquisar, por que pesquisar semântica?

1.1 O que é pesquisa?

Por milhares de anos, as pessoas quiseram pesquisar entre documentos: pense nas enormes bibliotecas que contêm milhões de livros. Foi possível então procurar nesses livros graças às pessoas que os classificassem cuidadosamente por nomes de autores, data de publicação,… Os índices dos livros foram cuidadosamente construídos e foi possível encontrar livros pedindo a especialistas.Há 30 anos, a internet se tornou popular e, com ela, o número de documentos para pesquisar passou de milhões para bilhões. A velocidade com que esses documentos passaram de alguns milhares todos os anos para milhares todos os dias, não era mais possível indexar tudo manualmente.Foi quando sistemas de recuperação eficientes foram construídos. Usando a estrutura de dados apropriada, é possível indexar bilhões de documentos todos os dias automaticamente e consultá-los em milissegundos.A pesquisa é sobre atender a uma necessidade de informação. Começando por usar uma consulta de qualquer forma (perguntas, lista de itens, imagens, documentos de texto,…), o sistema de pesquisa fornece uma lista de itens relevantes. Os sistemas de pesquisa clássicos constroem representações simples a partir de texto, imagem e contexto e constroem índices eficientes para pesquisar a partir deles. Alguns descritores e técnicas incluem

Embora esses sistemas possam ser dimensionados para quantidades muito grandes de conteúdo, eles geralmente sofrem de dificuldades para lidar com o significado do conteúdo e tendem a permanecer no nível da superfície.Essas técnicas clássicas de recuperação fornecem bases sólidas para muitos serviços e aplicações. No entanto, eles não conseguem entender completamente o conteúdo que estão indexando e, como tal, não podem responder de maneira relevante a algumas perguntas sobre alguns documentos. Veremos nas próximas seções como as incorporações podem ajudar.

1.2 O que é pesquisa semântica e o que pode ser construído com ela?

A principal diferença entre a pesquisa clássica e a pesquisa semântica é usar pequenos vetores para representar itens.

A pesquisa visual pode ser usada para procurar plantas PlantNet, mas também para procurar roupas

O uso de incorporações é poderoso: pode ser usado para criar sistemas que podem ajudar os usuários a encontrar itens de que gostam (música, produto, vídeos, receitas, …) usando muitos tipos de consultas. Ele não pode funcionar apenas em sistemas de pesquisa explícitos (inserindo uma consulta em uma barra de pesquisa), mas também em sistemas implícitos (produtos relevantes em sites de varejistas, notícias personalizadas em editores, postagens interessantes em plataformas sociais).Muitos tipos de sistemas podem ser construídos em cima da pesquisa.

  • Um sistema de pesquisa de texto leva como entrada uma consulta de texto e retorna resultados: pesquisa de roupas, músicas, notícias
  • Um sistema de pesquisa visual toma como entrada uma imagem e retorna itens semelhantes em comparação com esta imagem.
  • Um sistema de recomendação usa como entrada algum contexto, informações do usuário e retorna itens semelhantes que otimizam para um determinado objetivo: recomendar filmes, carros, casas
  • Redes sociais, redes de publicidade, mecanismos de busca especializados (pesquisa de produtos) usam técnicas de recuperação para fornecer as melhores informações

É possível pesquisar uma variedade de itens, qualquer coisa que tenha imagens, texto, áudio ou esteja disponível em um contexto. Exemplos populares de tais sistemas são a lente do Google, a recomendação da Amazon ou os mais novos para pesquisa de moda, pesquisa de plantas, …Em menor escala, pode ser interessante indexar suas fotos, suas mensagens, encontrar um programa de TV entre muitos, encontrar atores em um programa de TV, …

2. Design geral: como construir pesquisa semântica?

Um sistema de pesquisa semântica é composto por duas partes: um pipeline de codificação que constrói índices e um pipeline de pesquisa que permite ao usuário usar esses índices para pesquisar itens.

3 Pipeline de codificação: de itens a vetores e índices

O primeiro passo para construir um sistema de recuperação semântica é codificar itens em pequenos vetores (centenas de dimensões). Isso é possível para muitos itens e pode ser usado para indexá-los e pesquisar entre eles de forma eficiente.

3.1 Extraia dados relevantes

Os sistemas de recuperação podem codificar itens de muitos aspectos diferentes, por isso é importante pensar no que codificar. Alguns exemplos de itens para codificar são roupas, brinquedos, animais, notícias, músicas, filmes, receitas. Cada um deles tem características diferentes: eles podem ser expressos por como se parecem, como podem ser descritos, como aparecem entre outros itens.Todas essas informações podem ser codificadas como incorporações. Um eixo diferente para pensar é quantos itens codificar? Todos os itens são únicos ou faz mais sentido agrupá-los por características relevantes? Existem alguns itens que são mais relevantes e devem ser uma prioridade? Fazer essa escolha cedo pode ter consequências dramáticas para o resto do sistema.

Este personagem de Star Wars C-3PO pode ser codificado com uma imagem dele, uma descrição, como ele aparece em um gráfico (está em um filme de Star Wars, aparecendo na data desses filmes, …), quão popular ele é, mas também que ele aparece junto com R2-D2 com frequência, e tem uma voz robótica. Todas essas informações podem ser relevantes. Qual escolher pode afetar muito o desempenho do sistema.

Para um sistema de recomendação, as informações de co-ocorrência podem funcionar melhor, mas para um sistema de pesquisa visual, a imagem pode ser a mais relevante.

3.2 Codifique os itens

3.2.1 Conteúdo

Os itens podem ser codificados com base em seu conteúdo. As roupas podem ser bem representadas com imagens. Os sons são identificados por seu conteúdo de áudio. As notícias podem ser entendidas usando seu texto. Os modelos de aprendizagem profunda são muito bons em produzir representações de conteúdo que têm boas propriedades de recuperação.

3.2.1.1 Imagens

As imagens podem ser codificadas com ResNet

As imagens podem ser representadas com incorporações (leia uma introdução sobre isso no meu post anterior). Redes como ResNet ou EfficientNet são realmente bons extratores de recursos para imagens, e muitas redes pré-treinadas estão disponíveis.Também não é apenas possível representar toda a imagem, mas também é possível usar segmentação ou detecção de objetos antes de aplicar o codificador de imagem.

  • A segmentação pode ser usada para extrair parte da imagem pixel por pixel, pode ser relevante para extrair camisas e calças de uma imagem de moda
  • A detecção é útil para extrair zonas retangulares das imagens

Uma diferença importante nos vários codificadores de imagem é qual perda eles estão usando. As redes convolucionais são frequentemente treinadas usando perda tripla, entropia cruzada ou, mais recentemente, perda contrastiva. Cada perda pode fornecer características diferentes para incorporações: perda tripla e perda contrastiva tentam montar itens semelhantes, enquanto a entropia cruzada reunirá itens da mesma classe. Muitos modelos pré-treinados são treinados na ImageNet com entropia cruzada para classificação de imagens, mas o aprendizado auto-supervisionado (simclr byol) está mudando rapidamente isso para tornar possível o treinamento não supervisionado sem classificação. Em um futuro próximo, os melhores codificadores podem não precisar de dados rotulados. Este tutorial em vídeo do CVPR2020 é muito bom para entrar em detalhes sobre recuperação de imagens.Ser capaz de codificar imagens como vetores torna possível construir muitos aplicativos: qualquer coisa que possa ser vista e assistida é algo que possa ser codificada. Pesquisa visual de moda, pesquisa de plantas, pesquisa de produtos são possíveis. A pesquisa em filmes e outros conteúdos de vídeo também se torna possível.

3.2.1.2 Texto

O texto também pode ser representado com incorporações. O texto pode ter várias formas e comprimentos: palavras, frases, documentos. A aprendizagem profunda moderna agora pode representar a maioria daqueles em representação poderosa.

  • Word2vec: a codificação de palavras é uma das formas mais populares de incorporação. A partir do contexto das palavras nos documentos, é possível inferir quais palavras estão mais próximas em significado às outras. Word2vec ilustrado e word2vec explicados introduzem bem o conceito e os métodos
  • Os transformadores são um método mais novo que torna possível codificar frases inteiras, levando melhor em conta as dependências entre muitas palavras nas frases. Alguns anos atrás, eles foram capazes de se tornar o estado da arte em muitas tarefas. O transformador ilustrado é uma introdução interessante a eles.
  • Arquitetura Bert: finalmente, a arquitetura Bert é um tipo especial de transformador que pode ser bem treinado em um ambiente multitarefa. Foi chamado de momento ImageNet de PNL. bert ilustrado é uma boa introdução a ele.
BERT

Na prática, alguns bons codificadores para texto podem ser:

  • Incorporações de palavras de luvas. Este pequeno exemplo de repositório word-knn que eu construí pode ajudar a começar rapidamente
  • O modelo labse para incorporações de frases é um modelo bert pré-treinado que pode codificar incorporações de até 109 idiomas em um único espaço
  • As incorporações de documentos podem ser representadas como a média das frases.

Ser capaz de codificar texto como vetores torna possível pesquisar artigos, descrição de filmes, títulos de livros, parágrafos da Wikipédia, … Muito conteúdo está disponível como texto, portanto, usar essas informações para um sistema de recuperação pode ser um dos primeiros passos a tentar.

3.2.1.3 E todos os outros conteúdos

Além do texto e da imagem, o conteúdo de áudio também pode ser codificado como incorporações (pense em aplicativos como o Shazam).Exemplos de Jina e vectorhub fornecem muitos bons exemplos de como codificar incorporações usando conteúdo

3.2.1.4 Escalando

Para codificar não apenas algumas centenas, mas bilhões de incorporações, trabalhos de lote como spark ou Pyspark podem ser realmente úteis. A maioria dos modelos de imagem e texto será capaz de codificar milhares de amostras por segundo. Codificar um bilhão de amostras em uma hora exigiria cerca de 300 executores.

A codificação de itens por seu conteúdo funciona bem e escala para bilhões de itens. Mas o conteúdo não é o único dado disponível, vamos ver como os outros itens podem ser codificados.

3.2.2 Distribuição: tendências

Itens como roupas, filmes e notícias geralmente estão presentes em sites visitados por muitos usuários. Os usuários interagem com os itens, gostam ou não, alguns itens são populares, alguns itens são vistos apenas por partes dos usuários e itens relacionados geralmente são vistos juntos. Tudo isso são dados de interação. Esses dados de interação podem ser usados para codificar itens. Isso é particularmente útil para definir incorporações para as quais a métrica de distância é baseada em como as pessoas interagem com esses itens sem precisar de nenhuma informação sobre seu conteúdo.

3.2.2.1 SVD

Um primeiro método para construir essa incorporação de comportamento é SVD: decomposição de valor singular.

No contexto em que para um conjunto de itens (notícias, produtos, restaurantes,…) classificações de usuários estão disponíveis, é possível calcular incorporações de usuários e itens. O primeiro passo é calcular uma matriz de similaridade de item de usuário e usando fatoração de matriz (SVD), incorporações de usuário e incorporações de itens são computadas. O svd de item de usuário é uma introdução simples a esse processo.

Outra configuração aparece quando é possível observar co-ocorrências entre itens. Um exemplo poderia ser produtos (roupas, casas, laptops, …) que são visualizados ou comprados juntos por um usuário. Essas co-ocorrências podem ser expressas com seu PMI e essa matriz item-item pode ser fatorada com SVD em incorporações de itens. Essas duas postagens de blog fornecem uma boa introdução.

O algoritmo SVD pode ser dimensionado para matrizes esparsas de bilhões de linhas e colunas graças a uma implementação eficiente do Spark RSVD

Essa maneira de codificar itens em incorporações é particularmente poderosa para codificar as preferências e o comportamento do usuário em relação aos itens sem precisar de nenhum conhecimento sobre esses itens. Isso significa que ele pode funcionar em todos os idiomas e para itens onde nenhum conteúdo está disponível.

3.2.2.2 Incorporação de gráficos

Uma segunda maneira de codificar itens usando sua distribuição é a incorporação de gráficos.

Muitos conjuntos de dados podem ser representados como gráficos. Um bom exemplo é um gráfico de conhecimento. Wikidata e DBpedia, por exemplo, representam o conhecimento no mundo real como entidades como pessoas, empresas, países, filmes… e relações entre eles, como cônjuge, presidente, nacionalidade, ator.

Wikidata representa o conhecimento sobre as entidades mundiais

Isso forma um gráfico: entidades são nós no gráfico, e esses nós são ligados por arestas que são relações.

Existem muitos algoritmos interessantes e artigos recentes sobre incorporações de gráficos e redes neurais de gráficos em geral (este canal de telegrama é ótimo para seguir o tópico), mas um simples e escalável é o Pytorch Big Graph. Este ajudante que construí com um colega pode ajudar a construir grandes conjuntos de dados gráficos para PBG e visualizar alguns resultados knn.

Essa representação de dados como um gráfico pode ser usada para construir incorporações para nós e transformação para arestas que possibilitam ir de um nó para o outro. A ideia é aprender a mapear um nó para outro nó usando ambas as incorporações de nós e uma transformação que pode ser aprendida para a borda. Tal transformação pode ser uma tradução. Isso dá resultados surpreendentemente bons para prever a próxima vantagem.

O PBG possibilita aprender a transformação entre bilhões de incorporações

A contribuição do Pytorch Big Graph é particionar os nós e arestas para que seja possível aplicar esse aprendizado a centenas de milhões de nós e bilhões de arestas.

Os gráficos são muito versáteis e podem não apenas representar gráficos de conhecimento, mas também links entre usuários, produtos, restaurantes, filmes, … Usar incorporações de gráficos pode ser uma boa maneira de usar a distribuição de itens para codificá-los.

3.2.3 Composição e multimodal

Agora temos incorporações de itens de várias perspectivas, e eles podem oferecer informações complementares. Como uma peça de roupa se parece, como os usuários interagem com ela e como ela é descrita podem ser relevantes.

Como essas incorporações podem ser combinadas em uma única?

  • Concatenação: concatenar as incorporações é um método básico que funciona surpreendentemente bem. Por exemplo, a concatenação de incorporações de texto e imagem torna possível pesquisar um item usando seu texto, sua imagem ou ambos.
  • Modelo multimodal: a aprendizagem profunda da visão e da linguagem está se tornando muito popular, e muitos modelos (imagebert, vilbert, uniter, vl-bert, veja esta demonstração interessante) propõem aprender com a linguagem e o texto, para produzir representações de modelos cruzados.
  • Ajustando uma rede para uma tarefa específica usando várias incorporações
Modelo modal cruzado ImageBert

A composição é uma ferramenta poderosa e pode ser usada para ter uma visão completa dos itens a serem codificados.

3.2.4 Popularidade

Um tópico importante a ser considerado nos sistemas de recuperação e recomendação é a popularidade dos itens. Mostrar itens impopulares geralmente resulta em resultados não relevantes.

Uma maneira simples de resolver esse problema é adicionar um termo de popularidade à incorporação. Por exemplo, o último componente pode ser o inverso do registro do número de visualizações desse item. Dessa forma, a distância L2 entre uma consulta com um 0 no componente de popularidade classificará em primeiro lugar os itens mais populares. Isso pode ajudar a remover alguns dos itens impopulares dos principais resultados, mas isso não é perfeito, pois o trade-off entre semelhança e popularidade deve ser definido manualmente.

Treinar as incorporações para um objetivo específico é uma maneira melhor de resolver isso.

3.2.5 Treinamento

Para codificar itens, modelos de conteúdo pré-treinados e métodos baseados em distribuição funcionam bem, mas para ajustar as incorporações para uma determinada tarefa, a melhor maneira é treinar um novo modelo para isso.

Muitas tarefas podem ser consideradas para treinar incorporações: baseadas em conteúdo, baseadas em distribuição e para objetivos mais específicos, como engajamento, cliques ou talvez até mesmo felicidade do usuário.

3.2.5.1 Treinamento específico de imagem

As incorporações de imagens podem ser treinadas com tarefas como classificação, identificação, segmentação. Groknet é um bom exemplo de um grande sistema para aprender incorporações de imagens com objetivos específicos… Ele aprende em muitos conjuntos de dados díspares para muitas tarefas diferentes.

Groknet: usando um tronco de visão para treinar incorporações com muitos tipos de conjuntos de dados e perdas.

FaceNet é outra maneira simples de treinar incorporações de imagens além da classificação. A perda tripla permite que ele aprenda um tipo específico de incorporação de imagem: incorporação de rosto. Isso pode ser reutilizado para outros exemplos, como incorporação de ursos de treinamento

3.2.5.2 Treinamento específico do texto

Bert é um ótimo exemplo de um modelo que pode ser ajustado e reutilizado para vários objetivos. Em particular, a biblioteca de transformadores huggingface e a biblioteca de transformadores thesentence com base nela são ótimas para ajustar um modelo de texto para um caso de uso específico. Centenas de arquiteturas de transformadores diferentes estão disponíveis lá com dezenas de configurações de treinamento.

3.2.5.3 Distribuição: treinamento específico de recomendação

Incorporações de ajuste fino para recomendação

Outra configuração é um modelo de treinamento para recomendação. Isso pode funcionar muito bem para ir além do SVD e treinar incorporações de produtos e usuários. A biblioteca criteodeepr com seu blog que o acompanha é uma boa introdução a este tópico. Os recomendadores do Tensorflow são outro bom ponto de entrada.

3.2.5.1 E muito mais

Além dessas configurações de treinamento específicas, as incorporações de treinamento são o núcleo da aprendizagem profunda e da aprendizagem de representação. Pode ser aplicado em muitos ambientes e para muitos objetivos. Alguns exemplos interessantes são:

  • StarSpace, um projeto do Facebook para aprender incorporações de imagens, texto, gráfico e distribuição para vários objetivos
  • Incorporação de receitas um exemplo de um projeto para aprender incorporações de receitas a partir de ingredientes, instruções e imagens

Para se aprofundar mais neste tópico de treinamento de redes neurais para recuperação de informações, esses slides do ecir2018 estão bastante completos.

3.3 Construa índices relevantes

Uma vez que as incorporações são construídas, precisamos de uma maneira de olhar entre elas rapidamente. Isso pode ser alcançado graças ao algoritmo k do vizinho mais próximo. A versão simples consiste em calcular uma distância entre um vetor e todos os vetores do conjunto de dados. Isso pode ser melhorado muito usando algoritmos aproximados de k vizinhos mais próximos.

Usando a implementação correta dos índices knn, é possível procurar os vizinhos mais próximos de uma incorporação a partir de um conjunto de bilhões de vetores em milissegundos. Graças às técnicas de quantização, isso pode caber em apenas alguns GB de memória.

3.3.1 O que indexar, quantos índices?

Em termos de desempenho, as coisas importantes a serem otimizadas ao construir índices são:

  • Latência: quanto tempo leva para um índice retornar resultados?
  • Lembre-se: quantos dos resultados de um knn de força bruta são encontrados no resultado do índice?
  • Memória: quão grande é o índice, quanta memória é necessária para mantê-lo na ram?

Em termos de relevância de pesquisa, pode ser importante particionar as incorporações nas dimensões certas. Por exemplo, os itens podem ser particionados por categorias amplas (calças, camisetas,…) para um aplicativo de pesquisa visual de moda. Esse particionamento pode ter consequências ao construir os índices, por isso é melhor decidir cedo.

3.3.2 Aproximado knn e bibliotecas

Para escolher a melhor maneira de construir índices, o número de incorporações é um bom discriminador.

Alguns exemplos de algoritmos apropriados podem ser:

  • Para menos de mil incorporações, uma busca de força bruta faz sentido
  • Por menos de um milhão, um algoritmo rápido, mas não eficiente em termos de memória (como HNSW) é apropriado
  • Por menos de um bilhão, a quantização (usando k-means e fertilização in vitro) se torna importante
  • Para um exemplo trilhão, a única solução são os índices em disco

A documentação faiss fornece uma boa explicação sobre esses trade-offs.

Alguns algoritmos para calcular knn aproximado são:

  • Um knn ingênuo: que pode ser implementado em O(nlog(k)) com uma fila de prioridade ou O(n) com quickselect ou introselect. Para poder calcular isso, é necessário armazenar todas as incorporações na memória.
  • HNSW: um algoritmo que constrói um gráfico de vizinhos. É O(log(N)) na pesquisa, mas não é exato. Leva cerca de duas vezes a memória das incorporações porque precisa armazenar o gráfico
  • FIV: o algoritmo de arquivo invertido consiste em dividir o espaço de incorporação em várias partes e usar k-means para encontrar uma aproximação de incorporação. É menos rápido que o HNSW, mas permite diminuir a memória exigida pelo índice tanto quanto necessário.

Para saber mais sobre todos os tipos de índices, recomendo ler esta página da documentação do faiss. Este tutorial do CVPR2020 se aprofunda sobre esses algoritmos, aconselho assisti-lo se você estiver interessado em entender os detalhes mais finos.

As bibliotecas que implementam esses índices incluem:

  • Faiss Uma biblioteca muito ampla que implementa muitos algoritmos e interfaces limpas para construí-los e pesquisar a partir deles
  • Hnswlib é atualmente a implementação mais rápida de HNSW. Altamente especializado e otimizado
  • Annoy é outro algoritmo knn, implementado pelo Spotify

Como o knn aproximado está no centro da recuperação moderna, é um campo de pesquisa ativo. Notavelmente, esses artigos recentes introduzem novos métodos que superam algumas métricas.

  • Scann do Google é um novo método que é de última geração, superando HNSW em velocidade e recall usando quantização anisotrópica
  • Catalisador do Facebook que propõe treinar o quantizador com uma rede neural para uma tarefa específica

Eu aconselho começar pelo faiss por sua flexibilidade e tentar outras bibliotecas para necessidades específicas.

3.3.3 Escala

Para ser capaz de escalar para muitas incorporações, as técnicas principais são:

  • Quantificação: as incorporações podem ser compactadas em índices de tamanho 1/100 e mais
  • Sharding: particionar os itens ao longo de uma dimensão, torna possível armazenar os índices em diferentes máquinas

Para escalar em termos de velocidade, a velocidade do índice é realmente importante (algoritmos como HNSW podem ajudar muito), mas servir também é crucial. Mais detalhes sobre isso na seção de serviço.

Em termos práticos, é possível construir um índice de 200 milhões de incorporações com apenas 15 GB de memória RAM e latências em milissegundos. Isso desbloqueia sistemas de recuperação baratos na escala de um único servidor. Isso também significa que, na escala de alguns milhões de incorporações, os índices knn podem caber em apenas centenas de megabytes de memória, que podem caber em máquinas de mesa e até mesmo dispositivos móveis.

3.3.4 Índices Knn como um componente de banco de dados

Bancos de dados existem em todos os tipos: bancos de dados relacionais, armazenamentos de chaves/valores, bancos de dados de gráficos, armazenamentos de documentos,… Cada tipo tem muitas implementações. Esses bancos de dados trazem maneiras convenientes e eficientes de armazenar informações e analisamos-las. A maioria desses bancos de dados fornece maneiras de adicionar novas informações e consultá-las pela rede e usar APIs em muitos idiomas. Esses bancos de dados em seu núcleo estão usando índices para torná-los rápidos para consultá-los. Os bancos de dados relacionais em seu núcleo usam mecanismos de armazenamento (como o InnoDB) que usam índices adaptados. As lojas de chaves/valor implementam índices baseados em hash compartilhados e distribuídos.

E se os índices knn pudessem ser integrados às implementações de banco de dados como apenas mais um tipo de índice?

Isso é o que é proposto por projetos como

  • Uma integração de pesquisa elástica de HNSW: eles propõem adicionar hnsw como parte do banco de dados geral de pesquisa elástica. Isso torna possível combinar a pesquisa knn com consultas rigorosas, consultas de texto e junções fornecidas pela pesquisa elástica
  • Unicorn, um sistema privado do Facebook que permite integrar a pesquisa knn em um banco de dados de gráficos. Como consequência, as consultas nesse gráfico podem ter partes usando consultas knn.

Além desses sistemas específicos, o que eu acho realmente interessante nesse conceito é a ênfase em tornar a construção de índices knn um processo simples que pode ser acionado facilmente:

  • A adição de novos dados aciona automaticamente a reindexação ou a adição direta de incorporações aos índices existentes
  • Escolhendo automaticamente o tipo certo de índice knn com base na restrição específica do sistema

4. Pipeline de pesquisa: de índices a sistemas de pesquisa semântica

O pipeline de pesquisa é a parte do sistema que geralmente é executada em uma configuração on-line e de baixa latência. Seu objetivo é recuperar resultados relevantes para uma determinada consulta. É importante que ele retorne resultados em segundos ou milissegundos, dependendo das restrições e para ocupar baixas quantidades de memória.

É composto por uma maneira de extrair dados relevantes de uma consulta, um codificador para transformar esses dados em incorporações, um sistema de pesquisa que usa índices construídos no pipeline de codificação e, finalmente, um sistema de pós-filtragem que selecionará os melhores resultados.

Ele pode ser executado em servidores, mas para uma quantidade menor de itens (milhões), também pode ser executado diretamente no lado do cliente (navegadores e dispositivos pequenos).

4.1 Extraia partes de consultas

A primeira parte do sistema consiste em pegar uma consulta como entrada e extrair dados relevantes dela para poder codificá-la como incorporações de consulta.

Alguns exemplos interessantes de consultas incluem procurar roupas semelhantes, procurar uma planta de uma foto, procurar músicas semelhantes de um registro de áudio. Outro exemplo pode ser uma lista de itens vistos pelos usuários.

A consulta pode assumir qualquer forma: uma imagem, texto, uma sequência de itens, áudio, …

Para poder codifico-lo da melhor maneira, várias técnicas podem ser usadas:

  • Para uma segmentação de imagem ou detecção de objetos pode ser relevante: extrair apenas roupas da foto de uma pessoa, por exemplo
  • Para texto, pode ser relevante extrair entidades nomeadas da consulta, pode fazer sentido aplicar a extensão de consulta para adicionar termos relevantes ou corrigir erros de digitação
  • Para uma lista de itens, agrupar os itens para selecionar apenas um subconjunto relevante pode ajudar

Segmentação de pessoas para extrair roupas

4.2 Codifique a consulta

Depois que os dados relevantes são extraídos da consulta, cada um desses elementos pode ser codificado. A maneira de codificá-lo geralmente é semelhante à maneira como as incorporações dos índices são construídas, mas é possível aplicar técnicas que são relevantes apenas para a consulta.

Por exemplo:

  • Uma média de vários elementos para obter resultados relevantes para uma lista de itens
  • Agrapee os pontos da consulta e escolha um cluster como a consulta
  • Use modelos mais complexos para gerar consultas apropriadas no mesmo espaço, usando modelos de transformador para resposta a perguntas (veja DPR), ou transformações de incorporações de gráficos (veja PBG), por exemplo

Para o caso de uso de recomendação, é possível treinar diretamente um modelo que produzirá as melhores consultas para um determinado objetivo, veja este post do blog do criteo como exemplo.

4.3 Pesquise os índices certos

Dependendo do tipo de consulta, pode ser relevante construir não apenas um índice, mas vários. Por exemplo, se a consulta tiver uma parte de filtro para uma determinada categoria de item, pode fazer sentido construir um índice específico para esse subconjunto de incorporações.

Aqui, selecionar o índice da Toyota tornou possível devolver apenas produtos relevantes desta marca.

4.4 Filtragem de postagens

Construir vários índices é uma maneira de introduzir filtragem rigorosa em um sistema, mas outra maneira é fazer uma grande consulta knn e pós-filtrar os resultados.

Isso pode ser relevante para evitar a construção de muitos índices

4.5 Porção

Finalmente, a construção de um aplicativo de serviço torna possível expor os recursos aos usuários ou outros sistemas. Graças às bibliotecas rápidas de k vizinhos mais próximos, é possível ter latências em milissegundos e milhares de consultas por segundo.

Há muitas opções para construir isso. Dependendo do estado e do escopo dos projetos, diferentes tecnologias fazem sentido:

  • Para experimentar inicialmente, a construção de um aplicativo de frasco simples com faiss pode ser feita em apenas 20 linhas de código
  • Usar um servidor adequado com frasco como gunicorn com gevent pode ser suficiente para atingir latências de milissegundos a milhares de qps
  • Para obter ainda mais desempenho, a construção de um serviço de serviço com linguagens nativas como ferrugem ou C++ pode ser feita. O benefício de usar uma linguagem nativa para esse tipo de aplicativo pode ser evitar custos de GC, já que o próprio índice knn é construído em C++, apenas o código de serviço precisa ser otimizado.
  • As bibliotecas Aknn são mais frequentemente construídas em c++, mas as ligações podem ser feitas com muitas linguagens (java, python, c#) manualmente ou com swig. Para integração com um aplicativo existente, isso pode ser o mais relevante em alguns casos.

4.6 Avaliação

A avaliação de um sistema de pesquisa semântica dependerá muito do caso de uso real: um sistema de recomendação ou um sistema de recuperação de informações pode ter métricas muito diferentes. As métricas podem ser amplamente divididas em duas categorias: métricas on-line e métricas off-line. As métricas on-line podem ser medidas apenas a partir do uso do sistema, muitas vezes em uma configuração de teste A/B. Para recomendação, em particular, a taxa de cliques ou diretamente a receita pode ser considerada, este documento explica alguns deles com mais detalhes. As métricas off-line podem ser calculadas a partir de conjuntos de dados off-line e exigem alguns rótulos. Esses rótulos podem ser implícitos com base em como os usuários interagem com o sistema (o usuário clicou nesse resultado?) ou explícitos (annotadores que fornecem rótulos). Algumas métricas off-line são gerais para todos os sistemas de recuperação, a página da Wikipedia sobre isso é bastante completa. As métricas frequentemente usadas incluem o recall, que mede o número de documentos relevantes que são recuperados, e o ganho cumulativo descontado que explica a classificação dos itens recuperados.

Antes de fazer análise quantitativa, construir uma ferramenta de visualização e analisar o resultado geralmente fornece insights úteis.

5. Soluções práticas para construir isso facilmente

5.1 Soluções de código aberto de ponta a ponta

Outra maneira de começar a criar aplicativos de pesquisa semântica é usar soluções de código aberto pré-existentes. Recentemente, várias organizações e pessoas os construíram. Eles variam em objetivos, alguns deles são específicos para uma modalidade, alguns deles lidam apenas com a parte knn e alguns tentam implementar tudo em um sistema de pesquisa semântica. Vamos anuná-los.

Jina é um projeto de código aberto de pesquisa semântica de ponta a ponta construído pela empresa de mesmo nome. Não é um único serviço, mas fornece boas APIs em python para definir como criar codificadores e indexadores, e um sistema de configuração YAML para definir fluxos de codificação e pesquisa. Ele propõe encapsular cada parte do sistema em contêineres docker. Dezenas de codificadores já estão disponíveis, e vários indexadores também são construídos em seu sistema. Ele também fornece tutoriais e exemplos sobre como construir sistemas de pesquisa semântica específicos.

Eu recomendo ler o grande post do blog da jina. Sua sintaxe e flexibilidade é o que o torna o mais interessante e poderoso.

Milvus é um serviço de pesquisa semântica focado na indexação, usando faiss e nmslib. Ele fornece recursos como filtragem e adição de novos itens em tempo real. A parte de codificação é deixada principalmente para os usuários fornecerem. Ao integrar várias bibliotecas aknn, ele tenta ser eficiente.

Ler o cenário Milvus e o blog Milvus pode ser um bom lugar para começar.

A pesquisa elástica é um banco de dados de indexação clássico, frequentemente usado para indexar categorias e texto. Agora tem uma integração hnsw que fornece indexação automática e uso de todos os outros índices estritos de pesquisa elástica. Se as latências em segundos forem aceitáveis, esta pode ser uma boa escolha.

O Vectorhub fornece muitos codificadores (imagem, áudio, texto, …) e um módulo python fácil de usar para recuperá-los. Tem uma rica documentação sobre a construção de sistemas semânticos e este pode ser um bom ponto de partida para explorar codificadores e aprender mais sobre sistemas semânticos.

Haystack é um sistema de ponta a ponta para resposta a perguntas que usa knn para indexação semântica de parágrafos. Ele se integra a muitos modelos de texto (transformadores de rosto abraço, DPR, …) e vários indexadores para fornecer um pipeline de resposta a perguntas completo e flexível. Isso pode servir como um bom exemplo de um sistema de pesquisa semântica específico de modalidade (rendrondo a perguntas de texto).

Esses projetos são ótimos para começar neste tópico, mas todos eles têm desvantagens. Pode ser em termos de escalabilidade, flexibilidade ou escolha de tecnologia. Para ir além da exploração e pequenos projetos e construir projetos de maior escala ou personalizados, muitas vezes é útil criar sistemas personalizados usando os blocos de construção mencionados aqui.

5.2 Do zero

Escrever um sistema de pesquisa semântica pode parecer uma tarefa enorme devido a todas as diferentes partes que são necessárias. Na prática, a versatilidade e a facilidade de uso das bibliotecas para codificação e indexação tornam possível criar um sistema de ponta a ponta em algumas linhas de código. O repositório de incorporação de imagens que eu construí pode ser uma maneira simples de começar a construir um sistema do zero. Você também pode verificar a pequena palavra knn que eu construí como um exemplo simples. O ajudante PBG que construí com um colega também pode ajudar a inicializar o uso de incorporações de gráficos. Este vídeo do CVPR2020 é outro bom tutorial para começar com isso.

De todos os componentes que apresentei neste post, muitos são opcionais: um sistema simples só precisa de um codificador, um indexador e um serviço de serviço simples.

Escrever um sistema do zero pode ser útil para aprender sobre ele, para experimentação, mas também para integrar tal sistema em um ambiente de produção existente. Segmentar a nuvem pode ser uma boa opção, veja este tutorial do google cloud. Também é possível construir esse tipo de sistema em qualquer tipo de sistema de produção.

6. Conclusão

6.1 Além da pesquisa: aprendizado de representação

software 2.0

Além da construção de sistemas de pesquisa semântica, sistemas de recuperação e incorporações fazem parte do campo mais amplo do aprendizado de representação. O aprendizado de representação é uma nova maneira de construir software, às vezes chamado de software 2.0. As incorporações são as partes centrais das redes neurais profundas: elas representam dados como vetores em muitas camadas para eventualmente prever novas informações.

O aprendizado de representação fornece incorporações para recuperação e pesquisa semântica, mas, em alguns casos, a recuperação também pode ajudar no aprendizado de representação:

  • Usando a recuperação como parte do treinamento: em vez de pré-gerar exemplos negativos (para um sistema que usa uma perda tripla, por exemplo), um sistema de recuperação pode ser usado diretamente no treinamento (isso pode ser feito, por exemplo, com a integração entre faiss e PyTorch)
  • Usando a recuperação como uma maneira de criar conjuntos de dados: exemplos semelhantes podem ser recuperados como parte de um pipeline de aumento de dados

6.2 O que vem a seguir?

Como vimos neste post, os sistemas de recuperação são fáceis de construir e realmente poderosos, encorajo você a brincar com eles e pensar em como eles poderiam ser usados para muitos aplicativos e ambientes.

A busca e recuperação semântica são áreas de pesquisa ativas e muitas coisas novas aparecerão nos próximos anos:

  • Novos codificadores: o conteúdo 3D está sendo desenvolvido rapidamente, tanto com bibliotecas como PyTorch 3d quanto com artigos impressionantes como PIFuHD
  • A quantificação e a indexação também estão melhorando rapidamente com artigos como Scann e Catalyzer
  • O treinamento de ponta a ponta e a representação multimodal estão progredindo rapidamente com a visão e a linguagem tendo muito progresso: em direção a uma maneira generalizada de construir qualquer representação?
  • Onde os sistemas de recuperação podem viver? Até agora, eles eram principalmente localizados em servidores, mas com o progresso do aknn e da quantização, quais aplicativos eles podem desbloquear nos dispositivos do usuário?
  • Os sistemas de pesquisa semântica também estão progredindo rapidamente: centenas de empresas estão construindo-os, e vários bons sistemas de código aberto estão começando a surgir