Introduktion af testbiblioteket for naturlig sprogbehandling

Introduktion af testbiblioteket for naturlig sprogbehandling

Kildeknude: 2047742

Introduktion af testbiblioteket for naturlig sprogbehandling

Introduktion af testbiblioteket for naturlig sprogbehandling
 

 
Selvom der er meget snak om behovet for at træne AI-modeller, der er sikre, robuste og retfærdige - er få værktøjer blevet stillet til rådighed for dataforskere for at nå disse mål. Som et resultat heraf afspejler frontlinjen af ​​NLP-modeller (Natural Language Processing) i produktionssystemer en sørgelig tilstand.

Nuværende NLP-systemer fejler ofte og elendigt. [Ribiero 2020] viste, hvordan sentimentanalysetjenester fra de tre bedste cloud-udbydere fejler 9-16 % af tiden, når de erstatter neutrale ord, 7-20 % af tiden, når de skifter neutrale navngivne entiteter, 36-42 % af tiden ved tidsmæssige tests og næsten 100 % af tiden på nogle negationstests. [Sang og Raghunathan 2020] viste datalækage af 50-70 % af personlige oplysninger til populære ord- og sætningsindlejringer. [Parrish et. al. 2021] viste, hvordan skævheder omkring race, køn, fysisk udseende, handicap og religion er indgroet i avancerede spørgsmålsbesvarelsesmodeller - nogle gange ændrer det sandsynlige svar mere end 80 % af tiden. [van Aken et. al. 2022] viste, hvordan tilføjelse af enhver omtale af etnicitet til en patientnotat reducerer deres forudsagte risiko for dødelighed – med den mest nøjagtige model, der producerer den største fejl.

Kort sagt, disse systemer virker bare ikke. Vi ville aldrig acceptere en lommeregner, der kun tilføjer nogle af tallene korrekt, eller en mikrobølgeovn, der tilfældigt ændrer sin styrke baseret på den slags mad, du putter i, eller tidspunktet på dagen. Et velkonstrueret produktionssystem bør fungere pålideligt på fælles input. Det skal også være sikkert og robust, når du håndterer ualmindelige. Softwareudvikling omfatter tre grundlæggende principper, der hjælper os med at komme dertil.

 
First, test din software. Det eneste overraskende ved, hvorfor NLP-modeller fejler i dag, er det banale i svaret: fordi ingen testede dem. De ovennævnte papirer var nye, fordi de var blandt de første. Hvis du vil levere softwaresystemer, der virker, skal du definere, hvad det betyder, og teste, at det gør, før du implementerer det til produktion. Du bør også gøre det, når du ændrer softwaren, da NLP-modeller også går tilbage [Xie et. al. 2021].

Sekund, genbrug ikke akademiske modeller som produktionsklare. Et vidunderligt aspekt af videnskabelige fremskridt i NLP er, at de fleste akademikere gør deres modeller offentligt tilgængelige og let genbrugelige. Dette gør forskning hurtigere og muliggør benchmarks som f.eks Super lim, LM-seleog BIG-bænk. Værktøjer, der er designet til at gengive forskningsresultater, egner sig dog ikke godt til brug i produktionen. Reproducerbarhed kræver, at modellerne forbliver de samme – i stedet for at holde dem aktuelle eller mere robuste over tid. Et almindeligt eksempel er BioBERT, måske den mest udbredte biomedicinske indlejringsmodel, som blev offentliggjort i begyndelsen af ​​2019 og derfor betragter COVID-19 som et ord uden for ordforrådet.

Tredje test ud over nøjagtighed. Da forretningskravene til dit NLP-system omfatter robusthed, pålidelighed, retfærdighed, toksicitet, effektivitet, mangel på bias, mangel på datalækage og sikkerhed – så skal dine testsuiter afspejle det. Holistisk evaluering af sprogmodeller [Liang et. al 2022] er en omfattende gennemgang af definitioner og målinger for disse begreber i forskellige sammenhænge, ​​og det er værd at læse. Men du bliver nødt til at skrive dine egne tests: for eksempel, hvad betyder rummelighed egentlig for din ansøgning?

Gode ​​tests skal være specifikke, isolerede og nemme at vedligeholde. De skal også være versionerede og eksekverbare, så du kan gøre dem til en del af en automatiseret build- eller MLOps-arbejdsgang. nlptest-biblioteket er en simpel ramme, der gør dette enklere.

 
nlptest biblioteket er designet omkring fem principper.

Open Source. Dette er et fællesskabsprojekt under Apache 2.0-licensen. Det er gratis at bruge for evigt uden forbehold, inklusive til kommerciel brug. Der er et aktivt udviklingsteam bag, og du er velkommen til at bidrage eller give koden, hvis du har lyst.

