N-gram 이해하기

2024. 11. 18. 00:11·AI/Natural Language Processing
728x90
반응형

N-gram이란?

n-gram은 텍스트나 시퀀스에서 연속적으로 나타나는 n개의 항목(단어, 문자 등)을 의미한다. n-gram은 한 단어 이상의 단어 시퀀스를 분석 대상으로 한다. 예를 들어, "I love programming"이라는 문장에서 2-gram(bigram)은 "I love", "love programming" 등이 된다. n-gram은 텍스트의 구조와 패턴을 파악하는 데 유용하여 자연어 처리에서 많이 사용된다. n의 크기에 따라 unigram(1-gram), bigram(2-gram), trigram(3-gram) 등으로 나타낼 수 있다.

 

image

마르코프 가정

n-gram에서 중요한 개념 중 하나는 마르코프 가정이다. 마르코프 가정은 주어진 시퀀스에서 다음 상태나 사건의 확률이 오직 현재 상태에만 의존하며, 그 이전의 상태나 사건에는 의존하지 않는다는 가정이다. 주어진 단어의 시퀀스에 대해 다음 단어의 확률의 수학적 표현은 1단계와 2단계로 표현 할수 있다.

 

1단계

스크린샷 2023-08-08 오후 10 49 06

 

2단계

스크린샷 2023-08-08 오후 10 49 51

마르코프 가정의 중요성

마르코프 가정의 장점은 복잡한 문제를 단순화하여 계산적 처리 가능하게 만든다는 것이다. 예를 들어, 언어 모델에서 전체 문장의 단어 시퀀스를 고려하는 것은 매우 복잡할 수 있지만, 마르코프 가정을 적용하면 문제가 훨씬 간단해진다.

그러나, 이 가정은 문맥의 깊이를 제한한다는 단점도 있다. 이는 직전의 한 두 단어만을 고려하기 때문에, 문장 전체의 의미나 구조를 완벽하게 파악하기 어렵다는 것을 의미한다. 따라서, 실제 자연어처리 모델에서는 RNN, LSTM, Transformer와 같은 더 깊은 문맥을 고려하는 다양한 방법들이 연구되고 있다.

 

N-gram의 사용 사례

  • 텍스트 생성: n-gram 모델은 주어진 텍스트의 패턴을 학습하여 새로운 텍스트를 생성하는데 사용될 수 있다.
  • 검색 엔진: 검색 엔진은 n-gram을 사용하여 검색 쿼리와 문서 간의 유사성을 평가한다.
  • 자연어 처리: 텍스트의 구조와 문맥을 파악하는 데 n-gram이 널리 사용된다.

 

N-gram의 장단점

장점

  • 간단하고 구현하기 쉽다.
  • 큰 데이터셋에서 잘 작동한다.

단점

  • n이 큰 경우 데이터가 희소해질 수 있다.
  • 단순한 n-gram 모델은 문맥의 깊이를 제대로 잡아내지 못할 수 있다.

 

Python 에서 N-gram 구현하기

Python에서는 nltk 라이브러리를 사용하여 n-gram을 쉽게 구현할 수 있다.

from nltk.util import ngrams
texts = "나는 프로그래밍을 매우 좋아한다"
token = texts.split()
bigram = list(ngrams(token, 2))
print(bigram)
# output
[('나는', '프로그래밍을'), ('프로그래밍을', '매우'), ('매우', '좋아한다')]

 

마치며..

n-gram은 연속적인 단어나 문자의 시퀀스를 통해 텍스트의 패턴과 구조를 파악하는 데 큰 도움을 주기 때문에 텍스트 분석과 같은 자연어 처리에서 핵심적인 개념으로 간주된다. 특히, n-gram은 문맥 정보를 일정 범위 내에서 포착할 수 있어, 텍스트의 패턴을 빠르게 인식하는 데 유용하다.

마르코프 가정은 n-gram 모델의 핵심 원칙 중 하나이다. 이 가정을 통해 문제의 복잡성을 크게 줄일 수 있으며, 계산의 효율성을 향상시킬수 있다. 그러나, 이 가정만으로는 텍스트의 깊은 문맥 정보를 완전히 파악하기는 어렵다.

따라서, n-gram과 마르코프 가정은 자연어 처리의 기본적인 개념으로 시작하여, 보다 발전된 방법들과 함께 사용되면 텍스트 데이터의 다양한 패턴과 구조를 효과적으로 분석할 수 있다. 이를 바탕으로 다양한 어플리케이션, 예를 들면 텍스트 생성, 검색 엔진 최적화, 기계 번역 등에 활용할 수 있다.

728x90
반응형

'AI > Natural Language Processing' 카테고리의 다른 글

Keybert와 kiwi형태소분석기를 사용하여 키워드추출 하기  (2) 2024.12.03
프롬프트 엔지니어링 이해하기  (0) 2024.11.17
워드 임베딩 - Word2Vec 이해하기  (3) 2024.11.11
'AI/Natural Language Processing' 카테고리의 다른 글
  • Keybert와 kiwi형태소분석기를 사용하여 키워드추출 하기
  • 프롬프트 엔지니어링 이해하기
  • 워드 임베딩 - Word2Vec 이해하기
Data Include Me
Data Include Me
AI, LLM, 머신러닝, 파이썬 등 최신 정보와 튜토리얼을 제공하는 데이터 사이언스 전문 블로그입니다.
  • Data Include Me
    Data Include Me
    Data Include Me
  • 전체
    오늘
    어제
    • 전체 (35)
      • AI (16)
        • Machine Learing (2)
        • Deep Learning (0)
        • Natural Language Processing (4)
        • Large Language Model (7)
        • Computer Vision (3)
      • Data Science (10)
        • Data Analysis (1)
        • Statistics & Math (3)
        • Data Engineering (6)
        • Data Visualization (0)
      • Programming Challenges (2)
        • Baekjoon (0)
        • Programmers (2)
        • HackerRank (0)
      • Development (7)
        • Cloud & DevOps (5)
        • Project (2)
  • 인기 글

  • 태그

    티스토리챌린지
    오블완
    sympy
    mcp
    Crawling
    integral
    Cloud Computing
    Python
    LangChain
    llm
  • 링크

    • Github
    • Linkedin
  • 반응형
  • hELLO· Designed By정상우.v4.10.1
Data Include Me
N-gram 이해하기
상단으로

티스토리툴바