Tensorflow 2 NLP(자연어처리) 37

[3-4] 잠재 의미 분석(LSA,Latent Semantic Analysis) 이란?

'단어-문서 행렬', 'TF-IDF 행렬' '단어-문맥 행렬' , 'PMI 행렬' 과 같은 단어와 단어, 문장간의 등장 빈도를 행렬로 나타내어 단어를 벡터로 표현할 수 있었지만, 차원이 너무 커 계산상의 효율성을 키우기 위해 차원은 축소하되 단어가 담고있는 의미를 보존하기 위해(정교하게 뽑아냄으로써 잠재 의미를 드러내기 위해)잠재 의미 분석이라는 방법이 등장했다. ​ 이는 성능이 아주 뛰어나지는 않지만, 뒤에 나오는 GloVe나 Swivel 과 같은 곳에 행렬 분해 기법으로서 사용된다. ​ PMI는 두 확률 변수 사이의 상관성을 계량화한 지표이다. ​ ​ i 가 일어날 확률, j가 일어날 확률과 i,j가 동시에 일어날 확률을 가지고 다음과 같은 식으로 표현하면, PMI는 i,j가 자주 같이 등장할수록 커..

[3-3] FastText란?

FastText (Boganowski eta al., 2017)은 페이스북에서 개발해 공개한 단어 임베딩 기법이다. 기본적으로 Word2Vec과 같지만 FastText의 특징은 각 단어를 문자단위 n-gram으로 표현하여 학습한다는 것이다. 즉, Word2Vec은 단어들만으로 학습했다고 한다면, FastText는 더 나아가 단어 내에 들어있는 단어들까지 학습한다는 것이다. 예를들어 abcd라는 단어가 있다면 이를 n=3으로 표현한다고 하자. 우리는 abcd를 => , 5개의 문자 단위 n-gram 벡터를 합해 표현한다. ​ 그래서 기존 Word2Vec의 확률계산에 까지 벡터로써 업데이트 하는 것이다. ​ 그렇다면 이점이 무엇일까? ​ 바로 미등록 단어(+오타) 에도 강해진다는 것이다. 또한 조사나 어미가..

[3-2] Word2Vec란?

Word2Vec은 2013 구글 연구 팀이 발표했고 가장 널리 쓰이고 있는 단어 임베딩 모델이다. ​ Word2Vec 기법은 두 개의 논문으로 나누어 발표되었다. ​ 논문은 다음과 같다. (Mikolov et al., 2013a) https://arxiv.org/pdf/1301.3781.pdf%C3%AC%E2%80%94%20%C3%AC%E2%80%9E%C5%93 (Mikolov et al., 2013b) https://proceedings.neurips.cc/paper/2013/file/9aa42b31882ec039965f3c4923ce901b-Paper.pdf ​ ​ ​ 여기에서 (Mikolov et al., 2013a)에는 Skip-Gram 과 CBOW라는 모델이 제안된다. ​ Skip-Gram은 타..

[3-1] NPLM이란?

NPLM (Neural Probabilisitic Languague Model)은 기존의 통계 기반 언어 모델의 단점을 어느정도 극복시킨 모델이다. ​ 그렇다면, 기존의 통계기반 언어 모델은 무엇인가? ​ 앞서, 언어 모델이란 단어 시퀀스(순서) 에 확률을 부여하는 모델이다. ​ 흐름을 설명해 보겠다. ​ ​ 1. 만약 '영원히 기억될 최고의' 라는 표현 다음에 '명작이다' 라는 단어가 나타날 확률 을 구해보자 이는 최대우도추정법으로 유도 가능하다. 최대우도추정법에 대한 설명은 내 블로그 NLP 카테고리를 보면 이해가 가능하다. 여기서 우리는 최대우도추정법을 이용해 '영원히' ,'기억될' ,'최고의' 라는 변수만을 이용해 본래 변수인 '명작이다'라는 변수까지 추정해 볼 수 있다는 것이다. ​ 하지만, 문..

[2-5] soynlp의 띄어쓰기 교정 모듈

soynlp에서는 띄어쓰기 교정 모듈도 제공한다. ​ => 학습 데이터에서 특정 문자열 앞뒤로 공백이 다수 발견되면 이를 학습하여 교정하는 방식이다. ​ ​ 학습하는 코드는 다음과 같다. 학습 이후 교정을 수행해 보았다. 띄어쓰기가 잘 된 것을 확인할 수 있다. ​ ​ ​ + soynlp 형태소 분석이나 BPE(Byte Pair Encoding) 방식의 토크나이즈 기법은 띄어쓰기에 따라 분석결과가 크게 달라짐. => 모델 학습 전 띄어쓰기 교정을 먼저 적용하자! ​ ​ +BPE 란? : 연속적으로 가장 많이 등장한 글자의 쌍을 하나의 글자(Byte)로 병합하고 이를 최대한으로 수행함. => 이걸 연속적으로 해가면서 voca에 있는 알파벳과 알파벳 쌍(pair)을 업데이트 하여 늘린다. => 새로운 단어가..