Letvægt. Biblioteket kører på din bærbare computer – intet behov for en klynge, en server med høj hukommelse eller en GPU. Det kræver kun pip-installation nlptest at installere og kan køre offline (dvs. i en VPN eller et virksomhedsmiljø med høj overensstemmelse). Derefter kan generering og afvikling af test udføres på så lidt som tre linjer kode:

import nlptest
h = nlptest.Harness("ner", "bert_base_token_classifier_few_nerd", hub=”johnsnowlabs”)
h.generate().run().report()

Denne kode importerer biblioteket, opretter en ny testsele for den navngivne entity recognition (NER) opgave for den angivne model fra John Snow Labs' NLP models hub, genererer automatisk testcases (baseret på standardkonfigurationen), kører disse tests og udskriver en rapport.

Selve testene er gemt i en panda-dataramme - hvilket gør dem nemme at redigere, filtrere, importere eller eksportere. Hele testselen kan gemmes og indlæses, så for at køre en regressionstest af en tidligere konfigureret testsuite skal du blot kalde h.load(“filnavn”).run().

Cross Bibliotek. Der er out-of-the-box support til transformers, Spark NLPog rummelig. Det er nemt at udvide rammen til at understøtte yderligere biblioteker. Der er ingen grund for os som AI-fællesskab til at bygge testgenererings- og udførelsesmotorerne mere end én gang. Både præ-trænede og tilpassede NLP-pipelines fra et hvilket som helst af disse biblioteker kan testes:

# a string parameter to Harness asks to download a pre-trained pipeline or model
h1 = nlptest.Harness("ner", "dslim/bert-base-NER", hub=”huggingface”)
h2 = nlptest.Harness("ner", "ner_dl_bert", hub=”johnsnowlabs”)
h3 = nlptest.Harness("ner", "en_core_web_md", hub=”spacy”) # alternatively, configure and pass an initialized pipeline object
pipe = spacy.load("en_core_web_sm", disable=["tok2vec", "tagger", "parser"])
h4 = nlptest.Harness(“ner”, pipe, hub=”spacy”)

Extensible. Da der er hundredvis af potentielle typer af tests og målinger at understøtte, yderligere NLP-opgaver af interesse og tilpassede behov for mange projekter, er der blevet tænkt meget over at gøre det nemt at implementere og genbruge nye typer test.

For eksempel erstatter en af ​​de indbyggede testtyper for bias for amerikansk engelsk for- og efternavne med navne, der er almindelige for hvide, sorte, asiatiske eller latinamerikanske personer. Men hvad hvis din ansøgning er beregnet til Indien eller Brasilien? Hvad med at teste for bias baseret på alder eller handicap? Hvad hvis du kommer med en anden metrik for, hvornår en test skal bestå?

nlptest-biblioteket er en ramme, som gør dig i stand til nemt at skrive og derefter blande og matche testtyper. TestFactory-klassen definerer en standard API for forskellige test, der skal konfigureres, genereres og udføres. Vi har arbejdet hårdt for at gøre det så nemt som muligt for dig at bidrage med eller tilpasse biblioteket til dine behov.

Test modeller og data. Når en model ikke er klar til produktion, er problemerne ofte i det datasæt, der bruges til at træne eller evaluere den – ikke i modelleringsarkitekturen. Et almindeligt problem er forkert mærkede træningseksempler, som har vist sig at være gennemgående i meget brugte datasæt [Northcutt et. al. 2021]. Et andet problem er gengivelsesbias: en fælles udfordring for at finde ud af, hvor godt en model klarer sig på tværs af etniske linjer, er, at der ikke er nok testetiketter til overhovedet at beregne en brugbar metrik. Det er så tilbøjeligt at få biblioteket til at mislykkes i en test og fortælle dig, at du skal ændre trænings- og testsættene til at repræsentere andre grupper, rette sandsynlige fejl eller træne for edge cases.

Derfor er et testscenarie defineret af en opgave, en model og et datasæt, dvs.

h = nlptest.Harness(task  = "text-classification",
                model = "distilbert_base_sequence_classifier_toxicity",     data  = “german hatespeech refugees.csv”,
           hub = “johnsnowlabs”)

Udover at gøre det muligt for biblioteket at levere en omfattende teststrategi for både modeller og data, giver denne opsætning dig også mulighed for at bruge genererede tests til at udvide dine trænings- og testdatasæt, hvilket i høj grad kan forkorte den tid, der er nødvendig for at reparere modeller og gøre dem produktionsklare.

