Keyword Research: Semantische Keyword Tools (Beispiel)

In meinem letzten Beitrag habe ich die grundsätzliche Funktionsweise semantischer Keyword Tools beschrieben. Ziel dieser Tools ist es, aus wenigen initialen Begriffen eine große Menge semantisch verwandter Begriffe zu erzeugen, die im Aggregat ein hohes Suchvolumen erzeugen und jeweils möglichst günstige Klickpreise vorweisen können. In diesem Beitrag möchte ich nun versuchen, das recht komplexe Verfahren an einem kleinen Beispiel zu veranschaulichen. Die einzelnen Auswertungen erfolgten unter Verwendung eines kleinen selbstgeschriebenen Perl-Programms.

Für die englischen Begriffe pig, pork, beef und vegetable wurde jeweils eine Suche in Google durchgeführt und die kurze Inhaltsangabe der ersten zwei bzw. drei Treffer wurde als Dokument für die weitere Berechnung herangezogen. Die Ergebnisse werden bei längeren Dokumenten wesentlich besser. Darauf wurde aber aufgrund der Nachvollziehbarkeit und Übersichtlichkeit verzichtet. Die Suche erfolgte für englische Begriffe – ebenso wurden nur englische Ergebnisseiten berücksichtigt – da es für die englische Sprache den Porter Stemmer vorimplementiert gibt, der Begriffe auf ihren Wortstamm zurückführt, um z.B. Pluralendungen zu vernachlässigen.

Allgemeines Vorgehen

Das allgemeine Vorgehen zum Erstellen des repräsentativen Beschreibungsvektors für einen konkreten Suchbegriff sieht folgendermaßen aus (die z.T. etwas technische Beschreibung wird gleich darauf anhand eines Beispiels ausführlich vorgeführt):

  • Suchanfrage bei einem Suchmaschinenanbieter nach dem konkreten Begriff x stellen
  • Sei R(x) die Menge der (maximal) n Ergebnisseiten d_1, d_2, …, d_n
  • Berechne für jede Ergebnisseite d_i aus R(x) einen TFIDF Vektor v_i
  • Schränke jeden Vektor v_i auf die m am höchsten bewerteten Begriffe ein
  • Berechne den Durchschnitt der normierten Vektoren v_i (euklidische Norm)
  • Normiere den gerade berechneten Durchschnitt

Berechnung am Beispiel pig

Anhand der Ergebnisdokumente für den Suchbegriff pig wird ein repräsentativer Beschreibungsvektor für eben diesen Suchbegriff im Folgenden berechnet. Eine Suchanfrage bei Google nach dem Begriff pig lieferte die folgende Ergebnisliste:

Ergebnisliste für Suchanfrage pig in Google

Die Kurzbeschreibungen der ersten beiden Treffer dienen als Ergebnisseiten für die anschließenden Berechnungen:

  • A pig has a snout for a nose, small eyes, and a small tail, which may be curly, kinked, or straight. It has a thick body and short legs. …
  • Its animal representation is the Pig. In Chinese culture, the pig is associated with fertility and virility. To bear children in the year of the pig …

Die Menge R(x) besteht im Beispiel also aus den obigen beiden Dokumenten.

Was ist ein TFIDF Vektor und wie berechnet man diesen?

Ein TFIDF Vektor ordnet jedem einzelnen Begriff eines Dokuments ein Gewicht zu. Die Höhe dieses Wertes gibt an, wie relevant der Begriff bzgl. des Dokuments und der Menge der untersuchten Dokumente ist. Dabei spielen zwei Faktoren eine Rolle. Zum einen die Häufigkeit des Begriffes im gerade untersuchten Dokument (lokale Sicht, entspricht dem tf = term frequency) und in wie vielen der untersuchten Dokumente der Begriff überhaupt (globale Sicht, idf = inverse document frequency) vorkommt. Die genaue Formel lautet:

w_(t,i) = tf_(t,i) * log(D / df_t)

Dabei entspricht tf_(t,i) der Anzahl der Vorkommen des Begriffes t im Dokument d_i. Der Wert df_t gibt an, in wie vielen Dokumenten aus R(x) der Begriff t vorkommt und D ist die Anzahl der Dokumente in R(x). Die globale Sicht stellt sicher, dass Worte, die in allen Dokumenten vorkommen, mit einem sehr kleinen Gewicht gewertet werden. Damit wird sichergestellt, dass sog. Stopwörter wie und, der usw. nicht zu stark in die Bewertung miteinfließen.

