python - spacy opretter ny sprogmodel med data fra corpus

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at oprette en ny sprogmodel (luxembourgsk) i spaCy, men jeg er forvirret på, hvordan man gør dette.


Jeg fulgte instruktionerne på deres hjemmeside og gjorde en lignende ting som i dette indlæg. Men hvad jeg ikke forstår, er, hvordan man tilføjer data som et ordforråd eller wordvectors. (fx 'udfyld' sprogskabelonen) [7]


Jeg forstår, at der er nogle dev-værktøjer til samme af disse operationer, men deres udførelse er dårligt dokumenteret, så jeg ikke får hvordan man installerer og bruger dem ordentligt, især da de synes at være i python 2.7, der kolliderer med min spacy-installation som den bruger python 3. [9]


For nu har jeg en corpus.txt (fra et wikipediadump), som jeg vil træne og en sprogskabelon med standardindstillingerne som stop\_words.py, tokenizer\_exceptions.py osv., Som jeg lavede og udfyldte med hånden .


Nogen nogensinde har gjort det ordentligt og kunne hjælpe mig her?

Bedste reference


Der er tre hovedkomponenter i en 'sprogmodel' i spaCy: de 'statiske' sprogspecifikke data afsendt i Python (tokenizer-undtagelser, stopord, regler for kortlægning af finkornet til grovkornet del -tale-tags), er den statistiske model uddannet til at forudsige part-of-speech-tags, afhængigheder og navngivne enheder (uddannet på et stort mærket corpus og inkluderet som binære vægte) og valgfrit ord vektorer der kan konverteres og tilføjes før eller efter træning. Du kan også træne dine egne vektorer på din rå tekst ved hjælp af et bibliotek som Gensim og derefter tilføje dem til spaCy. [10] [11]


spaCy v2.x giver dig mulighed for at træne alle pipeline komponenter uafhængigt eller i gang, så du kan træne tagger, parser og entity recognizer på dine data. Alt dette kræver mærket data . Hvis du træner et nyt sprog fra bunden, bruger du normalt en eksisterende trebank. Her er et eksempel på Universal Dependencies corpus for spansk (som også er den, der blev brugt til at uddanne spaCys spanske model). Du kan konverter derefter dataene til spaCys JSON-format og brug kommandoen spacy train til at træne en model. For eksempel: [12] [13]


git clone https://github.com/UniversalDependencies/UD\_Spanish-AnCora
mkdir ancora-json
python -m spacy convert UD\_Spanish-AnCora/es\_ancora-ud-train.json ancora-json
python -m spacy convert UD\_Spanish-AnCora/es\_ancora-ud-dev.json ancora-json
mkdir models
python -m spacy train es models ancora-json/es\_ancora-ud-train.json ancora-json/es\_ancora-ud-dev.json


Jeg ved ikke hvad der er i din corpus.txt, og om det er fuldt mærket eller kun rå tekst. (Jeg kender heller ikke til eksisterende ressourcer til luxembourgsk - lyder som det er muligvis ret svært at find!) Hvis dine data er mærket, kan du konvertere det til spaCys format ved hjælp af en af ​​de indbyggede konvertere eller dit eget lille script. Hvis dit korpus består af kun rå tekst, skal du først mærke det og se om det er egnet til at træne en generel sprogmodel. I sidste ende kommer det til at eksperimentere - men her er nogle strategier: [14]



  • Mærk hele dit corpus manuelt for hver komponent - f.eks. del-of-speech-tags, hvis du vil træne taggeren, afhængighedsetiketter, hvis du vil træne parseren, og enhed spænder, hvis du vil træne enhedens genkendelse. Du har brug for meget af data - ideelt set et corpus af samme størrelse som de universelle afhængigheder dem.

  • Eksperiment med at undervise en eksisterende prædisciplineret model luxembourgsk - for eksempel den tyske model. Det kan måske lyde mærkeligt, men det er ikke en usædvanlig strategi. I stedet for at træne fra bunden, efteruddanner du den eksisterende model med eksempler på luxembourgsk (ideelt, indtil dens forudsigelser på din luxembourgske tekst er gode nok). Du kan også skabe mere træne data ved at køre den tyske model over din luxembourgske tekst og udvinde og rette op på sine fejl (se her for detaljer).



Husk at du altid har brug for evalueringsdata også (også omtalt som 'udviklingsdata' i docs). Dette er normalt en tilfældig del af dine mærkede data, som du holder tilbage under træningen og bruger til at bestemme, om din model forbedres. [15] [16]