zpwiki/pages/students/2016/maros_harahus/timovy_projekt
2020-10-02 16:58:47 +02:00
..
README.md

title published taxonomy
Spracovanie prirodzeného jazyka true
category tag author
tp2020
spacy
nlp
Maroš Harahus

NLP

Je založený na umelej inteligencii, ktorá sa zaoberá interakciami medzi počítačom a jazykmi. NLP uľahčuje proces analýzy a porozumenia ľudského jazyka pre počítače a umelú inteligenciu. Pomáha extrahovať informácie z textu. V dnešnej dobe sa textové údaje vytvárajú vo veľkom množstve a je ich dôležité spravovať a odovzdať informácie z neštruktúrovaných údajov. Preto musíme údaje reprezentovať vo formáte v ktorom počítače rozumejú a v tomto prípade nám pomáha NLP. Má niekoľko prípadov použitia:

  • Automatické zhrnutie
  • Uznanie pomenovaného subjektu
  • Systémy odpovedania na otázky
  • Analýza sentimentu

SPACY

Je bezplatná knižnica pre NLP v programovacom jazyku python. Táto knižnica je napísala v Cythone a je určená pre budovanie extrakcie informácii alebo pochopenie prirodzeného jazyka. Je navrhnutý pre použitie v pythone a ponuka priateľské rozhranie API.

Detekcia viet

Detekcia viet je proces lokalizácie začiatku a konca vety v danom texte. Tato detekcia nám umožňuje rozdeliť vetu resp. text na jazykovo významne jednotky. Tieto jednotky potom môžem využívať pri spracovaní text na vykonávanie úloh ako napríklad označovanie reči.

Part-of-speech (Part of Speech)

Značkovanie pomocou Part of Speech je proces označovania slova pomocou príslušnej časti reči, ako je podstatné meno, prídavné meno, sloveso, príslovka atď. Podľa gramatických pravidiel jazyka, ktoré sa ďalej konštruujú na základe kontextu výskytu slova a jeho vzťahy s inými slovami vo vete. Po tokenizácii môže spacy daný objekt označiť pomocou svojich najmodernejších štatistických modelov. Značky sú k dispozícii ako atribút objektu Token.

Tokenizácia

Tokenizácia sa voľne označuje ako segmentácia textového dokumentu na slová, ktoré sa tiež nazývajú tokeny. Token je definovaný ako postupnosť znakov, ktoré spolu tvoria sémantickú jednotku pri spracovaní textu. V niektorých kontextoch nemusia byť tokeny slovami a môžu pozostávať zo slov alebo dokonca viacslovných fráz v závislosti od toho, čo sa považuje za sémantickú jednotku. Spacy tonizuje daný text na slová a interpunkcie použitím pravidiel, ktoré sú vyladené pre konkrétny jazyk. Najnákladnejšie pravidlo pre anglický jazyk je rozdelenie postupnosti znakov v texte na medzery (napr. Medzeru), často známe ako točenie medzier.

  • text_with_ws tlačí tokenový text s medzerou (ak je k dispozícii),
  • is_alpha zistí, či token pozostáva z abecedných znakov alebo nie,
  • is_punct zistí, či je token interpunkčný symbol alebo nie,
  • is_space zistí, či je token medzerou alebo nie,
  • shape_ vytlačí tvar slova,
  • is_stop zistí, či je token zastavovacím slovom alebo nie,
Skratka Anglicky vyznam Slovensky vyznam
ADJ adjective prídavné meno
ADP adposition umiestnenie
ADV adverb príslovka
AUX auxiliary verb pomocné sloveso
CONJ coordinating conjunction koordinačná spojka
DET determiner determinant
INTJ interjection prerušenie
NOUN noun podstatné meno
NUM numeral číslice
PART particle častica
PRON pronoun zámeno
PROPN proper noun vlastné meno
PUNCT punctuation interpunkcia
SCONJ subordinating conjunction podriadená spojka
SYM symbol symbol
VERB verb sloveso
X other iné
Tag Description Slovensky vyznam Example
CC conjunction, coordinating and, or, but
CD cardinal number five, three, 13%
DT determiner the, a, these
EX existential there there were six boys
FW foreign word mais
IN conjunction, subordinating or preposition of, on, before, unless
JJ adjective nice, easy
JJR adjective, comparative nicer, easier
JJS adjective, superlative nicest, easiest
LS list item marker
MD verb, modal auxillary may, should
NN noun, singular or mass tiger, chair, laughter
NNS noun, plural tigers, chairs, insects
NNP noun, proper singular Germany, God, Alice
NNPS noun, proper plural we met two Christmases ago
PDT predeterminer both his children
POS possessive ending 's
PRP pronoun, personal me, you, it
PRP$ pronoun, possessive my, your, our
RB adverb extremely, loudly, hard
RBR adverb, comparative better
RBS adverb, superlative best
RP adverb, particle about, off, up
SYM symbol %
TO infinitival to what to do
UH interjection oh, oops, gosh
VB verb, base form think
VBZ verb, 3rd person singular present she thinks
VBP verb, non-3rd person singular present I think
VBD verb, past tense they thought
VBN verb, past participle a sunken ship
VBG verb, gerund or present participle thinking is fun
WDT wh-determiner which, whatever, whichever
WP wh-pronoun, personal what, who, whom
WP$ wh-pronoun, possessive whose, whosever
WRB wh-adverb where, when

