Ich arbeite an einem Projekt, bei dem ich genetische Algorithmen verwende, um Wortlisten zu erstellen, die einen Text am besten beschreiben.
Ich verwende derzeit Kosinusähnlichkeit, um es zu tun, aber es hat zwei Fehler: es ist viel zu langsam für den Zweck und wenn zwei Vektoren verglichen werden Nullen, endet es mit einer künstlich hohen Ähnlichkeit und einem Wortvektor, der nicht ist t sehr gut. Irgendwelche Vorschläge für andere Maßnahmen, die schneller sein würden/weniger Notiz von Wörtern nehmen, die nicht da sind? Danke.Schnelle Vektordifferenz/Ähnlichkeitsmessungen
Antwort
Kosinusähnlichkeit ist ein Skalarprodukt über Produktgrößen, daher ist die Minimierung der Anzahl der Dimensionen entscheidend.
der Herde ein wenig keulen, möchten Sie vielleicht stemming anwenden Wörter mit ähnlicher Bedeutung in einer einzigen Dimension zu kollabieren, und werfen aus hapax legomena (Wörter, die unter Berücksichtigung im Korpus vorkommen nur einmal) von der Dimension Pool, da Ein Algorithmus ist wahrscheinlich nicht in der Lage, viel nützliche Informationen von ihnen abzuleiten.
Ich bin mir nicht sicher, was die Nullvektoren verursachen würde, obwohl. Kannst du ein Beispiel geben?
EDIT: Also, was sind Sie nach ist eine Wortliste zu erstellen, die selektive für ein bestimmtes Dokument oder Cluster? In diesem Fall benötigen Sie einige Möglichkeiten, um Wörter mit geringer Selektivität zu eliminieren.
Sie könnten die gebräuchlichsten Wörter wie stop words behandeln, um Ihren Dimensionssatz weiter einzuschränken und ein wenig mehr Leistung zurück zu bekommen. Auf der Seite des genetischen Algorithmus muss Ihre Fitnessfunktion auch Wortlisten bestrafen, die mit Dokumenten außerhalb des Zielclusters übereinstimmen, und nicht nur diejenigen belohnen, die mit Dokumenten innerhalb des Clusters übereinstimmen, sodass Ihre Wortliste nicht mit Begriffen überfrachtet wird häufiger als selektiv.
Wenn Sie eine bessere semantische Selektivität auch nach dem Einstellen der Fitness-Funktion benötigen, sollten Sie statt einzelner Wörter orthogonal sparse bigrams verwenden. Ich habe keine Ahnung, was es in Bezug auf die Anzahl der Dimensionen tun wird, obwohl, während es wird O (kn) verschiedene Begriffe statt n, viel mehr von ihnen werden hapaxes sein. Dies kann ein Problem verursachen, wenn Sie einzelne Wörter anstelle von OSBs in Ihren Termlisten benötigen.
Ich habe mich ein bisschen geirrt, im Grunde die Unschärfe meines Sets (viele hapaxes und tausende von Wörtern, die einige Male benutzt wurden) bedeuteten, dass die Ähnlichkeiten häufig sehr hoch waren, obwohl sie kein gutes Cluster des Corpus darstellten. – Reu
- 1. Schnelle Zeichenerkennung
- 2. Schnelle Animationsabfrage
- 3. Schnelle Matrixexponentiation
- 4. schnelle Quadratwurzeloptimierung?
- 5. Schnelle Datumsformatierung
- 6. Schnelle Dateiübertragung
- 7. KVC vs schnelle Aufzählung
- 8. C# schnelle Hash-Berechnung
- 9. Schnelle zweidimensionale Mustererkennung
- 10. UIView.animateWithDuration schnelle Loop-Animation
- 11. Schnelle vektorisierte datetime.combine()
- 12. GoogleAnalytics - schnelle Fehler
- 13. Android, schnelle Videoverarbeitung
- 14. Schnelle Eingabe Ausgabefunktion
- 15. Delphi schnelle Dateikopie
- 16. Schnelle, effiziente Interprozessing Messaging
- 17. Schnelle Numpy Loops
- 18. schnelle Sortierung in C++
- 19. Qt Schnelle Speichernutzung
- 20. Schnelle Ausgabe mit TableView
- 21. Haskell schnelle Sortierkomplexität?
- 22. schnelle Weg von
- 23. Schnelle String-Array - Cython
- 24. Schnelle Deinitialisierung von Globalen
- 25. Schnelle BitArray in OCaml
- 26. Schnelle InnoDB-Wiederherstellung?
- 27. suchen schnelle Abfrage
- 28. schnelle Shell finden
- 29. Schnelle Pixelzeichnung in WPF
- 30. Schnelle automatische AWS-Skalierung
Es ist nicht wirklich klar, was Sie fragen, aber sind Sie vielleicht nach [Levenshtein Entfernung] (http://en.wikipedia.org/wiki/Levenshtein_distance) oder [Hamming Entfernung] (http: // en. wikipedia.org/wiki/Hamming_distanz)? –