<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Flexible Online-Recommender-Systeme durch die Integration in ein Datenstrommanagementsystem</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Cornelius A. Ludmann</string-name>
          <email>cornelius.ludmann@uni-</email>
          <email>cornelius.ludmann@unioldenburg.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Marco Grawunder</string-name>
          <email>marco.grawunder@uni-</email>
          <email>marco.grawunder@unioldenburg.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>H.-Jürgen Appelrath</string-name>
          <email>appelrath@uni-</email>
          <email>appelrath@unioldenburg.de</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universität Oldenburg</institution>
          ,
          <addr-line>Escherweg 2, 26121 Oldenburg</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Universität Oldenburg</institution>
          ,
          <addr-line>Escherweg 2, 26121 Oldenburg</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Universität Oldenburg</institution>
          ,
          <addr-line>Escherweg 2, 26121 Oldenburg</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2015</year>
      </pub-date>
      <fpage>96</fpage>
      <lpage>101</lpage>
      <abstract>
        <p>In dieser Arbeit wird eine flexible, erweiterbare und doma¨nenunbha¨ngige Integration von Online-RecSys-Funktionen in ein Datenstrommanagementsystem (DSMS) vorgestellt. Dazu werden neue logische Operatoren eingefu¨hrt, mit der Nutzer eines DSMS auf einer abstrakten Ebene RecSys-Funktionen nutzen ko¨nnen. Des Weiteren wird eine beispielhafte Realisierung durch physische Operatoren vorgestellt, wie sie aus den logischen Operatoren durch Transformationsregeln erzeugt werden kann. Durch dieses Konzept ko¨nnen Benutzer ein RecSys mit Hilfe einer Anfragesprache auf die doma¨nenspezifischen Bedu¨rfnisse anpassen und mit anderen Funktionen eines DSMS kombinieren. Des Weiteren bringt ein DSMS einige Eigenschaften (z. B. Anfrageplanoptimierung, Fragmentierung, Scheduling etc.) mit, von denen ein Online-RecSys profitieren kann. Die Flexibilita¨t eines DSMS ermo¨glicht den Vergleich und die Evaluation verschiedener RecSys-Algorithmen durch den Benutzer.</p>
      </abstract>
      <kwd-group>
        <kwd>recommender system</kwd>
        <kwd>collaborative filtering</kwd>
        <kwd>data stream management system</kwd>
        <kwd>stream processing</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>ZUSAMMENFASSUNG</title>
    </sec>
    <sec id="sec-2">
      <title>EINLEITUNG</title>
      <p>Recommender-Systeme (RecSys) haben das Ziel, das
Interesse eines Benutzers an einem bestimmten Objekt zu
scha¨tzen, um dem Benutzer aus einer großen Menge an
Objekten die subjektiv interessantesten Objekte zu empfehlen.
Eine ga¨ngige Methode ist das modellbasierte, kollaborative
Filtern (CF), bei dem aufgrund von bekannten
Objektbewertungen verschiedener Benutzer (z. B.
Produktbewertungen) ein Modell angelernt wird, mit dem gescha¨tzt werden
kann, wie ein Benutzer unbekannte Objekte bewerten
wu¨rde. Durch die Entwicklung von Online-Algorithmen fu¨r das
CF ko¨nnen neue Bewertungen von Benutzern in die
Modelle integriert werden, ohne dass das Modell von Grund
auf neu gelernt werden muss. Das ermo¨glicht eine neue
Betrachtung des RecSys-Problems: Wa¨hrend bisherige
Methoden das RecSys-Problem als periodisches Anlernen eines
Modells basierend auf einen statischen und endlichen Datensatz
betrachten, kann durch Online-Algorithmen das Problem
als Verarbeitung von Bewertungs-Ereignissen eines
kontinuierlichen und potenziell unendlichen Datenstroms
betrachtet werden. Das hat den Vorteil, dass durch die sofortige
Integration neuer Bewertungsinformationen nicht nur das
grundsa¨tzliche Interesse, sondern auch das aktuelle
Interesse des Benutzers beru¨cksichtigt werden kann.</p>
      <p>Zur Konzeption eines datenstrombasierten RecSys
schlagen wir vor, auf ein anwendungsunabha¨ngiges und
generisches Datenstrommanagementsystem (DSMS)
aufzubauen. Die Eingabedaten werden als kontinuierlich auftretende,
zeitannotierte Ereignisse eines potenziell unendlichen
Datenstroms betrachtet. Das DSMS berechnet mit Hilfe von
Datenstrom-Operatoren und Anfragepla¨nen kontinuierlich ein
RecSys-Modell. Dieser Ansatz hat folgende Vorteile:
(1) Die Modellierung der Daten als Datenstro¨me kommt
dem realen Einsatz eines RecSys na¨her als die Verwendung
von statischen Datensa¨tzen.</p>
      <p>(2) Ein DSMS bringt als Grundlage fu¨r ein RecSys bereits
Konzepte und Operatoren zur effizienten Verarbeitung von
Datenstro¨men mit temporal koha¨renten Ereignissen mit.</p>
      <p>(3) In einem DSMS kann ein RecSys in logische Teile
zerlegt werden, welche jeweils durch einen Operator
repra¨sentiert werden. Das ermo¨glicht eine flexible und auf die
konkrete Anwendung angepasste Komposition von
RecSys-Operatoren mit Standardoperatoren, z. B. fu¨r die Datenvor- bzw.
-nachbearbeitung, Kontextmodellierung etc.</p>
      <p>(4) Eine Aufgabe, zum Beispiel das Modelllernen, kann
durch austauschbare Operatoren mit gleicher Semantik aber
unterschiedlicher Implementierung realisiert werden. Das
ermo¨glicht den Vergleich sowie den bedarfsgerechten Einsatz
von verschiedenen Lernalgorithmen.</p>
      <p>Ziel der Arbeit ist die Einfu¨hrung eines generischen
