일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Gap
- transform
- 포토샵
- 소수
- c++
- stl
- box-sizing
- Photoshop
- float
- 백준
- 상태
- 미디어 쿼리
- 강화학습
- pandas
- 수학
- grid
- skt membership
- 통신사할인
- c
- Javascript
- CSS
- 확률
- JSX
- Codility
- 알고리즘
- 반응형 웹
- REM
- spring
- react
- SK바이오사이언스
Archives
- Today
- Total
sliver__
[NLP] Chapter 2 - 자연어 본문
728x90
[자연어 처리란]
- NLP(Natural Language Processing) : 자연어를 처리하는 분야
- 우리의 말을 컴퓨터에게 이해시키기 위한 기술
[시소러스]
- 뜻이 같은 단어(동의어), 뜻이 비슷한 단어(유의어)
[WordNet]
- NTLK(Natural Language Toolkit) 라이브러리 사용
- 품사 태깅, 구문 분석, 정보 추출, 의미 분석 등 자연어 처리에 편리한 기능 제공
- 예제
-
import nltk from nltk.corpus import wordnet nltk.download('wordnet') nltk.download('omw-1.4') print(wordnet.synsets('car')) car = wordnet.synset('car.n.01') #car.n.01 / 단어 이름. 속성(명사, 동사 등). 그룹의 인덱스 print(car.definition()) print(car.lemma_names()) print(car.hypernym_paths()[0]) novel = wordnet.synset('novel.n.01') dog = wordnet.synset('dog.n.01') motorcycle = wordnet.synset('motorcycle.n.01') print(car.path_similarity(novel)) print(car.path_similarity(dog)) print(car.path_similarity(motorcycle))
[단어의 분산 표현]
- 단어의 의미를 정확하게 파악할 수 있는 벡터 표현
[분포 가설]
- "단어의 의미는 주변 단어에 의해 형성된다"에 기반
- 맥락은 주변에 놓인 단어를 의미한다
- 예제
You say goodbye and i say hello
=> goodbye 앞, 뒤로 두 단어씩 맥락에 해당
- 맥락의 크기 : 윈도우 크기(Window size)
- 상황에 따라 왼쪽 단어 또는 오른쪽 단어만 사용할 수도 있다.
[동시발생 행렬]
- 통계 기반 기법 : 어떤 단어를 주목했을 때, 그 주변에 어떤 단어가 몇번이나 등장하는지 세는 방법
- 한 단어를 기준으로 윈도우 사이즈만큼 단어가 몇번 나오는지 만든 행렬
- 예제
you | say | goodbye | and | i | hello | . | |
you | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
say | 1 | 0 | 1 | 0 | 1 | 1 | 0 |
goodbye | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
and | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
i | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
hello | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
. | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
- 모든 단어에 대해 동시발생하는 행렬 : 동시발생 행렬
[벡터 간 유사도]
- 단어 벡터의 유사도를 나타낼 때는 코사인 유사도를 사용
- $ x = (x_{1},x_{2},x_{3},...x_{n}), y = (y_{1},y_{2},y_{3},...y_{n}) $이 존재할 때
$$ similarity(x,y) = { {x \cdot y} \over {||x||||y||} } = { {x_{1}y_{1} + \cdots x_{n}y_{n} } \over {\sqrt{x_{1}^{2} + \cdots + x_{n}^2} \sqrt{y_{1}^2 + \cdots + y_{n}^2}} } $$
- 코사인 유사도는 두 벡터가 가리키는 방향이 얼마나 비슷한가를 표현
[상호 정보량]
- 점별 상호정보량(Pointwise Mutual Information)(PMI)
- 확률변수 x, y에 대해 아래의 식으로 정의된다.
$$ PMI(x,y) = \log_{2} { P(x,y) \over P(x)P(y) } $$
- $P(x)$는 x가 일어날 확률, $P(y)$는 y가 일어날 확률, $P(x,y)$는 x, y가 동시에 일어날 확률
- PMI값이 높을수록 관련성이 높다는 의미
- 두 단어의 동시발생 횟수가 0이면 $log_{2} = -\infty$ 이므로 실제 구현 시 양의 상호정보량(Positive PMI)을 사용
$$ PPMI(x,y) = max(0, PMI(x,y)) $$
- PMI가 음수일 때 0으로 취급
- 단어의 개수가 많아질수록 많은 양의 벡터를 처리해야하는 문제점
[차원 감소]
- 중요한 정보는 최대한 유지하면서 벡터의 차원을 감소
- Sparse vector, Sparse matrix에서의 중요한 축을 찾아내어 밀집벡터(Density vector)로 변환
- SVD(Singular Value Decomposition)를 사용
$$ X = USV^T $$
- 임의의 행렬 X를 U,S,V라는 세 행렬의 곱으로 분해
- U와 V는 직교행렬이고, 열벡터는 서로 직교
- S는 대각행렬(대각성분 외에는 모두 0인 행렬
======================================================================================
**SVD
https://angeloyeo.github.io/2019/08/01/SVD.html
특이값 분해(SVD) - 공돌이의 수학정리노트
angeloyeo.github.io
======================================================================================
[PTB 데이터셋]
- 펜 트리뱅크(Penn Treebank(PTB))
- train, valid, test 데이터 셋으로 존재
728x90
'CS > NLP' 카테고리의 다른 글
[Hands on Python NLP] - NLP 기본의 이해 (0) | 2022.10.09 |
---|---|
[NLP] Auto Encoder (1) (0) | 2022.08.11 |
[NLP] chapter04 - word2vec 속도개선 (0) | 2022.02.10 |
[NLP] Chapter3 - word2vec (0) | 2022.02.10 |
[NLP] Chapter 1 - 신경망 복습 (0) | 2022.02.06 |
Comments