>> [Muziek]
>> BRAIN Scassellati: Welcome het CS50 AI series.
Mijn naam is Scass, en vandaag gaan we om te praten over recommender systemen.
Nu recommender systemen geluiden als soort van een vreemde naam.
Het klinkt als misschien het moet zijn aanbeveling systemen,
en ik soort met u eens.
Maar dit zijn de systemen die helpen selecteert soortgelijke dingen wanneer
je iets online te selecteren.
Netflix, bijvoorbeeld zullen andere voorstellen films die je zou willen om naar te kijken.
Of Pandora zal verschillende voorstellen nummers die je zou willen om naar te luisteren.
Amazon zal voorstellen welke soorten andere producten die u zou willen kopen.
Facebook zal zelfs suggereren een aantal van de andere vrienden
die je zou willen toevoegen.
Al deze systemen maken gebruik dezelfde fundamentele aard van de algoritme,
en dat is wat we gaan om te praten over vandaag.
>> Nu zijn deze algoritmen verrassend big business.
Netflix een paar jaar geleden in 2009 bood een $ 1.000.000
prijs als u zou kunnen verbeteren van hun aanbeveling systeem met slechts 10%.
Dat 10%, maar vertegenwoordigt een aanzienlijke hoeveelheid van het bedrijfsleven.
Schattingen zijn moeilijk te komen door, maar veel mensen
geloven dat deze aanbeveling systemen voor een online aankoop
systeem zoals Amazon leiden tot ergens tussen 10% en 25% hogere omzet.
Dus je kunt voorstellen dat de soort volume dat u bent
praten over wanneer we denken over zelfs deze kleine algoritmes.
>> Dus laten we enkele voorbeelden.
Hoe komt het dat deze systemen echt werken?
Er zijn twee fundamentele soorten algoritmen die
in het spel wanneer we praten over genereren van aanbevelingen.
De eersten die worden genoemd inhoud gebaseerde filtering.
En inhoud op basis filtering baseert op overeenkomsten tussen de artikelen
zelf, dat is tussen de twee films of twee nummers of twee gekochte artikelen.
We gaan om films te gebruiken als voorbeeld, maar dit
van toepassing kunnen zijn, echt, voor elk type object dat we zoeken.
>> Dus als ik denk aan wat films van het afgelopen jaar,
Ik zag Inside Out met mijn kinderen, ze hielden ervan.
Maar we hadden ook een keuze.
We konden zijn gegaan naar Minions zien, we konden zien Leeftijd van Ultron,
of we konden hebben gezien Ant Man in de theaters.
>> Voor elk van deze films, kunnen we ons voorstellen
het genereren van een lijst van functies of kwaliteiten over die verschillende films.
Dus bijvoorbeeld, zou ik overwegen welke van die films zijn geanimeerd.
Nou, beide Inside Out en Minions zijn geanimeerd.
Noch Leeftijd van Ultron noch Ant Man zijn animatiefilms.
En ik kan me voorstellen gebouw een structuur, een tafel die
geeft elk van deze eigenschappen.
Zijn ze geanimeerde of niet?
Ik zou dan meer toevoegen functies om deze tabel
door meer rijen in deze structuur.
Ik kon vragen of niet dat ze Marvel films.
Nou, Inside Out en Minions zijn niet Marvel films,
Leeftijd van Ultron en Ant Man zeker zijn.
>> En ik kon alle soorten vragen verschillende kwaliteiten
dat ik wilde, alle soorten van functies dat zou kunnen zijn belangrijk voor me.
Hebben ze een super schurk?
Nou, er is geen super schurk in Inside Uit, maar er zijn degenen in Minions
en, natuurlijk, de twee superhelden films.
>> Ik kan ook dingen als, nou vraag, ze passeren de bechdeltest?
Zijn er twee benoemd vrouwelijke personages die
breng wat aanzienlijke hoeveelheid tijd met een gesprek dat
niet de mensen in de cast te betrekken?
Nou, in dit geval, Inside Out passeert de test, Minions mislukt, Age of Ultron
de test doorstaat, en Ant Man mislukt.
Elk van deze functies Ik kon denken
als belangrijk voor sommige mensen.
>> Ik zou ook dingen vragen, zoals zijn er mensen in deze films die
zijn alumni van laten we zeggen, Parken en Recreatie, een van mijn favoriete shows.
Nou, Inside Out heeft Amy Poehler, dat is een Alumni.
Dat telt.
Jon Hamm was Minions.
Paul Rudd was Ant Man, maar niemand in Age of Ultron was in Parken en Req
ook.
Dus ik kan de opbouw van deze lijst functies, en ze konden echt
van alles over de films.
Ze kunnen wat beeldverhouding ze werden doodgeschoten in,
het zou kunnen zijn hoeveel zetels ze verkocht op hun opening weekend.
Een functie die ik wil genereren Ik kan in deze tabel gezet.
>> Nu, in dit geval, ik heb gebouwd allerlei Bullion waarden,
ja of nee, slagen of zakken, maar ze kunnen van alles zijn.
Ze kunnen willekeurige waarden.
Voor inhoudelijke filtering, wat we gaan doen
is gaan we overwegen twee kolommen in de tabel
en zie hoe vergelijkbaar ze zijn.
Dus bijvoorbeeld als ik ging naar Inside Out te zien,
Ik zou kunnen vragen, wat zijn de andere films dat ik zou bereid zijn om te gaan zien.
Dat is wat bereid breng mijn geld te gaan zien.
En ik kan dit vergelijken door gewoon te nemen de twee kolommen, één van Inside Out
en één van elk van de andere films, en alleen het zien
hoeveel van hun functies wedstrijd.
Dus als ik vergelijk Inside Out met Minions, goed, er is
drie dingen hier die wedstrijd.
Ze zijn allebei geanimeerd, geen van hen zijn Marvel films, en beiden
hebben Parken en Req alumni.
Dus ik kon tellen hoe veel wedstrijden er waren,
en in dit geval zou er drie zijn.
>> Als ik vergelijk Inside Out met laten we zeggen Leeftijd van Ultron,
Ik kan naar beneden kijken in de lijst en zeggen: goed, er is
maar een ding dat er wedstrijden.
Beiden langs de Bechtel-test, dus dat gaat om een ​​score van één zijn.
En tussen Inside Out en Ant Man, ik weer
kan vergelijken regel voor regel hoeveel dingen overeenkomen tussen de twee van hen.
Nou, een geanimeerde, men is niet.
Eén is een Marvel film, één niet.
One heeft een super schurk, de andere niet.
Men passeert de Bechtel test, een mislukt het,
maar ze hebben allebei Parken en Req alumni, Dus nogmaals, het wordt een score van één.
>> Dus als ik waren op zoek naar films die vergelijkbaar zijn met Inside Out waren,
Ik kon kijken naar de films die hebben de hoogste score binnen deze inhoud
filtering regeling.
Dus in dit geval, ik zou Minions overwegen
dichter en nog veel meer waarschijnlijk iets zijn
dat ik geld zou uitgeven om te zien dan Leeftijd van Ultron of Ant Man.
>> Deze content op basis filtersystemen slechts berust
de eigenschappen van de films, en dus heb ik
kunnen deze op te bouwen gewoon door te weten iets over de producten
dat heb ik.
Ik kan alle soorten van gebruik functies die ik zou willen,
en ik kan meer bouwen complexe functies die
omvatten meer complexe testen van een kwaliteit als ik ga mee.
In feite kan ik zelfs deze tabel bekijken niet als een statisch object,
maar eerder als afmetingen binnen een grotere staat ruimte.
En ik kan beginnen te praten over de afstanden tussen de verschillende films.
Dit zijn allemaal dingen dat we weten hoe ze
doen met behulp van de soorten datastructuren die we al hebben gezien in CS50.
Dus ik kan me voorstellen gebouw een gegevensstructuur voor een film.
Er is een structuur die ik heb geconstrueerd genoemd film
en heeft vijf ingangen Boolean daarin.
Is het geanimeerd, is het een Marvel film, heeft het een super schurk,
doet het langs de bechdeltest en zijn er Parken en Rec alumni in het?
En elk van deze is een gegevensstructuur die I
kan bezetten voor die film.
>> Berekenen vervolgens of twee films vergelijkbaar of niet,
wat hun score is, ik kon schrijf een set van pseudocode die
genereert dat dezelfde functie.
Dat is, gezien een aantal film M1, kan ik vind de meest gelijkende film te
door het volgen van de pseudocode.
Ik beschouw dat is de beste scoren systeem dat ik heb gevonden,
de beste vergelijking die ik heb gevonden.
Voor elke andere film Ik ga om te gaan door,
Ik zal een match score gelijk aan 0 te stellen.
En ik ga door dat film, een M1, de film
Ik ben begonnen met, ik zal controleren elke functie
dat ze moeten zien Als er een match.
Als er een match, zal ik verhogen de wedstrijd score.
En als aan het einde van de wedstrijd score die Ik heb is beter dan de huidige beste
scoren, dan zal ik Vergeet niet dat de beste score,
en dit is de beste wedstrijd die ik heb.
Aan het einde, welke film zit in de beste match,
dat is de dichtstbijzijnde Ik ben in staat om te komen geweest.
Dus deze inhoudelijke filtersystemen,
ze hebben allemaal deze basisstructuur.
Zij vertrouwen op het item in kwestie en niets
over een van de gebruiker voorkeuren.
>> Het andere mechanisme dat we gebruiken bestelt aanbeveling systemen te bouwen
wordt collaborative filtering genoemd.
Collaborative filtering vertrouwt op niet de eigenschappen van het voorwerp zelf,
maar hoe mensen, andere gebruikers die is, hoe ze hebben
reageerde op dezelfde objecten.
Dus door te gaan met mijn film bijvoorbeeld, Ik kan een heleboel van mijn vrienden te nemen
en enquête hen over de vraag of niet ze graag bijzondere films.
Nu verschillende plaatsen zal genereren deze gegevens op verschillende manieren.
U kunt direct uw enquête gebruikers, of je kon gewoon
zien wat ze kiezen als je bent, bijvoorbeeld Netflix.
Welke films hebben ze kijken?
>> Ik zou een aantal van mijn vragen vrienden hier en ontdek
dat Jason hield elke film hij zag er niet verrassen.
Andy hield slechts Minions en tante Man.
Sarah vond Inside Out en Wrekers, het tegenovergestelde van Andy.
En Sam, nou ja, Sam vond alle superhelden films,
maar geen van de geanimeerde films.
>> Ik zou dan te vragen voor een aantal nieuwe individu, een andere gebruiker zoals ikzelf
en vragen, goed, als ik vond één van deze films,
kunt u een voorspelling over te maken die andere films die ik zou willen.
Dat wil zeggen, als ik vond Inside Out, die andere films
ben ik waarschijnlijk ook willen zien gebaseerd op wat vergelijkbare mensen deden?
Dat wil zeggen, ik ga door middel van een Ik zal filteren door middel van deze lijst
en vind alleen de mensen die ook graag
Inside Out, die mijn voorkeuren op elkaar afgestemd.
Nou, dat betekent dat Andy en Sam, ze niet willen Inside Out,
dus ik ben niet van plan om hen te overwegen.
Ik ga om zich te ontdoen van hun gegevens voor deze vergelijking.
>> Ik kan dan kijken naar wat Jason en Sarah dacht en tally
up die van de films die ze zagen dat ik niet, of ze hen graag
of niet.
Ik kon gewoon tellen, laten we zeggen stemmen.
Dus Minions, bijvoorbeeld zou men hebben stemmen voor, omdat Jason vond het leuk.
Zowel Jason en Sarah vond Avengers, dus het zou hebben twee stemmen.
En alleen Jason vond Ant Man, dus het zou een stem te krijgen.
Dus als ik moest dan raden voor mezelf welke van deze films
Ik zou kunnen zijn het meest waarschijnlijk om naar te kijken, zou ik moeten Age of Ultron kiezen: Avengers.
>> Dus voor elk van deze systemen, nu ben ik met behulp van
gegevens die niet gegenereerd over film zelf, maar om de voorkeuren
van andere gebruikers.
Dit heeft een aantal problemen natuurlijk.
Wat als je geen andere gebruikers?
Nou, dat is opstartprobleem genoemd.
Je moet sommige hebben hoeveelheid gegevens voordat u bent
kunnen beginnen met het maken deze aanbevelingen.
De keerzijde daarvan is ooit je begint met het verzamelen van gegevens,
als u meer kunt verzamelen en meer en meer data,
je beter en beter en betere aanbevelingen.
>> Nu kunnen we vertalen dit in de code ook.
We kunnen een andere definiëren soort structuur,
in dit geval zullen we het noemen van een gebruiker.
En het heeft functies over welke films deze gebruiker vond.
Hebben ze willen Inside Out, Minions, Avengers, en Ant Man.
We zouden dan te genereren wat pseudocode te volgen
dezelfde procedure die ik eerder gebruikt.
Dat wil zeggen bij een bepaalde gebruiker x, laten we raden een film
x dat zou willen.
We kunnen gaan door en voor alle van de films,
kunnen we een score initialiseren voor die film zijn 0.
En dan kunnen we allemaal vinden andere gebruikers die
hebben dezelfde voorkeuren als x.
En dan voor elke film die ze wilden,
zullen we de score van die film te verhogen.
Welke film in de einde heeft de hoogste score,
dat is degene die ik zou aanraden.
>> Niets van dit alles is echt duister.
Niets van dit alles is een uitdaging.
Dit zijn allemaal elementaire algoritmen dat je zou kunnen implementeren vandaag.
>> Nu met echte recommender systemen je in de problemen.
Wat als er niemand die exact overeenkomt met uw voorkeuren?
Wat als er gebruikers zijn die zijn precies uw voorkeuren,
maar dan wijken drastisch van wat je wilt?
Ik hou van klassieke Godzilla films, maar mijn vrouw niet.
Ik wil om ze te bekijken, mijn Netflix-account bevat hen.
Haar's niet.
Wat gebeurt er als we beginnen mengen van data als deze?
Dit zijn allemaal uitdagingen dat je kunt overwinnen,
ze net iets te nemen meer complexe algoritmen.
>> Nu in de echte wereld, die daadwerkelijk operationeel,
doen we op basis van inhoud filtering te gebruiken of we collaborative filtering gebruiken?
Het antwoord is dat we gebruiken beide.
Bijna alle grote gebruikers dit geval, Amazon, Facebook, Netflix,
Pandora, ze gebruiken allemaal een combinatie van aanbeveling deze verschillende systemen.
En als we combineren de keuzes uit elk, noemen we ze hybride systemen.
Zij op een bepaalde manier afhankelijk zijn van de kenmerken van het object zelf,
en in sommige opzichten zij afhangen de voorkeuren van andere gebruikers.
Deze hybride systemen, ze zijn big business,
en ze zijn wat de huidige vandaag.
>> Dus heel erg bedankt voor het samenvoegen van mij.
Ik hoop dat je hebt gekregen een beetje beetje een begrip van wat
maakt deze systemen werken.
Volgende keer dat je online bent, bedenk dan dat niet alleen van invloed zijn je keuzes,
maar potentieel iedereen is zo goed.
Nogmaals bedankt.