Open-Source-Beitrag zu NLP-Paketen

Mar 18 2023
Ein Open-Source-Projekt kann als Quellcode definiert werden, der der Öffentlichkeit zur Ansicht, Nutzung, Änderung und Verbreitung unter einer freizügigen Lizenz zur Verfügung gestellt wird. Bedeutende Open-Source-Projekte sind das Ergebnis von Beiträgen von Menschen, die nicht nur über Programmierkenntnisse, sondern auch über Dokumentation, Codebereinigung und andere Fähigkeiten verfügen.

Ein Open-Source-Projekt kann als Quellcode definiert werden, der der Öffentlichkeit zur Ansicht, Nutzung, Änderung und Verbreitung unter einer freizügigen Lizenz zur Verfügung gestellt wird. Bedeutende Open-Source-Projekte sind das Ergebnis von Beiträgen von Menschen, die nicht nur über Programmierkenntnisse, sondern auch über Dokumentation, Codebereinigung und andere Fähigkeiten verfügen.

Jede Tippfehlerbehebung, das Hinzufügen einer Warnung vor einer möglichen Compiler-Warnung, das Beheben eines Fehlers oder sogar das Hinzufügen einer detaillierten Dokumentation zu einem Projekt kann als Open-Source-Beitrag betrachtet werden.

Wie ist die Open-Source-Landschaft im NLP?

Es gibt mehrere Anleitungen zu Open-Source-Beiträgen (OSC) und den ersten Schritten mit Ihrer ersten Pull-Anfrage. Angesichts der großen Menge an Textdaten, die im Internet verfügbar sind, hat die Verarbeitung natürlicher Sprache in den letzten Jahren einen enormen Aufschwung erlebt. Verschiedene Pakete decken die Anforderungen verschiedener NLP-basierter Arbeitsabläufe ab. TensorFlow verfügt beispielsweise über Keras-NLP als ganzheitliches NLP-Workflow-Modul. Pytorch und TorchText bilden zusammen TorchNLP für die gesamte transformatorbasierte Feinabstimmung mit PyTorch.

Da ich ein großes Interesse an der Verarbeitung natürlicher Sprache und der Computerlinguistik habe, wollte ich, dass mein erster Open-Source-Beitrag diesem Thema gewidmet ist. Im Dezember 2022 wurde ich in die zweite Kohorte des Kaggle BIPOC Mentorship Program aufgenommen und begann mit der Arbeit am NLP-Profiler- Paket von Mani Sarkar , um Verbesserungen vorzunehmen und Funktionen hinzuzufügen. Ich möchte ihm für seine konsequente Unterstützung, Ermutigung und Betreuung während des gesamten Programms danken.

das Textprofilierungspaket, das bei der Erstellung einer detaillierten Zusammenfassung des Textdatensatzes hilft

Was ist NLP-Profiler?

NLP Profiler ist ein Programm/eine Bibliothek, die Textdaten profiliert, in den Korpora enthaltene NLP-spezifische Daten extrahiert und statistische Details zu den Textdaten erstellt. pandas.describe()Wir können es uns nur auf Textdaten vorstellen . Es wird ein Datenrahmen erstellt, describe() auf dem Sie die Funktion dann ausführen können, um beschreibende Statistiken zu erhalten.

Wir können den NLP-Profiler mit pip/pip3 auf Kaggle- und Colab-Notebooks installieren. Um lokal damit zu arbeiten, kann es aus der Quelle erstellt werden . Wir beginnen mit:

NLP-Profiler-Installation

Sobald wir das Paket in unserer Umgebung haben, können wir es verwenden, um Einblicke in die Textdaten zu erhalten. Angenommen, wir haben einen Datenrahmen mit Textdaten in der Spalte „Text“, dann können wir den zusammenfassenden Datenrahmen wie folgt entwickeln:

Aufrufen von NLP-Profiler für einen Datensatz

Der „profiled_text_dataframe“ verfügt über verschiedene Funktionen wie Satzanzahl, Zeichenanzahl, Stimmungssubjektivität, Rechtschreibqualitätsbewertung, Überprüfung der Lesbarkeit usw.

Von NLP-Profiler aus dem Textdatensatz extrahierte Details

