Vorgetragen am 21.05.2001 von Adela Filzmayer-Margetic im Rahmen des Referats "Computerlinguistische Methoden in der Textrepräsentation" |
Um die Suche nach relevanten Informationen zu verbessern, muss man Möglichkeiten finden, wie man unterschiedliche morphologische Varianten eines Suchbegriffs findet. Es liegt nahe, dass jemand, der an Dokumenten interessiert ist, die das Wort "engeneer" enthalten, wahrscheinlich auch solche Dokumente interessant finden wird, in denen die Wörter "engeneering" oder "engeneered" vorkommen. Dies kann man unter Anderem durch Konflation von Wörtern erreichen.
Unter der Konflation versteht man Kürzen, Kombinieren oder auch Zusammenfügen von Wörtern (Buchstabenfolgen!) und/oder "Wortelementen", um unterschiedliche morphologische Varianten eines Wortes zu matchen. Die Konflation kann auf zweierlei Weisen vorgenommen werden: manuell, indem man die regulären Ausdrücke benutzt, oder automatisch, mit Hilfe von geeigneten Programmen, sogenannten Stemmern.
Es liegt nahe, dass, außer dass durch das Stemming die Suche nach relevanten Dokumenten verbessert wird, als ein positives Begleiteffekt die Index-Dateien reduziert werden können, da in der Regel mehrere vollständige Terme ein und dasselbe Stem haben. Einigen Berichten zufolge werden die Index-Dateien manchmal um bis über 50% reduziert.
Stemming von Termen kann man entweder während der Indexierung, oder während der Suche vornehmen. Beide Ansätze haben sowohl ihre Vorteile als auch ihre Nachteile. Ein wichtiger Vorteil des Stemming während der Indexierung ist einerseits die Effizienz des Verfahrens - die Terme müssen dann nicht mehr während der Suche gestemmt werden - und andererseits eine Komprimierung der Index-Datei (was man beim Stemming während der Suche nicht hat!). Der Nachteil ist, dass die Information über den vollständigen Begriff verlorengeht, oder man braucht zusätzlichen Speicherplatz, wo sowohl der Begriff selbst als auch das entsprechende Stem gespeichert werden. Unter diesem Aspekt wäre das Stemming während der Suche geeigneter.
Nach der Methode der Konflation können Algorithmen bzw. Stemmer in mehrere Gruppen eingeteilt werden:
Später werden diese Gruppen auch näher vorgestellt.
Es gibt mehrere Kriterien, die bei der Beurteilung der Stemmer in Betracht gezogen werden müssen. Das sind vor Allem:
Alle Indexterme und ihre Stems sind in einer Tabelle gespeichert.
Term |
Stem |
engineering engineered engineer |
engineer engineer engineer |
Das Problem bei solchen Tabellen ist einerseits ein relativ großer Pflegeaufwand,weil sie ständig aktualisiert werden müssen; andererseits brauchen solche Tabellen auch viel Speicherplatz.
Diese Stemmer basieren auf den Arbeiten aus dem Bereich der strukturalen Linguistik, die versucht, Wort- und Morphemgrenzen aufgrund der Distribution der Phoneme in einem großen Korpus zu determinieren; nur arbeitet ein Stemmer statt mit Phonemen mit Buchstaben und statt mit phonologisch transkribierten Ausdrücken mit dem Korpus.
Um die Methode entwickeln zu können, haben Hafer und Weis zunächst einige Begriffe definiert:
a --> | ein Wort der Länge n; |
ai --> | Präfix von a mit der Länge i; |
D --> | Korpus; |
Dai --> | Teilmenge von D, die diejenigen Terme enthält, dessen ersten i Buchstaben genau dem ai entsprechen; |
Sai --> | die Zahl der distinktiven Buchstaben, die auf der Stelle i+1 vorkommen (man betrachtet eben die Teilmenge Dai!) |
Die successor variety (die Nachfolger-Verschiedenheit) eines Strings haben sie definiert als die Zahl der unterschiedlichen Buchstaben, die diesem String in den Wörtern eines Textkorpus folgen.
Beispiel:
Innerhalb des Textkorpus
able, axle, accident, ape, about |
"a" wird im Textkorpus von vier unterschiedlichen Buchstaben gefolgt --> 4 "ap" wird im Textkorpus von einem Buchstaben gefolgt --> 1 ….. usw. |
In einem großen Korpus (cca. 2000 Terme) wird sich mit jedem Buchstaben, der einem "Teilstring" hinzugefügt wird, die Nachfolger-Verschiedenheit erhöhen, bis die Grenze eines Segments erreicht wird; in dem Moment fällt sie wieder stark zurück. Diese Information wird benutzt, um die Stems zu identifizieren.
Aufgrund von so gewonnenen Nachfolger-Verschiedenheiten wird das gegebene Wort segmentiert; hier gibt es wieder mehrere Methoden:
Cutoff method: es wird einfach ein Grenzwert für die Nachfolger-Verschiedenheit selektiert; wenn die Grenze erreicht wird, wird der Rest abgeschnitten.
Das Problem: wie soll man den richtigen cutoff-Wert bestimmen?
Complete word method: der Bruch kommt nach dem Segment, das als ein vollständiges Wort im Korpus vorkommt.
Peak and plateau method: der Sequenzbruch kommt nach demjenigen Buchstaben, dessen Nachfolger-Verschiedenheit höher ist als die Nachfolger-Verschiedenheit des ihm vorangehenden und ihm nachfolgenden Buchstaben; es muss also kein cutoff-Wert explizit genannt werden. Anhand eines Beispiels kann man die Methode besser Verstehen:
Prefix | Successor Variety | Letters | |
---|---|---|---|
R | 3 |
E, I, O | |
RE | 2 |
A, D | |
REA | 1 |
D | |
READ | 3 |
A, I, S | |
READA | 1 |
B | |
READAB | 1 |
L | |
READABL | 1 |
E | |
READABLE | 1 |
BLANK |
Also: in diesem Fall kommt der Bruch nach dem String mit dem successor variety-Wert 3, nämlich nach dem String "READ".
Hafer und Weis haben die obigen Methoden experimentell evaluiert; ihre Schlussfolgerung war, dass keine von ihnen perfekte Resultate liefert, aber man kann sie kombinieren. Im obigen Beispiel wäre das Wort nach beiden Methoden - also nach complete word method und peak and plateau method - in "READ" und "ABLE" segmentiert.
Danach muss ein Segment als Stem selektiert werden. Dies geschieht nach folgendem Algorithmus:
if (first segment occurs in <=12 words in corpus) first segment is stem else (second segment is stem) |
Zur Erklärung des Algorithmus soll hinzugefügt werden, dass Hafer und Weis eine interessante Regelmäßigkeit festgestellt haben: nämlich, wenn ein Segment in mehr als 12 Wörtern im Korpus vorkommt, dann ist es ein Präfix; andererseits sind im Englischen mehrfache Präfixe äußerst selten - daher kann man nach einem Präfix das zweite Segment als Stem nehmen.
Diese Stemmer funktionieren nach der shared-digramm(n-gramm)-Methode; einer Methode, die Adamson und Boreham entwickelt haben. Es werden Paare von Wörtern gebildet aufgrund ihrer gmeinsamen Digrammen. Zum Beispiel: die Wörter statistics und statistical haben sechs gemeinsame Digramme):
statistics => st ta at ti is st si ic cs unique digrams = at cs ic is st ta ti statistical => st ta at ti is st ti ic ca al unique digrams = al at ca ic is st ta ti |
Der Ahnlichkeitsmaß S zwischen den beiden Begriffen wird berechnet nach der Formel:
S = | 2C |
A + B |
Dabei ist:
A --> die Zahl der einzelnen Digrammen aus dem ersten Wort;
B --> die Zahl der einzelnen Digrammen aus dem zweiten Wort;
C --> die Zahl der gemeinsamen Digrammen.
Aus diesen Daten wird eine Ähnlichkeitsmatrix erstellt:
word1 |
word2 |
word3 |
... |
wordn-1 |
|
word1 |
S12 |
S13 |
S1... |
S1(n-1) |
|
word2 |
S21 |
S23 |
S2... |
S2(n-1) |
|
word3 |
S31 |
S32 |
S3... |
S3(n-1) |
|
... |
S...1 |
S...2 |
S...3 |
S...(n-1) |
|
wordn |
Sn1 |
Sn2 |
Sn3 |
Sn... |
Sn(n-1) |
Im Realfall werden die meisten Wörter paarweise verglichen einen Ähnlichkeitsmaß gleich null haben, also die positiven Werte in der Matrix sind zestreut.
Diese Stemmers entfernen das Präfix/Suffix vom Term und hinterlassen das - manchmal transformierte - Stem. Ein ganz einfaches Beispiel eines solchen Stemmer wäre folgender Algorithmus:
If a word ends in "ies" but not "eies" or "aies" then "ies" -> "y" If a word ends in "es" but not "aes", "ees" or "oes" then "es" -> "e" If a word ends in "s", but not "us" or "ss" then "s" -> NULL |
Meistens werden sogenannte iterative longest match stemmers verwendet; dabei wird immer nach bestimmten Regeln die längste mögliche Sequenz entfernt, und das Verfahren wird wiederholt bis keine Charaktere mehr entfernt werden können. Manchmal ist aber das Stem am Ende nicht korrekt konflatiert. Es gibt zwei Methoden, um das zu korrigieren.
Es gibt mehrere Stemmers nach dieser Methode: Lovins (1968), Salton (1968), Dawson (1974), Porter (1980) and Paice (1990). Der wohl bekannteste ist der Porter's Stemmer, und der wird hier auch näher dargestellt.
Porter algorithm besteht aus einer Reihe von Regeln, die die Konditionen und die Aktionen bestimmen:
Das Maß m eines Stems bezeichnet die Zahl seiner alternierenden Vokal-Konsonant-Sequenzen. Unter Vokale gehören a, e, i, o, u und y wenn es nach einen Konsonant kommt. Das Maß m ist definiert als:
[C](VC)m[V]
Bemerkung: Die eckigen Klammern bedeuten die Optionalität.
Das unten stehende Beispiel sollte das verdeutlichen.
Measure | Examples |
---|---|
m=0 |
TR, EE, TREE, Y, BY |
m=1 |
TROUBLE, OATS, TREES, IVY |
m=2 |
TROUBLES, PRIVATE, OATEN |
*< X > -- Das Stem endet mit dem gegebenen Buchstaben.
*v* -- Das Stem enthält einen Vokal.
*d -- Das Stem endet mit einem Doppelkonsonant.
*o -- Das Stem endet mit einer Sequenz Konsonant-Vokal-Konsonant, wobei der letzte Konsonant w, x oder y ist.
Die Regeln sind in Schritte eingeteilt. Die Regeln in einem Schritt werden immer reihenweise geprüft und es kann immer nur eine Regel angewendet werden; sie sind nämlich so formuliert und geordnet, dass immer das längste mögliche Suffix entfernt wird.
Im Folgenden werden der Porters Algorithm sowie die in einzelne Schritte eingeteilte Regeln dargestellt.
step1a(word); |
Step 1a Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
NULL |
sses |
ss |
caresses --> caress | |
NULL |
ies |
i |
ponies --> poni | |
ties --> tie | ||||
NULL |
ss |
ss |
carress --> carress | |
NULL |
s |
NULL |
cats --> cat> |
Step 1b Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
(m>0) |
eed |
ee |
feed --> feed | |
agreed --> agree | ||||
(*v*) |
ed |
NULL |
plastered --> plaster | |
bled --> bled | ||||
(*v*) |
ing |
NULL |
motoring --> motor | |
sing --> sing |
Step 1b1 Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
NULL |
at |
ate |
conflat(ed) --> conflate | |
NULL |
bl |
ble |
troubl(ing)--> trouble | |
NULL |
iz |
ize |
siz(ed) --> size | |
(*d and not (*<L> or *<S> or *<Z>)) |
NULL |
single letter |
hopp(ing) --> hop | |
tann(ed) --> tan | ||||
fall(ing) --> fall | ||||
hiss(ing) --> hiss | ||||
fizz(ing) --> fizz | ||||
(m=1 and *o) |
NULL |
e |
fail(ing) --> fail | |
fil(ing) --> file |
Step 1c Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
(*v*) |
y |
i |
happy --> happi | |
sky --> sky |
Step 2 Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
(m>0) |
ational |
ate |
relational --> relate | |
(m>0) |
tional |
tion |
conditional --> condition | |
rational --> rational | ||||
(m>0) |
enci |
ence |
valenci --> valence | |
(m>0) |
anci |
ance |
hesitanci --> hesitance | |
(m>0) |
izer |
ize |
digitizer --> digitize | |
(m>0) |
abli |
able |
conformabli --> conformable | |
(m>0) |
alli |
al |
radicalli --> radical | |
(m>0) |
entli |
ent |
differentli --> different | |
(m>0) |
eli |
e |
vileli --> vile | |
(m>0) |
ousli |
ous |
analogousli --> analogous | |
(m>0) |
ization |
ize |
vietnamization --> vietnamize | |
(m>0) |
ation |
ate |
predication --> predicate | |
(m>0) |
ator |
ate |
operator --> operate | |
(m>0) |
alism |
al |
feudalism --> feudal | |
(m>0) |
iveness |
ive |
decisiveness --> decisive | |
(m>0) |
fulness |
ful |
hopefulness --> hopeful | |
(m>0) |
ousness |
ous |
callousness --> callous | |
(m>0) |
aliti |
al |
formaliti --> formal | |
(m>0) |
iviti |
ive |
sensitiviti --> sensitive | |
(m>0) |
biliti |
ble |
sensibiliti --> sensible |
Step 3 Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
(m>0) |
icate |
ic |
triplicate --> triplic | |
(m>0) |
ative |
NULL |
formative --> form | |
(m>0) |
alize |
al |
formalize --> formal | |
(m>0) |
iciti |
ic |
electriciti --> electric | |
(m>0) |
ical |
ic |
electrical --> electric | |
(m>0) |
ful |
NULL |
hopeful --> hope | |
(m>0) |
ness |
NULL |
goodness --> good |
Step 4 Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
(m>1) |
al |
NULL |
revival --> reviv | |
(m>1) |
ance |
NULL |
allowance --> allow | |
(m>1) |
ence |
NULL |
inference --> infer | |
(m>1) |
er |
NULL |
airliner --> airlin | |
(m>1) |
ic |
NULL |
gyroscopic --> gyroscop | |
(m>1) |
able |
NULL |
adjustable --> adjust | |
(m>1) |
ible |
NULL |
defensible --> defens | |
(m>1) |
ant |
NULL |
irritant --> irrit | |
(m>1) |
ement |
NULL |
replacement --> replac | |
(m>1) |
ment |
NULL |
adjustment --> adjust | |
(m>1) |
ent |
NULL |
dependent --> depend | |
(m>1) |
ion |
NULL |
adoption --> adopt | |
(m>1) |
ou |
NULL |
homologou --> homolog | |
(m>1) |
ism |
NULL |
communism --> commun | |
(m>1) |
ate |
NULL |
activate --> activ | |
(m>1) |
iti |
NULL |
angulariti --> angular | |
(m>1) |
ous |
NULL |
homologous --> homolog | |
(m>1) |
ive |
NULL |
effective --> effect | |
(m>1) |
ize |
NULL |
bowdlerize --> bowdler |
Step 5a Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
(m>1) |
e |
NULL |
probate --> probat | |
rate --> rate | ||||
(m=1 and not *o) |
e |
NULL |
cease --> ceas |
Step 5b Rules |
Conditions | Suffix | Replacement | Examples | |
---|---|---|---|---|
(m>1 and *d and *<L>) |
NULL |
single letter |
controll --> control | |
roll --> roll |
Es wurden mehrere Studien durchgeführt, in denen versucht wurde, die einzelnen Stemmer zu beurteilen; allerdings sind die Resultate manchmal: fraglich, weil die Berichte über die statistischen Ergebnissen fehlen, oder wegen der spezifischen Eigenschaften der Korpora. Im Algemeinen konnte man keine großen Unterschiede zwischen unterschiedlichen Verfahren feststellen. Tatsache ist, dass das Stemming fast immer die Effizienz des IR mehr oder weniger verbessert.
1987 haben z.B. Walker und Jones eine Studie über das Porter's Stemmer durchgeführt. Sie haben herausgefunden, dass ein schwaches Stemming das Recall erhöht, wobei die Präzision darunter nicht leidet (wie das bei starkem Stemming der Fall ist). Daher empfehlen sie eine automatische Benutzung von schwachem Stemming; nach dem starkem Stemming sollte man greifen erst wenn das schwache keine befriedigenden Resultate ergibt.
Außerdem hängen die Resultate manchmal auch von dem Wortschatz ab: der Stemmer angewandt auf einem spezifischen und homogenen Vokabular kann die Terme anders konflatieren als bei anderen Typen vom Vokabular.
Nach experimentellen Untersuchungen wurden die Dateien meistens, je nach dem Stemmer und nach dem Korpus, um 30-40 % komprimiert, manchmal aber auch bis über 50%. In der Realität sind aber die Platzeinsparungen doch etwas niedriger; mit der Größe einer Datei sinkt nämlich auch die tatsächliche Reduktion, so wie wenn die Datei viele Zahlen oder Eigennamen enthält, oder auch viele Tippfehler.
Andererseits steigt die Kommpressionsrate - insbesondere bei den Affix removal Stemmer - wenn die Datei viele Terme mit Suffixen enthält.
Einige interessante Links:
http://rayuela.ieec.uned.es/cgi-bin/ircourse/stem2.perl (demo/Perl - Text-Eingabe)
http://ils.unc.edu/keyes/java/porter/index.html (demo/Java - 1-Wort-Eingabe)
http://www.pitt.edu/~steffi/porter.html (demo/Perl - 1-Wort-Eingabe)
http://maya.cs.depaul.edu/~mobasher/classes/ds575/software/stem.c (implementiert in C)
http://www.sims.berkeley.edu/courses/is202/f98/Lecture15/sld022.htm (einige fehlerhafte Konflationen des Porter Stemmer)
Literatur für diesen Teil des Referats:
W. Frakes and R. Baeza-Yates, editors: Information Retrieval: Data Structures and Algorithms. Prentice-Hall, 1992. (Kapitel 8)