filipedeschamps / video-maker

Projeto open source para fazer vídeos automatizados
MIT License
2.44k stars 629 forks source link

Dúvida sobre o content.prefix #101

Open AnibalDuarte opened 5 years ago

AnibalDuarte commented 5 years ago

@filipedeschamps primeiro de tudo, ótimo trabalho! Sou programador há muitos anos, não tenho experiência quase que nenhuma com Node.JS mas estou conseguindo aprender muito com essa série.

Porém agora tenho uma dúvida sobre a contextualização das buscas que é feita pelo algoritmo utilizando o content.prefix implementado. Não sei se isso é real ou se foi apenas uma falha na minha compreensão do código, mas lá vai:

Se eu entendi bem o algoritmo busca um texto na Wikipedia baseado no content.searchTerm , quebra o conteúdo da página em frases, limpa e depois envia essas frases uma por uma para análise no Watson, que retorna as palavras-chave que vão ser usadas na busca por imagens.

Porém o problema que encontrei é na contextualização da busca. Se você colocar, por exemplo

content.searchTerm = "Michael Jackson"

Independente de se content.prefix for "Who is" ou "The history of" ele retorna exatamente os mesmos resultados.

Então a pergunta é: existe uma forma de enviar todo o conteúdo para o Watson e "perguntar" para ele utilizando o content.prefix e o content.searchTerm para montar a pergunta? Se houver, então, temos a solução para isso, pois da forma como está implementado hoje o content.prefix é um apêndice (está ali, mas não serve pra nada).

danielschmitz commented 5 years ago

O prefixo é usado no título do video, como who is mj ou the history of bacon

faustoct1 commented 5 years ago

@AnibalDuarte

Isso é pra contextualizar a busca. Por exemplo Who is Facebook - não faz sentido History of Facebook / What is Facebook - é o contexto mais adequado no caso.

Oq vc propos eu vejo uma evolucao futura. Em q, o algoritmo contextualiza o termo, e faz o attach History of / Who is / What is..

AnibalDuarte commented 5 years ago

O que o @danielschmitz citou está certo, mas não é essa a questão que eu levantei.

@faustoct a questão é que ele não está contextualizando nada na busca, então colocar o content.prefix como "What is" ou "Pão de batata" vai fazer com que o mesmo resultado seja retornado, já que nem para o Watson isso é enviado para que ele entenda o contexto do que queremos tirar do conteúdo. Entendo que contextualizar o título é importante, mas a situação complica quando eu quero, por exemplo, criar contextualizadores diferentes como "Discografia Michael Jackson" (informação que tem na Wikipedia mas não é retornada nunca).

Afirmo isso porque busquei por referências de uso no código para o content.prefix e ele só é mencionado quando recebe o valor que o usuário passa o parâmetro neste método.

Ele não é usado na busca da Wikipedia, lá é usado apenas o content.searchTerm para se encontrar a página da Wikipedia:

async function fetchContentFromWikipedia(content) {
    const algorithmiaAuthenticated = algorithmia(algorithmiaApiKey)
    const wikipediaAlgorithm = algorithmiaAuthenticated.algo('web/WikipediaParser/0.1.2')
    const wikipediaResponse = await wikipediaAlgorithm.pipe(content.searchTerm)
    const wikipediaContent = wikipediaResponse.get()

    content.sourceContentOriginal = wikipediaContent.content
  }

Ele também não é usado na busca pelas imagens no Google. A query de busca no Google Images é bem clara, ele usa o content.searchTerm concatenado com a primeira keyword que o Watson retorna, e nada mais:

async function fetchImagesOfAllSentences(content) {
    for (const sentence of content.sentences) {
      const query = `${content.searchTerm} ${sentence.keywords[0]}`
      sentence.images = await fetchGoogleAndReturnImagesLinks(query)

      sentence.googleSearchQuery = query
    }
  }

Pelo que pude entender o Watson não tem essa capacidade ainda. A descrição mais coerente que eu encontrei na internet dizia que ele é uma criança e que tem que ser ensinado à entender da forma que queremos o que queremos, e que só assim é possível usar a "inteligência" dele, que fora isso ele não passa de uma montanha de APIs paralelas com fontes de dados pessoais que não tem conexão entre elas, assim não conseguindo criar uma rede neural complexa para gerar contexto suficiente que crie uma "opinião" sobre os assuntos consultados.

Um exemplo que vi sobre esse uso de inteligência foi a ferramenta do Watson para "consultas médicas" que "aprendeu" à diagnosticar depois de analisar milhares de diagnósticos de médicos reais, isso porque apenas entregar o texto para ele sem uma fonte secundária de informação de onde ele vai tirar as "opiniões" é tão "produtivo e inteligente" quando dar um SELECT LIKE em um banco de dados, o que pode não ser nada produtivo nem inteligente.

danielschmitz commented 5 years ago

Humm, seria bem interessante contextualizar o prefix também. Vídeo bônus @filipedeschamps ? rsrs

leodutra commented 5 years ago

@AnibalDuarte O Watson em si é uma inteligência artificial sim, e há anos atrás venceu um concurso, onde compreensão de contexto e de decisão eram essenciais para o sucesso. Este ano, podemos ver debates sobre assuntos os mais variados onde o Watson não só debate como emprega fatos, contextualizados, a fim de convencer.

O que acontece é que esse é o Watson em sua forma plena, como utilizado pela IBM. O que utilizamos no projeto são APIs que empregam uma orientação fixa e determinada do que será resolvido por chamada.

O prefix não é utilizado nas buscas do Google e da Wikipedia por razões simples:

Justamente porque são buscas bem relativas, a depender do contexto, o uso do prefixo pode ser uma opção... mas não uma regra.