NLP
- ์ ๊ทํํ์
- ์ฒญํน
- ์นญํน
๋ฌธ์ ์ ๋ณด ์ถ์ถ
์ ๊ทํํ์
- ์ ํด์ง ํจํด์ ์ฌ์ฉํด์ ํจํด์ ์ผ์นํ๋ ๋ฐ์ดํฐ ๊ฒ์์ ์ง์ํ๋ ํํ์
-
์ ๊ทํํ์์ ์ฐ์ด๋ ํน์๋ฌธ์
<.*>+
: ์๋ฌด ๋ฌธ์๋ ์ฌ๋ฌ ๊ฐ} {
: } { ์์ ๋ด์ฉ ์ ์ธ"\\n"
=r"\n"
-
์ฝ์ด๋ณด๊ธฐ
re ๋ชจ๋ ํจ์
- ์ฝ์ด๋ณด๊ธฐ
devanix. "ํ์ด์ฌ โ ์ ๊ท์ํํ์(Regular Expression) ๋ชจ๋"
์ฒญํน(Chunking)
- ์ฌ๋ฌ ๊ฐ์ ํ์ฌ๋ก ๊ตฌ(pharase)๋ฅผ ๋ง๋๋ ๊ฒ์ Chunking์ด๋ผ ํ๊ณ , ์ด ๊ตฌ(pharase)๋ฅผ chunk๋ผ ํ๋ค.
- ๋ฌธ์ฅ์ ๊ฐ ํ์ฌ๋ก ๊ตฌ๋ถํ๊ณ , Chunking์ ์ํด ๊ตฌ๋ก ๊ตฌ๋ถํ๋ฉด ๋ฌธ์ฅ์ ์๋ฏธ๋ฅผ ํ์ ํ๊ธฐ ์ฉ์ดํด ์ง๋ค.
- ๋ฌธ์ฅ์์ (DT + JJ + NN), (DT + JJ + JJ + NN), (JJ + NN), ๋ฑ์ ์ํ์ค๋ ๋ชจ๋ ๋ช ์ฌ๊ตฌ (NP : Noun phrase)๋ก ํ๋จํ๋ค
-
If a tag pattern matches at overlapping locations, the leftmost match takes precedence
-
์์
- grammar ์ ์
- ๋์ ๋๋ฆฌ ์ ์: cp = nltk.RegexpParser(grammar)
- sentence data ๋ถ๋ฌ์ค๊ธฐ(ํน์ ํ ์คํธ๋ฅผ ์ํด์๋ผ๋ฉด ๋ง๋ค๊ธฐ)
- ๋์ ๋๋ฆฌ์ ๋ฐ๋ผ sentence ๋ถ์:
cp.parse(sentence)
-
Base code
import nltk grammar = """ NP: {<DT|PP\$>?<JJ>*<NN>} # rule 1 {<NNP>+} # rule 2 """ cp = nltk.RegexpParser(grammar) sentence = [("Rapunzel", "NNP"), ("let", "VBD"), ("down", "RP"), ("her", "PP$"), ("long", "JJ"), ("golden", "JJ"), ("hair", "NN")] cp.parse(sentence)
(S (NP Rapunzel/NNP) let/VBD down/RP (NP her/PP$ long/JJ golden/JJ hair/NN))
result.draw()
์นญํน(Chinking)
- ํน์ ๋ถ๋ถ์ chunk ๋ฐ์ผ๋ก ๋นผ๋ด๋ ๊ฒ์ chinking์ด๋ผ ํ๋ค. Chink๋ ๋ฌธ์ฅ์์ chunk๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ ์๋ฏธํ๋ค
- ๋ฌธ์ฅ ์ ์ฒด๋ฅผ chunk๋ก ์ ์ํ๊ณ , ํน์ ๋ถ๋ถ์ chinkingํ๋ฉด ๋๋จธ์ง ๋ถ๋ถ์ด chunk๊ฐ ๋๋ค. Chinking์ ์ด์ฉํด์ chunking์ ํ ์๋ ์๋ค
- code:
grammar =
r"""
NP:
{<.*>+} # Chunk everything
}<VBD|IN>+{ # Chink sequences of VBD and IN(๋นผ๋ด๋ ๋ถ๋ถ)
"""
sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"),
("dog", "NN"), ("barked", "VBD"), ("at", "IN"),
("the", "DT"), ("cat", "NN")]
cp = nltk.RegexpParser(grammar)
cp.parse(sentence)
Chunk์ ๊ตฌ์กฐ - IOB tags
- Chunk๋ด์ ๊ฐ ํ์ฌ์ ์์น์ ๋ฐ๋ผ B (Begin), I (Inside), O (Outside)๋ฅผ ๋ถ์ธ๋ค (chunk tag).
- B-NP๋ NP chunk์ ์์ ๋ถ๋ถ์ ์๋ฏธํ๊ณ , I-NP๋ NP chunk์ ๋ด๋ถ ๋ถ๋ถ์ ์๋ฏธํ๋ค.
-
Chunk ๊ตฌ์กฐ๋ IOB tags๋ก ํํํ ์๋ ์๊ณ , ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํํํ ์๋ ์๋ค.
- NLTK์์๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
-
code >
- conll2000.iob_sents('train.txt')[99]
[('Over', 'IN', 'B-PP'), ('a', 'DT', 'B-NP'), ('cup', 'NN', 'I-NP'), ('of', 'IN', 'B-PP'), ('coffee', 'NN', 'B-NP'), (',', ',', 'O'), ('Mr.', 'NNP', 'B-NP'), ('Stone', 'NNP', 'I-NP'), ('told', 'VBD', 'B-VP'), ('his', 'PRP$', 'B-NP'), ('story', 'NN', 'I-NP'), ('.', '.', 'O')]
-
์ (Clause)
- ๋ฌธ๋ฒ์ clause (์ )๋ฅผ ์ ์ํ๋ฉด ๋ฌธ์ฅ์ ์๋์ ๊ฐ์ด ๋ถ์ (chunking) ํ ์ ์๋ค.
- Recursion in Linguistic Structure
grammar = r""" NP: {<DT|JJ|NN.*>+} # Chunk sequences of DT, JJ, NN PP: {<IN><NP>} # Chunk prepositions followed by NP VP: {<VB.*><NP|PP|CLAUSE>+$} # Chunk verbs and their arguments CLAUSE: {<NP><VP>} # Chunk NP, VP """ cp = nltk.RegexpParser(grammar) sentence = [("Mary", "NN"), ("saw", "VBD"), ("the", "DT"), ("cat", "NN"), ("sit", "VB"), ("on", "IN"), ("the", "DT"), ("mat", "NN")] print(cp.parse(sentence))
(S (NP Mary/NN) saw/VBD (CLAUSE (NP the/DT cat/NN) (VP sit/VB (PP on/IN (NP the/DT mat/NN)))))
.RegexpParser()
์ loop = 2๋ฅผ ์ง์ ํ๋ฉด ์๋์ ๊ฐ์ด clause ์์ ๋ ๋ค๋ฅธ clause๋ฅผ ์ฌ๊ท์ (recursion)์ผ๋ก ๋ถ์ํ๋ค. ์ด์ ๊ฐ์ด ๋ฌธ์ฅ์ ๋ง๊ฒ ํธ๋ฆฌ๋ฅผ ๊น๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ์cascaded chunking (๊ณ๋จ์ chunk)
์ด๋ผ ํ๋ค.
cp = nltk.RegexpParser(grammar, loop=2) print(cp.parse(sentence))
loop ๊ฑธ์ด์ฃผ๋ฉด ์ ์์ ์ ์ด ๋ค์ด๊ฐ๋ ํํ๋ก ๊ตฌ๋ถํด์ค๋ค.
(S (NP John/NNP) thinks/VBZ (CLAUSE (NP Mary/NN) (VP saw/VBD (CLAUSE (NP the/DT cat/NN) (VP sit/VB (PP on/IN (NP the/DT mat/NN)))))))
Named Entity Recognition (NER
) - ๊ฐ์ฒด๋ช
์ธ์
-
NER ๋ถ์ฌ๋์ผ๋ฉด Q&A ๊ฐ๋ฅํ๋ค(๋ต์ ์ฐพ์ ์ ์ํด์ฃผ๋ ์ฑ๋ด ๊ฐ์ ๊ฑฐ ๋ง๋ค ์ ์์)
sent = nltk.corpus.treebank.tagged_sents()[22] print(nltk.ne_chunk(sent, binary=True))
(S The/DT (NE U.S./NNP) is/VBZ one/CD of/IN ... according/VBG to/TO (NE Brooke/NNP) T./NNP ... the/DT (NE University/NNP) of/IN (NE Vermont/NNP College/NNP) of/IN (NE Medicine/NNP) ./.)
binary=True
์ ์ฐ๊ณ ๊ทธ๋ฅํ๋ฉด
(nltk.ne_chunk(sent))
(S The/DT (GPE U.S./NNP) is/VBZ one/CD of/IN ... according/VBG to/TO (PERSON Brooke/NNP T./NNP Mossman/NNP) ... the/DT (ORGANIZATION University/NNP) of/IN (PERSON Vermont/NNP College/NNP) of/IN (GPE Medicine/NNP) ./.)
-
reference:
- ์๋ง์ถ์ด ํํธ, blog.naver.com/chunjein
- ์ฝ๋ ์ถ์ฒ: ํฌ๋ฆฌ์๋ ๋ฐ๋ธ์ฌ ์ธ. 2019.01.31. ์์ฐ์ด ์ฒ๋ฆฌ ์ฟก๋ถ with ํ์ด์ฌ [ํ์ด์ฌ์ผ๋ก NLP๋ฅผ ๊ตฌํํ๋ 60์ฌ ๊ฐ์ง ๋ ์ํผ]. ์์ด์ฝ