Skip to content

Latest commit

 

History

History
95 lines (49 loc) · 2.58 KB

2019-08-08_BPE.md

File metadata and controls

95 lines (49 loc) · 2.58 KB

LSA: 카운트 기반으로 단어의 의미를 벡터화 하는 알고리즘

Word2Vec: 단어를 벡터공간으로 표현(거리계산 단어들 간 의미 이해)

Seq2Seq, RNNLM, ...

언어 모델

기계가 언어를 이해할 수 있게 할 수 있도록 하는 모델

  • Vocabulary: 기계가 학습한 단어의 집합
  • OOV(Out of Vocabulary): 기계가 학습하지 않은 단어의 집합

만약 기계가 학습하지 않은 단어가 있으면, 어떻게 접근할 수 있을까요?

예를 들어, 뼈다구 해장국 먹으러 가자라고 기계한테 말했는데 기계는 뼈다귀는 아는데 뼈다구는 모른다면, 어떻게 학습시켜야 할까요?

어떻게 뼈다구와 뼈다귀가 같다는 것을 인지시킬 수 있을 까요?

문맥의 의미를 먼저 파악한 다음 단어가 무엇일 것이다 하고 접근하는 n-gram(bi-gram, tri-gram) 방법이 있습니다.

BPE, WPM 알고리즘(데이터 전처리)

기계가 방금 위와 같은 것을 알도록 하는 알고리즘들은 BPE와 WPM이 있습니다.

BPE 알고리즘을 사용하면 OOV에 대한 문제점을 어느정도 해결할 수 있습니다.

BPE 알고리즘은 원래 압축 알고리즘인데, 자연어 처리 쪽에서 사용되고 있습니다.

압축할 때는 run-length 기법으로 압축하는 방법이 있습니다.AAAAA => A5

BPE: 연속으로 가장 많이 등장한 글자의 쌍 => 한 글자로 표현

https://arxiv.org/pdf/1508.07909

문자열: aaabadaaabac

Z = aa

문자열: ZabadZabac

Y=ab

문자열: ZYadZYac

X=ZY

문자열: XadXac

W=Xa

문자열: WdWc

하지만, 허프만 인코딩(트리)가 효율 짱 좋음!

문자열 처리쪽으로는 KPM 알고리즘과 보이어 무어 알고리즘이 많이 쓰이는데, 특히 보이어 무어 알고리즘이 많이 사용됩니다. 레벤슈타인 거리도 중요합니다.

  1. 모든 단어들을 글자로 분리

    {'low': 5, 'lower': 2, 'newest': 6, 'widest':3}

    => l, o, w, e, r, n, w, s, t, i, d

  2. 빈도가 가장 높은 문자들의 쌍을 검색

  3. 많이 등장한 ㄷ

    1. est가 가장 많이 등장(9번) => est를 묶음
  4. 빈도가 가장 높은 문자들의 쌍을 검색

    1. lo가 가장 많이 등장(7번) => lo를 묶음
    2. {lo w e r: 2, 'w i d est': 3}
  5. 위의 과정을 반복(10번)

=> l, o, w, e, r, n, s, t, i, d, es, est, lo, low, ne, new, newest, wi, wid, wid, widest

=> lowest -> l, o, w, e, s, t

-> l, o, w, e, r, n, s, t, i, d

9 -> es, est,

7 -> lo, low,

6 -> ne, new, newest,

3 -> wi, wid, widest

lowest -> l, o, w, e, s, t