2016-06-24 15 views
1

Ich habe viele Inhaltselemente in der Datenbank gespeichert und weiß, welche Tags ein Benutzer interessiert. Alice zum Beispiel zeigt Interesse an Tags wie "healthcare", "sports" und "social". Jedes Inhaltselement enthält ein oder mehrere Tags. Wie würde ich diese anpassen, um Alice neue Inhalte zu empfehlen?Übereinstimmen von Benutzerinteressen mit Inhalt (basierend auf Tags)

Betrachten Sie diese grundlegenden Datenbanktabellen:

CREATE TABLE `content_tag` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `item_id` INT(11) NOT NULL, 
    `tag_id` INT(11) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `tag` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

Und ich habe Alice Interessen neben einer (Relevanz) Partitur, die wie Gewichte wirken:

array:3 [ 
    'healthcare' => 2.20 
    'sports' => 1.30 
    'socal' => 0.5 
] 

Wie würden Sie diesen Ansatz?

Gibt es eine Möglichkeit, einen Algorithmus dafür zu verwenden, wie die Kosinus-Simularität, oder ist dies nur für Sätze gedacht?

+0

Was haben Sie bisher versucht? Wird der Score als "Gewicht" beim Sortieren der Ergebnisse fungieren? –

+1

Sie können die Funktion [FIELD] (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_field) von MySQL auschecken (für eine benutzerdefinierte Sortierung basierend auf der Interessenbewertung). Es sollte auch in einem ORDER BY funktionieren. –

+0

@MagnusEriksson Die 'FIELD' Funktion sieht sehr vielversprechend aus. Ich werde das untersuchen. – JasonK

Antwort

2

Sie können Ähnlichkeiten zwischen Alice und Elementen finden und sie dann sortieren. Daher werden die meisten ähnlichen n Elemente empfohlen.

Eine der Ähnlichkeitsmetriken ist Kosinusähnlichkeit (wie Sie vorschlagen) und funktioniert wie folgt;

Für jedes Element können Sie einen Vektor mithilfe von Tags erstellen. Soweit ich verstehe, haben Ihre Artikel keine Scores, so dass die Werte der Itemvektoren 0 oder 1 sind. Jeder Wert repräsentiert ein Tag für den bestimmten Gegenstand.

Artikeldarstellung;

[0,0,1,1,0,0] -> Sagen wir, der erste Wert steht für "Healthcare", der zweite für Sport und der letzte Tag für Tag5. Dieser Artikel hat kein tag5, also ist sein Wert

Und Benutzer haben auch Vektoren, die Artikeln ähnlich ist. Zum Beispiel ist Alice Vektor; [2.20,1.30,0.5,0,0,0]

Nach Vektoren Erstellen Sie Ähnlichkeit berechnen kann (zB durch Kosinusähnlichkeit verwenden.)

anzumerken, dass Größe jedes Benutzers und Positionsvektoren ist gleich zur Anzahl aller Tags im System. In diesem Beispiel gibt es 6 eindeutige Tags im System.

+0

@JasonK Ich hoffe, es funktioniert für Sie – mokarakaya