Wkład Open Source do pakietów NLP
Projekt open source można zdefiniować jako kod źródłowy, który jest udostępniany publicznie do przeglądania, używania, modyfikowania i rozpowszechniania na podstawie licencji zezwalającej. Znaczące projekty open source są wynikiem wkładu osób posiadających nie tylko umiejętności kodowania, ale także dokumentacji, czyszczenia kodu i innych umiejętności.
Wszelkie poprawianie literówek, dodawanie alertu o możliwym ostrzeżeniu kompilatora, naprawianie błędu, a nawet dodawanie szczegółowej dokumentacji do projektu, można uznać za wkład open source.
Jak wygląda sceneria Open Source w NLP?
Istnieje wiele przewodników na temat wkładów typu open source (OSC) i tego, jak rozpocząć pracę z pierwszym żądaniem ściągnięcia. Biorąc pod uwagę dużą ilość danych tekstowych dostępnych w Internecie, przetwarzanie języka naturalnego rozkwitło w ciągu ostatnich kilku lat. Różne pakiety zaspokajają potrzeby różnych przepływów pracy opartych na NLP. Na przykład TensorFlow ma Keras-NLP jako holistyczny moduł przepływu pracy NLP. Pytorch i TorchText razem tworzą TorchNLP dla wszystkich precyzyjnych dostrojeń opartych na transformatorach przy użyciu PyTorch.
Biorąc pod uwagę, że jestem żywo zainteresowany przetwarzaniem języka naturalnego i lingwistyką komputerową, chciałem, aby mój pierwszy wkład w open source dotyczył tego samego. W grudniu 2022 roku zostałem przyjęty do drugiej kohorty Programu Mentorskiego Kaggle BIPOC i rozpocząłem pracę nad pakietem NLP-Profiler Mani Sarkara w celu wprowadzenia ulepszeń i dodania do niego funkcji. Chciałbym mu podziękować za konsekwentne wsparcie, zachętę i opiekę mentorską przez cały program.
Co to jest NLP-Profiler?
NLP Profiler to program/biblioteka, która profiluje dane tekstowe, wyodrębnia dane specyficzne dla NLP zawarte w korpusach i generuje szczegółowe dane statystyczne dotyczące danych tekstowych. Możemy myśleć o tym jak pandas.describe()o danych tekstowych. Tworzy ramkę danych, na której można następnie uruchomić describe() funkcję, aby uzyskać statystyki opisowe.
Możemy zainstalować NLP-Profiler za pomocą pip/pip3 na notebookach Kaggle i Colab. Aby pracować z nim lokalnie, można go zbudować ze źródła . Zaczynamy od:
Gdy już mamy pakiet w naszym środowisku, możemy go użyć do uzyskania wglądu w dane tekstowe. Zakładając, że mamy ramkę danych z danymi tekstowymi w kolumnie „tekst”, możemy opracować podsumowującą ramkę danych w następujący sposób:
„Profiled_text_dataframe” zawiera różne funkcje, takie jak liczba zdań, liczba znaków, subiektywność nastrojów, ocena jakości pisowni, sprawdzanie łatwości czytania itp .
Ta ramka danych może być teraz używana do celów statystycznych i matematycznych do tworzenia potoków lingwistycznych obliczeniowych. W związku z tym pakiet korzysta z matematycznego podsumowania danych tekstowych.
W jaki sposób przyczyniłem się do pakietu?
Udział w jakimkolwiek pakiecie wymaga skrupulatnej analizy różnych zależności i funkcji. NLP-Profiler opiera się na wielu pakietach językowych i semantycznych, które są niestabilne, ale również bardzo często używane. Należą do nich TextBlob , Spacy itp . Poluzowanie zależności od takich pakietów nie tylko zmniejsza czas odpowiedzi pakietu, ale także zwiększa stabilność pakietu. Ponadto, jeśli nie przypniemy zależności, napotkamy nieoczekiwane wyniki lub zachowania prowadzące do awarii CI. Ponieważ pakiety ciągle ewoluują, a repozytorium pakietów ma miejsce wiele wkładów, utrzymywanie dziennika zmian i testowanie całościowego przepływu pakietu za każdym razem, gdy wprowadzana jest zmiana, jest koniecznością.
Zacząłem od przeczytania dokumentacji i tego, jak jest ona zaimplementowana w notatnikach Jupytera (Colab/Kaggle). Pakiet początkowo cierpiał z powodu konfliktów zależności ze środowiskami Colab i Kaggle. Można to łatwo rozwiązać, zmieniając kolejność, w jakiej pakiety były instalowane przez pip w notebookach i odinstalowując pakiet „typing” przed jego zainstalowaniem.
Szczegółowy przegląd otwartych problemów i próśb o ściągnięcie pozwala lepiej zrozumieć obszary pakietu, które wymagają naprawy lub są otwarte na wkład. Możesz albo wybrać jeden z otwartych problemów, albo poszukać w pakiecie sekcji, które wymagają poprawy i rozpocząć współpracę z programistami.
Przejrzałem problemy i różne funkcjonalności i znalazłem pewne obszary ulepszeń. Funkcja sprawdzania gramatyki podczas testowania na dużych tekstowych zbiorach danych reagowała bardzo długo. Zależało to od pakietu language-tool-python , który nie uwzględniał znaków interpunkcyjnych i miał wysoki czas odpowiedzi. Zastąpiłem pakiet Gingeritem : narzędziem do poprawiania gramatyki na podstawie kontekstu pełnych zdań. Podczas testów na notebookach Jupyter całkowity czas odpowiedzi profilera został skrócony o 8 sekund .
Ponadto obliczenie funkcji sprawdzania pisowni również zajęło dużo czasu, aby odpowiedzieć, nawet w przypadku małych zestawów danych. Opierał się on na formule:
Formułę można zastąpić rozmytymi algorytmami , aby dopasować się do wszelkiego rodzaju obliczeń kar za błędy ortograficzne. Na przykład „I ma bda persno” daje wynik pisowni 85% z formułą. Jednak przy algorytmach rozmytych daje wynik 73% , który jest lepiej zgodny z ludzką percepcją. Co więcej, wymóg używania TextBlob do tokenizacji można również złagodzić za pomocą pakietu SymSpell , który twierdzi, że jest znacznie szybszy niż jakikolwiek inny dostępny moduł sprawdzania pisowni.
Zmiany te, zanim zostaną wprowadzone, muszą zostać udokumentowane w żądaniach ściągnięcia, tworzonych dla każdego z nich. Każdy, kto tworzy pull request, musi bezwzględnie przestrzegać pewnych wytycznych . Wytyczne te pomagają w utrzymaniu stabilności głównej gałęzi repozytorium i informują autora o możliwych konfliktach, które mogą wyniknąć z wprowadzonych przez niego zmian.
Testowanie na komputerze lokalnym przed utworzeniem żądania ściągnięcia jest bardzo potrzebne. Repozytorium ma pewne testy „ wolne ” i „ dymne ”, które należy uruchomić na zmienionym repozytorium po twojej stronie przed wysłaniem żądania ściągnięcia.
Dodatkowo repozytorium posiada wtyczkę Sourcery AI , która sprawdza wprowadzone zmiany i daje szczegółowy raport o tym, czy zmiany poprawiają jakość repozytorium, a jeśli nie, to gdzie konieczne są ulepszenia. GitHub Action przeprowadza kilka innych kontroli, takich jak CodeQL , kompleksowy przepływ i wstępne zatwierdzenie . Zapewniają one bezkonfliktowe łączenie żądań ściągnięcia.
Za I przeciw
Istnieje kilka wskazówek, których należy przestrzegać. Opierają się one całkowicie na moim dotychczasowym doświadczeniu.
- Przeczytaj pliki przeceny, które zawierają szczegółowe informacje o wkładach i zmianach wprowadzonych do tej pory. Są one niezbędne, aby mieć wstępne wyobrażenie o przepływie pracy.
- Zezwól akcjom Github na twoim rozwidlonym repozytorium na uruchamianie kompleksowych akcji przepływu pracy dla każdej gałęzi, aby zapewnić stabilność kompilacji.
- Testowanie w lokalnym środowisku z kilkoma przypadkami testowymi jest obowiązkowe, aby upewnić się, że zmiany działają zgodnie z oczekiwaniami.
- Dla współtwórcy-amatora, takiego jak ja, bardzo ważne jest dokładne zapoznanie się z pakietem przed wprowadzeniem jakichkolwiek dużych zmian.
- Rozwiązywanie zależności lub tworzenie lokalnego środowiska do testowania może być wyzwaniem. Można przejść do alternatywy Github1s , która umożliwia edytor online VSCode na repozytorium.
Przyszły zakres
Plik sprawdzania pisowni wymaga dalszej naprawy, ponieważ nie przeszedł pewnych testów akceptacyjnych i wydajnościowych. To musi zostać naprawione i dlatego jest wspomniane w otwartych wydaniach repozytorium. Niektóre szczegółowe funkcje, takie jak „ repeat_letters_count ”, „ repeat_digits_count” , „ repeat_spaces_count ” , „ repeat_whitespaces_count ”, „ repeat_punctuations_count ”, „ english_characters_count ” i „ non_english_characters_count ”, wymagają naprawy , ponieważ zwykle nie są tworzone po wywołaniu profilera.
Biorąc pod uwagę doświadczenie zdobyte podczas pracy nad tym pakietem, aspiruję do wniesienia wkładu w Keras-NLP w podobny sposób i wniesienia wkładu do świata lingwistyki, na swój skromny sposób.
Bibliografia
- Otwarte wydania NLP-Profiler
- Tworzenie środowiska lokalnego
- Notatnik NLP-Profiler Kaggle
- Zbuduj testowanie w Github
- Pull-Requests, nad którymi pracowałem: 1. Sprawdzanie pisowni 2. Sprawdzanie gramatyki
- Dalsze działania: 1. Naprawiony błąd 2. Dostosuj pakiet do python3.9
- Dodatkowe aktualizacje w pakiecie.
- Zwolennicy pakietu .
- Przewodnik dotyczący wkładu.
- Dodatkowe pakiety do współtworzenia .
- Edytor fragmentów kodu

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































