Bigramme

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
desperation63

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?
BlackJack

@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.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

@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.
desperation63

@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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
desperation63

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.
Werde ich mal machen.

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.
desperation63

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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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?
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.

Die zweite Frage hat sich ja nun erledigt, da du einen geeigenten anderen Ansatz gefunden hast, denke ich :)
desperation63

nezzcarth hat geschrieben:
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?
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.

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.

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
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.
Das Leben ist wie ein Tennisball.
desperation63

EyDu hat geschrieben:
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.
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.

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
desperation63

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?
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?

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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?
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:Und wie soll ich das Skalarprodukt in python mit zwei verschieden langen vektoren berechnen?
Die sind doch nicht verschieden lang. Du kennst doch alle möglichen Terme.

Erstell dir doch einfach mal zwei Dokumentenvektoren und gehe das von Hand durch.
Das Leben ist wie ein Tennisball.
desperation63

EyDu hat geschrieben:
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?
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:Und wie soll ich das Skalarprodukt in python mit zwei verschieden langen vektoren berechnen?
Die sind doch nicht verschieden lang. Du kennst doch alle möglichen Terme.

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())
wäre das so richtig mit der Schnittmenge? Wie genau beachte ich die Gewichte?
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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
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

nezzcarth hat geschrieben:
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
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...
Das ist genau der Text den ich auch gelesen habe. Dieses Verfahren meine ich. Hast du eine Idee wie man das umsetzen könnte?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

desperation63 hat geschrieben:wäre das so richtig mit der Schnittmenge? Wie genau beachte ich die Gewichte?
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.

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.
desperation63

EyDu hat geschrieben:
desperation63 hat geschrieben:wäre das so richtig mit der Schnittmenge? Wie genau beachte ich die Gewichte?
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.

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 mit den Gewichten verstehe ich noch nicht so ganz. Könntest du mir das einmal genauer erklären?

Wie würde ich jetzt bei bspw. 3 verschiedenen Schnittmengen nur die längste ausgeben lassen? Hab irgendwie ne Blockade im Kopf gerade.
Antworten