Für unser konkretes Beispiel ergibt sich folgende Tabelle:

term tf_(t,D_1) tf_(t,D_2) df_t D/df_t IDF_t w_(t,D_1) w_(t,D_2)
a 5 0 1 2 0,3010 1,5051 0,0000
and 2 1 2 1 0,0000 0,0000 0,0000
animal 0 1 1 2 0,3010 0,0000 0,3010
associated 0 1 1 2 0,3010 0,0000 0,3010
be 1 0 1 2 0,3010 0,3010 0,0000
bear 0 1 1 2 0,3010 0,0000 0,3010
body 1 0 1 2 0,3010 0,3010 0,0000
children 0 1 1 2 0,3010 0,0000 0,3010
chinese 0 1 1 2 0,3010 0,0000 0,3010
culture 0 1 1 2 0,3010 0,0000 0,3010
curly 1 0 1 2 0,3010 0,3010 0,0000
eyes 1 0 1 2 0,3010 0,3010 0,0000
fertility 0 1 1 2 0,3010 0,0000 0,3010
for 1 0 1 2 0,3010 0,3010 0,0000
has 2 0 1 2 0,3010 0,6021 0,0000
in 0 2 1 2 0,3010 0,0000 0,6021
is 0 2 1 2 0,3010 0,0000 0,6021
it 1 0 1 2 0,3010 0,3010 0,0000
its 0 1 1 2 0,3010 0,0000 0,3010
kinked 1 0 1 2 0,3010 0,3010 0,0000
legs 1 0 1 2 0,3010 0,3010 0,0000
may 1 0 1 2 0,3010 0,3010 0,0000
nose 1 0 1 2 0,3010 0,3010 0,0000
of 0 1 1 2 0,3010 0,0000 0,3010
or 1 0 1 2 0,3010 0,3010 0,0000
pig 1 3 2 1 0,0000 0,0000 0,0000
representation 0 1 1 2 0,3010 0,0000 0,3010
short 1 0 1 2 0,3010 0,3010 0,0000
small 2 0 1 2 0,3010 0,6021 0,0000
snout 1 0 1 2 0,3010 0,3010 0,0000
straight 1 0 1 2 0,3010 0,3010 0,0000
tail 1 0 1 2 0,3010 0,3010 0,0000
the 0 4 1 2 0,3010 0,0000 1,2041
thick 1 0 1 2 0,3010 0,3010 0,0000
to 0 1 1 2 0,3010 0,0000 0,3010
virility 0 1 1 2 0,3010 0,0000 0,3010
which 1 0 1 2 0,3010 0,3010 0,0000
with 0 1 1 2 0,3010 0,0000 0,3010
year 0 1 1 2 0,3010 0,0000 0,3010

Hierbei wurden die einzelnen Worte unverändert übernommen. Ignoriert man aber häufige Suffixe, also Wortendungen, und betrachtet nur noch den Wortstamm (Porter Stemmer) ergibt sich das folgende Bild:

term tf_(t,D_1) tf_(t,D_2) df_t D/df_t IDF_t w_(t,D_1) w_(t,D_2)
a 5 0 1 2 0,3010 1,5051 0,0000
and 2 1 2 1 0,0000 0,0000 0,0000
anim 0 1 1 2 0,3010 0,0000 0,3010
associ 0 1 1 2 0,3010 0,0000 0,3010
be 1 0 1 2 0,3010 0,3010 0,0000
bear 0 1 1 2 0,3010 0,0000 0,3010
bodi 1 0 1 2 0,3010 0,3010 0,0000
children 0 1 1 2 0,3010 0,0000 0,3010
chines 0 1 1 2 0,3010 0,0000 0,3010
cultur 0 1 1 2 0,3010 0,0000 0,3010
curli 1 0 1 2 0,3010 0,3010 0,0000
ey 1 0 1 2 0,3010 0,3010 0,0000
fertil 0 1 1 2 0,3010 0,0000 0,3010
for 1 0 1 2 0,3010 0,3010 0,0000
ha 2 0 1 2 0,3010 0,6021 0,0000
in 0 2 1 2 0,3010 0,0000 0,6021
is 0 2 1 2 0,3010 0,0000 0,6021
it 1 1 2 1 0,0000 0,0000 0,0000
kink 1 0 1 2 0,3010 0,3010 0,0000
leg 1 0 1 2 0,3010 0,3010 0,0000
mai 1 0 1 2 0,3010 0,3010 0,0000
nose 1 0 1 2 0,3010 0,3010 0,0000
of 0 1 1 2 0,3010 0,0000 0,3010
or 1 0 1 2 0,3010 0,3010 0,0000
pig 1 3 2 1 0,0000 0,0000 0,0000
represent 0 1 1 2 0,3010 0,0000 0,3010
short 1 0 1 2 0,3010 0,3010 0,0000
small 2 0 1 2 0,3010 0,6021 0,0000
snout 1 0 1 2 0,3010 0,3010 0,0000
straight 1 0 1 2 0,3010 0,3010 0,0000
tail 1 0 1 2 0,3010 0,3010 0,0000
the 0 4 1 2 0,3010 0,0000 1,2041
thick 1 0 1 2 0,3010 0,3010 0,0000
to 0 1 1 2 0,3010 0,0000 0,3010
viril 0 1 1 2 0,3010 0,0000 0,3010
which 1 0 1 2 0,3010 0,3010 0,0000
with 0 1 1 2 0,3010 0,0000 0,3010
year 0 1 1 2 0,3010 0,0000 0,3010

