


Semantischer Abgleich von Textbezeichnern mithilfe von LASER-Einbettungen in Python
Beim Einsatz von OCR zur Digitalisierung von Finanzberichten stoßen Sie möglicherweise auf verschiedene Ansätze zur Erkennung bestimmter Kategorien in diesen Berichten. Herkömmliche Methoden wie der Levenshtein-Algorithmus können beispielsweise für den String-Abgleich basierend auf der Bearbeitungsentfernung verwendet werden, was ihn effektiv für die Behandlung von nahezu Übereinstimmungen macht, wie z. B. die Korrektur von Tippfehlern oder kleinen Abweichungen im Text.
Die Herausforderung wird jedoch komplexer, wenn Sie mehrere Kategorien in einer einzelnen Zeile eines Berichts erkennen müssen, insbesondere wenn diese Kategorien möglicherweise nicht genau wie erwartet angezeigt werden oder sich semantisch überschneiden könnten.
In diesem Beitrag analysieren wir einen semantischen Matching-Ansatz unter Verwendung der LASER-Einbettungen (Language-Agnostic SEntence Representations) von Facebook und zeigen, wie er diese Aufgabe effektiv bewältigen kann.
Problem
Das Ziel besteht darin, bestimmte Finanzbegriffe (Kategorien) in einer bestimmten Textzeile zu identifizieren. Nehmen wir an, wir haben einen festen Satz vordefinierter Kategorien, die alle möglichen Begriffe von Interesse darstellen, wie zum Beispiel:
["Umsatz", "Betriebsaufwand", "Betriebsgewinn", "Abschreibung", "Zinsen", "Nettogewinn", "Steuer", "Gewinn nach Steuern", "Metrik 1"]
Angenommen eine Eingabezeile wie:
„Betriebsgewinn, Nettogewinn und Gewinn nach Steuern“
Wir wollen herausfinden, welche Bezeichner in dieser Zeile vorkommen.
Semantisches Matching mit LASER
Anstatt uns auf exakte oder unscharfe Textübereinstimmungen zu verlassen, verwenden wir semantische Ähnlichkeit. Dieser Ansatz nutzt LASER-Einbettungen, um die semantische Bedeutung von Text zu erfassen und ihn mithilfe der Kosinusähnlichkeit zu vergleichen.
Durchführung
Vorverarbeitung des Textes
Vor dem Einbetten wird der Text vorverarbeitet, indem er in Kleinbuchstaben umgewandelt und zusätzliche Leerzeichen entfernt wird. Dies sorgt für Einheitlichkeit.
def preprocess(text): return text.lower().strip()
Einbetten von Bezeichnern und Eingabezeilen
Der LASER-Encoder generiert normalisierte Einbettungen sowohl für die Liste der Identifikatoren als auch für die Eingabe-/OCR-Zeile.
identifier_embeddings = encoder.encode_sentences(identifiers, normalize_embeddings=True) ocr_line_embedding = encoder.encode_sentences([ocr_line], normalize_embeddings=True)[0]
Rangfolge der Identifikatoren nach Spezifität
Längere Bezeichner werden priorisiert, indem sie nach der Wortanzahl sortiert werden. Dies hilft bei der Handhabung verschachtelter Übereinstimmungen, bei denen längere Bezeichner möglicherweise kürzere Bezeichner subsumieren (z. B. „Gewinn nach Steuern“ subsumiert „Gewinn“).
ranked_identifiers = sorted(identifiers, key=lambda x: len(x.split()), reverse=True) ranked_embeddings = encoder.encode_sentences(ranked_identifiers, normalize_embeddings=True)
Ähnlichkeit berechnen
Mithilfe der Kosinusähnlichkeit messen wir, wie semantisch jeder Bezeichner der Eingabezeile ähnelt. Bezeichner mit einer Ähnlichkeit über einem bestimmten Schwellenwert gelten als Übereinstimmungen.
matches = [] threshold = 0.6 for idx, identifier_embedding in enumerate(ranked_embeddings): similarity = cosine_similarity([identifier_embedding], [ocr_line_embedding])[0][0] if similarity >= threshold: matches.append((ranked_identifiers[idx], similarity))
Verschachtelte Übereinstimmungen auflösen
Um mit überlappenden Bezeichnern umzugehen, werden längere Übereinstimmungen priorisiert, um sicherzustellen, dass kürzere Übereinstimmungen darin ausgeschlossen werden.
def preprocess(text): return text.lower().strip()
Ergebnisse
Wenn der Code ausgeführt wird, liefert die Ausgabe eine Liste der erkannten Übereinstimmungen zusammen mit ihren Ähnlichkeitswerten. Für die Beispieleingabe:
identifier_embeddings = encoder.encode_sentences(identifiers, normalize_embeddings=True) ocr_line_embedding = encoder.encode_sentences([ocr_line], normalize_embeddings=True)[0]
Überlegungen zu längeren und komplexen Eingaben
Diese Methode funktioniert gut in strukturierten Finanzberichten mit mehreren Kategorien in einer einzigen Zeile, vorausgesetzt, es gibt nicht zu viele Kategorien oder viel nicht zusammenhängenden Text. Allerdings kann sich die Genauigkeit bei längeren, komplexen Eingaben oder unstrukturiertem benutzergeneriertem Text verschlechtern, da die Einbettungen möglicherweise Schwierigkeiten haben, sich auf relevante Kategorien zu konzentrieren. Bei verrauschten oder unvorhersehbaren Eingaben ist es weniger zuverlässig.
Abschluss
Dieser Beitrag zeigt, wie LASER-Einbettungen ein nützliches Werkzeug zur Erkennung mehrerer Kategorien im Text sein können. Ist es die beste Option? Vielleicht nicht, aber es ist sicherlich eine der Optionen, die es wert sind, in Betracht gezogen zu werden, insbesondere wenn es um komplexe Szenarien geht, bei denen herkömmliche Matching-Techniken möglicherweise nicht ausreichen.
Vollständiger Code
ranked_identifiers = sorted(identifiers, key=lambda x: len(x.split()), reverse=True) ranked_embeddings = encoder.encode_sentences(ranked_identifiers, normalize_embeddings=True)
Das obige ist der detaillierte Inhalt vonSemantischer Abgleich von Textbezeichnern mithilfe von LASER-Einbettungen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Tomgelistsinpython, Youcanusethe-Operator, ExtendMethod, ListCompredesion, Oritertools.chain, jeweils mitSpezifizierungen: 1) Der OperatorissimpleButlessEfficienceforlargelists; 2) Extendismory-Effizienzbutmodifiestheoriginallist;

