[NLP] 3. Natural Language Preprocessing
μλ³Έ κ²μκΈ: https://velog.io/@euisuk-chung/NLP-3.-μμ°μ΄-μ μ²λ¦¬-κΈ°
-
μμ°μ΄ μ²λ¦¬(NLP) κ°μ
μμ°μ΄ μ²λ¦¬μ μΌλ°μ μΈ μμ
- μμ°μ΄ μ²λ¦¬λ μμ±μ ν μ€νΈλ‘ λ³ννκ³ , ν΄λΉ ν μ€νΈλ₯Ό λΆμ λ° μλ―Έλ₯Ό μΆμΆν λ€, μ΄λ₯Ό λ€μ μμ±μΌλ‘ λ³ννλ κ³Όμ μ ν¬ν¨ν©λλ€. (μλ κ·Έλ¦Ό μ°Έκ³ )
- μ΄ κ³Όμ μ ν¬κ² STT(Speech to Text)μ TTS(Text to Speech)λ‘ λλ©λλ€.
1.1 μμ°μ΄ μ²λ¦¬μ μ£Όμ λΆμΌ
- μμ΄λ‘ , ννλ‘ , κ΅¬λ¬Έλ‘ , μλ―Έλ‘ , νμ©λ‘ , λ΄λ‘ κ³Ό κ°μ Classical Categorizationμ μμ°μ΄ μ²λ¦¬λ₯Ό μ°κ΅¬νκ³ μμ©νλ λ° μμ΄μ μΈμ΄μ κ° μΈ‘λ©΄μ λΆμνκ³ μ΄ν΄νλ λ€μν μμ€μ κΈ°μ€μΌλ‘ λΆλ₯ν κ²μ λλ€.
- μ΄λ¬ν λΆλ₯λ κ°κ°μ μΈμ΄μ νμμ κ°λ³μ μΌλ‘ λ€λ£¨κ³ , κ° νμμ μ²λ¦¬νλ λ°©λ²μ μ°κ΅¬νλλ° μ€μ μ λ‘λλ€. μ΄λ₯Ό ν΅ν΄ 볡μ‘ν μμ°μ΄λ₯Ό λ€μν μΈ΅μμμ 체κ³μ μΌλ‘ λΆμν μ μμ΅λλ€.
-
μμ΄λ‘ (Phonology):
- κΈ°μ€: μ리μ κ΄λ ¨λ μΈμ΄μ νμ
- μ€λͺ : μμ΄λ‘ μ μΈμ΄μ μ리 체κ³μ μμ(phoneme)λ₯Ό μ°κ΅¬ν©λλ€. μμ°μ΄ μ²λ¦¬μμλ μμ±μ ν μ€νΈλ‘ λ³ννκ±°λ, μμ± μΈμ μμ€ν μ κ°λ°ν λ μ€μν μν μ ν©λλ€.
-
ννλ‘ (Morphology):
- κΈ°μ€: λ¨μ΄μ ꡬ쑰μ νμ±
- μ€λͺ : ννλ‘ μ λ¨μ΄μ λ΄λΆ ꡬ쑰λ₯Ό μ°κ΅¬νλ©°, λ¨μ΄λ₯Ό μλ―Έ μλ λ¨μ(morpheme)λ‘ λΆν΄νλ μμ μ ν¬ν¨ν©λλ€. μμ°μ΄ μ²λ¦¬μμλ ννμ λΆμ(morphological analysis) λ° ννμ κΈ°λ° ν ν°ν(tokenization)μ νμ©λ©λλ€.
-
κ΅¬λ¬Έλ‘ (Syntax):
- κΈ°μ€: λ¬Έμ₯ ꡬ쑰μ λ¬Έλ² κ·μΉ
- μ€λͺ : κ΅¬λ¬Έλ‘ μ λ¨μ΄λ€μ΄ κ²°ν©λμ΄ λ¬Έμ₯μ μ΄λ£¨λ κ·μΉμ μ°κ΅¬ν©λλ€. μμ°μ΄ μ²λ¦¬μμλ λ¬Έμ₯ ꡬ문 λΆμ(parsing)μ ν΅ν΄ λ¬Έλ²μ μΌλ‘ μ¬λ°λ₯Έ λ¬Έμ₯μ λΆμνκ³ μμ±νλ λ° μ¬μ©λ©λλ€.
-
μλ―Έλ‘ (Semantics):
- κΈ°μ€: μλ―Έμ ν΄μ
- μ€λͺ : μλ―Έλ‘ μ λ¨μ΄, ꡬ, λ¬Έμ₯μ μλ―Έλ₯Ό μ°κ΅¬ν©λλ€. μμ°μ΄ μ²λ¦¬μμλ ν μ€νΈμ μλ―Έλ₯Ό μΆμΆνκ³ , λ¬Έλ§₯μ μ΄ν΄νλ©°, μλ―Έ κΈ°λ° κ²μ λ° μ§μμλ΅ μμ€ν μ νμ©λ©λλ€.
-
νμ©λ‘ (Pragmatics):
- κΈ°μ€: μΈμ΄ μ¬μ©μ λ§₯λ½κ³Ό λͺ©μ
- μ€λͺ : νμ©λ‘ μ μΈμ΄κ° μ€μ μν©μμ μ΄λ»κ² μ¬μ©λλμ§λ₯Ό μ°κ΅¬ν©λλ€. μμ°μ΄ μ²λ¦¬μμλ λν μμ€ν , μ±λ΄ λ±μμ μ¬μ©μμ μλλ₯Ό νμ νκ³ μ μ ν μλ΅μ μμ±νλ λ° μ€μν©λλ€.
-
λ΄λ‘ (Discourse):
- κΈ°μ€: λ¬Έμ₯ κ°μ κ΄κ³μ λ§₯λ½
- μ€λͺ : λ΄λ‘ μ λ¬Έμ₯λ€μ΄ κ²°ν©λμ΄ λ ν° ν μ€νΈλ λνλ₯Ό νμ±νλ λ°©μμ μ°κ΅¬ν©λλ€. μμ°μ΄ μ²λ¦¬μμλ ν μ€νΈ μμ½, λ¬Έμ λΆλ₯, λνμ μΌκ΄μ± μ μ§ λ±μ μ μ©λ©λλ€.
1.2 μ°λ¦¬λ μ§κΈ μ΄λ λ¨κ³μΈκ°?
- νμ¬ μμ°μ΄ μ²λ¦¬(NLP)μ λ°μ μμ€μ νκ°ν λ, μμ΄λ‘ , ννλ‘ , κ΅¬λ¬Έλ‘ , μλ―Έλ‘ , νμ©λ‘ , λ΄λ‘ μ 6κ°μ§ μμμμ κ°κ°μ μ±κ³Όλ₯Ό κ³ λ €ν μ μμ΅λλ€.
-
κ°κ°μ μμμμ νμ¬ κΈ°μ μ΄ μ΄λ μ λ μ±μλμλμ§ μ΄ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΅λλ€:
1. μμ΄λ‘ (Phonology)
- μμ± μΈμ(Speech Recognition): λ§€μ° λμ μ νλλ‘ μμ±μ ν μ€νΈλ‘ λ³ννλ κΈ°μ μ΄ κ°λ°λμμ΅λλ€.
- ν μ€νΈ μμ± λ³ν(Text-to-Speech): μμ°μ€λ¬μ΄ μμ±μ μμ±νλ TTS κΈ°μ λ μλΉν λ°μ νμ΅λλ€. DeepMindμ WaveNetκ³Ό κ°μ λͺ¨λΈμ΄ κ·Έ μμ λλ€.
- μμ€: λ§€μ° λ°μ λμ΄ μ€μ©ν λ¨κ³.
- μμ©ν μμ: Siri, Google Assistant, Amazon Alexa λ±μ μμ± λΉμ κΈ°λ₯
2. ννλ‘ (Morphology)
- ννμ λΆμ(Morphological Analysis): ννμ λΆμκΈ°μ ν ν¬λμ΄μ (tokenizer)κ° λ€μ κ°λ°λμμΌλ©°, νκ΅μ΄, μΌλ³Έμ΄, νλλμ΄ λ± ννκ° λ³΅μ‘ν μΈμ΄μμλ λμ μ±λ₯μ 보μ λλ€.
- μμ€: μ±μ λ¨κ³λ‘, λ€μν μΈμ΄μ λν΄ λμ μ νλλ₯Ό 보μ.
- μμ©ν μμ: Grammarly, Microsoft, νμ»΄ λ±μ λ§μΆ€λ² κ²μ¬ κΈ°λ₯
3. κ΅¬λ¬Έλ‘ (Syntax)
- ꡬ문 λΆμ(Parsing): ꡬ문 λΆμκΈ°λ CFG, PCFG, Dependency Parsing λ± λ€μν λ°©μμΌλ‘ λ°μ λμ΄ μμ΅λλ€. μ΅κ·Όμλ BERT, GPT λ± Transformer κΈ°λ° λͺ¨λΈλ€μ΄ ꡬ문 λΆμμμλ μ’μ μ±κ³Όλ₯Ό 보μ΄κ³ μμ΅λλ€.
- μμ€: μ€μ©ν λ¨κ³λ‘, λ§μ NLP μμ©μμ νμ© κ°λ₯.
- μ¬μ©ν μμ: Stanford Parser, spaCy, NLTK λΌμ΄λΈλ¬λ¦¬
π€Stanford Parser, spaCy, NLTK?
Stanford Parser
:
- Stanford λνμμ κ°λ°ν μμ°μ΄ ꡬ문 λΆμκΈ°μ λλ€.
- λ€μν μΈμ΄(μμ΄, μ€κ΅μ΄, μλμ΄, λ μΌμ΄, νλμ€μ΄, μ€νμΈμ΄ λ±)μ λν ꡬ문 λΆμμ μ§μν©λλ€.
- ꡬμ±μ±λΆ λΆμ(constituency parsing)κ³Ό μμ‘΄ ꡬ문 λΆμ(dependency parsing)μ λͺ¨λ μ 곡ν©λλ€.
- PCFG(Probabilistic Context-Free Grammar), Shift-Reduce, Neural Network κΈ°λ°μ μμ‘΄ ꡬ문 λΆμκΈ°λ₯Ό ν¬ν¨ν©λλ€.
- μ€ν μμ€λ‘ μ 곡λλ©°, λΉμμ μ μ©λλ‘λ 무λ£λ‘ μ¬μ©ν μ μμ΅λλ€.
spaCy
:
- μ°μ μ© κ°λμ μμ°μ΄ μ²λ¦¬λ₯Ό μν Python λΌμ΄λΈλ¬λ¦¬μ λλ€.
- ν ν°ν, νμ¬ νκΉ , κ°μ²΄λͺ μΈμ, μμ‘΄ ꡬ문 λΆμ λ± λ€μν NLP μμ μ μ§μν©λλ€.
- λΉ λ₯Έ μ²λ¦¬ μλμ λμ μ νλλ‘ μλ €μ Έ μμ΅λλ€.
- μ¬μ νλ ¨λ λͺ¨λΈμ μ 곡νμ¬ μ½κ² μ¬μ©ν μ μμ΅λλ€.
- λ€κ΅μ΄ μ§μμ μ 곡ν©λλ€.
NLTK (Natural Language Toolkit)
:NLTKλ κ΅μ‘κ³Ό μ°κ΅¬ λͺ©μ μΌλ‘ μ€κ³λμμΌλ©°, λ€μν NLP μμ μ μ§μν©λλ€.
- ν ν°ν: λ¬Έμ₯κ³Ό λ¨μ΄ λ¨μλ‘ ν μ€νΈλ₯Ό λΆν ν©λλ€.
- νμ¬ νκΉ : κ° λ¨μ΄μ λν΄ νμ¬ μ 보λ₯Ό λΆμ¬ν©λλ€.
- ꡬ문 λΆμ: ꡬμ±μ±λΆ λΆμκ³Ό μμ‘΄ ꡬ문 λΆμμ μ§μν©λλ€.
- μ΄ν μμ: WordNetκ³Ό κ°μ μ΄ν μμμ ν¬ν¨νμ¬ λ¨μ΄μ μλ―Έλ₯Ό λΆμν©λλ€.
- ν μ€νΈ μ μ²λ¦¬: λΆμ©μ΄ μ κ±°, μ΄κ° μΆμΆ, νμ μ΄ μΆμΆ λ± λ€μν μ μ²λ¦¬ μμ μ μ§μν©λλ€.
4. μλ―Έλ‘ (Semantics)
- μλ―Έ λΆμ(Semantic Analysis): λ¨μ΄ μλ² λ©(word embedding), λ¬Έμ₯ μλ² λ© λ±μ κΈ°μ μ΄ λ°μ νλ©΄μ λ¬Έμ₯μ μλ―Έλ₯Ό ν¨κ³Όμ μΌλ‘ μΆμΆν μ μκ² λμμ΅λλ€. BERT, GPT-3 κ°μ λν μΈμ΄ λͺ¨λΈλ€μ΄ λ¬Έλ§₯μ μ΄ν΄νκ³ μ μ ν μλ΅μ μμ±νλ λ₯λ ₯μ 보μ νκ³ μμ΅λλ€.
- μμ€: λ§€μ° λ°μ λ λ¨κ³λ‘, μ€μν μμ©μμ νμ© μ€.
- μ¬μ©ν μμ: Word2Vec, BERT, GPT λ±μ μΈμ΄ λͺ¨λΈ
5. νμ©λ‘ (Pragmatics)
- λν μμ€ν (Dialogue Systems): μ¬μ©μ μλλ₯Ό μ΄ν΄νκ³ μ μ ν μλ΅νλ μ±λ΄κ³Ό λν μμ΄μ νΈκ° νλ°ν μ°κ΅¬λκ³ μμ΅λλ€. μ€μ μμ© μ νλ€λ λ±μ₯νμ§λ§, μμ§ μλ²½νμ§λ μμ΅λλ€.
- λ§₯λ½ μ΄ν΄(Context Understanding): μν©μ λ§λ μ μ ν μΈμ΄ μ¬μ©μ μ΄ν΄νλ λ° μμ΄ μ νμ μΈ μ±κ³Όλ₯Ό 보μ΄κ³ μμ΅λλ€.
- μμ€: λ°μ μ€, μλΉν κ°μ μ¬μ§ μμ
- μ¬μ©ν μμ: μ±λ΄, κ³ κ° μλΉμ€ μλν μμ€ν
6. λ΄λ‘ (Discourse)
- ν μ€νΈ μΌκ΄μ±(Text Coherence): κΈ΄ λ¬Έλ§₯μ μ μ§νκ³ μΌκ΄μ± μλ ν μ€νΈλ₯Ό μμ±νλ λ₯λ ₯μ΄ ν₯μλμμ΅λλ€. GPT-3μ κ°μ λͺ¨λΈλ€μ΄ κΈ΄ λ¬Έμ μμ±μμ μ’μ μ±κ³Όλ₯Ό 보μ΄κ³ μμ΅λλ€.
- λ΄λ‘ λΆμ(Discourse Analysis): λ¬Έμ₯ κ°μ κ΄κ³λ₯Ό μ΄ν΄νκ³ , μΌκ΄λ λνλ₯Ό μ μ§νλ λ°μλ μμ§ νκ³κ° μμ΅λλ€.
- μμ€: μ΄κΈ° λ¨κ³, λ§μ κ°μ νμ
- μ¬μ©ν μμ: μλ μμ½ λꡬ, λνν AI μμ€ν
π μ±λ΄ vs λνν μ±λ΄, 무μμ΄ λ€λ₯Έκ°?
μ±λ΄κ³Ό λνν AIμ μ°¨μ΄μ μ μ΄ν΄νκΈ° μν΄ λ κΈ°μ μ λΉκ΅ν΄ λ³΄κ² μ΅λλ€. μ΄λ―Έμ§λ₯Ό κΈ°λ°μΌλ‘ λ κΈ°μ μ μ£Όμ μ°¨μ΄μ μ μ 리ν©λλ€.
μ±λ΄ (Chatbots) π£οΈ
- κΈ°λ° κΈ°μ : κ·μΉ κΈ°λ°(rule-based) λλ μ¬μ μ μ μλ μ€ν¬λ¦½νΈ(predefined scripts)λ₯Ό μ¬μ©νμ¬ νΉμ μ§μλ λͺ λ Ήμ μλ΅ν©λλ€.
- μ΄ν΄ λ₯λ ₯: μμ°μ΄λ₯Ό μ΄ν΄νκ³ μμ±νλ λ₯λ ₯μ΄ μ νμ μ΄λ©°, 볡μ‘ν λνλ₯Ό μ μ²λ¦¬νμ§ λͺ»ν©λλ€.
- μλ΅ λ°©μ: νΉμ μ λ ₯μ λν΄ λ―Έλ¦¬ μ μλ μλ΅μ μ 곡νλ λ° μ€μ μ λ‘λλ€.
- μ μ© λΆμΌ: μ£Όλ‘ κ³ κ° μ§μ, FAQ, κ°λ¨ν μ 보 μ 곡 λ±μ μ¬μ©λ©λλ€.
λνν AI (Conversational AI) ποΈ
- κΈ°λ° κΈ°μ : μμ°μ΄ μ²λ¦¬(NLP), λ¨Έμ λ¬λ(ML), μΈκ³΅μ§λ₯(AI) λ±μ λ€μν κΈ°μ μ ν¬ν¨νλ λμ λ²μμ κΈ°μ μ λλ€. μ΄λ₯Ό ν΅ν΄ κΈ°κ³κ° μμ°μ΄λ‘ μΈκ°κ³Ό κ°μ μλ΅μ μ΄ν΄νκ³ , μ²λ¦¬νλ©°, μμ±ν μ μμ΅λλ€.
- μ΄ν΄ λ₯λ ₯: λ λ°μ λ κΈ°μ μ μ¬μ©νμ¬ λ¬Έλ§₯, κ°μ , μΈμ΄μ λ―Έλ¬ν μ°¨μ΄λ₯Ό μ΄ν΄νκ³ μ²λ¦¬ν μ μμ΅λλ€.
- μλ΅ λ°©μ: μνΈμμ©μμ νμ΅νκ³ , μ¬μ©μ μ λ ₯μ λ°λΌ μ μνλ©°, λ 볡μ‘νκ³ λμ μΈ λνλ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
- μ μ© λΆμΌ: κ³ κ° μ§μ, λΉμ¦λμ€ νλ‘μΈμ€ μλν, κ°μΈ λΉμ, 볡μ‘ν μ§μμλ΅ μμ€ν λ± λ€μν λΆμΌμμ μ¬μ©λ©λλ€.
-
νμ¬ NLP κΈ°μ μ λ°μ λ¨κ³λ
4~5 μμ
μ κ±Έμ³ μμΌλ©°, κ° μμμμ λ€μκ³Ό κ°μ νΉμ§μ 보μ λλ€:-
μλ―Έλ‘ (Semantics)
μμμμλ μλΉν μ§μ μ μ΄λ£¨μ΄ μ€μ©μ μΈ μμ€μ λλ¬νμ§λ§, μ¬μ ν μΈκ° μμ€μ μ΄ν΄μ ν΄μμλ λ―ΈμΉμ§ λͺ»ν©λλ€.- κ³Όμ : 볡μ‘ν μΆλ‘ , μμμ μ΄ν΄, μμ ν΄μ λ±μμ μ¬μ ν κ°μ μ΄ νμν©λλ€.
-
νμ©λ‘ (Pragmatics)
μμμ μλ―Έλ‘ λ³΄λ€λ λ λ°μ νμ§λ§, μ€μ μμ© λΆμΌμμ μ μ°¨ νμ©λκ³ μμ΅λλ€. νΉν λν μμ€ν κ³Ό κ°μ λΆμ λ±μμ μ μ©μ±μ 보μ΄κ³ μμ΅λλ€.- κ³Όμ : νμμ μλ, μμμ μλ―Έ, μ¬νλ¬Ένμ λ§₯λ½ μ΄ν΄ λ±μμ μΈκ° μμ€μ μ΄ν΄λ₯Ό λ¬μ±νλ κ²μ΄ λͺ©νμ λλ€.
-
λ΄λ‘ (Discourse)
μμμ κ°μ₯ 볡μ‘νκ³ λμ μ μΈ μμμΌλ‘, νμ¬ μ΄κΈ° μ°κ΅¬ λ¨κ³μ μμ΅λλ€. μ΄ μμμ λ°μ μ ν₯ν NLP κΈ°μ μ ν° λμ½μ κ°μ Έμ¬ κ²μΌλ‘ μμλ©λλ€.- κ³Όμ : κΈ΄ λ¬Έλ§₯μ μ μ§νλ©΄μ μΌκ΄μ± μλ λνλ₯Ό μ΄μ΄κ°λ λ₯λ ₯, 볡μ‘ν λ Όλ¦¬ ꡬ쑰 μ΄ν΄ λ±μ΄ μ£Όμ κ³Όμ μ λλ€.
-
μ λ°μ μΌλ‘, NLP κΈ°μ μ μ΄ μΈ μμμμ μ§μμ μΌλ‘ λ°μ νκ³ μμ§λ§, μΈκ° μμ€μ μΈμ΄ μ΄ν΄μ μμ±μ μν΄μλ μμ§ λ§μ μ°κ΅¬μ νμ μ΄ νμν μνμ λλ€. (=> μ§κΈλ νλ°νκ² μ°κ΅¬κ° μ§νλκ³ μμ΅λλ€)
-
NLPμ μ΄λ €μκ³Ό μμ¬
- μ NLPκ° μ΄λ €μ΄κ°? : μμ°μ΄λ νλ‘κ·Έλλ° μΈμ΄μ λ¬λ¦¬ λ°©λν λ¨μ΄μ μ, 볡μ‘ν ꡬ문, λͺ¨νΈμ± λ±μΌλ‘ μΈν΄ λ€λ£¨κΈ° μ΄λ ΅μ΅λλ€. μ¬μ©λλ λ°©λν λ¨μ΄μ μ λΏλ§ μλλΌ, ꡬ문μ 볡μ‘μ± λ° λͺ¨νΈμ±, μκ°μ νλ¦μ λ°λΌ μ§ννκΈ° λλ¬Έμ μ΄κΈ° NLPμ°κ΅¬μ μ΄λ €μμ΄ μ‘΄μ¬νμ΅λλ€.
- NLP μ°κ΅¬μ μμ¬ : μ΄κΈ°μλ κ·μΉ κΈ°λ° μ κ·Όλ²μ΄ μ£Όλ‘ μ¬μ©λμμ§λ§, μμ°μ΄μ λμ νΉμ±μ κ³ λ €νμ§ λͺ»νλ λ¨μ μ΄ μμμ΅λλ€. νμ¬λ ν΅κ³μ λ°©λ²κ³Ό κ·μΉ κΈ°λ° λ°©λ²μ κ²°ν©νμ¬ μ¬μ©νλ©°, λ¨Έμ λ¬λ λ° λ₯ λ¬λ κΈ°λ° μ κ·Όλ²μ΄ μ£Όλ₯λ₯Ό μ΄λ£¨κ³ μμ΅λλ€.
-
Lexical Analysis
3.1. ν ν°ν (Tokenization)
ν ν°νλ ν μ€νΈλ₯Ό μμ μλ―Έ λ¨μλ‘ λΆν νλ κ³Όμ μ λλ€. μ΄λ¬ν λ¨μλ λ¨μ΄, ꡬ, μ¬μ§μ΄λ κ°λ³ λ¬ΈμμΌ μλ μμ΅λλ€. μλ₯Ό λ€μ΄, βHello, world!βλΌλ λ¬Έμ₯μ [βHelloβ, β,β, βworldβ, β!β]λ‘ λΆν λ μ μμ΅λλ€. ν ν°νλ ν μ€νΈμ ꡬ쑰λ₯Ό μ΄ν΄νκ³ κ° λ¨μ΄κ° μ΄λ»κ² μ¬μ©λλμ§λ₯Ό λΆμνλ λ° νμμ μ λλ€.
ν ν°νμλ μ¬λ¬ κ°μ§ λ°©λ²μ΄ μμ΅λλ€:
- 곡백 κΈ°λ° ν ν°ν: 곡백μ κΈ°μ€μΌλ‘ λ¨μ΄λ₯Ό λΆλ¦¬ν©λλ€.
- ꡬλμ κΈ°λ° ν ν°ν: ꡬλμ λ λ³λμ ν ν°μΌλ‘ μ²λ¦¬ν©λλ€.
- μ΄μ κΈ°λ° ν ν°ν: μΈμ΄μ μλ―Έλ₯Ό κ³ λ €νμ¬ μ΄μ λ¨μλ‘ λΆλ¦¬ν©λλ€. (νκ΅μ΄μ κ°μ μΈμ΄μμ νΉν μ€μν©λλ€)
μ½λ μμ
1
2
3
4
5
from nltk.tokenize import word_tokenize
sentence = "Hello, world! Welcome to NLP."
tokens = word_tokenize(sentence)
print(tokens)
μΆλ ₯: ['Hello', ',', 'world', '!', 'Welcome', 'to', 'NLP', '.']
3.2. ννμ λΆμ (Morphological Analysis)
ννμ λΆμμ λ¨μ΄μ λ΄λΆ ꡬ쑰λ₯Ό λΆμνκ³ λ³ννλ κ³Όμ μ λλ€. μ΄λ λ¨μν λ¨μ΄λ₯Ό λΆλ¦¬νλ ν ν°ν λ¨κ³λ³΄λ€ λ κΉμ λΆμμ ν¬ν¨ν©λλ€. ννμ λΆμμ μ£Όλ‘ λ κ°μ§ μ£Όμ μμ μΌλ‘ λλ©λλ€:
-
ννμ(Morpheme) μλ³: λ¨μ΄λ₯Ό ꡬμ±νλ μ΅μ μλ―Έ λ¨μμΈ ννμλ₯Ό μλ³ν©λλ€. ννμλ μ립 ννμ(λ 립μ μΌλ‘ μ¬μ©λ μ μλ λ¨μ΄)μ μμ‘΄ ννμ(λ€λ₯Έ ννμμ κ²°ν©λμ΄μΌ μλ―Έλ₯Ό κ°λ λ¨μ΄)λ‘ λλ©λλ€.
- μμ: βunhappinessβλ βun-β, βhappyβ, β-nessβμ μΈ κ°μ§ ννμλ‘ κ΅¬μ±λ©λλ€.
-
ννμ λ³ν(Morphological Inflection): λ¨μ΄κ° λ¬Έλ²μ ννλ₯Ό λνλ΄κΈ° μν΄ λ³νλλ κ³Όμ μ λΆμν©λλ€. μ΄λ λ€μ λ κ°μ§ λ°©λ²μΌλ‘ μνλ©λλ€:
- Stemming: λ¨μ΄μ μ΄κ°(Stem)μ μΆμΆν©λλ€. μ΄λ λ¨μ΄μ λ³νλ ννλ€μ λμΌνκ² μΈμνκΈ° μν λ°©λ²μ
λλ€. μλ₯Ό λ€μ΄, βrunningβ, βrunnerβ, βranβμ λͺ¨λ βrunβμΌλ‘ λ³νλ μ μμ΅λλ€. Stemmingμ κ·μΉ κΈ°λ° μκ³ λ¦¬μ¦μ μ£Όλ‘ μ¬μ©νλ©°, λ¨μ΄μ μΌλΆλΆμ μ κ±°νλ λ°©μμΌλ‘ ꡬνλ©λλ€.
- μμ: Porter Stemmer, Snowball Stemmer
- Lemmatization: λ¨μ΄μ κΈ°λ³Έ νν(Lemma)λ₯Ό μ°Ύμλ΄λ κ³Όμ μ
λλ€. μ΄λ μ΄ν ννμ λΆμμ ν¬ν¨νμ¬ λ¨μ΄μ νμ¬ μ 보λ₯Ό κ³ λ €ν©λλ€. μλ₯Ό λ€μ΄, βrunningβμ βrunβμΌλ‘, βbetterβλ βgoodβμΌλ‘ λ³νλ μ μμ΅λλ€. Lemmatizationμ μΈμ΄μ μ§μ(μ¬μ )μ λ°νμΌλ‘ λ¨μ΄λ₯Ό λ³νν©λλ€.
- μμ: WordNet Lemmatizer
- Stemming: λ¨μ΄μ μ΄κ°(Stem)μ μΆμΆν©λλ€. μ΄λ λ¨μ΄μ λ³νλ ννλ€μ λμΌνκ² μΈμνκΈ° μν λ°©λ²μ
λλ€. μλ₯Ό λ€μ΄, βrunningβ, βrunnerβ, βranβμ λͺ¨λ βrunβμΌλ‘ λ³νλ μ μμ΅λλ€. Stemmingμ κ·μΉ κΈ°λ° μκ³ λ¦¬μ¦μ μ£Όλ‘ μ¬μ©νλ©°, λ¨μ΄μ μΌλΆλΆμ μ κ±°νλ λ°©μμΌλ‘ ꡬνλ©λλ€.
μ½λ μμ
1
2
3
4
5
6
7
8
9
10
11
from nltk.stem import PorterStemmer, WordNetLemmatizer
stemmer = PorterStemmer()
lemmatizer = WordNetLemmatizer()
word1 = "running"
word2 = "better"
print(stemmer.stem(word1)) # μΆλ ₯: run
print(lemmatizer.lemmatize(word1, pos='v')) # μΆλ ₯: run
print(lemmatizer.lemmatize(word2, pos='a')) # μΆλ ₯: good
μΆλ ₯:
1
2
3
run
run
good
3.3. λ¬Έμ₯ λΆν (Sentence Splitting)
λ¬Έμ₯ λΆν μ ν μ€νΈλ₯Ό κ°λ³ λ¬Έμ₯μΌλ‘ λΆλ¦¬νλ κ³Όμ μ λλ€. μ΄λ ꡬλμ μ΄λ λ¬Έμ₯μ ꡬ쑰λ₯Ό κΈ°μ€μΌλ‘ μ΄λ£¨μ΄μ§λλ€. λ¬Έμ₯ λΆν μ ν μ€νΈ λΆμμ λ¨μλ₯Ό λͺ νν νλ λ° μ€μν©λλ€.
μ½λ μμ
1
2
3
4
5
from nltk.tokenize import sent_tokenize
text = "Hello world! How are you doing? NLP is interesting."
sentences = sent_tokenize(text)
print(sentences)
μΆλ ₯: ['Hello world!', 'How are you doing?', 'NLP is interesting.']
3.4. νμ¬ νκΉ (Part-of-Speech Tagging)
νμ¬ νκΉ μ λ¬Έμ₯μμ κ° λ¨μ΄μ ν΄λΉνλ νμ¬λ₯Ό ν λΉνλ κ³Όμ μ λλ€. μ΄λ λ¬Έμ₯μ ꡬ문 ꡬ쑰λ₯Ό μ΄ν΄νκ³ , λ¨μ΄ κ°μ κ΄κ³λ₯Ό νμ νλ λ° λμμ μ€λλ€.
νμ¬ νκΉ μ μ£Όλ‘ λ€μκ³Ό κ°μ μκ³ λ¦¬μ¦μ μ¬μ©ν©λλ€:
- κ·μΉ κΈ°λ° νκΉ (Rule-Based Tagging): μ ν΄μ§ λ¬Έλ² κ·μΉμ μ΄μ©νμ¬ λ¨μ΄μ νμ¬λ₯Ό κ²°μ ν©λλ€.
- ν΅κ³μ νκΉ (Statistical Tagging): μ½νΌμ€ λ°μ΄ν°λ₯Ό μ΄μ©νμ¬ νμ¬λ₯Ό νλ₯ μ μΌλ‘ μμΈ‘ν©λλ€. HMM(Hidden Markov Model)μ΄λ Maximum Entropy λͺ¨λΈμ΄ μ¬μ©λ©λλ€.
- κΈ°κ³ νμ΅ κΈ°λ° νκΉ
(Machine Learning-Based Tagging): μ§λ νμ΅μ ν΅ν΄ νμ¬λ₯Ό μμΈ‘ν©λλ€. SVM, Decision Tree, κ·Έλ¦¬κ³ μ΅κ·Όμλ μ κ²½λ§ λͺ¨λΈ(Neural Networks)μ μ¬μ©ν©λλ€.
- μμ: CRF(Conditional Random Fields), Bi-LSTM
μ½λ μμ
1
2
3
4
5
6
7
import nltk
nltk.download('averaged_perceptron_tagger')
sentence = "I love eating chicken."
tokens = word_tokenize(sentence)
pos_tags = nltk.pos_tag(tokens)
print(pos_tags)
μΆλ ₯: [('I', 'PRP'), ('love', 'VBP'), ('eating', 'VBG'), ('chicken', 'NN')]
-
Named Entity Recognition (NER)
- κ°μ²΄λͺ μΈμ (Named Entity Recognition, NER) : κ°μ²΄λͺ μΈμμ λ¬Έμ₯μμ νΉμ μμλ₯Ό 미리 μ μλ μΉ΄ν κ³ λ¦¬(μ: μ¬λ, μ₯μ, μ‘°μ§, λ μ§ λ±)λ‘ λΆλ₯νλ μμ μ λλ€. μ΄λ ν μ€νΈ λ°μ΄ν°μμ μ€μν μ 보λ₯Ό μΆμΆνλ λ° μ¬μ©λ©λλ€.
μ κ·Ό λ°©λ²
- μ¬μ κΈ°λ° μ κ·Όλ² (Dictionary / Rule-based Approach)
- List Lookup: μ¬μ μ μ μλ 리μ€νΈλ₯Ό μ¬μ©νμ¬ ν
μ€νΈμμ ν΄λΉ λ¨μ΄λ₯Ό κ²μν©λλ€.
- μ₯μ : κ°λ¨νκ³ λΉ λ₯΄λ©°, νΉμ μΈμ΄μ νΉνλ μ²λ¦¬κ° κ°λ₯ν©λλ€.
- λ¨μ : 리μ€νΈμ ν¬κΈ°μ μ μ§ κ΄λ¦¬κ° μ΄λ ΅κ³ , μλ‘μ΄ λ¨μ΄λ λ³νμ λ―Όκ°ν©λλ€.
- Shallow Parsing Approach: κ·Όκ±° μλ μ¦κ±°(evidence)λ₯Ό κΈ°λ°μΌλ‘ ν
μ€νΈμμ κ°μ²΄λ₯Ό μΆμΆν©λλ€.
- μμ: βWall Streetβμμ βStreetβκ³Ό κ°μ λ¨μ΄λ₯Ό ν΅ν΄ μ§λͺ μ μΈμν©λλ€.
- λͺ¨λΈ κΈ°λ° μ κ·Όλ² (Model-based Approach)
- CRF (Conditional Random Fields): λ¬Έλ§₯μ κ³ λ €νμ¬ λ¨μ΄μ μΉ΄ν κ³ λ¦¬λ₯Ό μμΈ‘ν©λλ€.
- μ κ²½λ§ κΈ°λ° λͺ¨λΈ (Neural Network-based Models): RNN, CNN λ±μ μ¬μ©νμ¬ λ¬Έλ§₯ μ 보λ₯Ό νμ΅ν©λλ€.
- μ₯μ : λ¬Έλ§₯μ μ λ°μνμ¬ λμ μ νλλ₯Ό 보μ λλ€.
- λ¨μ : λ§μ νμ΅ λ°μ΄ν°μ κ³μ° μμμ΄ νμν©λλ€.
μ½λ μμ
1
2
3
4
5
6
7
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Barack Obama was born in Hawaii.")
for ent in doc.ents:
print(ent.text, ent.label_)
μΆλ ₯: Barack Obama PERSON
, Hawaii GPE
-
Syntax Analysis (ꡬ문 λΆμ)
ꡬ문 λΆμ (Syntax Analysis) : ꡬ문 λΆμμ λ¬Έμ₯μμ λ¨μ΄λ€μ΄ μ΄λ»κ² ꡬ쑰μ μΌλ‘ μ°κ²°λμ΄ μλμ§λ₯Ό λΆμνλ μμ μ λλ€. μ΄λ λ¬Έμ₯μ λ¬Έλ²μ ꡬ쑰λ₯Ό μ΄ν΄νκ³ κ° λ¨μ΄μ κ΄κ³λ₯Ό νμ νλ λ° μ€μν©λλ€.
5.1. Parsing
- Top-down Parsing: λ¬Έμ₯μ μμλΆν° λ¬Έλ² κ·μΉμ μ μ©νμ¬ κ΅¬μ‘°λ₯Ό λΆμν©λλ€.
- Bottom-up Parsing: λ¨μ΄λΆν° μμνμ¬ λ¬Έλ² κ·μΉμ μμΌλ‘ μ μ©νμ¬ κ΅¬μ‘°λ₯Ό λΆμν©λλ€.
5.2. λͺ¨νΈμ± (Ambiguity)
ꡬ문 λΆμμμ μ€μν λ¬Έμ λ λͺ¨νΈμ±μ ν΄κ²°νλ κ²μ λλ€.
- ꡬ쑰μ λͺ¨νΈμ± (Structural Ambiguity): κ°μ λ¬Έμ₯μ΄ μ¬λ¬ λ°©μμΌλ‘ ν΄μλ μ μμ΅λλ€.
- μμ: βJohn saw Mary in the park.β (μ‘΄μ΄ κ³΅μμμ λ©λ¦¬λ₯Ό λ΄€λ€ / μ‘΄μ΄ λ©λ¦¬λ₯Ό λ΄€λλ°, λ©λ¦¬λ 곡μμ μλ€)
- μ΄νμ λͺ¨νΈμ± (Lexical Ambiguity): κ°μ λ¨μ΄κ° μν©μ λ°λΌ λ€λ₯Έ ννμλ‘ μ¬μ©λ μ μμ΅λλ€.
- μμ: βTime flies like an arrow.β (μκ°μ νμ΄μ²λΌ λ μκ°λ€ / ν리λ νμ΄μ μ’μνλ€)
μ½λ μμ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import nltk
sentence = "John saw the man with a telescope."
grammar = nltk.CFG.fromstring("""
S -> NP VP
VP -> V NP | VP PP
PP -> P NP
V -> "saw"
NP -> "John" | "man" | "telescope" | Det N | NP PP
Det -> "a" | "the"
N -> "man" | "telescope"
P -> "with"
""")
parser = nltk.ChartParser(grammar)
for tree in parser.parse(sentence.split()):
print(tree)
-
μΈμ΄ λͺ¨λΈλ§ (Language Modeling)
νλ₯ μ μΈμ΄ λͺ¨λΈ (Probabilistic Language Modeling) : μΈμ΄ λͺ¨λΈλ§μ μ£Όμ΄μ§ λ¬Έμ₯μ΄ μ€μ λ¬Έλ²μ μΌλ‘ νλΉνμ§ νκ°νλ λͺ¨λΈμ λλ€. μ΄λ λ¬Έμ₯μ λ¬Έλ²μ ꡬ쑰μ λ¨μ΄ κ°μ κ΄κ³λ₯Ό μ΄ν΄νλ λ° μ¬μ©λ©λλ€.
μ κ·Ό λ°©λ²
- N-κ·Έλ¨ λͺ¨λΈ (N-gram Models)
- λ¨μ΄μ μ°μμ μΈ ν¨ν΄μ λΆμνμ¬ λ€μ λ¨μ΄μ νλ₯ μ μμΈ‘ν©λλ€.
- Unigram: λ¨μ΄ νλμ νλ₯
- Bigram: λ λ¨μ΄μ μ°μ νλ₯
- Trigram: μΈ λ¨μ΄μ μ°μ νλ₯
- μ κ²½λ§ κΈ°λ° λͺ¨λΈ (Neural Network-based Models)
- RNN, LSTM, Transformerμ κ°μ λͺ¨λΈμ μ¬μ©νμ¬ λ¬Έλ§₯ μ 보λ₯Ό νμ΅ν©λλ€.
- BERT, GPT-2: μ¬μ νμ΅λ λκ·λͺ¨ μΈμ΄ λͺ¨λΈλ‘, λ¬Έλ§₯μ μ λ°μνμ¬ λμ μ±λ₯μ 보μ λλ€.
μμ© λΆμΌ
- κΈ°κ³ λ²μ (Machine Translation)
- μ² μ κ΅μ (Spell Correction)
- μμ± μΈμ (Speech Recognition)
- μμ½ (Summarization)
- μ§μ μλ΅ μμ€ν (Question Answering)
μ½λ μμ
1
2
3
4
5
6
7
8
9
10
from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
input_text = "Natural language processing is"
input_ids = tokenizer.encode(input_text, return_tensors="pt")
output = model.generate(input_ids, max_length=50, num_return_sequences=1)
print(tokenizer.decode(output[0], skip_special_tokens=True))