Dieser Datenrahmen kann nun für statistische und mathematische Zwecke zur Entwicklung computerlinguistischer Pipelines verwendet werden. Daher bietet das Paket mathematisch gesehen Vorteile bei der Zusammenfassung von Textdaten.

Wie habe ich zum Paket beigetragen?

Die Mitarbeit an einem Paket erfordert eine sorgfältige Analyse der verschiedenen Abhängigkeiten und Funktionen. Der NLP-Profiler ist auf mehrere Sprach- und semantische Parsing-Pakete angewiesen, die flüchtig sind, aber auch sehr häufig verwendet werden. Dazu gehören TextBlob , Spacy usw. Die Lockerung der Abhängigkeit von solchen Paketen verringert nicht nur die Antwortzeit des Pakets, sondern erhöht auch die Stabilität des Pakets. Wenn wir die Abhängigkeiten nicht festlegen, kann es außerdem zu unerwarteten Ergebnissen oder Verhaltensweisen kommen, die zu CI-Fehlern führen. Da sich Pakete ständig weiterentwickeln und mehrere Beiträge im Paket-Repository stattfinden, ist die Führung eines Änderungsprotokolls und das Testen des End-to-End-Flusses des Pakets bei jeder Änderung eine absolute Notwendigkeit.

Für alle im Repository vorgenommenen Änderungen sind End-to-End-Tests erforderlich

Ich begann damit, die Dokumentation durchzulesen und wie sie in Jupyter-Notebooks (Colab/Kaggle) implementiert ist. Das Paket litt zunächst unter Abhängigkeitskonflikten mit Colab- und Kaggle-Umgebungen. Dies ließ sich leicht lösen, indem man die Reihenfolge änderte, in der die Pakete per Pip auf den Notebooks installiert wurden, und indem man das „Typing“-Paket deinstallierte, bevor man es installierte.

Ein detaillierter Blick auf die offenen Probleme und Pull Requests ermöglicht Ihnen ein besseres Verständnis der Bereiche im Paket, die repariert werden müssen oder für Beiträge offen sind. Sie können entweder eines der offenen Probleme aufgreifen oder nach Abschnitten im Paket suchen, die verbessert werden müssen, und mit den Entwicklern zusammenarbeiten.

Offene Probleme mit dem Paket

Ich habe die Probleme und die verschiedenen Funktionalitäten durchgesehen und bestimmte Verbesserungsmöglichkeiten gefunden. Beim Testen an großen Textdatensätzen dauerte es sehr lange, bis die Grammatikprüffunktion reagierte. Es hing vom Paket „Language-Tool-Python“ ab , das keine Satzzeichen berücksichtigte und eine hohe Reaktionszeit hatte. Ich habe das Paket durch Gingerit ersetzt : ein Tool zur Grammatikkorrektur, das auf dem Kontext vollständiger Sätze basiert. Beim Test in Jupyter-Notebooks wurde die Reaktionszeit des Profilers insgesamt um 8 Sekunden verkürzt .

Grammatikprüffunktion geändert

Darüber hinaus dauerte es auch bei kleinen Datensätzen lange, bis die Berechnung der Rechtschreibprüfungsfunktion reagierte. Es basierte auf der Formel:

Die Formel kann durch Fuzzy-Algorithmen ersetzt werden, um alle Arten von Strafberechnungen für Rechtschreibfehler zu ermöglichen. Beispielsweise ergibt „I ma bda persno“ mit der Formel einen Rechtschreibwert von 85 % . Mit Fuzzy-Algorithmen wird jedoch ein Wert von 73 % erreicht , der besser mit der menschlichen Wahrnehmung übereinstimmt. Darüber hinaus kann die Anforderung, TextBlob für die Tokenisierung zu verwenden, auch durch die Verwendung des SymSpell- Pakets gelockert werden, das angeblich viel schneller ist als alle anderen verfügbaren Rechtschreibprüfungen.

Implementierung des Symspell-Pakets
Die Rechtschreibprüfungsfunktion wurde aktualisiert

