Zum Inhalt springen

Empfehlungssysteme Open Source


Winfo

Empfohlene Beiträge

Ich suche nach einem einfachen nicht zu komplexen Empfehlungssystem (Recommender Systems) das in der Lage ist anhand der Bewertungen die der User abgibt (Benutzer Bewerten Bilder), weitere Empfehlungen abzugeben. BSP: Benutzer bewertet ein Foto mit 5 Sternen , das nächste Bild mit 3 Sternen, dann soll das Empfehlungssystem neue Fotos bereitstellen die zu dem Benutzer passen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie SilentDemise sagte... Es gibt mittlerweile Techniken und Best-Practices, mit denen man mit durchaus wenig Aufwand eine relativ umfangreiche Ergebnisliste bekommt.

Falls du Google zu umständlich oder wirr findest, wird das sicherlich der ein oder andere im Forum für dich übernehmen. Für solche Dienstleistungen wird man allerdings eine gewisse monetäre Gegenleistung verlangen.

Niemand wird (kostenlos) deine Hausaufgaben machen. Wenn du spezielle Fragen hast, hilft man dir jedoch gern. Das erfordert allerdings eine gewisse eigenverantwortliche Vorleistung.

Deine (momentane) Eigenleistung beschränkt sich jedoch auf ein "ich will".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die hilfreichen Antworten ;) ich wollte eigentlich nur wissen welchen Algo man braucht und ob es dafür schon Klassen in Java gibt aber nach einiger Suche hab ich gesehn das ich dafür einen "Item based Callobaritve Algorithmus" benötige und dies genau auf meine Problemstellung passt.

Bearbeitet von Winfo
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also die Fotos besitzen als Objekt die Attribute Title, Tags ...., wenn nun ein Foto mit 5 Sternen vergeben wird und ein anderes mit 3 Sternen dann soll der Algorithmus anhand der Attribute ein Foto vorschlagen das zu den vergegeben Bewertungen passt

Bearbeitet von Winfo
Link zu diesem Kommentar
Auf anderen Seiten teilen

Da das hier im Java Forum ist, erst einmal folgendes: Um solche Systeme zu implementieren brauchst Du numerische Methoden (z.B. SVD), mir ist keine native Java Bibliothek, die das kann, bekannt. Zusätzlich hast Du bei solchen Algorithmen sehr große Datenmengen, NxM dimensionale sparse Matrizen, die entsprechend verarbeitet werden müssen. Der Ansatz zum "Collaborative Filtering" ist schon der richtige, je nach Daten muss natürlich noch eine entsprechende Vorverarbeitung machen bzw. man geht über in "clustering colloborativ filtering" bz "co-clustering"

Generell der naive Ansatz nach den Bewertungen zu beurteilen wird nicht gut funktionieren, da die Bewertung pro User immer individuell ist und man eben gegen die userspezifische Bewertung normalisieren muss. Zusätzlich kannst Du Daten (Fotos), die noch keine Bewertungen haben nicht direkt verarbeiten, denn Du musst hier algorithmisch die Frage stellen "wie würde User X das noch nicht bewertete Foto Y bewerten". Das Problem ergibt sich aus der mathematischen Formulierung, denn mit einem Null-Element in Deiner Datenmatrix kannst Du nichts anfangen.

Ich entwickle zurzeit unter anderem ein solches Framework (LGPL Lizenz), nicht für Java, da Java diese Datenmengen nicht mehr effizient verarbeiten kann, sondern für C++ (in C++ kann ich numerische / mathematische Bibliotheken wie LAPack oder ATLAS verwenden). Natürlich kannst Du mit Hilfe von JNI die entsprechenden C++ Routinen aufrufen. Ein fertiges System mit dem gewünschten Umfang ist mir aber nicht bekannt.

Bearbeitet von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antworten da komm ich meinen Ideen schon etwas näher :) ich möchte das mit mehreren Hashmaps realisieren ( eine besteht aus einer eindeutigen PhotoID, UserID und Bewertungszahl in float) Diese wird nach und nach mit den Bewertungen gefüllt pro Foto. Dann wird diese Matrix erzeugt und die Differenz berechnet. Bei Abgabe weiterer Bewertungen wird werden weitere Hashmaps benötigt die das Ergebnis von Matrix 1 übergeben. Dann wird mit einer Matrixfunktion nur die Einträge miteinander vergleichen die >1 sind und schon Bewertungen zu abgegeben wurden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Vorgehen in allen Ehren, aber naiv das ganze zu machen funktioniert nicht, da Du einmal eine dünnbesetzte Datenstruktur + extrem schnell wachsende Datenmenge verarbeitet werden müssen. Wenn ein neues Foto eingestellt wird, muss Deine Matrix eine neue Spalte (oder Zeile) bekommen, analog für einen neuen User (Anzahl User mal Anzahl Bilder).

Eine einfache Differenzbildung funktioniert nicht, denn was sagt sie aus? Vor allen was passiert bei den Einträge die Null sind? Außerdem muss man berücksichtigen, wie ein User im Mittel bewertet, es gibt allgemein User, die sehr gut und andere sehr schlecht bewerten. Man muss die User entsprechend der Bewertung normalisieren.

Wenn z.B. ein User ein Foto nicht bewertet hat, kannst Du dieses nicht in das Ranking aufnehmen, denn die Einträge sind 0. Im Realbetrieb hat man das häufig, die User bewerten nur ihre Daten und nicht andere, aber genau auf diese nicht bewerteten Daten musst Du Rückschlüsse ziehen. Außerdem lassen sich Korrelationen, die man bei der Analyse braucht, mir kleinen Datenmengen überhaupt nicht sinnvoll berechnen, weil sie zu Null bzw NaN werden. Hashmaps als Datenstruktur sind extrem langsam, wie schon gesagt dünnbesetzte Matrizen sind eigentlich die primär eingesetzte Datenstruktur.

Eine naives Vorgehen wird nicht funktionieren. Ebenso ist Java für diese Datenstrukturen eine schlechte Wahl, da die Datenmenge sehr schnell wächst und man diese numerisch / vektoriell verarbeiten muss. Ich empfehle hier sich wirklich mit den genannten Verfahren + die dafür benötigte Mathematik zu befassen, damit das System auch stabil und zuverlässig funktioniert

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...