Konzepts zur Integration von RecSys-Funktionen in ein DSMS.
Dazu fu¨hren wir im folgenden Abschnitt zuna¨chst die
Grundlagen ein und stellen in Abschnitt 3 verwandte Arbeiten
vor. Danach beschreiben wir die logischen Operatoren fu¨r
die Umsetzung eines RecSys (Abschnitt 4) und stellen eine
Transformation in physische Operatoren vor (Abschnitt 5).
In Abschnitt 6 diskutieren wir anschließend einige
Entscheidungen unseres Konzepts und stellen Alternativen vor. Zum
Schluss pra¨sentieren wir in Abschnitt 7 unsere prototypische
Implementierung in ein Open-Source-DSMS und zeigen die
Machbarkeit durch eine Evaluation, bevor wir mit einer
Zusammenfassung und einem Ausblick die Arbeit beenden.</p>
    </sec>
    <sec id="sec-3">
      <title>GRUNDLAGEN</title>
      <p>Ein RecSys hat die Aufgabe einem aktiven Benutzer u0 ∈
U eine Menge an Objekten aus I (Menge aller Objekte) zu
empfehlen, fu¨r die dieser sich interessiert
(Empfehlungsmenge). Dazu scha¨tzt das RecSys fu¨r jedes zur Empfehlung
infrage kommende Objekt eine Bewertung rˆ ∈ R, welche das
Interesse des Benutzers an dem Objekt quantifiziert. Die
Menge der infrage kommenden Objekte wird als Menge der
Empfehlungskandidaten bezeichnet. Die Empfehlungsmenge
wird durch die K Objekte der Empfehlungskandidaten
gebildet, die die ho¨chsten Bewertungen haben (Top-K-Menge).
Um die Bewertung eines Objekts fu¨r einen Benutzer
bestimmen zu ko¨nnen, ermittelt das RecSys (z. B. mit der
MatrixFaktorisierung) eine Anna¨herung fˆR an eine wahre aber
unbekannte Bewertungsfunktion fR : U × I → R.</p>
      <p>Seit den 1970er/1980er Jahren sind relationale
Datenbankmanagementsysteme (DBMS) die bedeutendste Technik,
Daten dauerhaft zu speichern. Ein DBMS abstrahiert von der
Komplexita¨t der Datenspeicherung und sorgt fu¨r eine
effiziente Verarbeitung von komplexen Anfragen, um Daten zu
speichern, zu lesen, zu aktualisieren und zu lo¨schen. DBMS
sind allerdings nicht mit dem Ziel entwickelt worden,
kontinuierlich erzeugte Daten zu verarbeiten. Diese Lu¨cke
schließen DSMS, die auf die fortlaufende Verarbeitung von
Datenstro¨men ausgelegt sind.</p>
      <p>
        Wa¨hrend ein DBMS wahlfreien Zugriff auf gespeicherte
