[NLP] 3. Natural Language Preprocessing

Posted by Euisuk's Dev Log on July 29, 2024

[NLP] 3. Natural Language Preprocessing

원본 κ²Œμ‹œκΈ€: https://velog.io/@euisuk-chung/NLP-3.-μžμ—°μ–΄-μ „μ²˜λ¦¬-κΈ°

  1. μžμ—°μ–΄ 처리(NLP) κ°œμš”

μžμ—°μ–΄ 처리의 일반적인 μˆœμ„œ

  • μžμ—°μ–΄ μ²˜λ¦¬λŠ” μŒμ„±μ„ ν…μŠ€νŠΈλ‘œ λ³€ν™˜ν•˜κ³ , ν•΄λ‹Ή ν…μŠ€νŠΈλ₯Ό 뢄석 및 의미λ₯Ό μΆ”μΆœν•œ λ’€, 이λ₯Ό λ‹€μ‹œ μŒμ„±μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 과정을 ν¬ν•¨ν•©λ‹ˆλ‹€. (μ•„λž˜ κ·Έλ¦Ό μ°Έκ³ )
  • 이 과정은 크게 STT(Speech to Text)와 TTS(Text to Speech)둜 λ‚˜λ‰©λ‹ˆλ‹€.

1.1 μžμ—°μ–΄ 처리의 μ£Όμš” λΆ„μ•Ό

  • 음운둠, ν˜•νƒœλ‘ , ꡬ문둠, 의미둠, ν™”μš©λ‘ , λ‹΄λ‘ κ³Ό 같은 Classical Categorization은 μžμ—°μ–΄ 처리λ₯Ό μ—°κ΅¬ν•˜κ³  μ‘μš©ν•˜λŠ” 데 μžˆμ–΄μ„œ μ–Έμ–΄μ˜ 각 츑면을 λΆ„μ„ν•˜κ³  μ΄ν•΄ν•˜λŠ” λ‹€μ–‘ν•œ μˆ˜μ€€μ„ κΈ°μ€€μœΌλ‘œ λΆ„λ₯˜ν•œ κ²ƒμž…λ‹ˆλ‹€.
  • μ΄λŸ¬ν•œ λΆ„λ₯˜λŠ” 각각의 언어적 ν˜„μƒμ„ κ°œλ³„μ μœΌλ‘œ 닀루고, 각 ν˜„μƒμ„ μ²˜λ¦¬ν•˜λŠ” 방법을 μ—°κ΅¬ν•˜λŠ”λ° 쀑점을 λ‘‘λ‹ˆλ‹€. 이λ₯Ό 톡해 λ³΅μž‘ν•œ μžμ—°μ–΄λ₯Ό λ‹€μ–‘ν•œ μΈ΅μœ„μ—μ„œ μ²΄κ³„μ μœΌλ‘œ 뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. 음운둠(Phonology):

    • κΈ°μ€€: μ†Œλ¦¬μ™€ κ΄€λ ¨λœ 언어적 ν˜„μƒ
    • μ„€λͺ…: μŒμš΄λ‘ μ€ μ–Έμ–΄μ˜ μ†Œλ¦¬ 체계와 μŒμ†Œ(phoneme)λ₯Ό μ—°κ΅¬ν•©λ‹ˆλ‹€. μžμ—°μ–΄ μ²˜λ¦¬μ—μ„œλŠ” μŒμ„±μ„ ν…μŠ€νŠΈλ‘œ λ³€ν™˜ν•˜κ±°λ‚˜, μŒμ„± 인식 μ‹œμŠ€ν…œμ„ κ°œλ°œν•  λ•Œ μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
  2. ν˜•νƒœλ‘ (Morphology):

    • κΈ°μ€€: λ‹¨μ–΄μ˜ ꡬ쑰와 ν˜•μ„±
    • μ„€λͺ…: ν˜•νƒœλ‘ μ€ λ‹¨μ–΄μ˜ λ‚΄λΆ€ ꡬ쑰λ₯Ό μ—°κ΅¬ν•˜λ©°, 단어λ₯Ό 의미 μžˆλŠ” λ‹¨μœ„(morpheme)둜 λΆ„ν•΄ν•˜λŠ” μž‘μ—…μ„ ν¬ν•¨ν•©λ‹ˆλ‹€. μžμ—°μ–΄ μ²˜λ¦¬μ—μ„œλŠ” ν˜•νƒœμ†Œ 뢄석(morphological analysis) 및 ν˜•νƒœμ†Œ 기반 토큰화(tokenization)에 ν™œμš©λ©λ‹ˆλ‹€.
  3. ꡬ문둠(Syntax):

    • κΈ°μ€€: λ¬Έμž₯ ꡬ쑰와 문법 κ·œμΉ™
    • μ„€λͺ…: ꡬ문둠은 단어듀이 κ²°ν•©λ˜μ–΄ λ¬Έμž₯을 μ΄λ£¨λŠ” κ·œμΉ™μ„ μ—°κ΅¬ν•©λ‹ˆλ‹€. μžμ—°μ–΄ μ²˜λ¦¬μ—μ„œλŠ” λ¬Έμž₯ ꡬ문 뢄석(parsing)을 톡해 λ¬Έλ²•μ μœΌλ‘œ μ˜¬λ°”λ₯Έ λ¬Έμž₯을 λΆ„μ„ν•˜κ³  μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  4. 의미둠(Semantics):

    • κΈ°μ€€: μ˜λ―Έμ™€ 해석
    • μ„€λͺ…: μ˜λ―Έλ‘ μ€ 단어, ꡬ, λ¬Έμž₯의 의미λ₯Ό μ—°κ΅¬ν•©λ‹ˆλ‹€. μžμ—°μ–΄ μ²˜λ¦¬μ—μ„œλŠ” ν…μŠ€νŠΈμ˜ 의미λ₯Ό μΆ”μΆœν•˜κ³ , λ¬Έλ§₯을 μ΄ν•΄ν•˜λ©°, 의미 기반 검색 및 μ§ˆμ˜μ‘λ‹΅ μ‹œμŠ€ν…œμ— ν™œμš©λ©λ‹ˆλ‹€.
  5. ν™”μš©λ‘ (Pragmatics):

    • κΈ°μ€€: μ–Έμ–΄ μ‚¬μš©μ˜ λ§₯락과 λͺ©μ 
    • μ„€λͺ…: ν™”μš©λ‘ μ€ μ–Έμ–΄κ°€ μ‹€μ œ μƒν™©μ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€λ₯Ό μ—°κ΅¬ν•©λ‹ˆλ‹€. μžμ—°μ–΄ μ²˜λ¦¬μ—μ„œλŠ” λŒ€ν™” μ‹œμŠ€ν…œ, 챗봇 λ“±μ—μ„œ μ‚¬μš©μžμ˜ μ˜λ„λ₯Ό νŒŒμ•…ν•˜κ³  μ μ ˆν•œ 응닡을 μƒμ„±ν•˜λŠ” 데 μ€‘μš”ν•©λ‹ˆλ‹€.
  6. λ‹΄λ‘ (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:
    1. Stanford λŒ€ν•™μ—μ„œ κ°œλ°œν•œ μžμ—°μ–΄ ꡬ문 λΆ„μ„κΈ°μž…λ‹ˆλ‹€.
    2. λ‹€μ–‘ν•œ μ–Έμ–΄(μ˜μ–΄, 쀑ꡭ어, μ•„λžμ–΄, 독일어, ν”„λž‘μŠ€μ–΄, μŠ€νŽ˜μΈμ–΄ λ“±)에 λŒ€ν•œ ꡬ문 뢄석을 μ§€μ›ν•©λ‹ˆλ‹€.
    3. ꡬ성성뢄 뢄석(constituency parsing)κ³Ό 의쑴 ꡬ문 뢄석(dependency parsing)을 λͺ¨λ‘ μ œκ³΅ν•©λ‹ˆλ‹€.
    4. PCFG(Probabilistic Context-Free Grammar), Shift-Reduce, Neural Network 기반의 의쑴 ꡬ문 뢄석기λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
    5. μ˜€ν”ˆ μ†ŒμŠ€λ‘œ 제곡되며, 비상업적 μš©λ„λ‘œλŠ” 무료둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • spaCy:
    1. μ‚°μ—…μš© κ°•λ„μ˜ μžμ—°μ–΄ 처리λ₯Ό μœ„ν•œ Python λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.
    2. 토큰화, ν’ˆμ‚¬ νƒœκΉ…, 개체λͺ… 인식, 의쑴 ꡬ문 뢄석 λ“± λ‹€μ–‘ν•œ NLP μž‘μ—…μ„ μ§€μ›ν•©λ‹ˆλ‹€.
    3. λΉ λ₯Έ 처리 속도와 높은 μ •ν™•λ„λ‘œ μ•Œλ €μ Έ μžˆμŠ΅λ‹ˆλ‹€.
    4. 사전 ν›ˆλ ¨λœ λͺ¨λΈμ„ μ œκ³΅ν•˜μ—¬ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    5. λ‹€κ΅­μ–΄ 지원을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • NLTK (Natural Language Toolkit):

    NLTKλŠ” ꡐ윑과 연ꡬ λͺ©μ μœΌλ‘œ μ„€κ³„λ˜μ—ˆμœΌλ©°, λ‹€μ–‘ν•œ NLP μž‘μ—…μ„ μ§€μ›ν•©λ‹ˆλ‹€.

    1. 토큰화: λ¬Έμž₯κ³Ό 단어 λ‹¨μœ„λ‘œ ν…μŠ€νŠΈλ₯Ό λΆ„ν• ν•©λ‹ˆλ‹€.
    2. ν’ˆμ‚¬ νƒœκΉ…: 각 단어에 λŒ€ν•΄ ν’ˆμ‚¬ 정보λ₯Ό λΆ€μ—¬ν•©λ‹ˆλ‹€.
    3. ꡬ문 뢄석: ꡬ성성뢄 뢄석과 의쑴 ꡬ문 뢄석을 μ§€μ›ν•©λ‹ˆλ‹€.
    4. μ–΄νœ˜ μžμ›: WordNetκ³Ό 같은 μ–΄νœ˜ μžμ›μ„ ν¬ν•¨ν•˜μ—¬ λ‹¨μ–΄μ˜ 의미λ₯Ό λΆ„μ„ν•©λ‹ˆλ‹€.
    5. ν…μŠ€νŠΈ μ „μ²˜λ¦¬: λΆˆμš©μ–΄ 제거, μ–΄κ°„ μΆ”μΆœ, ν‘œμ œμ–΄ μΆ”μΆœ λ“± λ‹€μ–‘ν•œ μ „μ²˜λ¦¬ μž‘μ—…μ„ μ§€μ›ν•©λ‹ˆλ‹€.

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 μ˜μ—­μ— 걸쳐 있으며, 각 μ˜μ—­μ—μ„œ λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ λ³΄μž…λ‹ˆλ‹€:

    1. 의미둠 (Semantics) μ˜μ—­μ—μ„œλŠ” μƒλ‹Ήν•œ 진전을 이루어 μ‹€μš©μ μΈ μˆ˜μ€€μ— λ„λ‹¬ν–ˆμ§€λ§Œ, μ—¬μ „νžˆ 인간 μˆ˜μ€€μ˜ 이해와 ν•΄μ„μ—λŠ” λ―ΈμΉ˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

      • 과제: λ³΅μž‘ν•œ μΆ”λ‘ , 상식적 이해, μ€μœ  해석 λ“±μ—μ„œ μ—¬μ „νžˆ κ°œμ„ μ΄ ν•„μš”ν•©λ‹ˆλ‹€.
    2. ν™”μš©λ‘  (Pragmatics) μ˜μ—­μ€ μ˜λ―Έλ‘ λ³΄λ‹€λŠ” 덜 λ°œμ „ν–ˆμ§€λ§Œ, μ‹€μ œ μ‘μš© λΆ„μ•Όμ—μ„œ 점차 ν™œμš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 특히 λŒ€ν™” μ‹œμŠ€ν…œκ³Ό 감정 뢄석 λ“±μ—μ„œ μœ μš©μ„±μ„ 보이고 μžˆμŠ΅λ‹ˆλ‹€.

      • 과제: ν™”μžμ˜ μ˜λ„, μ•”μ‹œμ  의미, μ‚¬νšŒλ¬Έν™”μ  λ§₯락 이해 λ“±μ—μ„œ 인간 μˆ˜μ€€μ˜ 이해λ₯Ό λ‹¬μ„±ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.
    3. λ‹΄λ‘  (Discourse) μ˜μ—­μ€ κ°€μž₯ λ³΅μž‘ν•˜κ³  도전적인 μ˜μ—­μœΌλ‘œ, ν˜„μž¬ 초기 연ꡬ 단계에 μžˆμŠ΅λ‹ˆλ‹€. 이 μ˜μ—­μ˜ λ°œμ „μ€ ν–₯ν›„ NLP 기술의 큰 도약을 κ°€μ Έμ˜¬ κ²ƒμœΌλ‘œ μ˜ˆμƒλ©λ‹ˆλ‹€.

      • 과제: κΈ΄ λ¬Έλ§₯을 μœ μ§€ν•˜λ©΄μ„œ 일관성 μžˆλŠ” λŒ€ν™”λ₯Ό μ΄μ–΄κ°€λŠ” λŠ₯λ ₯, λ³΅μž‘ν•œ 논리 ꡬ쑰 이해 등이 μ£Όμš” κ³Όμ œμž…λ‹ˆλ‹€.

μ „λ°˜μ μœΌλ‘œ, NLP κΈ°μˆ μ€ 이 μ„Έ μ˜μ—­μ—μ„œ μ§€μ†μ μœΌλ‘œ λ°œμ „ν•˜κ³  μžˆμ§€λ§Œ, 인간 μˆ˜μ€€μ˜ μ–Έμ–΄ 이해와 생성을 μœ„ν•΄μ„œλŠ” 아직 λ§Žμ€ 연ꡬ와 ν˜μ‹ μ΄ ν•„μš”ν•œ μƒνƒœμž…λ‹ˆλ‹€. (=> μ§€κΈˆλ„ ν™œλ°œν•˜κ²Œ 연ꡬ가 μ§„ν–‰λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€)

  1. NLP의 어렀움과 역사

  • μ™œ NLPκ°€ μ–΄λ €μš΄κ°€? : μžμ—°μ–΄λŠ” ν”„λ‘œκ·Έλž˜λ° 언어와 달리 λ°©λŒ€ν•œ λ‹¨μ–΄μ˜ μ–‘, λ³΅μž‘ν•œ ꡬ문, λͺ¨ν˜Έμ„± λ“±μœΌλ‘œ 인해 닀루기 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. μ‚¬μš©λ˜λŠ” λ°©λŒ€ν•œ λ‹¨μ–΄μ˜ μ–‘ 뿐만 μ•„λ‹ˆλΌ, ꡬ문의 λ³΅μž‘μ„± 및 λͺ¨ν˜Έμ„±, μ‹œκ°„μ˜ 흐름에 따라 μ§„ν™”ν•˜κΈ° λ•Œλ¬Έμ— 초기 NLP연ꡬ에 어렀움이 μ‘΄μž¬ν–ˆμŠ΅λ‹ˆλ‹€.

  • NLP μ—°κ΅¬μ˜ 역사 : μ΄ˆκΈ°μ—λŠ” κ·œμΉ™ 기반 접근법이 주둜 μ‚¬μš©λ˜μ—ˆμ§€λ§Œ, μžμ—°μ–΄μ˜ 동적 νŠΉμ„±μ„ κ³ λ €ν•˜μ§€ λͺ»ν•˜λŠ” 단점이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬λŠ” 톡계적 방법과 κ·œμΉ™ 기반 방법을 κ²°ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λ©°, λ¨Έμ‹  λŸ¬λ‹ 및 λ”₯ λŸ¬λ‹ 기반 접근법이 μ£Όλ₯˜λ₯Ό 이루고 μžˆμŠ΅λ‹ˆλ‹€.

  1. 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

μ½”λ“œ μ˜ˆμ‹œ

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')]

  1. Named Entity Recognition (NER)

  • 객체λͺ… 인식 (Named Entity Recognition, NER) : 객체λͺ… 인식은 λ¬Έμž₯μ—μ„œ νŠΉμ • μš”μ†Œλ₯Ό 미리 μ •μ˜λœ μΉ΄ν…Œκ³ λ¦¬(예: μ‚¬λžŒ, μž₯μ†Œ, 쑰직, λ‚ μ§œ λ“±)둜 λΆ„λ₯˜ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. μ΄λŠ” ν…μŠ€νŠΈ λ°μ΄ν„°μ—μ„œ μ€‘μš”ν•œ 정보λ₯Ό μΆ”μΆœν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

μ ‘κ·Ό 방법

  1. 사전 기반 접근법 (Dictionary / Rule-based Approach)
  • List Lookup: 사전에 μ •μ˜λœ 리슀트λ₯Ό μ‚¬μš©ν•˜μ—¬ ν…μŠ€νŠΈμ—μ„œ ν•΄λ‹Ή 단어λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€.
    • μž₯점: κ°„λ‹¨ν•˜κ³  λΉ λ₯΄λ©°, νŠΉμ • 언어에 νŠΉν™”λœ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • 단점: 리슀트의 크기와 μœ μ§€ 관리가 μ–΄λ ΅κ³ , μƒˆλ‘œμš΄ λ‹¨μ–΄λ‚˜ 변화에 λ―Όκ°ν•©λ‹ˆλ‹€.
  • Shallow Parsing Approach: κ·Όκ±° μžˆλŠ” 증거(evidence)λ₯Ό 기반으둜 ν…μŠ€νŠΈμ—μ„œ 객체λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.
    • μ˜ˆμ‹œ: β€œWall Streetβ€μ—μ„œ β€œStreet”과 같은 단어λ₯Ό 톡해 μ§€λͺ…을 μΈμ‹ν•©λ‹ˆλ‹€.
  1. λͺ¨λΈ 기반 접근법 (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

  1. 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)
  1. μ–Έμ–΄ λͺ¨λΈλ§ (Language Modeling)

ν™•λ₯ μ  μ–Έμ–΄ λͺ¨λΈ (Probabilistic Language Modeling) : μ–Έμ–΄ λͺ¨λΈλ§μ€ μ£Όμ–΄μ§„ λ¬Έμž₯이 μ‹€μ œ λ¬Έλ²•μ μœΌλ‘œ νƒ€λ‹Ήν•œμ§€ ν‰κ°€ν•˜λŠ” λͺ¨λΈμž…λ‹ˆλ‹€. μ΄λŠ” λ¬Έμž₯의 문법적 ꡬ쑰와 단어 κ°„μ˜ 관계λ₯Ό μ΄ν•΄ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

μ ‘κ·Ό 방법

  1. N-그램 λͺ¨λΈ (N-gram Models)
  • λ‹¨μ–΄μ˜ 연속적인 νŒ¨ν„΄μ„ λΆ„μ„ν•˜μ—¬ λ‹€μŒ λ‹¨μ–΄μ˜ ν™•λ₯ μ„ μ˜ˆμΈ‘ν•©λ‹ˆλ‹€.
  • Unigram: 단어 ν•˜λ‚˜μ˜ ν™•λ₯ 
  • Bigram: 두 λ‹¨μ–΄μ˜ 연속 ν™•λ₯ 
  • Trigram: μ„Έ λ‹¨μ–΄μ˜ 연속 ν™•λ₯ 
  1. 신경망 기반 λͺ¨λΈ (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))


-->