Bigramme
Hat wirklich niemand eine Idee, wie ich das eine Dictionary mit den anderen 10 abgleichen kann und dann ausgeben kann, mit welchem Dictionary das eine die meisten Übereinstimmungen hat?
@desperation63: Du musst Dir halt eine Methode ausdenken/auswählen die auf dieses Problem bezogen am besten den ”Abstand” zwischen zwei Dictionaries auf eine Zahl abbilden kann. Man könnte die beiden Dictionaries zum Beispiel ”voneinander abziehen”, die Werte als Vektor auffassen, und die Länge beziehungsweise den Betrag davon berechnen.
@desparation63: Vielleicht wäre es einfacher, wenn du verraten könntest, um welchen Text, den du im Eingagspost erwähntest, es sich handelt. Willst du tatsächlich nur das Dictionary mit der größten Schnittmenge? Weshalb berechnest du dann Häufigkeiten?
Ein anderes Verfahren ist basiert bespielsweise darauf, dass man die N-Gramm-Häufigkeiten für jede Kategorie berechnet und in eine Rangfolge bringt. Vergleiche funktionieren dann darüber, dass man die Rangfolgenunterschiede aufsummiert und diejenige Kategorie mit der geringsten Abweichung wählt.
Ein anderes Verfahren ist basiert bespielsweise darauf, dass man die N-Gramm-Häufigkeiten für jede Kategorie berechnet und in eine Rangfolge bringt. Vergleiche funktionieren dann darüber, dass man die Rangfolgenunterschiede aufsummiert und diejenige Kategorie mit der geringsten Abweichung wählt.
@nezzcarth
Das mit den Häufigkeiten hab ich wieder rausgenommen. Der Text an sich ist eig erstmal egal. Ich hab da einfach einen kurzen Beispieltext genommen den ich hier rumfliegen hatte.
Ich habe jetzt erstmal die Schnittmengen von allen Profilen mit dem einen Vergleichsprofil gebildet. Wie gebe ich nun am besten das mit der größten Schnittmenge aus?
Dein Vorschlag hört sich interessant aber sehr kompliziert an. Wie könnte man sowas denn realisieren?
Das mit den Häufigkeiten hab ich wieder rausgenommen. Der Text an sich ist eig erstmal egal. Ich hab da einfach einen kurzen Beispieltext genommen den ich hier rumfliegen hatte.
Ich habe jetzt erstmal die Schnittmengen von allen Profilen mit dem einen Vergleichsprofil gebildet. Wie gebe ich nun am besten das mit der größten Schnittmenge aus?
Dein Vorschlag hört sich interessant aber sehr kompliziert an. Wie könnte man sowas denn realisieren?
Das Stichwort lautet Information Retrieval, in deinem Fall würde sich zunächst mal das Vector Space Model anbieten. Das lässt sich leicht und schnell implementieren. Gehe einfach mal die Wikipedia-Seite zu IR durch und arbeite dich ein wenig ein.
Das Leben ist wie ein Tennisball.
Werde ich mal machen.EyDu hat geschrieben:Das Stichwort lautet Information Retrieval, in deinem Fall würde sich zunächst mal das Vector Space Model anbieten. Das lässt sich leicht und schnell implementieren. Gehe einfach mal die Wikipedia-Seite zu IR durch und arbeite dich ein wenig ein.
Könnte mir vorab jemand einen Tipp geben, wie ich jetzt herausfinde welches der 3 Profile die größte Schnittmenge hat? Ich habe die Profile bereits alle mit dem zu vergleichenden Profil mittels set-Operationen auf die Schnittmengen untersucht.
Ich habe mir nun die Sachen über das vector space model angeschaut. Das ist genau das was ich suche. Kann mir da jemand vllt einen Ansatz geben, wie ich das umsetzen kann?
Auf Wikipedia stehen doch die exakten Formeln, die musst du einfach nur umsetzen. Das ist tatsächlich so einfach wie es aussieht. Am besten fängst du mit dem Applications-Abschnitt an und setzt das Gewicht eines Wortes auf 1 wenn es vorkommt und auf 0 wenn nicht. Die tf-idf-Gewichte kannst du später nachträglich einbauen.
Das Leben ist wie ein Tennisball.
Du schriebst im Eingangspost, dass du einen Text über Textklassifizierung gelesen hättest; ich hatte daher vermutet, dass dort eine Methode beschrieben wird, die du umsetzen möchtest.desperation63 hat geschrieben: Das mit den Häufigkeiten hab ich wieder rausgenommen. Der Text an sich ist eig erstmal egal. Ich hab da einfach einen kurzen Beispieltext genommen den ich hier rumfliegen hatte.
Ich habe jetzt erstmal die Schnittmengen von allen Profilen mit dem einen Vergleichsprofil gebildet. Wie gebe ich nun am besten das mit der größten Schnittmenge aus?
Dein Vorschlag hört sich interessant aber sehr kompliziert an. Wie könnte man sowas denn realisieren?
Die zweite Frage hat sich ja nun erledigt, da du einen geeigenten anderen Ansatz gefunden hast, denke ich
Ich wäre nach wie vor daran interessiert deinen Ansatz zu sehen, da ich mit dem von EyDu noch einige Probleme habe und es nicht so einfach finde, wie er sagt. Vielleicht ist deine Idee einfacher in mein bestehendes Programm zu implementieren.nezzcarth hat geschrieben:Du schriebst im Eingangspost, dass du einen Text über Textklassifizierung gelesen hättest; ich hatte daher vermutet, dass dort eine Methode beschrieben wird, die du umsetzen möchtest.desperation63 hat geschrieben: Das mit den Häufigkeiten hab ich wieder rausgenommen. Der Text an sich ist eig erstmal egal. Ich hab da einfach einen kurzen Beispieltext genommen den ich hier rumfliegen hatte.
Ich habe jetzt erstmal die Schnittmengen von allen Profilen mit dem einen Vergleichsprofil gebildet. Wie gebe ich nun am besten das mit der größten Schnittmenge aus?
Dein Vorschlag hört sich interessant aber sehr kompliziert an. Wie könnte man sowas denn realisieren?
Die zweite Frage hat sich ja nun erledigt, da du einen geeigenten anderen Ansatz gefunden hast, denke ich
Des Weiteren entspricht dein Vorschlag genau meiner Idee, die ich im Kopf rumschwirren habe, wie das Programm funktionieren soll.
Wäre wirklich super, wenn du mal einen Ansatz zu deiner Idee geben könntest
Wie willst du denn einen noch einfacheren Ansatz als das Skalarprodukt von zwei Vektoren? Das ist billigste Mathematik. Noch einfacher geht es überhaupt nicht. Das Vektorraummodell ist eines der Standardverfahren im IR, da gibt es Tonnen an Material, Erklärungen und Tutorials zu. Gerade weil es so einfach und effektiv ist.desperation63 hat geschrieben:Ich wäre nach wie vor daran interessiert deinen Ansatz zu sehen, da ich mit dem von EyDu noch einige Probleme habe und es nicht so einfach finde, wie er sagt. Vielleicht ist deine Idee einfacher in mein bestehendes Programm zu implementieren.
Das Leben ist wie ein Tennisball.
EyDu hat geschrieben:Wie willst du denn einen noch einfacheren Ansatz als das Skalarprodukt von zwei Vektoren? Das ist billigste Mathematik. Noch einfacher geht es überhaupt nicht. Das Vektorraummodell ist eines der Standardverfahren im IR, da gibt es Tonnen an Material, Erklärungen und Tutorials zu. Gerade weil es so einfach und effektiv ist.desperation63 hat geschrieben:Ich wäre nach wie vor daran interessiert deinen Ansatz zu sehen, da ich mit dem von EyDu noch einige Probleme habe und es nicht so einfach finde, wie er sagt. Vielleicht ist deine Idee einfacher in mein bestehendes Programm zu implementieren.
Das Prinzip an sich versteh ich ja, aber ich finde keinen Ansatz wie ich das in Python umsetze. Und ich hab ja auch schon ein bestehendes Programm und ich weiß nicht wieviel ich verändern muss um das vektorraummodell dort einzubauen. Könntest du eventuell einen kleinen Code hier reinschreiben? Vielleicht komm ich dann drauf
Wenn du das Verfahren verstanden hast, dann ist die Implementierung doch einfach. Wenn du zwei Dokumente (oder eine Anfage mit einem Dokument) vergleichen willst, dann musst du die Terme raussuchen, welche in beiden Mengen vorhanden sind. Fertig. Wo ist denn da momentan dein Problem?
Das Leben ist wie ein Tennisball.
ich habe jetzt bspw. aus 2 Texten alle Bi und Trigramme rausgefiltert und diese gezählt und sortiert als Dictionary. Kann ich mit diesen beiden Dictionaries das Skalarprodukt berechnen?EyDu hat geschrieben:Wenn du das Verfahren verstanden hast, dann ist die Implementierung doch einfach. Wenn du zwei Dokumente (oder eine Anfage mit einem Dokument) vergleichen willst, dann musst du die Terme raussuchen, welche in beiden Mengen vorhanden sind. Fertig. Wo ist denn da momentan dein Problem?
Und wie soll ich das Skalarprodukt in python mit zwei verschieden langen vektoren berechnen?
Das sind so die probleme die ich habe.
Edit: Falls die N-Gramme der Texte in Listen vorliegen müssen ist das auch kein problem
Das Problem ist nur, dass die Listen bzw. Dicts verschiedene Längen haben. Und ein Skalarprodukt kann ich ja nur mit 2 gleichlangen Vektoren berechnen.
Ja, du musst einfach nur die Schnittmenge der Schlüssel bestimmen. Ich nehme mal an, dass du als Schlüssel den Term/das Bigram hast. Nur deren Gewichte musst du beachten.desperation63 hat geschrieben:ich habe jetzt bspw. aus 2 Texten alle Bi und Trigramme rausgefiltert und diese gezählt und sortiert als Dictionary. Kann ich mit diesen beiden Dictionaries das Skalarprodukt berechnen?
Die sind doch nicht verschieden lang. Du kennst doch alle möglichen Terme.desperation63 hat geschrieben:Und wie soll ich das Skalarprodukt in python mit zwei verschieden langen vektoren berechnen?
Erstell dir doch einfach mal zwei Dokumentenvektoren und gehe das von Hand durch.
Das Leben ist wie ein Tennisball.
EyDu hat geschrieben:Ja, du musst einfach nur die Schnittmenge der Schlüssel bestimmen. Ich nehme mal an, dass du als Schlüssel den Term/das Bigram hast. Nur deren Gewichte musst du beachten.desperation63 hat geschrieben:ich habe jetzt bspw. aus 2 Texten alle Bi und Trigramme rausgefiltert und diese gezählt und sortiert als Dictionary. Kann ich mit diesen beiden Dictionaries das Skalarprodukt berechnen?
Die sind doch nicht verschieden lang. Du kennst doch alle möglichen Terme.desperation63 hat geschrieben:Und wie soll ich das Skalarprodukt in python mit zwei verschieden langen vektoren berechnen?
Erstell dir doch einfach mal zwei Dokumentenvektoren und gehe das von Hand durch.
Schnittmenge:
Code: Alles auswählen
Schnittmenge = set(vorhandenes_profil_final.keys()) & set(neues_profil_final.keys())
Ich kenne mich da nicht so gut aus, habe aber ebenfalls den Eindruck, dass das von EyDu beschriebene Vorgehen einfacher ist. Was ich meinte wird in einer "klassischen" Variante zum Beispiel hier beschrieben, ist m.M.n. aber weniger generell auf verschiedene Dinge anwendbar, als das angesprochene Vektormodell; es dient eben primär der Kategorisierung nach Dokumentensprachen unter Rückgriff auf das Zipf'sche Gesetz, auch wenn man damit thematische Klassifizierungen vornehmen kann. Ich weiß auch nicht, inwiefern dieser Ansatz von 1994 heute noch zeitgemäß ist...desperation63 hat geschrieben: Des Weiteren entspricht dein Vorschlag genau meiner Idee, die ich im Kopf rumschwirren habe, wie das Programm funktionieren soll.
Wäre wirklich super, wenn du mal einen Ansatz zu deiner Idee geben könntest
Das ist genau der Text den ich auch gelesen habe. Dieses Verfahren meine ich. Hast du eine Idee wie man das umsetzen könnte?nezzcarth hat geschrieben:Ich kenne mich da nicht so gut aus, habe aber ebenfalls den Eindruck, dass das von EyDu beschriebene Vorgehen einfacher ist. Was ich meinte wird in einer "klassischen" Variante zum Beispiel hier beschrieben, ist m.M.n. aber weniger generell auf verschiedene Dinge anwendbar, als das angesprochene Vektormodell; es dient eben primär der Kategorisierung nach Dokumentensprachen unter Rückgriff auf das Zipf'sche Gesetz, auch wenn man damit thematische Klassifizierungen vornehmen kann. Ich weiß auch nicht, inwiefern dieser Ansatz von 1994 heute noch zeitgemäß ist...desperation63 hat geschrieben: Des Weiteren entspricht dein Vorschlag genau meiner Idee, die ich im Kopf rumschwirren habe, wie das Programm funktionieren soll.
Wäre wirklich super, wenn du mal einen Ansatz zu deiner Idee geben könntest
Ja, so bekommst du die Schnittmenge. Die Gewichte kannst du dir nun "beliebig" ausdenken. Die Einfachste Möglichkeit wäre es, wenn du die Länge der Schnittmenge nimmst. Das ignoriert natürlich die Anzahl der Vorkommnisse der Terme.desperation63 hat geschrieben:wäre das so richtig mit der Schnittmenge? Wie genau beachte ich die Gewichte?
Alternativ kannst du die Anzahl der Werte aus Dokument 1 und Dokument 2 für den selben Term multiplizieren oder aber deren Differenz bilden. Hier musst du aber vorsichtig sein, denn du musst unbedingt normieren!
Ich würde tf-idf implementieren, das liefert häufig gute Ergebnisse. Am besten probierst du alle Varianten mal durch und schaust welches Verfahren für dich die besten Ergebnisse liefert. Wenn du das Verfahren einmal allgemein geschrieben hast, dann lässt sich ja schnell ein anderes Gewicht ausprobieren.
Das Leben ist wie ein Tennisball.
Das mit den Gewichten verstehe ich noch nicht so ganz. Könntest du mir das einmal genauer erklären?EyDu hat geschrieben:Ja, so bekommst du die Schnittmenge. Die Gewichte kannst du dir nun "beliebig" ausdenken. Die Einfachste Möglichkeit wäre es, wenn du die Länge der Schnittmenge nimmst. Das ignoriert natürlich die Anzahl der Vorkommnisse der Terme.desperation63 hat geschrieben:wäre das so richtig mit der Schnittmenge? Wie genau beachte ich die Gewichte?
Alternativ kannst du die Anzahl der Werte aus Dokument 1 und Dokument 2 für den selben Term multiplizieren oder aber deren Differenz bilden. Hier musst du aber vorsichtig sein, denn du musst unbedingt normieren!
Ich würde tf-idf implementieren, das liefert häufig gute Ergebnisse. Am besten probierst du alle Varianten mal durch und schaust welches Verfahren für dich die besten Ergebnisse liefert. Wenn du das Verfahren einmal allgemein geschrieben hast, dann lässt sich ja schnell ein anderes Gewicht ausprobieren.
Wie würde ich jetzt bei bspw. 3 verschiedenen Schnittmengen nur die längste ausgeben lassen? Hab irgendwie ne Blockade im Kopf gerade.