[Música tocando] CÉREBRO Scassellati: Bem-vindo para a série CS50 AI. Meu nome é Scass, e hoje nós estamos indo para falar sobre sistemas de recomendação. Agora sons sistemas de recomendação tipo como de um nome estranho. Parece que talvez devesse ser sistemas de recomendação, e eu meio que concordo com você. Mas estes são os sistemas que ajudam selecionar as coisas semelhantes, sempre que você selecionar algo online. Netflix, por exemplo, irá sugerir outro filmes que você pode querer assistir. Ou Pandora irá sugerir diferentes canções que você pode querer ouvir. Amazon vai sugerir que tipos de Outros produtos que você pode querer comprar. Facebook vai mesmo sugerir alguns dos outros amigos que você pode querer adicionar. Cada um destes sistemas funcionam utilizando o mesmo tipo de algoritmo de base, e é isso que nós somos vai falar hoje. Agora, esses algoritmos são surpreendentemente grande negócio. Netflix há alguns anos em 2009 ofereceu um $ 1000000 prêmio se você poderia melhorar a sua sistema de recomendação por apenas 10%. Que 10%, no entanto, representa um quantidade substancial de negócios. As estimativas são de difícil passar por aqui, mas muitas pessoas acredito que estas recomendação sistemas para uma compra on-line sistema como a Amazon levar a algum lugar entre 10% e 25% de aumento das receitas. Então você pode imaginar o tipo de volume que você está falando sobre quando pensamos sobre mesmo esses pequenos algoritmos. Então, vamos obter alguns exemplos. Como é que estes sistemas realmente funcionam? Há dois básico tipos de algoritmos que estão em jogo quando falamos de recomendações geradoras. Os primeiros são chamados a filtragem com base em conteúdo. E filtragem de conteúdo baseado confia sobre semelhanças entre os itens si, que se encontra entre dois filmes ou duas músicas ou dois itens comprados. Nós estamos indo para usar filmes como um exemplo, mas este poderia aplicar-se, realmente, de qualquer tipo do objeto que nós estamos procurando. Então, se eu pensar sobre algumas filmes do ano passado, Eu vi Inside Out com meus filhos, eles adoraram. Mas também tinha uma escolha. Poderíamos ter ido para ver Minions, poderíamos visto Age of Ultron, ou que se poderia visto Homem Formiga nos cinemas. Para qualquer uma destas filmes, poderíamos imaginar gerando uma lista de recursos ou qualidades sobre aqueles filmes diferentes. Assim, por exemplo, eu poderia considerar quais desses filmes são animados. Bem, tanto Inside Out e Minions são animados. Nem a idade, nem de Ultron Homem-Formiga são filmes de animação. E eu poderia imaginar edifício -se uma estrutura, uma tabela que Listas de cada uma destas propriedades. Eles são animados ou não? Eu poderia, então, acrescentar mais recursos para esta tabela pela adição de mais linhas para essa estrutura. Eu poderia perguntar se ou Não são filmes da Marvel. Bem, Inside Out e Minions não são filmes da Marvel, Age of Ultron e Homem-Formiga são certamente. E eu poderia pedir qualquer tipo de diferentes qualidades que eu queria, quaisquer tipos de recursos que pode ser importante para mim. Será que eles têm um super vilão? Bem, não há super-vilão no interior Fora, mas há aqueles em Minions e em, obviamente, o dois filmes de super-heróis. Eu também poderia perguntar coisas como, bem, eles passam no teste Bechdel? Existem dois nomeados personagens femininas que passar algum quantidade significativa de tempo de ter uma conversa que não envolve homens no elenco? Bem, neste caso, passa Inside Out o teste, Minions falhar, Age of Ultron passar no teste, e Homem-Formiga falhar. Qualquer uma destas funcionalidades Eu podia pensar como sendo importante para algumas pessoas. Eu também poderia perguntar coisas como são Há algum pessoas nesses filmes que são ex-alunos de digamos, Parques e Recreação, um dos meus programas favoritos. Bem, Inside Out tem Amy Poehler, que é um ex-alunos. Que conta. Jon Hamm estava em Minions. Paul Rudd estava em Homem-Formiga, mas ninguém em Age of Ultron foi em Parques e Req também. Para que eu possa construir esta lista de recursos, e eles poderiam realmente ser qualquer coisa, sobre os filmes. Eles poderiam ser sobre o que relação de aspecto eles foram baleados em, poderia ser quantos assentos eles vendido em sua semana de estréia. Qualquer recurso que eu quero gerar eu posso colocar para esta tabela. Agora, neste caso, eu construí todo o tipo de valores Bullion, sim ou não, passar ou não, mas eles poderiam ser qualquer coisa. Eles poderiam ser valores arbitrários. Para a filtragem de conteúdo baseado, o que nós vamos fazer é que vamos considerar duas colunas nesta tabela e ver como eles são semelhantes. Assim, por exemplo, se eu fui ver Inside Out, Eu poderia perguntar, quais são os outros filmes que eu poderia estar disposto a ir ver. Ou seja, o que está disposto a gastar o meu dinheiro para ir ver. E eu posso comparar esta tomando apenas as duas colunas, uma de Inside Out e a partir de qualquer um do outros filmes, e apenas vendo como muitos de seus recursos jogo. Então, se eu comparar Inside Out com Minions, bem, há três coisas aqui que jogo. Ambos estão animado, nenhum deles são filmes da Marvel, e ambos tem Parques e Req se formaram. Então, eu poderia contar-se como muitas partidas houvesse, e neste caso haveria três. Se eu, então, comparar Inside Out com digamos Age of Ultron, Eu posso olhar para baixo na lista e dizer, bem, há apenas uma coisa que corresponda lá. Ambos passar no teste Bechtel, então que vai ser um resultado de um. E entre Inside Out e Homem Formiga, novamente I pode comparar linha por linha quantas coisas corresponder entre os dois. Bem, um está animado, um não é. Um é um filme da Marvel, não é. Um tem um super-vilão, o outro não. Passa-se a Bechtel teste, uma falha que, mas ambos têm Parques e Req alunos, Então, novamente, ele recebe uma pontuação de um. Então, se eu estava procurando para filmes que foram semelhantes dentro para fora, Eu poderia olhar para os filmes que têm a maior pontuação dentro este conteúdo esquema de filtragem. Portanto, neste caso, eu consideraria Minions para estar mais perto e mais susceptível de ser algo que eu iria gastar dinheiro para ver de Age of Ultron ou Man Ant. Estes conteúdos baseados sistemas de filtragem dependem apenas sobre as propriedades de os filmes, e então eu pode construir estes apenas por saber algo sobre os produtos que eu tenho. Posso usar qualquer tipo de características que eu gostaria, e eu posso construir mais características complexas que envolver teste mais complexo de uma qualidade como eu ir junto. Na verdade, eu posso até ver esta tabela não como sendo um objecto estático, mas sim como sendo dimensões dentro de um espaço de estado maior. E eu posso começar a falar sobre o distâncias entre diferentes filmes. Estas são todas as coisas que sabemos como eles fazer usando os tipos de estruturas de dados que já vimos em CS50. Então eu poderia imaginar edifício uma estrutura de dados para um filme. Há um struct que eu tenho construído chamado filme, e tem cinco entradas booleanas nele. É animado, é um Marvel filme, ele tem um super vilão, ele passar no teste Bechdel, e estão lá Parques e Rec formaram nele? E cada um deles é um estrutura de dados que eu pode ocupar para esse filme em particular. Em seguida, calcular se dois filmes são semelhantes ou não, o que sua pontuação seja, eu poderia escrever um conjunto de pseudocódigo que que gera mesma função. Isto é, dado algum filme M1, eu posso encontrar o filme mais semelhante a ele seguindo o pseudocódigo. Eu considero que é o melhor sistema que eu encontrei marcando, a melhor comparação que eu encontrei. Para todos os outros filme Eu vou passar, Vou definir uma pontuação jogo igual a 0. E eu vou passar por isso filme, um M1, o filme Eu comecei com, vou verificar cada recurso que têm que ver se há uma correspondência. Se há um jogo, eu vou incrementar a pontuação da partida. E se, ao terminar a pontuação da partida que Tenho é melhor do que o atual melhor marcar, então eu vou lembre-se que melhor pontuação, e este é o melhor jogo que eu tenho. No final, qualquer que seja filme está sentando-se no melhor jogo, que é o mais próximo Eu tenho sido capaz de chegar. Então, esses conteúdos baseados sistemas de filtragem, todos eles têm esta estrutura básica. Eles confiam em cima do item em questão e nada sobre qualquer uma das preferências do usuário. O outro mecanismo que utilize em a fim de construir sistemas de recomendação é chamado de filtragem colaborativa. Filtragem colaborativa baseia-se não as qualidades do objeto em si, mas como as pessoas, outra usuários ou seja, como eles têm respondeu a esses mesmos objectos. Então, para continuar com o meu exemplo filme, Eu poderia tomar um monte de meus amigos e examiná-los sobre a existência ou não gostavam de filmes particulares. Agora irá gerar locais diferentes estes dados de diferentes maneiras. Você pode examinar diretamente o seu usuários, ou você poderia apenas ver o que eles escolhem se você é, por exemplo Netflix. Quais filmes que fez assistir? Eu poderia questionar alguns dos meus amigos aqui e descubra Jason gostava que todos os filmes ele viu, não surpreendendo lá. Andy só gostava Minions e tia Man. Sarah gostava de dentro para fora e Avengers, o oposto do Andy. E Sam, bem, Sam gostou todos os filmes do superhero, mas nenhum dos filmes de animação. Eu poderia, então, consultar algum novo indivíduo, algum outro usuário, como eu, e perguntar, bem, se eu gostei um destes filmes, você pode fazer uma previsão sobre que outros filmes que pode gostar. Isto é, se eu gostava de Dentro Fora, que outros filmes Eu sou propensos a querer também para ver com base no que as pessoas semelhantes fez? Ou seja, eu vou passar por uma Vou filtrar através desta lista e encontrar apenas o indivíduos que também gostou Inside Out, que combinava as minhas preferências. Bem, isso significa que Andy e Sam, eles não gostavam Inside Out, então eu não vou considerá-los. Eu estou indo para se livrar de sua dados para esta comparação. Posso, então, olhar para o que Jason e Sarah pensou e tally -se que dos filmes que viam que eu não fiz, se eles gostaram-los ou não. Eu poderia simplesmente contar até, digamos votos. Então Minions, por exemplo pode ter um votar a favor, porque Jason gostei. Ambos Jason e Sarah gostava Avengers, por isso teria dois votos. E só Jason gostava de Homem-Formiga, por isso seria obter um voto. Então, se eu tivesse que então recomendar para mim mesmo que estes filmes Eu poderia ser mais provável para assistir, eu o faria tem que escolher Age of Ultron: Avengers. Assim, para qualquer destes sistemas, agora eu estou usando dados que foram gerados não sobre o filme em si, mas sobre as preferências de outros usuários. Isto tem algumas dificuldades, é claro. E se você não tem quaisquer outros usuários? Bem, isso é chamado de problema de inicialização. Você tem que ter algum quantidade de dados antes que você está capaz de começar a fazer estas recomendações. O outro lado é uma vez você começar a coleta de dados, se você pode coletar mais e mais e mais dados, você vai ficar melhor e melhor e melhores recomendações. Agora nós podemos traduzir esta em código também. Podemos definir uma diferente tipo de estrutura, neste caso, vamos chamá-lo um usuário. E tem características tem cerca de filmes que esse usuário gostou. Será que eles gostam Inside Out, Sequazes, Vingadores e Homem-Formiga. Poderíamos, então, gerar alguns pseudocódigo a seguir o mesmo procedimento que eu usei antes. Isto é, dado um determinado usuário x, vamos recomendar um filme x que pode gostar. Nós podemos passar e para todos os filmes, podemos inicializar uma pontuação para esse filme para ser 0. E, em seguida, podemos encontrar tudo dos outros usuários que têm as mesmas preferências que x. E, em seguida, para cada filme que eles gostaram, vamos incrementar a pontuação desse filme. Qualquer que seja o filme final tem a maior pontuação, que é o que eu deveria recomendar. Nada disso é realmente obscuro. Nada disso é um desafio. Estes são todos os algoritmos básicos que você pode implementar hoje. Agora, com sistemas de recomendação reais, você topar com alguns problemas. E se não há ninguém que coincide exatamente com as suas preferências? E se há usuários que são exatamente as suas preferências, mas, em seguida, desviar-se drasticamente a partir do que você gosta? Eu gosto clássico Godzilla filmes, mas minha esposa não. Eu gosto de vê-los, meu Conta Netflix contém-los. De Sua não. O que acontece quando começamos misturando dados como este? Estes são todos os desafios que você pode superar, eles apenas tomar um pouco algoritmos mais complexos. Agora, no mundo real, o que são realmente operacional, podemos usar a filtragem com base em conteúdo ou usamos filtragem colaborativa? E a resposta é que usamos os dois. Quase todos os principais usuários em Neste caso, Amazon, Facebook, Netflix, Pandora, todos eles usam uma combinação de estes sistemas de recomendação diferentes. E quando combinamos as escolhas de cada um, nós os chamamos de sistemas híbridos. Eles de alguma forma dependem da características do objeto em si, e em alguns aspectos eles dependem as preferências de outros usuários. Estes sistemas híbridos, eles são um grande negócio, e eles são o que há de atual hoje. Então, muito obrigado por se juntar a mim. Espero que você tenha ficado um pouco pouco de uma compreensão do que torna estes sistemas de trabalho. Da próxima vez que você estiver on-line, lembre-se que não só você influenciando suas escolhas, mas potencialmente toda a gente é assim. Obrigado novamente.