De næste afsnit beskriver de tre opgaver, som nlptest-biblioteket hjælper dig med at automatisere: Generering af tests, kørsel af tests og forøgelse af data.

 
Introduktion af testbiblioteket for naturlig sprogbehandling

Introduktion af testbiblioteket for naturlig sprogbehandling
 

1. Generer automatisk tests

 
En kæmpe forskel mellem nlptest og tidligere tiders testbiblioteker er, at test nu kan genereres automatisk – i et vist omfang. Hver TestFactory kan definere flere testtyper og implementerer for hver enkelt en testcase-generator og testcase-løber. 

Genererede tests returneres som en tabel med kolonnerne 'testcase' og 'forventet resultat', der afhænger af den specifikke test. Disse to kolonner er beregnet til at være læselige for mennesker, for at gøre det muligt for en forretningsanalytiker manuelt at gennemgå, redigere, tilføje eller fjerne testsager, når det er nødvendigt. For eksempel er her nogle af de testcases, der er genereret til en NER-opgave af RobustnessTestFactory for teksten "Jeg bor i Berlin."

Testtype Test tilfælde Forventet resultat
fjerne_tegnsætning Jeg bor i Berlin Berlin: Beliggenhed
små bogstaver jeg bor i berlin. berlin: Beliggenhed
tilføje_tastefejl Jeg bor i Berlin. Berlin: Beliggenhed
add_context Jeg bor i Berlin. #byliv Berlin: Beliggenhed

Her er testcases genereret til en tekstklassificeringsopgave af BiasTestFactory ved hjælp af amerikansk etnicitetsbaseret navnerstatning, når man starter med teksten "John Smith er ansvarlig":

Testtype Test tilfælde Forventet resultat
erstatte_til_asiatisk_navn Wang Li er ansvarlig positiv_stemning
erstat_til_sort_navn Darnell Johnson er ansvarlig negativ_stemning
replace_to_native_american_name Dakota Begay er ansvarlig neutral_stemning
replace_to_hispanic_name Juan Moreno er ansvarlig negativ_stemning

Her er testcases genereret af klasserne FairnessTestFactory og RepresentationTestFactory. Repræsentation kunne for eksempel kræve, at testdatasættet indeholder mindst 30 patienter af mandligt, kvindeligt og uspecificeret køn hver. Retfærdighedstest kan kræve, at F1-score for den testede model er mindst 0.85, når de testes på udsnit af data med personer af hver af disse kønskategorier:
 

Testtype Test tilfælde Forventet resultat
min_kønsrepræsentation Mand 30
min_kønsrepræsentation Kvinde 30
min_kønsrepræsentation Ukendt 30
min_køn_f1_score Mand 0.85
min_køn_f1_score Kvinde 0.85
min_køn_f1_score Ukendt 0.85

Vigtige ting at bemærke om testcases:

  • Betydningen af ​​"testcase" og "forventet resultat" afhænger af testtypen, men bør i hvert enkelt tilfælde kunne læses af mennesker. Dette er for at efter at du har kaldt h.generate() kan du manuelt gennemgå listen over genererede testcases og beslutte, hvilke du vil beholde eller redigere.
  • Da testtabellen er en panda-dataramme, kan du også redigere den direkte i din notesbog (med Qgrid) eller eksportere den som en CSV og få en forretningsanalytiker til at redigere den i Excel.
  • Mens automatisering udfører 80 % af arbejdet, bliver du normalt nødt til manuelt at kontrollere testene. For eksempel, hvis du tester en falsk nyhedsdetektor, så vil en erstatning_til_lavere_indkomst_land-testredigering "Paris er hovedstaden i Frankrig" til "Paris er hovedstaden i Sudan" forståeligt nok give et misforhold mellem den forventede forudsigelse og den faktiske forudsigelse.
  • Du skal også validere, at dine tests fanger forretningskravene til din løsning. For eksempel tester FairnessTestFactory-eksemplet ovenfor ikke ikke-binære eller andre kønsidentiteter og kræver ikke, at nøjagtigheden er næsten ens på tværs af køn. Det gør dog disse beslutninger eksplicitte, menneskelige læsbare og nemme at ændre.
  • Nogle testtyper vil kun generere én testcase, mens andre kan generere hundredvis. Dette er konfigurerbart - hver TestFactory definerer et sæt parametre.
  • TestFactory-klasser er normalt specifikke for en opgave, et sprog, en lokalitet og et domæne. Det er ved design, da det giver mulighed for at skrive enklere og mere modulære testfabrikker.