In Python 3 können zwei Listen mit einer Vielzahl von Methoden verbunden werden: 1) Verwenden Sie den Bediener, der für kleine Listen geeignet ist, jedoch für große Listen ineffizient ist. 2) Verwenden Sie die Erweiterungsmethode, die für große Listen geeignet ist, mit hoher Speicher -Effizienz, jedoch die ursprüngliche Liste. 3) Verwenden Sie * Operator, der für das Zusammenführen mehrerer Listen geeignet ist, ohne die ursprüngliche Liste zu ändern. 4) Verwenden Sie iTertools.chain, das für große Datensätze mit hoher Speicher -Effizienz geeignet ist.

Die Verwendung der join () -Methode ist die effizienteste Möglichkeit, Zeichenfolgen aus Listen in Python zu verbinden. 1) Verwenden Sie die join () -Methode, um effizient und leicht zu lesen. 2) Der Zyklus verwendet die Bediener für große Listen ineffizient. 3) Die Kombination aus Listenverständnis und Join () eignet sich für Szenarien, die Konvertierung erfordern. 4) Die Verringerung () -Methode ist für andere Arten von Reduktionen geeignet, ist jedoch für die String -Verkettung ineffizient. Der vollständige Satz endet.

PythonexexecutionStheProcessOfTransformingPythonCodeIntoexexexecleableInstructions.1) ThePythonvirtualmachine (PVM) Ausführungen

Zu den wichtigsten Merkmalen von Python gehören: 1. Die Syntax ist prägnant und leicht zu verstehen, für Anfänger geeignet; 2. Dynamisches Typsystem, Verbesserung der Entwicklungsgeschwindigkeit; 3. Reiche Standardbibliothek, Unterstützung mehrerer Aufgaben; 4. Starke Gemeinschaft und Ökosystem, die umfassende Unterstützung leisten; 5. Interpretation, geeignet für Skript- und Schnellprototypen; 6. Support für Multi-Paradigma, geeignet für verschiedene Programmierstile.

Python ist eine interpretierte Sprache, enthält aber auch den Zusammenstellungsprozess. 1) Python -Code wird zuerst in Bytecode zusammengestellt. 2) Bytecode wird von Python Virtual Machine interpretiert und ausgeführt. 3) Dieser Hybridmechanismus macht Python sowohl flexibel als auch effizient, aber nicht so schnell wie eine vollständig kompilierte Sprache.

UseaforloopwheniteratoverasequenceOrforaPecificNumberoftimes; UseaWhileloopWencontiningUntilAconDitionisMet.ForloopsardealForknown -Sequencies, während whileloopSuituationen mithungeterminediterationen.

PythonloopscanleadtoErors-ähnliche Finanzeloops, ModificingListsDuringiteration, Off-by-Oneerrors, Zero-Indexingissues und Nestroxinefficiens.toavoidthese: 1) Verwenden Sie


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor
