언어 모델 소개

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

David Cecchini

Data Scientist

문장 확률

다양한 모델

  • "I loved this movie"의 확률.
  • 유니그램
    • $$P(\text{sentence}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N그램
    • N = 2(바이그램): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3(트라이그램): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

문장 확률(계속)

  • 스킵그램
    • $$P(\text{sentence}) = P(\text{context of I} | \text{I})P(\text{context of loved} | \text{loved}) \ $$ $$P(\text{context of this} | \text{this})P(\text{context of movie} | \text{movie})$$
  • 신경망
    • 문장 확률은 네트워크 출력층의 softmax로 계산됩니다
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

RNN과의 연결

RNN에는 언어 모델이 곳곳에 있습니다!

  • 네트워크 자체

RNN은 다음 단어를 예측할 수 있어 언어 모델로 볼 수 있습니다.

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

RNN과의 연결(계속)

  • 임베딩 레이어

모델의 계층을 개략적으로 보여줍니다. 임베딩 레이어는 입력층 바로 다음에 와야 하며, 단어의 밀집 표현을 생성합니다.

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

어휘 사전 구축

# 고유 단어 가져오기
unique_words = list(set(text.split(' ')))
# 사전 생성: 단어→키, 인덱스→값
word_to_index = {k:v for (v,k) in enumerate(unique_words)}
# 사전 생성: 인덱스→키, 단어→값
index_to_word = {k:v for (k,v) in enumerate(unique_words)}
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

입력 전처리

# 변수 X와 y 초기화
X = []
y = []

# 텍스트를 `step` 간격으로, 길이 `sentence_size`씩 순회 for i in range(0, len(text) - sentence_size, step):
X.append(text[i:i + sentence_size]) y.append(text[i + sentence_size])
# 예시(숫자는 어휘의 인덱스):
# 문장: "i loved this movie" -> (["i", "loved", "this"], "movie")
X[0],y[0] = ([10, 444, 11], 17)
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

새 텍스트 변환

# 인덱스 문장 목록 생성
new_text_split = []

# 반복하며 사전에서 인덱스 추출 for sentence in new_text:
sent_split = []
for wd in sentence.split(' '):
ix = wd_to_index[wd]
sent_split.append(ix)
new_text_split.append(sent_split)
Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

연습해 봅시다!

Keras로 배우는 언어 모델링을 위한 순환 신경망(RNN)

Preparing Video For Download...