단어 임베딩(Word Embedding)이란 텍스트를 구성하는 하나의 단어를 수치화하는 방법의 일종이다.
텍스트 분석에서 흔히 사용하는 방식은 단어 하나에 인덱스 정수를 할당하는 Bag of Words 방법이다. 이 방법을 사용하면 문서는 단어장에 있는 단어의 갯수와 같은 크기의 벡터가 되고 단어장의 각 단어가 그 문서에 나온 횟수만큼 벡터의 인덱스 위치의 숫자를 증가시킨다.
즉 단어장이 "I", "am", "a", "boy", "girl" 다섯개의 단어로 이루어진 경우 각 단어에 다음과 같이 숫자를 할당한다.
"I": 0
"am": 1
"a": 2
"boy": 3
"girl": 4
이 때 "I am a girl" 이라는 문서는 다음과 같이 벡터로 만들 수 있다.
[11101]
단어 임베딩은 하나의 단어를 하나의 인덱스 정수가 아니라 실수 벡터로 나타낸다. 예를 들어 2차원 임베딩을 하는 경우 다음과 같은 숫자 벡터가 될 수 있다.
V개의 단어를 가지는 단어장이 있을 때, 단어를 BOW 방식으로 크기 V인 벡터로 만든 다음 다음 그림과 같이 하나의 은닉층(Hidden Layer)을 가지는 신경망을 사용하여 특정 단어 열(word sequence)이 주어졌을 때 다음에 나올 단어를 예측하는 문제를 생각해 보자. 입력과 출력은 모두 BOW 방식으로 인코딩되어 있다.
이미지 출처: "word2vec Parameter Learning Explained", Xin Rong
입력 x가 들어가면 입력 가중치 행렬 WT이 곱해져서 은닉층 벡터 h가 되는데 x가 one-hot-encoding 된 값이므로 h 벡터는 입력 가중치 행렬 W의 행 하나가 된다.
h=WTx=vTi
여기에서 i는 입력 벡터 x 의 값이 1인 원소의 인덱스이다. 즉, BOW 단어장에서 i번째 단어를 뜻한다.
벡터 h는 다시 출력 가중치 행렬 W′T와 곱해져서 출력 벡터 y가 된다.
y=W′Th
출력 가중치 행렬 W′의 j번째 열을 vj라고 하면 출력 벡터 y의 j번째 원소의 값은 다음과 같다.
yj=v′Tjh
가중치 행렬을 갱신하는 최적화 공식을 살펴본다. 자세한 유도과정은 논문을 참조한다.
우선 출력 가중치 행렬의 갱신 공식은 다음과 같다.
v′(new)j=v′(old)j−η⋅ej⋅h=v′(old)j−η⋅ej⋅vTi
이 식에서 η는 최적화 스텝 사이즈, ej는 출력 오차가 된다. 이 공식에 따르면 벡터 v′j는 vj 방향으로 수렴해 간다. 즉, i번째 단어와 j번째 단어가 연속하는 관계라면 v′j가 vi와 유사한 위치로 수렴한다는 뜻이다.
다음으로 입력 가중치 행렬의 갱신 공식은 다음과 같다.
v(new)i=v(old)i−η∑kej⋅w′ik
이 공식에 따르면 벡터 vi는 여러 v′k 벡터의 가중합으로 수렴해 간다. 이렇게 단어간의 관계에 의해 i번째 단어를 뜻하는 vi의 값들이 연관성을 가지게 되는데 이 vi 벡터 값을 해당 단어에 대한 분산 표현 (distributed representation) , 벡터 표현 (vector representation) 또는 단어 임베딩 (word embedding)이라고 한다.
이미지 출처: https://www.tensorflow.org/versions/master/tutorials/word2vec/index.html
위의 방식은 하나의 단어로부터 다음에 오는 단어를 예측하는 문제였다. 이러한 문제를 단어 하나짜리 문맥(single-word context)를 가진다고 한다.
CBOW (Continuous Bag of Words) 방식은 복수 단어 문맥(multi-word context)에 대한 문제 즉, 여러개의 단어를 나열한 뒤 이와 관련된 단어를 추정하는 문제이다. 즉, 문자에서 나오는 n개의 단어 열로부터 다음 단어를 예측하는 문제가 된다. 예를 들어
the quick brown fox jumped over the lazy dog
라는 문장에서 (the, quick, brown) 이라는 문맥이 주어지면 fox라는 단어를 예측해야 한다.
CBOW는 다음과 같은 신경망 구조를 가진다. 여기에서 각 문맥 단어를 은닉층으로 투사하는 가중치 행렬은 모든 단어에 대해 공통으로 사용한다.
이미지 출처: "word2vec Parameter Learning Explained", Xin Rong
Update the model’s neural weights from a sequence of sentences (can be a once-only generator stream). For Word2Vec, each sentence must be a list of unicode strings. (Subclasses may accept other examples.)
문장의 시퀀스에서 모델의 신경 가중치를 업데이트하십시오 (한 번만 생성기 스트림 일 수 있음). Word2Vec의 경우 각 문장은 유니 코드 문자열 목록이어야합니다. 서브 클래스는 다른 예를 받아들이는 일이 있습니다.
To support linear learning-rate decay from (initial) alpha to min_alpha, either total_examples (count of sentences) or total_words (count of raw words in sentences) should be provided, unless the sentences are the same as those that were used to initially build the vocabulary.
(초기) alpha에서 min_alpha까지의 선형 학습 률 감소를 지원하려면, 문장이 처음 빌드에 사용 된 것과 같지 않으면 total_examples (문장의 수) 또는 total_words (문장의 원시 단어의 수)가 제공되어야합니다 어휘.
>>> model.save(fname)>>> model=Word2Vec.load(fname)# you can continue training with the loaded model!
The word vectors are stored in a KeyedVectors instance in model.wv. This separates the read-only word vector lookup operations in KeyedVectors from the training code in Word2Vec.
>>> model.wv['computer']# numpy vector of a wordarray([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
model 이 잘 불러와졌는지 확인하려면 model의 내용을 보자.
model.vocab 하며 내용을 볼 수 있다.
most_similar 에서 vocaburary에 단어가 없다고 에러나오면 내용을 확인 후 다시 검색해보면 된다.
플라스크는 작고 강력한 파이썬의 웹 프레임워크 입니다. 플라스크는 배우기 쉽고, 짧은 시간에 웹앱을 만들수 있습니다.
Flask의 세계에 오신것을 환영합니다.
Flask 문서에 오신것을 환영합니다. 이 문서는 다양한 파트로 나누어져 있습니다. 저자는 설치하기 와 빠르게 시작하기 를 먼저 보실것을 추천합니다. 빠르게 시작하기 뿐만아니라, 어떻게 Flask 어플리케이션을 만들 수 있는지 좀 더 상세하게 다루는 튜토리얼 또한 볼 수 있습니다.
이 페이지는 Python 프로그래밍 언어의 공식 CPython 배포판을위한 많은 과학적 오픈 소스 확장 패키지의 32 비트 및 64 비트 Windows 바이너리를 제공합니다.
파일은 비공식적 인 형식 (비공식, 비 인식, 개인, 지원되지 않음, 무보증, 책임 없음, "있는 그대로"제공됨)이며 테스트 및 평가 목적으로 제공됩니다.
다운로드가 실패하면이 페이지를 새로 고침하고, JavaScript를 활성화하고, 다운로드 관리자를 비활성화하고, 프록시를 비활성화하고, 캐시를 지우고 Firefox를 사용하십시오. 필요에 따라 수동으로 파일을 다운로드하십시오.
대부분의 바이너리는 PyPI 또는 프로젝트 공개 개정 관리 시스템에서 찾을 수있는 소스 코드로 작성됩니다. 소스 코드 변경 사항은 프로젝트 관리자에게 제출되었거나 패키지에 포함되어 있습니다.
라이센스 제한 및 종속성에 대해서는 개별 패키지의 문서를 참조하십시오.
pip 버전 8 이상을 사용하여 다운로드 한 .whl 파일을 설치하십시오. 이 페이지는 pip 패키지 색인이 아닙니다.
많은 바이너리는 numpy-1.11 + mkl과 Microsoft Visual C ++ 2008 (CPython 2.7 용 x64, x86 및 SP1), Visual C ++ 2010 (x64, CPython 3.4 용 x86) 또는 Visual C ++ 2015 (x64 및 x86 용 CPython 3.5 및 3.6) 재배포 가능 패키지
numpy + mkl을 의존하는 다른 패키지보다 먼저 설치하십시오.
바이너리는 Windows> = 6.0에서 가장 최근의 공식 CPython 배포판과 호환됩니다. Blender, Maya, ArcGIS, OSGeo4W, ABAQUS, Cygwin, Pythonxy, Canopy, EPD, Anaconda, WinPython 등에 포함 된 Python 배포판에서는 작동하지 않을 가능성이 많습니다. 많은 바이너리는 Windows XP 또는 Wine과 호환되지 않습니다.
패키지는 ZIP 또는 7z 파일로, 수동 또는 스크립팅 설치 또는 재 패키징이 가능합니다.
이 파일은 어떠한 종류의 보증이나 지원없이 "있는 그대로"제공됩니다. 품질 및 성능에 대한 모든 위험은 귀하와 함께 있습니다.
이 페이지에 표명 된 의견이나 진술은 형광 역학 연구소 또는 캘리포니아 주립 대학의 지위 또는 승인으로 간주되어서는 안됩니다.