Redundante Inhalte mittels semantischer Suche entdecken
Seid ihr Betreiber einer Online Community, z.B. von einem großen Forum, so passiert es schnell das Fragen mehrfach gestellt werden. Oft werden sogar immer die gleichen Fragen immer wieder gestellt. Hier ist es hilfreich, diese Fragen zuerst zu identifizieren. Diese lassen sich dann z.B. auf einer FAQ-Seite zusammen fassen. Oder man blendet dem Benutzer ähnliche Fragen zu seinem Thema ein.
In diesem Artikel zeige ich euch, wie ihr dieses mittels semantischer Suche bewerkstelligen könnt.
Was ist semantisch Suche?
Traditionell wird lexikalische Suche verwendet, dabei wird nach den passenden Keywords gesucht. Allerdings enthalte Dokumente die nicht unbedingt die exakt gleiche Schreibweise und werden damit nicht gefunden. Hat man eine Crypto-Webseite, wie z.B. https://bitcoineraapp.de/, möchte man vielleicht dass Dokumente die Bitcoin als Word enthalten, ebenfalls gefunden werden wenn man nach BTC sucht.
Dieses Problem umgeht die semantisch Suche. Dabei werden Texte und Suchanfragen mittels Vektorraum abgebildet so dass ähnliche Wörter und Texte nah sind im Vektorraum. Auf die genaue Schreibweise kommt es dabei nicht mehr an, ebenfalls werden Synonyme und verwandte Begriffe dabei erkannt. Eine Suchanfrage wird dabei ebenfalls erst in so einen Vektor umgewandelt, bevor dann im Vektorraum nach passenden Dokumenten gesucht wird.
Redundanten Inhalte finden
Seid ihr der Betreiber einer großen User-Community, so werden sich die immer gleichen Fragen irgendwann häufen. Dort ist es dann nützlich, die häufigen Fragen zu identifizieren, ggf. daraus eine FAQ Seite zu erstellen oder man kann diese Themen zusammen führen.
Um diese redundanten Inhalte zu finden lässt sich sentence-transformers nutzen. Zuerst installiert ihr das Paket:
1 |
pip install sentence-transformers |
Anschließend definiert ihr eure Sätze und ruft die paraphrase mining Methode auf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('all-MiniLM-L6-v2') # Single list of sentences - Possible tens of thousands of sentences sentences = ['The cat sits outside', 'A man is playing guitar', 'I love pasta', 'The new movie is awesome', 'The cat plays in the garden', 'A woman watches TV', 'The new movie is so great', 'Do you like pizza?'] paraphrases = util.paraphrase_mining(model, sentences) for paraphrase in paraphrases[0:10]: score, i, j = paraphrase print("{} \t\t {} \t\t Score: {:.4f}".format(sentences[i], sentences[j], score)) |
Als Ergebnis bekommt ihr eine Liste mit Satzpaaren zurück, beginnend mit den Sätzen die die höchste Ähnlichkeit aufweisen.
Nun müsst ihr nur noch diese Liste durchgehen und entscheiden welche der Themen in eure FAQ einfließen sollen.
Autor: Nils Reimers