Inštalácia spacy

pip install -U spaCy //instalacia spacy
python -m spacy download en //instalacia anglickeho jazyka

prvý kód

import spacy
nlp = spacy.load('en')
doc = nlp('Hello     World!')
for token in doc:
    print('"' + token.text + '"', token.idx)
#Vystup
# "Hello" 0
# "    " 6
# "World" 10
# "!" 15

Ako prvé si importujeme spacy knižnicu. Zadáme vetu, ktorú chceme prejsť tokenizáciu. V tomto pípade používame iba dva tokeny. Prvý nám vypíše text a medzeri, druhý token nám napíše, na ktorom mieste sa nachádza naše slovo.

doc = nlp("Next week I'll   be in Madrid.")
for token in doc:
    print("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}".format(
        token.text,
        token.idx,
        token.lemma_,
        token.is_punct,
        token.is_space,
        token.shape_,
        token.pos_,
        token.tag_
    ))

#vystup
# Next  0   next    False   False   Xxxx    ADJ JJ
# week  5   week    False   False   xxxx    NOUN    NN
# I 10  -PRON-  False   False   X   PRON    PRP
# 'll   11  will    False   False   'xx VERB    MD
#       15      False   True        SPACE   _SP
# be    17  be  False   False   xx  VERB    VB
# in    20  in  False   False   xx  ADP IN
# Madrid    23  madrid  False   False   Xxxxx   PROPN   NNP
# . 29  .   True    False   .   PUNCT  
  • token.text reprezentácia textu dokumentu v Unicode,
  • token.idx znakový index začiatku,
  • token.lemma_ základná podoba tokenu bez inflexných prípon,
  • token.is_punct je to interpunkcia znamienka,
  • token.is_space pozostáva token z bielych znakov,
  • token.shape_ transformácia reťazca tokenov na zobrazenie ortografických prvkov, napríklad „Xxxx“ alebo „dd“
  • token.pos_ hrubozrnná časť reči,
  • token.tag_ jemnozrnná reč.

Poďme si rozobrať výstup prvého slova Next. Ako prvé sa nám vypíše samotné slovo, ďalej nasleduje, na ktorom indexe slovo začína. V našom prípade je to index 0. V ďalšom stĺpci máme slovo napísané pomocou malých písmen. Ďalšie dva stĺpce nám zisťujú, či dané slovo obsahuje interpunkčné znamienko (napr. apostrof) a či slovo nepozostáva z medzery. Predposledný stĺpec nám zisťuje, aký slovný druh (viď. tabuľku nižšie) je dané slovo v našom prípade je to podstatné meno atd.

Detekcia vety

doc = nlp("These are apples. These are oranges.")
 
for sent in doc.sents:
    print(sent)
 
# These are apples.
# These are oranges.

Pomenovanie entit

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")

for ent in doc.ents:
    print(ent.text, ent.start_char, ent.end_char, ent.label_)
 
#Apple 0 5 ORG
#U.K. 27 31 GPE
#$1 billion 44 54 MONEY

Na tomto príklade môžme pozorovať, že spacy dokáže rozlíšiť slova. Dokáže zistiť či dané slovo je napr. mesto(GPE-Geopolitical entity) alebo nejaká organizácia (ORG- Companies). Ďalej vie určiť či sa jedná o dátum, sumu peňazí, osobu atď. .

Záver

V tomto semestri som sa venoval programovaciemu jazyku python. Študoval som tento programovací jazyk jeho syntax a ďalšie veci okolo tohto programovacieho jazyka. V ďalšej časti som sa venoval frameworku Spacy ktorý vytvára model pre Part Of Speech tagging. Zisťoval som čo tento framework dokáže robiť a na akom princípe funguje. Ďalších semestroch sa budem venovať podpory slovenského jazyka pre framework Spacy. Konkrétne vytvorené značkovania v slovenskom jazyku. Ako prvé si musím naštudovať sadu slovenského národného korpusu a na akom princípe funguje. V letnom semestri by som už vytvoriť mapovanie morfologických značiek slovenského národného korpusu. Ako hlavne body mojej diplomovej prace budú vypracovanie prehľadu spôsobu morfologickej anotácie slovenského jazyka. Taktiež si budem musieť pripraviť nejaké dáta s ktorými by som mohol pracovať vo svojej diplomovej práci. Poslednou cestou mojej prace bude vyhodnotiť presnosť značkovania mnou vytvoreného nastroja a navrhnúť nejaké zlepšenia ktoré by sa mohli do budúcna implementovať.