Daten hat, erha¨lt ein DSMS die Daten von einem
kontinuierlichen Datenstrom (potenziell unendliche Sequenz von
Datenstromelementen). Die Datenstromelemente werden von
einer aktiven Quelle erzeugt und an das DSMS u¨bertragen.
Ein DSMS hat keine Kontrolle u¨ber die Reihenfolge, in der
die Datenstromelemente von der Quelle gesendet werden –
weder innerhalb eines Datenstroms, noch zwischen
verschiedenen Datenstro¨men. Sobald ein Element verarbeitet ist,
wird es verworfen oder archiviert. Das DSMS kann nicht
erneut auf bereits verarbeitete Elemente zugreifen, es sei denn,
sie werden explizit im Arbeitsspeicher gehalten (one-pass
paradigma). Dies kann allerdings nur fu¨r einen begrenzten Teil
der Datenstromelemente geschehen, da der Speicher im
Gegensatz zum Datenstrom in der Gro¨ße begrenzt ist [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>
        Die Verarbeitung der Daten in einem DBMS erfolgt
u¨blicherweise mit Hilfe von Einmal-Anfragen. Diese werden
einmalig auf aktuellem Datenbestand ausgefu¨hrt und der
anfragende DBMS-Benutzer erha¨lt einmalig eine Antwort. Bei
der Verarbeitung von kontinuierlichen Datenstro¨men stellt
der Benutzer eine kontinuierliche Anfrage. Diese wird
einmalig dem DSMS u¨bergeben und produziert kontinuierlich
Ergebnisse [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Zur Verarbeitung von relationalen
Datenstro¨men kann ein DSMS eine datenstrombasierte Variante der
relationalen Algebra einsetzen. Eine kontinuierliche
Anfrage wird, wie bei Anfragen in DBMSs, in einer
Anfragesprache formuliert. Beispiele fu¨r DSMS-Anfragesprachen sind die
SQL-a¨hnliche Sprache CQL [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] und die PQL [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        Eine Anfrage wird von einem DSMS in einen
Anfrageplan u¨bersetzt. Dieser besteht aus Operatoren, die durch
Warteschlangen miteinander verbunden sind. Ein
Anfrageplan kann als gerichteter Graph interpretiert werden,
dessen Knoten die Operatoren und Kanten die Warteschlangen
darstellen. Die Ausfu¨hrung der Operatoren koordiniert ein
Scheduler [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Zu einer Anfrage wird ein logischer
Anfrageplan, bestehend aus logischen Operatoren, erzeugt. Auf
einem logischen Anfrageplan ko¨nnen Optimierungen
ausgefu¨hrt werden (z. B. Vera¨nderung der
Operatorreihenfolge), ehe er in einen physischen Anfrageplan mit physischen
Operatoren u¨berfu¨hrt wird. Physische Operatoren
enthalten konkrete Implementierungen fu¨r die Verarbeitung der
Daten. Das DSMS wa¨hlt zu jedem logischen Operator ein
oder mehrere physische Operatoren, die fu¨r die Operation
am geeignetsten sind.
3.
      </p>
    </sec>
    <sec id="sec-4">
      <title>VERWANDTE ARBEITEN</title>
      <p>
        Verschiedene Vero¨ffentlichungen u¨ber inkrementelle oder
online Algorithmen fu¨r CF (z. B. [
        <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
        ]) zeigen wie neue
Lerndaten in CF-Modelle integriert werden ko¨nnen, ohne
dass das Modell komplett neu gelernt werden muss.
Diese Algorithmen bieten die Basis fu¨r eine
datenstrombasierte Verarbeitung von Bewertungsdaten fu¨r RecSys. Die
Arbeit von Diaz-Aviles et al. [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] stellt eine Methode zur
datenstrombasierten Verarbeitung von Bewertungsdaten zum
Lernen eines Matrix-Faktorisierungs-Modells vor. Dazu wird
das Modell mit Daten aus einem Reservoir aktualisiert,
welches eine Stichprobe des Datenstroms vorha¨lt. Im Gegensatz
zu diesen Arbeiten stellen wir keinen neuen Algorithmus vor,
sondern setzen den Fokus auf die Komposition eines flexiblen
RecSys mithilfe von Datenstromoperatoren, in denen diese
Algorithmen als Operatoren integriert werden ko¨nnen.
      </p>
      <p>
        Einige Vero¨ffentlichungen nutzen Frameworks zur
Implementierung eines RecSys, die bei der Entwicklung von
datenstrombasierten Systemen unterstu¨tzen. Zum Beispiel setzt
Ali et al. [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] Apache Storm ein, um einen CF-Algorithmus
zu realisieren. Das datenstrombasierte
Data-Mining-Framework Massive Online Analysis (MOA) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] ermo¨glicht die
Evaluation unter anderem von datenstrombasierten
RecSysAlgorithmen. Im Gegensatz zu unserem Konzept bieten
diese Arbeiten keinen anwendungsunabha¨ngigen, erweiterbaren
und flexiblen Ansatz, der auf die Komposition von
Datenstromoperatoren setzt. Unser Ansatz kann außerdem von
diversen DSMS-Funktionen profitieren.
      </p>
      <p>
        Mit StreamRec stellen Chandramouli et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] einen
Ansatz zur Nutzung eines DSMS fu¨r ein RecSys vor. Dort
wird das DSMS Microsoft StreamInsight genutzt. Im
Gegensatz zu unserem Konzept werden in StreamRec
ausschließlich Basisoperatoren eines DSMS eingesetzt und es ist auf
die Berechnung von Objekta¨hnlichkeiten zur Bestimmung
der Empfehlungsmenge beschra¨nkt. Unser Konzept verfolgt
einen generischeren Ansatz, der auch die Integration von
modellbasierten Lernalgorithmen erlaubt und durch logische
RecSys-Operatoren eine logische Abstraktionsebene fu¨r den
Nutzer des DSMS bietet.
      </p>
    </sec>
    <sec id="sec-5">
      <title>LOGISCHE OPERATORSICHT</title>
      <p>Betrachtet man die Ein- und Ausgabedaten eines
RecSys, so kann man diese als folgende Datenstro¨me
auffassen: Erstens u¨bertra¨gt die Benutzeranwendung
BenutzerObjekt-Bewertungs-Tripel (u, i, r) fu¨r jede Bewertung, die
ein Benutzer vornimmt. Zweitens werden von einem
Benutzer u Empfehlungen angefordert (z. B. dann, wenn ein
Benutzer die Empfehlungsseite der Benutzeranwendung
o¨ffnet; im folgenden Empfehlungsanforderungen – engl.
Request for Recommendations, RfR – genannt). Drittens
sendet das RecSys eine Empfehlungsmenge zuru¨ck an die
Benutzeranwendung. Des Weiteren ko¨nnen die Eingabedaten</p>
      <sec id="sec-5-1">
        <title>Ratings Evaluating</title>
        <p>Learning</p>
        <p>Requests for
Recommendations
Learning Data
Updated Models
Window</p>
        <sec id="sec-5-1-1">
          <title>Learning Data Train RecSys Model</title>
          <p>Updated Models
Recommending</p>
        </sec>
        <sec id="sec-5-1-2">
          <title>Recomm. Candidates Recommend.</title>
          <p>Candidates</p>
          <p>Abbildung 1: Logische Sicht auf die Operatoren eines DSMS-basierten RecSys
um ein Benutzerfeedback erga¨nzt werden. Im folgenden
erwarten wir das Benutzerfeedback in der selben Form wie
neue Bewertungen (u-i-r-Tripel). Mo¨chte man das RecSys
kontinuierlich evaluieren, so erha¨lt man einen zusa¨tzlichen
Ausgabedatenstrom mit Fehlerwerten, der den Modellfehler
angibt.</p>
          <p>Zwischen den Ein- und Ausgabedatenstro¨men
verarbeiten Datenstromoperatoren einer oder mehrerer Anfragen die
Daten. Um ein RecSys mit Hilfe eines DSMS zu realisieren,
muss mit Hilfe einer Anfrage aus den Eingabedatenstro¨men
(u-i-r-Tripel und Empfehlungsanforderungen) als Antwort
ein Datenstrom an Empfehlungsmengen erzeugt werden, der
fu¨r jede Empfehlungsanforderung eine aktuelle und
personalisierte Liste an Empfehlungen entha¨lt.</p>
          <p>Die Anfrage fu¨r ein RecSys haben wir in logische
Operatoren zerlegt, die jeweils einen Teil der RecSys-Funktionalita¨t
u¨bernehmen. Diese Operatoren bilden eine
Abstraktionsebene, sodass der DSMS-Benutzer diese in der Anfrage nutzen
kann, ohne die genaue Umsetzung durch physische
Operatoren kennen zu mu¨ssen. Wo dies mo¨glich ist, werden diese
Operatoren bei der Transformation zu physischen
Operatoren durch vorhandene Operatoren ersetzt.</p>
          <p>Abbildung 1 zeigt eine U¨ bersicht u¨ber die logischen
Operatoren und wie diese in einer Beispielanfrage
zusammenha¨ngen. Auf der linken Seite sehen wir die
Eingabedatenstro¨me und auf der rechten Seite die Ausgabedatenstro¨me.</p>
          <p>Die dazwischenliegenden Operatoren ko¨nnen in drei
Kategorien eingeteilt werden: Operatoren zum Lernen des
RecSysModells (mittig), zum Empfehlen von Objekten (unten) und
zum Evaluieren (oben).</p>
          <p>Die Anfrage besteht aus folgenden logischen Operatoren:
Window: Ein zeitbasiertes Fenster (umgesetzt durch einen
WINDOW-Operator) ermo¨glicht, die Gu¨ltigkeit der
Bewertungsdaten zu beschra¨nken. Das kann sinnvoll sein, um ein
Modell anzulernen, welches sich auf die neuesten Daten
beschra¨nkt und a¨ltere Daten verwirft (z. B. um Concept Drifts
zu beru¨cksichtigen). Zusa¨tzlich beschra¨nkt es die Menge der
Bewertungsdaten, die im Speicher gehalten werden mu¨ssen.</p>
          <p>Sollen alle Daten fu¨r immer behalten werden, so kann dieser
Operator entfernt werden.</p>
          <p>Train RecSys Model: Dieser Operator lernt aus den
Bewertungsdaten ein Modell an. Wenn neue Daten hinzugefu¨gt
werden gibt es ein aktualisiertes Modell aus. Das Modell ist
fu¨r eine bestimmte Zeitspanne gu¨ltig, sodass zu jedem
Zeitpunkt genau ein Modell fu¨r die Vorhersage der Bewertung
zusta¨ndig ist.</p>
          <p>Recomm. Candidates: Fu¨r jede Empfehlungsanforderung
bestimmt dieser Operator die Empfehlungskandidaten. Diese
sind in der Regel alle Objekte, die von dem anfordernden
Benutzer noch nicht bewertet wurden.</p>
          <p>Predict Rating: Dieser Operator wird sowohl fu¨r die
Bestimmung der Empfehlungsmenge als auch fu¨r die
Evaluation genutzt. Er scha¨tzt die Bewertung des Benutzers fu¨r
jeden Empfehlungskandidaten bzw. fu¨r jedes Testtupel ab.</p>
          <p>Mit diesem Operator wird sichergestellt, dass genau das
Model genutzt wird, welches zum gleichen Zeitpunkt wie die
Empfehlungsanforderung bzw. das Testtupel gu¨ltig ist. Das
stellt eine deterministische Verarbeitung der Daten sicher,
was insbesondere fu¨r die Evaluation von Vorteil ist.</p>
          <p>Recommend: Aus den bewerteten Empfehlungskandidaten
werden die Objekte ausgewa¨hlt, die dem Benutzer
empfohlen werden sollen. Das sind in der Regel die K Objekte mit
den ho¨chsten, gescha¨tzten Bewertungen (Top-K-Menge).
Eine weitere Mo¨glichkeit besteht darin, nur Elemente mit einer
minimalen Bewertung zu beru¨cksichtigen.</p>
          <p>Extract Test Data: Um das RecSys zu evaluieren, gibt
dieser Operator neben den Lerndaten auch Testdaten aus. Eine
mo¨gliche Implementierung filtert 10 % der Bewertungsdaten
als Testdaten aus und leitet die restlichen Daten als
Lerndaten an den Modelllerner weiter.</p>
          <p>Test Prediction: Dieser Operator implementiert eine
Evaluationsmetrik, z. B. Root Mean Square Error (RMSE).
Dabei vergleicht er die wahren Bewertungen aus den Testdaten
mit den gescha¨tzten Bewertungen zu den Testdaten oder die
wahre Position in einem Ranking mit der Position aufgrund
der gescha¨tzten Bewertungen. Der daraus resultierende
Modellfehler wird zu einem gleitenden Durchschnittswert oder
einem gesamten Durchschnittswert aggregiert.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>5. PHYSISCHE OPERATORSICHT</title>
      <p>Die logischen Operatoren werden durch
Transformationsregeln in physische Operatoren u¨berfu¨hrt. Abbildung 2 zeigt
ein Beispiel fu¨r einen physischen Anfrageplan, der aus einer
Anfrage generiert wird, der die logischen Operatoren nutzt.
Die linke Spalte entha¨lt die Operatoren fu¨r die Evaluation
(entspricht dem oberen Teil von Abbildung 1), die mittlere
Spalte die Operatoren fu¨r das Lernen des Modells (mittlerer
Teil von Abbildung 1) und die rechte Spalte die
Operatoren fu¨r die Berechnung der Empfehlungsmenge (unterer Teil
von Abbildung 1). Dabei sind die Operatoren, die zu einem
logischen Operator aus Abbildung 1 geho¨ren, durch ein
gestricheltes Ka¨stchen zusammengefasst. Wo es mo¨glich ist,</p>
      <p>Test
Prediction</p>
      <p>Predict
Rating
Extract</p>
      <p>Test
Data
Bind</p>
      <p>Input
Stream
send
RMSE
map
aggregate
time
window
map
predict
rating
cross
product
ITTT
access
ratings str.</p>
      <p>Train RecSys Model</p>
      <p>BRISMF
time
window</p>
      <p>Window</p>
      <p>
        Abbildung 2: Physischer Operatorplan
werden die logischen Operatoren durch vorhandene
physische Basisoperatoren (Operatoren mit durchgezogener
Linie) implementiert. Neue, speziell fu¨r die RecSys-Funktion
implementierte physische Operatoren (mit gestrichelter,
dicker Linie) sind:
– ITTT: Impl. der Evaluationsmethode ITTT [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
– BRISMF: Impl. des Lernalgorithmus’ BRISMF [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
– RECOMM CAND: Empfehlungskandidaten.
– PREDICT RATING: Scha¨tzung von Bewertungen.
      </p>
      <p>Im folgenden wird die Verarbeitung der
Datenstromelemente anhand des physischen Anfrageplans aus Abbildung 2
na¨her erla¨utert. Dazu werden die drei Teilgraphen Lernen
des Modells, Bestimmung der Empfehlungsmenge und
Berechnung des Modellfehlers in jeweils einem Abschnitt
behandelt.</p>
    </sec>
    <sec id="sec-7">
      <title>Von Bewertungsdaten zu Modellen</title>
      <p>Der ACCESS-Operator ist fu¨r die Anbindung von
Datenstro¨men zusta¨ndig. Mit ihm werden das Transportprotokoll
sowie das Datenformat festgelegt. Aus jedem ankommenden
Datenstromelement wird ein Tupel in der Form (u, i, r)
erzeugt, das die Benutzer-ID u, die Objekt-ID i sowie die
Bewertung r des Benutzers u fu¨r das Objekt i entha¨lt.
Außerdem wird der Gu¨ltigkeitszeitraum des Datenstromelements
festgelegt. Gibt die Datenquelle einen Zeitstempel mit, so
kann dieser als Startzeitpunkt des Gu¨ltigkeitsintervalls
genutzt werden. Andernfalls wird der aktuelle Zeitpunkt als
Startzeitpunkt genutzt. Bewertungsdaten sind initial
unendlich gu¨ltig und erhalten somit als Endzeitpunkt des
Gu¨ltigkeitsintervals den Wert ∞.</p>
      <p>Der Operator ITTT implementiert die
Evaluationsmethode Interleaved Test-Than-Train (ITTT), die aus den
Bewertungsdaten Tupel als Lern- und Testdaten erzeugt. Als
Lerndaten werden alle Bewertungsdaten ohne A¨ nderung
weitergeleitet. Auf die Erzeugung der Testdaten wird spa¨ter bei
der Beschreibung der Evaluation na¨her eingegangen.</p>
      <p>Ein TIME-WINDOW-Operator beschra¨nkt die Gu¨ltigkeit
der Lerndaten. So kann zum Beispiel festgelegt werden, dass
die Lerndaten in dem BRISMF-Operator nur fu¨r 30 Tage lang
send
recomm set
top K
select
predict
rating
cross
product
recomm
cand
cross
product
time
window
access
RfR stream
Recommend
Predict
Rating
Recomm.</p>
      <p>
        Candidates
Bind
Input
Stream
beru¨cksichtigt werden sollen. Der BRISMF-Operator
implementiert den Lernalgorithmus BRISMF [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], der ein Modell
mit den neuen Daten aktualisiert. Er legt das
Gu¨ltigkeitsintervall des Modells fest, sodass zu jedem Zeitpunkt genau
ein Modell gu¨ltig ist. Der Operator muss sicherstellen, dass
alle Lerndaten beru¨cksichtigt wurden, die im
Gu¨ltigkeitsintervall des Modells gu¨ltig sind.
      </p>
    </sec>
    <sec id="sec-8">
      <title>Von Empf.-Anforderungen zu Empf.-Mengen</title>
      <p>Zu jeder Empfehlungsanforderung eines Benutzers u soll
eine Menge an Empfehlungen ermittelt werden. Dazu bindet
ein ACCESS-Operator den Eingabedatenstrom mit den
Anforderungen und ein TIME-WINDOW-Operator setzt deren
Gu¨ltigkeit. Das Gu¨ltigkeitsintervall wird so gesetzt, dass
diese nur zum Zeitpunkt der Empfehlungsanforderung gu¨ltig
sind und nach Verarbeitung direkt verworfen werden.</p>
      <p>Zur Bestimmung der Empfehlungskandidaten werden der
Datenstrom der Empfehlungsanforderungen und der
Datenstrom der Modelle, der von dem BRISMF-Operator erzeugt
wird, mit einem Kreuzprodukt-Operator zusammengefu¨hrt.
Dieser Operator beru¨cksichtigt die Gu¨ltigkeitsintervalle,
sodass nur Datenstromelemente mit u¨berlappenden
Intervallen zusammengefu¨hrt werden. Da der BRISMF-Operator
Modelle in der Art erzeugt, so dass zu jedem Zeitpunkt genau
ein Modell gu¨ltig ist, wird jeder Empfehlungsanforderung
genau ein Modell zugeordnet. Der RECOMM-CAND-Operator
bekommt anschließend die Anforderungen mit den
passenden Modellen und erzeugt einen Datenstrom, der fu¨r jedes
in dem Modell nicht bewertete Objekt i des Benutzers u ein
Tupel (u, i) mit dem anfordernden Benutzer und dem nicht
bewerteten Objekt entha¨lt.</p>
      <p>Im na¨chsten Schritt wird fu¨r jeden
Empfehlungskandidaten eine Bewertung gescha¨tzt. Dazu wird mit einem
Kreuzprodukt-Operator zu jedem Empfehlungskandidaten das
temporal passende Modell zugeordnet. Der
PREDICT-RATINGOperator nutzt nun das jeweilige Modell zu Bestimmung
der Scha¨tzung und gibt zu jedem Empfehlungskandidaten
ein Tupel (u, i, rˆ) aus, welches den Benutzer u, den
Empfehlungskandidaten i und die gescha¨tzte Bewertung rˆ entha¨lt.</p>
      <p>Anschließend werden aus den bewerteten
Empfehlungskandidaten die Objekte fu¨r die Empfehlungsmenge
ausgewa¨hlt. In der Beispielanfrage in Abbildung 2 werden dazu
mit einem SELECT-Operator die Kandidaten entfernt, deren
gescha¨tzte Bewertung kleiner als ein bestimmter Schwellwert
ist (z. B. 3,5). Von den verbleibenden Kandidaten werden
mit dem TOP-K-Operator die K Objekte mit den gro¨ßten
Bewertungen ausgewa¨hlt (z. B. K = 8) und an den
Ausgabedatenstrom u¨bergeben.</p>
    </sec>
    <sec id="sec-9">
      <title>Von Bewertungsdaten zu Modellfehlerwerten</title>
      <p>Fu¨r die Evaluation werden vom ITTT-Operator Testdaten
erzeugt. Ein Testdatum (u, i, r) wird als ein
Empfehlungskandidat i fu¨r einen anfragenden Benutzer u betrachtet und
vom PREDICT-RATING-Operator um eine gescha¨tzte
Bewertung rˆ erweitert. Die PREDICT-RATING-Operatoren fu¨r
die Berechnung der Empfehlungen und fu¨r die
Evaluation haben die gleiche Implementierung: Sie erhalten vom
vorgelagerten CROSS-PRODUCT-Operator ein Tupel,
welches einen Benutzer u, ein Objekt i, ein Modell fˆ und evtl.
beliebig weitere Attribute besitzt. Die Ausgabe ist in
beiden Fa¨llen ein Tupel mit dem Benutzer u, dem Objekt i,
der gescha¨tzten Bewertung rˆ durch Anwendung des Modells
rˆ = fˆ(u, i) und alle weiteren Attribute des Eingabetupels
(ohne das Modell fˆ, welches nach der Berechnung von rˆ im
folgenden Verlauf nicht mehr beno¨tigt wird). Fu¨r die
Evaluation za¨hlt zu den weiteren Attributen des Eingabetupels
insbesondere die wahre Bewertung r, die auch im
Ausgabetupel enthalten ist. Somit gibt der
PREDICT-RATING-Operator fu¨r die Evaluation ein Tupel (u, i, r, rˆ) aus.</p>
      <p>Im nachfolgenden Verlauf wird nun ein Fehlerwert
berechnet. In unserer Beispielanfrage wird dazu ein gleitender
RMSE berechnet. Dazu berechnet zuerst ein MAP-Operator den
quadratischen Fehler se = (r − rˆ)2 der Scha¨tzung.
Anschließend wird mit einem TIME-WINDOW-Operator die
gleitende Zeitspanne festgelegt, u¨ber die der Fehlerwert aggregiert
werden soll (z. B. die letzten 24 Stunden). Der nachfolgende
AGGREGATE-Operator berechnet das arithmetische Mittel
der quadratischen Fehler, die sich in einem
Aggregationsfenster befinden (z. B. alle Werte der letzten 24 Stunden).
Abschließend berechnet der letzte MAP-Operator die
Quadratwurzel aus dem aggregierten Fehlerwert, welches dem
RMSE u¨ber das Aggregationsfenster entspricht. Diese
Werte werden an den Ausgabedatenstrom u¨bergeben.</p>
      <p>
        Fu¨r die Evaluation ist es wichtig, dass zum Testen des
Modells das zu testende Datum nicht im Modell enthalten ist.
Eine einfache Mo¨glichkeit dies sicherzustellen ist die
Trennung von Test- und Lerndaten. Dies kann durch einen
ROUTE-Operator realisiert werden, der zufa¨llig 10 % der Daten
als Testdaten und die restlichen Daten als Lerndaten
weiterleitet. Der hier vorgestellte Operator implementiert
stattdessen die Evaluationsmethode Interleaved Test-Than-Train
[
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Mit dieser werden alle Daten sowohl zum Lernen als auch
zum Testen genutzt. Dabei wird ein Testdatum zuerst zum
Testen des Modells genutzt und anschließend in das Modell
integriert. Das hat die Vorteile, dass mehr Testdaten genutzt
werden und keine Daten fu¨r das Lernen des Modells verloren
gehen. Letzteres ist insbesondere wichtig, wenn ein RecSys
im laufenden Betrieb evaluiert werden soll (in dem Fall
wu¨rde das aussortieren von Daten als Testdaten die Scha¨tzungen
fu¨r die realen Benutzer beeinflussen) und wenn temporale
Zusammenha¨nge in den Daten beim Modelllernen
beru¨cksichtigt werden sollen (in dem Fall wu¨rden fehlende Daten
ggf. erschweren, die temporalen Zusammenha¨nge zu
erkennen).
      </p>
      <p>Um sicherzustellen, dass zur Scha¨tzung der Bewertung
eines jeden Testdatums ein Modell genutzt wird, dass nicht
das Testdatum, aber ansonsten so viele Lerndaten wie
mo¨glich entha¨lt, wird das Gu¨ltigkeitsintervall des Testdatums
vom ITTT-Operator angepasst. Ist ein Lerndatum im
Gu¨ltigkeitsintervall [ts, te) mit dem Startzeitpunkt ts und dem
Endzeitpunkt te gu¨ltig, so wird die Gu¨ltigkeit des
Testdatums so gesetzt, dass dieses ungu¨ltig wird, gerade bevor das
¨aquivalente Lerndatum gu¨ltig wird. Bei einem Lerndatum
von einem Gu¨ltigkeitsintervall [45, ∞) erha¨lt das Testdatum
das Gu¨ltigkeitsintervall [44, 45). Es ist genau wie die
Empfehlungsanforderungen nur ein Zeitpunkt gu¨ltig: zum
Zeitpunkt t1 = 44 ist es gu¨ltig und zum Zeitpunkt t2 = 45
bereits ungu¨ltig (wegen des halboffenes Intervalls). Wie
bereits weiter oben gefordert, soll ein Modell genau alle
Lerndaten enthalten, welche im Gu¨ltigkeitsintervall des Modells
ebenfalls gu¨ltig sind. Der BRISMF-Operator erzeugt also ein
Modell mit dem Lerndatum, welches ab t2 = 45 gu¨ltig ist
und das vorherige Modell wird somit zum Zeitpunkt t2 = 45
ungu¨ltig. Der CROSS-PRODUCT-Operator vor dem
PREDICT-RATING-Operator der Evaluation fu¨hrt nun unter
Beru¨cksichtigung der Gu¨ltigkeitsintervalle Testdatum und
MoWindow</p>
      <p>Train RecSys Model
Recomm. Candidates
dell zusammen. Da sich die Gu¨ltigkeitsintervalle des
Testdatums und des Modells, welches das zum Testdatum
a¨quivalente Lerndatum entha¨lt, nicht u¨berschneiden, werden diese
nicht zusammengefu¨hrt. Dafu¨r u¨berschneidet sich das
vorherige Modell mit dem Testdatum und wird somit, wie bei
der ITTT-Methode gefordert, zur Bewertungsscha¨tzung
genutzt.
6.</p>
    </sec>
    <sec id="sec-10">
      <title>DISKUSSION</title>
    </sec>
    <sec id="sec-11">
      <title>Die Aufteilung der Bewertungsschätzung in drei</title>
    </sec>
    <sec id="sec-12">
      <title>Operatoren</title>
      <p>Bei dem hier vorgestellten Konzept haben wir das
RecSysProblem der Scha¨tzung von Bewertungen im Wesentlichen
auf drei Operatoren aufgeteilt: TRAIN RECSYS MODEL,
RECOMM. CANDIDATES und PREDICT RATING. Das hat den
Nachteil, das eine Kopie des gelerntes Modells vom
TRAINRECSYS-MODEL-Operator an die anderen beiden
Operatoren als Datenstromelement u¨bertragen werden muss. Das
fu¨hrt, insbesondere bei großen Modellen, zu einem
zusa¨tzlichen Aufwand. Eine Alternative wa¨re, alle drei Operatoren
zu einem Operator zu vereinen (vgl. Abbildung 3). Dies
ha¨tte folgende Nachteile:</p>
      <p>Durch die Aufteilung in drei Operatoren kann jeder
Operator fu¨r sich verschiedene Implementierungen (physische
Operatoren) haben. Zum Beispiel kann man sich ein
RecSys fu¨r Filme vorstellen, bei dem der Benutzer angeben
kann, dass er z. B. eine Komo¨die und keinen Actionfilm
sehen mo¨chte. Dies wu¨rde die Empfehlungsanforderung um
eine Genre-Angabe erweitern. Ein fu¨r diese Anwendung
angepasster RECOMM-CAND-Operator kann von vornherein
als Empfehlungskandidaten nur die Objekte
beru¨cksichtigen, die unter die Kategorie Komo¨die fallen. Alternativ
ko¨nnte man zwischen RECOMM CAND und PREDICT RATING
einen Selektionsoperator einfu¨gen, der alle Kandidaten, die
nicht unter Komo¨die fallen, herausfiltert. Die anderen
Operatoren bleiben davon unberu¨hrt. Die Aufteilung sorgt somit
fu¨r klare Zusta¨ndigkeiten der Operatoren und ermo¨glicht
eine einfachere Erweiterung der Anfrage.</p>
      <p>Der TRAIN-RECSYS-MODEL-Operator bestimmt die
Gu¨ltigkeit eines Modells, so dass zu jeden Zeitpunkt genau ein
Modell gu¨ltig ist. Durch die Zusammenfu¨hrung von
Modell und Empfehlungsanforderung durch einen
Kreuzprodukt-Operator findet eine deterministische, temporale
Zuordnung statt. Diese Zuordnung basiert alleine auf den
Gu¨ltigkeitsintervallen und ist nicht davon abha¨ngig, ob aufgrund
der Steuerung des Schedulers oder anderer Latenzen zuerst
das Lerndatum oder die Empfehlungsanforderung den
Operator erreicht. Das Zeitmodell des DSMS sorgt dafu¨r, dass
genau das zusta¨ndige Modell reproduzierbar fu¨r die
Vorhersage genutzt wird. Des Weiteren kann der
TRAIN-RECSYSMODEL-Operator das Modell fu¨r den Gu¨ltigkeitszeitraum
anpassen, z. B. um temporale Verzerrungen aufgrund von
Concept Drift zu beru¨cksichtigen.</p>
    </sec>
    <sec id="sec-13">
      <title>Die Ausgabe der Empfehlungskandidaten</title>
      <p>Der RECOMM-CAND-Operator gibt fu¨r jeden
Empfehlungskandidaten einer Empfehlungsanforderung ein
Datenstromelement aus. Eine Alternative wa¨re die Ausgabe eines
Datenstromelements je Empfehlungsanforderung, welches eine
Liste von Empfehlungskandidaten entha¨lt. Das ha¨tte den
Nachteil, dass der PREDICT-RATING-Operator fu¨r die
Bestimmung der Empfehlungen und fu¨r die Evaluation andere
Eingabedaten verarbeiten ko¨nnen mu¨sste: im ersten Fall eine
Liste von Benutzer-Objekt-Paaren, im zweiten Fall einzelne
Benutzer-Objekt-Paare.</p>
      <p>Der RECOMM-CAND-Operator gibt nur die
Empfehlungskandidaten ohne Modell aus. Dieser Operator ko¨nnte auch
das Modell den Empfehlungskandidaten beifu¨gen, so ko¨nnte
man auf den CROSS-PRODUCT-Operator vor PREDICT
RATING verzichten. Das hier vorgestellte Konzept hat den
Vorteil, dass BRISMF an RECOMM CAND und PREDICT
RATING unterschiedliche Modelle u¨bergeben kann. Wenn zum
Beispiel aus dem Modell fu¨r die Scha¨tzung der Bewertung
gar nicht hervorgeht, welche Objekte ein Benutzer nicht
bewertet hat (und somit zu den Empfehlungskandidaten
geho¨rt), so kann an RECOMM CAND ein Modell u¨bergeben
werden, dass die Zuordnung von Benutzer zu unbewerteten
Objekten ermo¨glicht, dafu¨r aber keine Scha¨tzung der
Bewertung vornehmen kann (z. B. ein einfaches Mapping u 7→
unbewertete Objekte).</p>
    </sec>
    <sec id="sec-14">
      <title>7. IMPLEMENTIERUNG UND EVALUATION</title>
      <p>
        Das vorgestellte Konzept haben wir mit dem
erweiterbaren Open-Source-DSMS Odysseus1 [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] umgesetzt. Dazu
haben wir Odysseus um neue Operatoren und
Transformationsregeln erweitert.
      </p>
      <p>
        Die Machbarkeit des Konzepts und die korrekte
Implementierung konnten wir durch den Vergleich der
Evaluationsergebnisse mit MOA und dem MovieLens-Datensatz
nachweisen. Dazu haben wir als BRISMF-Operator die
MOAImplementierung des BRISMF-Algorithmus’ [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] integriert,
der eine inkrementelle Matrix-Faktorisierung implementiert.
Da MOA die Gu¨ltigkeit von Lerndaten nicht begrenzt,
haben wir den WINDOW-Operator entfernt und die RMSE
u¨ber den gesamten Datensatz berechnet (kein gleitender
RMSE). Den MovieLens-Datensatz haben wir, wie MOA,
zeilenweise eingelesen um einen Datenstrom zu simulieren und
haben nach jedem getesteten Tupel den RMSE ausgegeben.
Die RMSE-Werte stimmen dabei mit denen von MOA exakt
u¨berein. Das zeigt, dass die temporale Zuordnung von
Lernund Testdaten mit den Modellen sowie die Umsetzung der
Evaluationsmethode korrekt funktionieren.
      </p>
    </sec>
    <sec id="sec-15">
      <title>ZUSAMMENFASSUNG UND AUSBLICK</title>
      <p>In dieser Arbeit haben wir ein Konzept fu¨r die
Umsetzung eines modellbasierten und kollaborativen RecSys mit
einem auf Operatoren basierten DSMS vorgestellt. Dazu
haben wir logische Operatoren definiert, die fu¨r Teilaufgaben
eines RecSys zusta¨ndig sind. Zu einem Beispiel eines
logischen Anfrageplans fu¨r ein RecSys haben wir eine
beispielhafte Umsetzung durch einen physischen Anfrageplan
gezeigt und die Umsetzung und deren Alternativen diskutiert.
Unser Konzept haben wir durch eine Implementierung in
dem DSMS Odysseus und dem Vergleich der
Evaluationsergebnisse mit MOA validiert.</p>
      <p>
        Um die Praxistauglichkeit nachzuweisen, soll das Konzept
in Zukunft unter realen Bedingungen, z. B. in einem Living
Lab wie Newsreel2 [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], evaluiert werden. Dazu stehen
insbesondere die fu¨r den Datenstromkontext wichtige
Parameter Latenz, Durchsatz und Speicheranforderungen im
Vordergrund. Des Weiteren sollen weitere Algorithmen fu¨r die
Empfehlungen und die Evaluation (z. B. Ranking-basierte
Methoden) implementiert werden.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Ali</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. C.</given-names>
            <surname>Johnson</surname>
          </string-name>
          , and
          <string-name>
            <given-names>A. K.</given-names>
            <surname>Tang</surname>
          </string-name>
          .
          <article-title>Parallel collaborative filtering for streaming data</article-title>
          . University of Texas Austin,
          <source>Tech. Rep</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>H.-J.</given-names>
            <surname>Appelrath</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Geesen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Grawunder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Michelsen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Nicklas</surname>
          </string-name>
          .
          <article-title>Odysseus: A highly customizable framework for creating efficient event stream management systems</article-title>
          .
          <source>In DEBS'12</source>
          , pages
          <fpage>367</fpage>
          -
          <lpage>368</lpage>
          . ACM,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>A.</given-names>
            <surname>Arasu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Babu</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Widom</surname>
          </string-name>
          .
          <article-title>The CQL continuous query language: semantic foundations and query execution</article-title>
          .
          <source>VLDB Journal</source>
          ,
          <volume>15</volume>
          (
          <issue>2</issue>
          ):
          <fpage>121</fpage>
          -
          <lpage>142</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>B.</given-names>
            <surname>Babcock</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Babu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Datar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Motwani</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Widom</surname>
          </string-name>
          .
          <article-title>Models and issues in data stream systems</article-title>
          .
          <source>In PODS 2002</source>
          , pages
          <fpage>1</fpage>
          -
          <lpage>16</lpage>
          . ACM,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bifet</surname>
          </string-name>
          , G. Holmes,
          <string-name>
            <given-names>R.</given-names>
            <surname>Kirkby</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Pfahringer</surname>
          </string-name>
          . MOA:
          <article-title>Massive online analysis</article-title>
          .
          <source>The Journal of Machine Learning Research</source>
          ,
          <volume>11</volume>
          :
          <fpage>1601</fpage>
          -
          <lpage>1604</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>B.</given-names>
            <surname>Chandramouli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. J.</given-names>
            <surname>Levandoski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Eldawy</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M. F.</given-names>
            <surname>Mokbel</surname>
          </string-name>
          .
          <article-title>StreamRec: A Real-time Recommender System</article-title>
          .
          <source>In SIGMOD'11</source>
          , pages
          <fpage>1243</fpage>
          -
          <lpage>1246</lpage>
          . ACM,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>E.</given-names>
            <surname>Diaz-Aviles</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Drumond</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Schmidt-Thieme</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Nejdl</surname>
          </string-name>
          .
          <article-title>Real-Time Top-N Recommendation in Social Streams</article-title>
          .
          <source>In ACM RecSys</source>
          , pages
          <fpage>59</fpage>
          -
          <lpage>66</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>J.</given-names>
            <surname>Gama</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Zliobaite</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biefet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Pechenizkiy</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Bouchachia</surname>
          </string-name>
          .
          <article-title>A Survey on Concept Drift Adaptation</article-title>
          . ACM Comp. Surveys,
          <volume>1</volume>
          (
          <issue>1</issue>
          ),
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>F.</given-names>
            <surname>Hopfgartner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Kille</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Lommatzsch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Plumbaum</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Brodt</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Heintz</surname>
          </string-name>
          .
          <article-title>Benchmarking news recommendations in a living lab</article-title>
          .
          <source>In CLEF'14, LNCS</source>
          , pages
          <fpage>250</fpage>
          -
          <lpage>267</lpage>
          . Springer Verlag,
          <year>09 2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>X.</given-names>
            <surname>Luo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Xia</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Q.</given-names>
            <surname>Zhu</surname>
          </string-name>
          .
          <article-title>Incremental collaborative filtering recommender based on regularized matrix factorization</article-title>
          .
          <source>Knowledge-Based Systems</source>
          ,
          <volume>27</volume>
          :
          <fpage>271</fpage>
          -
          <lpage>280</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>G.</given-names>
            <surname>Taka</surname>
          </string-name>
          <article-title>´cs, I. Pila´szy, B</article-title>
          . N´emeth, and
          <string-name>
            <given-names>D.</given-names>
            <surname>Tikk</surname>
          </string-name>
          .
          <article-title>Scalable collaborative filtering approaches for large recommender systems</article-title>
          .
          <source>The Journal of Machine Learning Research</source>
          ,
          <volume>10</volume>
          :
          <fpage>623</fpage>
          -
          <lpage>656</lpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>