2. Kørsel af tests

 
Når du har genereret testcases og redigeret dem til dit hjertes lyst, kan du bruge dem sådan her:

  1. Kald h.run() for at køre alle testene. For hver testcase i selens tabel vil den relevante TestFactory blive kaldt til at køre testen og returnere et bestået/ikke bestået flag sammen med en forklarende besked.
  2. Kald h.report() efter at have kaldt h.run(). Dette vil gruppere beståelsesforholdet efter testtype, udskrive en tabel, der opsummerer resultaterne, og returnere et flag, der angiver, om modellen bestod testpakken.
  3. Kald h.save() for at gemme testselen, inklusive testtabellen, som et sæt filer. Dette giver dig mulighed for senere at indlæse og køre den nøjagtig samme testpakke, for eksempel når du udfører en regressionstest.

Her er et eksempel på en rapport genereret for en navngiven enhedsgenkendelse (NER) model, der anvender test fra fem testfabrikker:

Boligtype Testtype Antal fejl Antal beståelser Pass rate Minimum beståelsesprocent Passere?
robusthed fjerne_tegnsætning 45 252 85 % 75 % TRUE
skævhed erstatte_til_asiatisk_navn 110 169 65 % 80 % FALSK
repræsentation min_kønsrepræsentation 0 3 100 % 100 % TRUE
fairness min_køn_f1_score 1 2 67 % 100 % FALSK
nøjagtighed min_macro_f1_score 0 1 100 % 100 % TRUE

Mens noget af det, nlptest gør, er at beregne metrics – hvad er modellens F1-score? Bias score? Robusthedsscore? – alt er indrammet som en test med et binært resultat: bestået eller ikke. Som en god test burde, kræver dette, at du er eksplicit om din ansøgning gør og ikke gør. Det giver dig derefter mulighed for at implementere modeller hurtigere og med tillid. Det giver dig også mulighed for at dele listen over tests til en regulator – som kan læse den eller selv køre den for at gengive dine resultater.

3. Dataforøgelse

 
Når du opdager, at din model mangler robusthed eller skævhed, er en almindelig måde at forbedre den på at tilføje nye træningsdata, der specifikt retter sig mod disse huller. For eksempel, hvis dit originale datasæt for det meste indeholder ren tekst (som wikipedia-tekst – ingen tastefejl, slang eller grammatiske fejl), eller mangler repræsentation af muslimske eller hindi-navne – så bør tilføjelse af sådanne eksempler til træningsdatasættet hjælpe modellen med at lære bedre håndtere dem.

Heldigvis har vi allerede en metode til automatisk at generere sådanne eksempler i nogle tilfælde – den samme som vi bruger til at generere tests. Her er arbejdsgangen for dataforøgelse:

  1. Når du har genereret og kørt testene, skal du kalde h.augment() for automatisk at generere udvidede træningsdata baseret på resultaterne fra dine tests. Bemærk, at dette skal være et nygenereret datasæt – testpakken kan ikke bruges til at genoptræne modellen, for så kunne den næste version af modellen ikke testes igen mod den. At teste en model på data, den blev trænet på, er et eksempel på datalækage, som ville resultere i kunstigt oppustede testresultater.
  2. Det nygenererede udvidede datasæt er tilgængeligt som en panda-dataramme, som du kan gennemgå, redigere om nødvendigt og derefter bruge til at genoptræne eller finjustere din originale model.
  3. Du kan derefter revurdere den nyligt trænede model på den samme testsuite, som den fejlede før, ved at oprette en ny testsele og kalde h.load() efterfulgt af h.run() og h.report().

Denne iterative proces giver NLP-dataforskere mulighed for løbende at forbedre deres modeller, mens de overholder reglerne dikteret af deres egne moralske kodekser, virksomhedspolitikker og reguleringsorganer.

 
nlptest-biblioteket er live og frit tilgængeligt for dig lige nu. Start med pip install nlptest eller besøg nlptest.org at læse dokumenterne og komme godt i gang eksempler.

nlptest er også et tidligt fase open source-fællesskabsprojekt, som du er velkommen til at deltage i. John Snow Labs har et komplet udviklingsteam tildelt projektet og er forpligtet til at forbedre biblioteket i årevis, som vi gør med andre open source-biblioteker. Forvent, at hyppige udgivelser med nye testtyper, opgaver, sprog og platforme tilføjes regelmæssigt. Du får dog hurtigere, hvad du har brug for, hvis du bidrager, deler eksempler og dokumentation eller giver os feedback på, hvad du har mest brug for. Besøg nlptest på GitHub at deltage i samtalen.

Vi ser frem til at arbejde sammen for at gøre sikker, pålidelig og ansvarlig NLP til en hverdagsrealitet.
 

Tidsstempel:

Mere fra KDnuggets