[1-6] 도커(Docker)에서 파이썬(python)코드로 작업하기

가장 먼저 도커는 리눅스와 맥os에서 간단히 설치 할 수 있지만, 많은 사람들이 사용하는 Windows 에서는 불가능하다. 그래서 우회하는 방법이 WSL(Windows Subsystem for Linux)이고 정확하게 말하자면 WSL2 이다. ​ 1. WSL을 설치하고 Windows에서 Linux를 실행시킨다. 2. WSL은 기본으로 1이 설정되어 있으므로 WSL을 2로 바꾸어 준다. (제대로 바뀌었는지 확인 필) 2. Linux(Ubuntu)에서 Docker를 설치한다. ​ 그러면 Windows 환경에서 도커를 활용 할 수 있다. ​ 위의 과정은 구글 검색을 통해 간단하게 따라 할 수 있다. ​ ​ ----------------------------------------------------------..

[1-5] 최대우도법

: 어떤 사건을 일으키게 만든 확률분포의 특성을 추정하는 방법 중 하나로, 표본을 얻은 후 이 표본을 이용해 원래의 확률분포를 알아내는 기술이다. ​ 간단히, 표본 5개 x={1,4,5,6,9} 를 추출했을 때 정규분포 후보군(출처: https://angeloyeo.github.io/2020/07/17/MLE.html) 위 5개를 획득한 확률 분포는 파란색 보다는 주황색일 가능성이 더 크다. ​ 이처럼 우리는 표본으로부터 원래의 확률 분포를 예측하는 것이 가능하다. 하지만 표본으로 부터 100% 정확한 확률분포는 얻을 수 없으므로 가장 그럴듯 한 확률분포를 얻어내기 위해 노력해야 한다. 이때 사용하는 방법이 미분계수를 이용하는 방법이다. ​ 다양한 알고리즘에서 자주 사용하는 설계 방식중 하나를 소개하겠다..

[1-4] DAN(Deep Averaging Network)란? (+Dropout)

http://file:///C:/Users/gypsi/Downloads/DAN+%EB%85%BC%EB%AC%B8.pdf 다음 링크에서 관련 논문과 간단한 정리를 볼 수 있다. ​https://medium.com/tech-that-works/deep-averaging-network-in-universal-sentence-encoder-465655874a04 Deep Averaging network in Universal sentence encoder Word embeddings are now state of art for doing downstream NLP tasks such as text classification, sentiment analysis, sentence similarity… medium...

[1-3] TF-IDF 란?

TF-IDF 는 간단히 표현하자면 모든 문서에서 자주 등장하는 단어는 중요도가 낮다고 판단하고(조사 등..), 특정 문서에서만 자주 등장하는 단어는 중요도가 높다고 판단하여 (주제를 담고 있는 단어일 확률 높으므로) 하나의 값으로 나타내는 것이다. 그래서 TF-IDF값이 높은 단어일 수록 주제를 담고있는 단어라고 말 할 수있다. ​ TF-IDF식 (출처: https://www.affde.com/ko/tf-idf-can-it-really-help-your-seo.html) 1. TF는 특정 문서에서만 쓰인 단어 사용 수이다. 2. DF는 특정 단어가 나타난 문서의 수이다. 그러므로 DF값이 클수록 범용적인 단어라고 할 수 있다. 3. IDF는 N(문서 개수)를 DF로 나누고 log를 취해준다. 그러므로 I..

[2-4] soynlp 형태소 분석기 사용하기

soynlp 형태소 분석기는 비지도학습 형태소 분석기이다. 즉, 다른 형태소 분석기(은전한닢,꼬꼬마 등)와는 달리 데이터의 패턴을 모델 스스로 학습을 한다. ​ 오픈소스 패키지는 다음에서 사용하였다. https://github.com/lovit/soynlp GitHub - lovit/soynlp: 한국어 자연어처리를 위한 파이썬 라이브러리입니다. 단어 추출/ 토크나이저 / 한국어 자연어처리를 위한 파이썬 라이브러리입니다. 단어 추출/ 토크나이저 / 품사판별/ 전처리의 기능을 제공합니다. - GitHub - lovit/soynlp: 한국어 자연어처리를 위한 파이썬 라이브러리입니다. github.com soynlp를 사용하기에 앞서 전처리 된 데이터가 필요하다. 이 데이터는 네이버 영화 리뷰 말뭉치를 이용하..