Natural Language Processing(10)
-
[NLP] word2vec
이전 장에서는 통계 기반의 방식으로 단어를 벡터화하였다. 전체 말뭉치에서 단어가 나타나는 맥락을 읽어들여서 통계화한 뒤, 이 정보를 벡터화하였다. 이번에 알아볼 기법은 추론 기반의 방식이다. 대표적인 추론 기반 기법으로 word2vec 방식이 있다. word2vec은 신경망을 이용하여 단어를 벡터화한다. 신경망을 훈련시키는 과정을 다시 생각해보자. 신경망에는 입력이 주어지고, 신경망을 통과시켜 어떤 출력을 만들었을 때, 타깃과의 비교를 통해 손실을 계산한다. word2vec에서는 입력이 맥락이고, 타깃이 중앙 단어이다. When I find myself in times of trouble. 여기서는 맥락을 다음과 같이 만들 수 있다. (윈도우가 1일 경우) When I find myself in time..
2023.02.13 -
[NLP] ppmi과 SVD 차원축소
단어발생행렬과 코사인 유사도를 통해 측정한 유사도는 한가지 문제점이 있다. 영어의 경우 a나 the 같은 정관사들은 출현빈도가 매우 높은데, 다른 단어들과의 동시발생확률이 높기때문에 코사인 유사도가 높게 측정될 수 있다. 이러한 이유로 만들어진 것이 PMI(pointwise mutual information)이다. PMI는 전체 corpus에서 단어의 출현빈도가 고려된 유사도 측정 기법이다. 동시발생확률(P(w1, w2))에서 각 w1, w2의 전체 출현빈도가 나누어지기 때문에 단순히 출현빈도가 높은 이유만으로 유사도가 높게 특정되는 일은 없게 된다. 다만 PMI는 log값을 취하기 때문에 동시발생이 일어나지 않았으면(분자가 0) log가 - 무한대이기 때문에 음수는 0으로 처리한 방식이 PPMI이다. ..
2023.02.12 -
[NLP] 동시발생행렬
저번 장에서는 말뭉치의 단어들 하나하나에게 인덱스를 부여하는 법을 배웠다. 컴퓨터를 이 단어-인덱스 쌍을 통해서 단어를 인덱스로 이해할 수 있다. 단어를 벡터화해보자. 단어를 벡터화하면 단어 하나에 컴퓨터가 이해할 수 있도록 의미를 담아낼 수 있다. 컴퓨터는 이 벡터를 통해 단어의 의미를 유추해내고, 단어 간의 관계를 계산해낼 수 있다. 단어를 벡터화하는 기본적인 방법 중 하나는 동시발생행렬을 만드는 것이다. 동시발생행렬은 단어 주변에서 같이 존재하는 단어를 통계화한 결과를 행렬로 나타낸 것이다. 다음의 예를 살펴보자. You say goodbye and i say hello. window를 1로 설정했을 때, you의 경우, You say goodbye and i say hello. say만 동시에 나..
2023.02.12 -
[NLP] 말뭉치 전처리
우리가 사용하는 언어를 컴퓨터가 이해할 수 있는 형태로 변환하기 위한 첫걸음은 말을 단어 단위로 분해한 뒤 이를 숫자로 표현하는 것이다. text = 'I have lived a life of shame.' 위 문장을 단어로 분해하면 I / have / lived / a / life / of / shame. 이다. 이 단어 하나하나를 말뭉치(corpus)로 만들어서 컴퓨터가 이해할 수 있도록 indexing한다. text = text.lower() text = text.replace('.', ' .') words = text.split(' ') 먼저 text 전체를 소문자로 바꾸로 공백 단위로 split 한다. word_to_id = {} id_to_word = {} 그리고 나서 단어를 인덱스로, 거꾸로..
2023.02.12