Bevor diese Änderungen übernommen werden, müssen sie in den Pull-Requests dokumentiert werden, die für jede dieser Änderungen vorgenommen werden. Bestimmte Richtlinien sind für jeden, der einen Pull-Request erstellt, zwingend zu befolgen. Diese Richtlinien helfen dabei, die Stabilität des Hauptzweigs des Repositorys aufrechtzuerhalten und informieren den Mitwirkenden über mögliche Konflikte, die sich aus den von ihm vorgenommenen Änderungen ergeben können.

Vor dem Erstellen einer Pull-Anfrage ist ein Test auf dem lokalen Computer unbedingt erforderlich. Das Repository verfügt über bestimmte „ Slow “- und „ Smoke “-Tests, die Ihrerseits auf dem geänderten Repository ausgeführt werden muss, bevor Sie eine Pull-Anfrage stellen.

Darüber hinaus verfügt das Repository über das Sourcery AI- Plug-in, das die vorgenommenen Änderungen überprüft und einen detaillierten Bericht darüber liefert, ob die Änderungen zur Qualität des Repositorys beitragen und wenn nicht, wo Verbesserungen erforderlich sind. GitHub Action führt mehrere andere Prüfungen durch, z. B. CodeQL , End-to-End-Flow und Pre-Commit . Diese sorgen für die konfliktfreie Zusammenführung von Pull Requests.

Nach der Umgestaltung der Pull-Anfrage wurde ein sourcery.ai-Bericht generiert.

Verhaltensregeln

Es gibt ein paar Richtlinien, die es zu beachten gilt. Diese basieren vollständig auf meinen bisherigen Erfahrungen.

  1. Lesen Sie die Markdown-Dateien durch, die Details zu den bisher vorgenommenen Beiträgen und Änderungen enthalten. Diese sind notwendig, um eine erste Vorstellung vom Arbeitsablauf zu haben.
  2. Erlauben Sie Github-Aktionen in Ihrem geforkten Repository, End-to-End-Workflow-Aktionen für jeden Zweig auszuführen, um sicherzustellen, dass der Build stabil ist.
  3. Das Testen in einer lokalen Umgebung mit mehreren Testfällen ist obligatorisch, um sicherzustellen, dass die Änderungen wie erwartet funktionieren.
  4. Für einen Amateur-Mitwirkenden wie mich ist es sehr wichtig, das Paket gründlich zu lesen, bevor man große Änderungen vornimmt.
  5. Das Auflösen von Abhängigkeiten oder das Erstellen der lokalen Umgebung zum Testen kann eine Herausforderung sein. Man kann zur Github1s- Alternative wechseln, die einen VSCode-Online-Editor pro Repository ermöglicht.

Zukünftiger Geltungsbereich

Die Rechtschreibprüfungsdatei muss weiter korrigiert werden, da sie bestimmte Akzeptanz- und Leistungstests nicht besteht. Dies muss behoben werden und wird daher in den offenen Problemen des Repositorys erwähnt. Bestimmte granulare Funktionen wie „ repeated_letters_count “, „ repeated_digits_count “ , „ repeated_spaces_count “, „ repeated_whitespaces_count “, „ repeated_punctuations_count “, „ english_characters_count “ und „ non_english_characters_count “ müssen korrigiert werden , da sie beim Aufruf des Profilers in der Regel nicht erzeugt werden.

Angesichts der Erfahrungen, die ich durch die Arbeit an diesem Paket gesammelt habe, möchte ich auf ähnliche Weise zu Keras-NLP beitragen und auf meine bescheidene Art einen Beitrag zur Welt der Linguistik leisten.

Verweise

  1. Offene Probleme des NLP-Profilers
  2. Lokale Umgebung schaffen
  3. NLP-Profiler Kaggle-Notizbuch
  4. Build-Tests in Github
  5. Pull-Requests, an denen ich gearbeitet habe: 1. Rechtschreibprüfung 2. Grammatikprüfung
  6. Weitere Arbeiten: 1. Zu behebender Fehler 2. Machen Sie das Paket Python3.9 kompatibel
  7. Zusätzliche Updates zum Paket.
  8. Unterstützer des Pakets .
  9. Beitragsleitfaden.
  10. Zusätzliche Pakete, zu denen Sie beitragen können .
  11. Code-Snippet-Editor