Die beiden letzten Spalten geben nun die Gewichtungen der einzelnen Terme in den beiden Dokumenten wieder.

Was macht man nun mit den TDIDF-Vektoren?

Zunächst werden sie auf die Top m (in unserem Beispiel 10) Elemente reduziert. Die folgende Tabelle zeigt das Ergebnis:

term D_1 D_2
a 1,5051
bear 0,3010
bodi 0,3010
children 0,3010
curli 0,3010
ey 0,3010
fertil 0,3010
ha 0,6021
in 0,6021
is 0,6021
of 0,3010
or 0,3010
represent 0,3010
small 0,6021
snout 0,3010
tail 0,3010
the 1,2041
viril 0,3010
which 0,3010
with 0,3010

Für jedes Dokument existiert nun ein eingeschränkter repräsentativer Vektor. Diese Vektoren stellen Richtungen in einem hoch-dimensionalen Raum dar. Dabei steht jeder Begriff für eine einzelne Dimension des Raumes. Um diese Vektoren besser untereinander vergleichen zu können, wird ihre Länge normiert. Anschließend wird aufbauend auf den normierten Vektoren der Durchschnitt berechnet, um für den ursprünglichen Suchbegriff einen repräsentativen Vektor zu gewinnen.

Wie wird ein Vektor normiert? Und was bedeutet das? Wie gerade erwähnt stellen Vektoren Richtungen in einem hoch-dimensionalen Raum dar. Jeder dieser Vektoren hat eine Norm (dies entspricht im geometrischen Sinne der Länge des Vektors). Beim Normieren wird jeder Eintrag des Vektors durch die Norm des Vektors geteilt. Man erhält dadurch einen äquivalenten Vektor mit der Norm 1. Wir verwenden hierbei die Euklidische Norm. Diese entspricht der Länge in der Geometrie.

Wie berechnet man die euklidische Norm eines m-dimensionalen Vektors? Man bildet die Summe der Quadrate der einzelnen Einträge und zieht daraus anschließend die Wurzel. Damit ergeben sich für unsere beiden Beispieldokumente die folgenden Normen:

  • D_1: sqrt(1,5051^2 + 0,3010^2 + … + 0,3010^2) = 1,9039
  • D_2: sqrt(0,3010^2 + 0,3010^2 + … + 0,3010^2) = 1,6761

In der obigen Tabelle wird also jeder Eintrag in der Spalte D_1 durch 1,9039 und in der Spalte D_2 durch 1,6761 geteilt. Damit erhält man den normierten Vektor für jedes einzelne Dokument. Über diese normierten Vektoren wird nun der Durchschnitt gebildet, d.h. alle Vektoren werden addiert und anschließend jeder Vektoreintrag durch die Anzahl der aufaddierten Vektoren geteilt. Der hierbei entstehende Ergebnisvektor kann nun wieder mehr als m Einträge enthalten. Für den Begriff pig ergibt sich somit folgender Durchschnittsvektor:

a 0,3953
bear 0,0898
bodi 0,0791
children 0,0898
curli 0,0791
ey 0,0791
fertil 0,0898
ha 0,1581
in 0,1796
is 0,1796
of 0,0898
or 0,0791
represent 0,0898
small 0,1581
snout 0,0791
tail 0,0791
the 0,3592
viril 0,0898
which 0,0791
with 0,0898

Dieser Vektor wird wiederum normiert. Die Norm ist in diesem Fall 0,7071. Das Ergebnis ist nun der endgültige Repräsentant für den Suchbegriff pig:

a 0.5590
bear 0.1270
bodi 0.1118
children 0.1270
curli 0.1118
ey 0.1118
fertil 0.1270
ha 0.2236
in 0.2540
is 0.2540
of 0.1270
or 0.1118
represent 0.1270
small 0.2236
snout 0.1118
tail 0.1118
the 0.5080
viril 0.1270
which 0.1118
with 0.1270

Die restlichen 3 Suchbegriffe

Als Ausgangsbasis für die restlichen 3 Suchbegriffe dienten die folgenden Ergebnisseiten einer Suchanfrage bei Google.

search beef

search pork

search veg

Die einzelnen Ergebnistexte, die Google bei einem Treffer anzeigt, wurden als Dokumente für die entsprechenden Suchbegriffe interpretiert und mittels des Stemmers auf ihren Wortstamm reduziert.

Vollkommen analog kann man dann entsprechende repräsentative Vektoren für die anderen 3 Suchbegriffe berechnen:

term beef pig pork veg
100 0,0000 0,0000 0,0000 0,1826
a 0,0000 0,5590 0,4249 0,0000
accord 0,1601 0,0000 0,0000 0,0000
and 0,0928 0,0000 0,0000 0,1601
answer 0,0000 0,0000 0,1792 0,0000
barrel 0,0000 0,0000 0,2125 0,0000
base 0,0000 0,0000 0,0000 0,1826
bear 0,0000 0,1270 0,0000 0,0000
beef 0,0000 0,0000 0,1407 0,0000
black 0,1601 0,0000 0,0000 0,0000
board 0,0000 0,0000 0,1792 0,0000
bodi 0,0000 0,1118 0,0000 0,0000
botan 0,0000 0,0000 0,0000 0,1379
bovin 0,1325 0,0000 0,0000 0,0000
breed 0,1601 0,0000 0,0000 0,0000
but 0,0000 0,0000 0,1062 0,0000
cattl 0,0000 0,0000 0,0000 0,0000
children 0,0000 0,1270 0,0000 0,0000
commonli 0,0000 0,0000 0,1062 0,0000
consum 0,0000 0,0000 0,1407 0,0000
content 0,0000 0,0000 0,0000 0,1826
contradict 0,0000 0,0000 0,0000 0,1869
cook 0,2514 0,0000 0,0000 0,0000
count 0,0000 0,0000 0,0000 0,1826
cuisin 0,2649 0,0000 0,0000 0,0000
culinari 0,1325 0,0000 0,0000 0,0000
curli 0,0000 0,1118 0,0000 0,0000
doe 0,0000 0,0000 0,0000 0,1601
especi 0,1325 0,0000 0,0000 0,0000
european 0,1325 0,0000 0,0000 0,0000
ey 0,0000 0,1118 0,0000 0,0000
fertil 0,0000 0,1270 0,0000 0,0000
for 0,1325 0,0000 0,1407 0,0000
gener 0,2514 0,0000 0,0000 0,0000
ha 0,0000 0,2236 0,0000 0,0000
health 0,0000 0,0000 0,1792 0,0000
in 0,0000 0,2540 0,1176 0,0000
includ 0,0000 0,0000 0,0000 0,3203
industri 0,2514 0,0000 0,0000 0,0000
inform 0,2514 0,0000 0,0000 0,0000
is 0,2649 0,2540 0,2734 0,0000
juic 0,0000 0,0000 0,0000 0,1826
like 0,0000 0,0000 0,1407 0,1601
list 0,0000 0,0000 0,0000 0,1601
liter 0,0000 0,0000 0,1062 0,0000
meat 0,2649 0,0000 0,2814 0,0000
member 0,0000 0,0000 0,0000 0,1826
name 0,1325 0,0000 0,1407 0,0000
nation 0,0000 0,0000 0,1792 0,0000
no 0,0000 0,0000 0,0000 0,1869
nutrit 0,2514 0,0000 0,0000 0,0000
of 0,0000 0,1270 0,0000 0,0000
on 0,0928 0,0000 0,1407 0,1826
or 0,0000 0,1118 0,0000 0,1826
origin 0,0000 0,0000 0,1062 0,0000
other 0,0000 0,0000 0,1792 0,0000
plant 0,0000 0,0000 0,0000 0,1869
prefectur 0,1601 0,0000 0,0000 0,0000
princip 0,1325 0,0000 0,0000 0,0000
promot 0,0000 0,0000 0,1792 0,0000
provid 0,0000 0,0000 0,1792 0,0000
rais 0,1601 0,0000 0,0000 0,0000
recip 0,0000 0,0000 0,1792 0,0000
refer 0,1601 0,0000 0,0000 0,1869
represent 0,0000 0,1270 0,0000 0,0000
sens 0,0000 0,0000 0,1062 0,1601
sinc 0,0000 0,0000 0,0000 0,1869
small 0,0000 0,2236 0,0000 0,0000
snout 0,0000 0,1118 0,0000 0,0000
some 0,0000 0,0000 0,1407 0,1601
spice 0,0000 0,0000 0,0000 0,1601
strict 0,1601 0,0000 0,0000 0,0000
subgroup 0,0000 0,0000 0,0000 0,1826
tail 0,0000 0,1118 0,0000 0,0000
tajima-ushi 0,1601 0,0000 0,0000 0,0000
term 0,0000 0,0000 0,0000 0,1869
that 0,0000 0,0000 0,0000 0,1869
the 0,0000 0,5080 0,2814 0,0000
their 0,0000 0,0000 0,0000 0,1826
there 0,0000 0,0000 0,0000 0,1869
thi 0,0000 0,0000 0,0000 0,1601
to 0,3203 0,0000 0,1792 0,1869
tradit 0,1601 0,0000 0,0000 0,0000
viril 0,0000 0,1270 0,0000 0,0000
websit 0,0000 0,0000 0,1792 0,0000
which 0,0000 0,1118 0,1062 0,1601
with 0,0000 0,1270 0,0000 0,0000

Wie stellt man nun fest, ob sich zwei Begriffe ähnlich sind?

Um festzustellen, wie semantisch ähnlich sich zwei Begriffe sind, nimmt man die beiden entsprechenden repräsentativen Vektoren und bildet das Skalarprodukt der beiden Vektoren. Dazu erweitert man zunächst die beiden Vektoren, so dass sie jeweils noch fehlende Begriffe des anderen Vektors mit dem Gewicht 0 enthalten. Die beiden Vektoren werden den Begriffen nach sortiert (siehe obige Darstellung der repräsentativen Vektoren). Das Skalarprodukt ist die Summe der Produkte zueinandergehöriger Gewichte. Je höher der Wert, desto größer ist die semantische Ähnlichkeit der verglichenen Suchbegriffe.

Untersucht man die vier obigen Begriffe ergeben sich folgende Werte:

  • beef, pork: 0,2547
  • beef, pig: 0,0673
  • beef, veg: 0,1216
  • pig, pork: 0,4917
  • pig, veg: 0,0383
  • pork, veg: 0,1382

Fazit

Wenn man sich obige Werte genauer ansieht, kann man sehr schön erkennen, dass die berechneten Werte durchaus der Realität entsprechen. Die beiden Begriffe pig und pork haben die höchste semantische Ähnlichkeit. Das ist absolut nachvollziehbar, wenn man sich die entsprechenden deutschen Begriffe ansieht: Schwein und Schweinefleisch. Betrachtet man beef und pork sind sich diese auch noch etwas ähnlich. Immerhin handelt es sich bei beiden Begriffen um unterschiedliche Fleischarten. Sowohl beef und vegetable als auch pork und vegetable sind sich noch ein klein wenig ähnlich. Bei allen drei Begriffen handelt es sich um Worte auf dem Bereich der Küche und des Kochens. Die geringste Ähnlichkeit haben in diesem Fall die beiden Begriffe beef und pig. Es handelt sich weder um das gleiche Tier noch um den gleichen Kontext (z.B. Küche).

Zusammenfassend kann man sagen, dass sich schon an diesem doch relativ kleinen Beispiel zeigt, dass das beschriebene Verfahren durchaus in der Lage ist, die semantische Ähnlichkeit zwischen einzelnen Begriffen zu erfassen und als Zahlenwert quantitativ zu repräsentieren.

Einen Kommentar schreiben

Schließen
Powered by ShareThis