여정의 기록

Python/n-gram, language model 본문

공부/Python

Python/n-gram, language model

Chelsey 2022. 2. 10. 17:36
728x90

n-gram

문자열(문자)에서 n개의 연속된 문자(단어)를 추출하는 것

2-gram : 2개의 연속된 문자 혹은 단어 추출

3-gram : 3그램이라고 부른다

 

엔칸토를 보았다

- 공백 단위로 구분 : [엔칸토를, 보았다]

- 2-gram : ['엔칸', '칸토', '토를', '를보', '보았', '았다']

Hello

- 2-gram : ['He','el','ll','lo']

Zzz="hello"
for i in range(len(Zzz)-1) :
	print(Zzz[i:i+2])
# Zzz는 문자열이므로 i:i+2 로해도 문자열 형태로 나왔지만

# z는 리스트 형태이므로 각 인덱스 값을 뽑아서 문자열 형태로 나오게 만들었다.
Zzz2="this is python program"
z = Zzz.split()
for i in range(len(z)) :
	print(z[i],z[i+2])

n-gram lanuage model

단어의 순서에 확률을 적용한 모델

언어 모델을 만드는 유형 : 통계적 방법(n-gram ... ), 신경망 방법

 

밥을 먹고 운동을 했다 -> 밥을, 먹고, 운동을 뒤에 '했다'가 올 확률

문장을 두 글자씩 담기 위해 .split()하고 리스트에 담는다 -> 유사도를 구하기 위해 중복되는 단어개수를 구한다. 담은 2-gram 전체길이를 구해 유사도를 구한다.

  • 단순 조건부 확률 기반의 언어모델
    P(했다| 밥을, 먹고, 운동을) : 밥을, 먹고, 운동을, '했다'가 나올 확률은?
  • 전체 문장에서 해당 문장이 나오는 횟수(유사도)
    count 기반의 확률 접근
    유사도 = 중복되는 단어개수 / 해당 텍스트를 2글자씩 분리한 리스트의 전체 길이
    count(밥을먹고운동을했다)/count(밥을먹고운동을)=P(했다| 밥을, 먹고, 운동을)

 

 

 

728x90

'공부 > Python' 카테고리의 다른 글

Python/unpacking, lambda 함수, map  (0) 2022.02.11
Python/함수  (0) 2022.02.11
Python/file read, write, Pickle  (0) 2022.02.10
Python/ continue , break  (0) 2022.02.10
Python/Random module  (0) 2022.02.10