Word Embedding의 직관적인 이해 : Count Vector에서 Word2Vec에 이르기까지

소개

시작하기 전에 아래 예제를 살펴보십시오.

  1. 진행중인 챔피언 트로피에 대해 Google을 열고 뉴스 기사를 검색하고 그에 대한 수백 가지 검색 결과를 얻습니다.

  2. 네이트 실버는 수백만 개의 트윗을 분석하고 2008 년 미국 대선에서 50개 주 중에서 49개 결과를 정확하게 예측했습니다.

  3. 당신은 영어로 google translate에 문장을 입력하고 동등한 중국어 변환을 얻습니다.

위의 예는 공통점이 있습니까?

TEXT 처리 를 올바르게 추측 할 수 있습니다 . 위의 세 시나리오는 Google 검색 예에서 클러스터링, 두 번째 분류에서 분류, 세 번째에서 기계 번역과 같이 다양한 범위의 작업을 수행하기 위해 엄청난 양의 텍스트를 처리합니다.

인간은 텍스트 형식을 매우 직관적으로 다룰 수 있지만 하루에 수백만개의 문서가 생성된다면 위의 세 가지 작업을 수행 할 수 없습니다. 확장성이나 효과가 없습니다.

그렇다면 오늘의 컴퓨터는 텍스트 데이터를 클러스터링, 분류 등을 수행하는데 어떻게 유익한 결과를 얻기 위해 문자열이나 텍스트를 처리하고 처리 할 때 일반적으로 비효율적이라는 것을 어떻게 처리 해야합니까?

물론 컴퓨터는 두개의 문자열을 비교하여 동일 여부를 알려줄 수 있습니다. 그러나 메시를 검색 할 때 컴퓨터가 축구 또는 호나우두에 관해 알려주도록 하려면 어떻게해야합니까? 어떻게 하면 컴퓨터가 “Apple”이 맛있는 과일인지 회사인지 이해하게 됩니까?

위의 질문에 대한 대답은 의미, 의미론적 관계 및 사용된 다양한 유형의 문맥을 포착하는 단어 표현을 만드는 데 있습니다.

그리고 이들 모두는 컴퓨터가 처리 할 수 ​​있도록 Word Embedding 또는 텍스트의 수치 표현을 사용하여 구현됩니다.

아래에서 우리는 공식적으로 Word Embedding과 그 유형이 무엇인지, 효과적인 Google 검색 결과를 반환하는 것과 같은 작업을 수행하기 위해 실제로 어떻게 구현할 수 있는지 보여줍니다.

목차

  1. Word Embedding이란 무엇입니까?

  2. 다양한 유형의 Word Embeddings
    2.1 주파수 기반 임베딩
    2.1.1 카운트 벡터
    2.1.2 TF-IDF
    2.1.3 공동 발생 매트릭스
    2.2 예측 기반 임베딩
    2.2.1 CBOW
    2.2.2 스킵 그램

  3. Word Embeddings는 사례 시나리오를 사용합니다 (단어 embedding을 사용하여 모두 수행 할 수 있습니까? 예 : 유사성, 이상한 것 등).

  4. 사전 훈련 된 워드 벡터 사용

  5. 나만의 단어 벡터 훈련

  6. 최종 메모

1. Word Embedding이란 무엇입니까?

매우 단순한 용어로 Word Embedding은 텍스트를 숫자로 변환한 것으로 동일한 텍스트에 대해 다른 숫자로 표현할 수 있습니다. 그러나 Word Embeddings에 대한 자세한 내용을 알아보기 전에 다음 질문을 해야합니다. – Word Embedding이 필요한 이유는 무엇입니까?

결과적으로 많은 머신러닝 알고리즘과 거의 모든 딥러닝 아키텍처는 원시 형식의 문자열이나 일반 텍스트를 처리 할 수 ​​없습니다. 그들은 일종의 직업을 수행하기 위해 입력으로 숫자를 요구합니다. 이것은 분류, 회귀 등 넓은 의미에서 필요합니다. 그리고 텍스트 형식으로 제공되는 방대한 양의 데이터로 지식을 추출하고 응용 프로그램을 작성하는 것이 중요합니다. 텍스트 응용 프로그램의 실제 응용 프로그램에는 Amazon 등의 리뷰 감정 분석, 문서 또는 뉴스 분류 또는 Google의 클러스터링 등이 있습니다.

Word Embedding을 정식으로 정의하겠습니다. Word Embedding 형식은 일반적으로 사전을 사용하여 단어를 벡터에 매핑하려고 시도합니다. 이 문장을보다 세세한 부분까지 세분화하여 명확한 시각을 갖도록합니다.

이 예제를 보세요. – 문장 = “Word Embedding은 숫자로 변환 된 Word”

이 문장의 단어 는 “Embeddings”또는 “numbers”등일 수 있습니다.

사전의 모든 고유 단어의 목록이 될 수 있습니다. 그래서, 사전은 – ‘Word’, ‘Embeddings’, ‘are’, ‘Converted’, ‘into’, ‘numbers’와 같이 보입니다.

위의 사전에 따 른이 형식의 “숫자”의 벡터 표현 은 [0,0,0,0,0,1]이고 변환된 값은 [0,0,0,1,0,0]입니다.

이것은 벡터 형태로 단어를 표현하는 아주 간단한 방법 일뿐입니다. Word Embedding 또는 Word Vectors의 여러 유형과 그 나머지의 장점과 단점을 살펴 보겠습니다.

2. Word Embedding의 다른 유형

다양한 유형의 단어 삽입은 크게 두가지 범주로 분류 할 수 있습니다.

  1. 주파수 기반 임베딩

  2. 예측 기반 임베딩

이 방법들 각각을 자세히 이해하도록 노력합시다.

2.1 주파수 기반 임베딩

일반적으로이 범주에서 우리가 접하게되는 세가지 유형의 벡터가 있습니다.

  1. 카운트 벡터

  2. TF-IDF 벡터

  3. 동시 발생 벡터

이러한 각 벡터화 방법을 자세히 살펴 보겠습니다.

2.1.1 카운트 벡터

코퍼스 C에서 추출된 코퍼스 C 문서 D {d1, d2 … ..dD}와 N개의 고유 토큰을 고려하십시오. N 토큰은 사전을 구성 할 것이며 카운트 벡터 행렬 M의 크기는 DX N에 의해 ​​주어질 것입니다. 행렬 M의 각 행은 문서 D(i)의 토큰 빈도를 포함합니다.

간단한 예제를 사용하여이를 이해합시다.

D1 : He is a lazy boy. She is also lazy.

D2 : Neeraj is a lazy person.

생성된 사전은 코퍼스의 고유한 토큰 (단어) 목록일 수 있습니다. [[He], [She], [Lazy], [Boy], [Neeraj], [person]]

여기서, D = 2, N = 6

크기 2 × 6의 카운트 행렬 M은 –

 

이제 칼럼은 행렬 M에서 해당 단어에 대한 단어 벡터로 이해할 수 있습니다. 예를 들어 위의 행렬에서 ‘lazy’라는 단어 벡터는 [2,1]입니다. 여기에서 행은 다음과 같습니다. 문서 코퍼스에서와 열 받는 해당 토큰 사전이다. 위의 행렬에있는 두 번째 행은 다음과 같이 읽을 수 있습니다. – D2는 ‘lazy’을 포함합니다 : 한 번, ‘Neeraj’: 한 번 ‘한 번’.

이제 위의 행렬 M을 준비하는 동안 몇 가지 변형이있을 수 있습니다. 변형은 일반적으로 in-

  1. 사전 사전 준비.
    왜? 실제 응용 프로그램에서는 수백만 개의 문서가 포함 된 코퍼스가있을 수 있습니다. 또한 수백만 건의 문서를 사용하여 수억 개의 고유 단어를 추출 할 수 있습니다. 기본적으로 위와 같이 준비 될 매트릭스는 매우 희박하고 계산에 비효율적입니다. 따라서 모든 고유 단어를 사전 요소로 사용하는 대신 주파수를 기준으로 상위 10,000 단어를 선택한 다음 사전을 준비하는 것이 좋습니다.

  2. 각 단어에 대해 길을 계산합니다.
    우리는 빈도 (문서에 단어가 등장한 횟수) 또는 존재 (문서에 나타난 단어가 있습니까?)를 계수 행렬 M의 항목으로 사용할 수 있습니다. 그러나 일반적으로 빈도 메서드가 후자.

아래는 쉽게 이해할 수 있도록 행렬 M의 대표 이미지입니다.

 

 

2.1.2 TF-IDF 벡터화

이것은 주파수 방법을 기반으로하는 또 다른 방법이지만 단일 문서에서 단어의 출현뿐만 아니라 전체 코퍼스를 고려한다는 점에서 카운트 벡터화와 다릅니다. 그렇다면 이것의 근거는 무엇입니까? 우리가 이해하려고 노력합시다.

‘is’, ‘the’, ‘a’등과 같은 일반적인 단어는 문서에서 중요한 단어와 비교하여 자주 나타나는 경향이 있습니다. 예를 들어, Lionel Messi 의 문서 A 는 다른 문서 와 비교하여 “Messi”라는 단어가 더 많이 포함될 것입니다. 그러나 “the”와 같은 일반적인 단어는 거의 모든 문서에서 더 높은 빈도로 표시 될 것입니다.

이상적으로, 우리가 원하는 것은 거의 모든 문서에서 발생하는 일반적인 단어의 무게를 줄이고 문서의 하위 집합에 나타나는 단어를 더 중요하게 생각하는 것입니다.

TF-IDF는 특정 문서에서 Messi와 같은 단어를 중요하게하면서 더 낮은 가중치를 지정하여 일반 단어에 페널티를 적용하여 작동합니다.

그렇다면 TF-IDF는 정확히 어떻게 작동합니까?

두 문서에서 용어의 수 (토큰 / 단어)를 제공하는 아래 표의 표를 고려하십시오.

 

 

이제 TF-IDF와 관련된 몇 가지 용어를 정의 해 보겠습니다.

TF = (용어 t가 문서에 나타나는 횟수) / (문서의 용어 수)

그래서, TF (This, Document1) = 1/8

TF (This, Document2) = 1 / 5

이는 문서에 대한 단어의 기여도를 나타냅니다. 즉, 문서와 관련된 단어가 자주 나타나야합니다. 예 : 메시에 대한 문서에는 ‘메시’라는 단어가 많이 있어야합니다.

IDF = log (N / n), 여기서 N은 문서의 수이고, n은 용어 t가 나타난 문서의 수입니다.

여기서 N은 문서의 수이고 n은 용어 t가 나타난 문서의 수입니다.

그래서, IDF (This) = log (2/2) = 0.

그러면 IDF의 추론을 어떻게 설명 할 수 있습니까? 이상적으로 말하면, 모든 문서에 단어가 나타난다면 그 단어는 특정 문서와 관련이 없을 것입니다. 그러나 그것이 문서의 부분 집합에 나타난다면 아마 그 단어는 그것이 존재하는 문서와 관련이있을 것입니다.

‘Messi’라는 단어에 대한 IDF를 계산해 보겠습니다.

IDF (Messi) = log (2/1) = 0.301.

이제 TF-IDF와 ‘This’라는 공통 단어와 ‘Messi’라는 단어를 비교해 보겠습니다.이 단어는 문서 1과 관련이있는 것으로 보입니다.

TF-IDF (This, Document1) = (1/8) * (0) = 0

TF-IDF (This, Document2) = (1/5) * (0) = 0

TF-IDF (Messi, Document1) = (4/8) * 0.301 = 0.15

Document1에서 볼 수 있듯이, TF-IDF 방법은 ‘This’라는 단어에 불이익을 주지만 ‘Messi’에는 더 큰 가중치를 부여합니다. 따라서 ‘Messi’는 전체 자료의 맥락에서 Document1에 대한 중요한 단어이므로 이해할 수 있습니다.

2.1.3 고정된 컨텍스트 윈도우를 가진 동시 발생 행렬(Co-Occurrence Matrix)

The big idea – 유사한 단어가 함께 발생하는 경향이 있으며 예를 들어 유사한 문맥을 갖습니다. Apple은 과일입니다. 망고는 과일입니다. 애플과 망고는 과일과 비슷한 맥락이있다.

동시 발생 행렬을 구성하는 방법에 대해 자세히 설명하기 전에 공동 발생 및 컨텍스트 창이라는 두 가지 개념을 명확히해야합니다.

동시 발생 (co-occurrence) – 주어진 코퍼스에 대해 단어 쌍의 동시 발생은 w1과 w2가 컨텍스트 창에 함께 나타난 횟수를 말합니다.

컨텍스트 창(Context Window) – 컨텍스트 창은 번호와 방향으로 지정됩니다. 2 (주변)의 컨텍스트 창은 무엇을 의미합니까? 아래 예제를 보겠습니다.

 

녹색 단어는 ‘Fox’라는 단어에 대한 2 (주변) 컨텍스트 창이며 공존을 계산할 때만이 단어가 계산됩니다. ‘Over’라는 문맥 창을 보겠습니다.

이제는 동시 발생 행렬을 계산하는 예제 코퍼스를 봅시다.

코퍼스 = 그는 게으른 사람이 아닙니다. 그는 지적이다. 그는 똑똑해.

위의 표에서 두 가지 예를 보면이 동시 발생 행렬을 이해할 수 있습니다. 빨간색과 파란색 상자입니다.

빨간색 상자 – ‘He’및 ‘is’가 컨텍스트 창 2에 표시된 횟수이며 카운트가 4 인 것으로 나타납니다. 아래 표는 카운트를 시각화하는 데 도움이됩니다.

‘lazy’라는 단어는 컨텍스트 창에서 ‘지능형’으로 표시되지 않았으므로 파란색 상자에 0이 할당되었습니다.

동시 발생 행렬의 변형

코퍼스에 V 고유 단어가 있다고 가정 해 보겠습니다. 그래서 Vocabulary size = V입니다. 동시 발생 행렬의 열은 컨텍스트 단어 s를 형성합니다 . Co-Occurrence Matrix의 다양한 변형은 다음과 같습니다.

  1. 크기 V X V의 동시 발생 행렬입니다. 이제는 괜찮은 코퍼스 V가 매우 커지고 처리하기 어려워졌습니다. 따라서 일반적으로이 아키텍처는 결코 실제로는 선호되지 않습니다.

  2. 크기 V X N의 동시 발생 행렬. 여기서 N은 V의 하위 집합이며 예를 들어 불용어와 같은 관련성이없는 단어를 제거하여 얻을 수 있습니다. 이것은 여전히 ​​매우 커서 계산상의 어려움이 있습니다.

그러나이 동시 발생 행렬은 일반적으로 사용되는 단어 벡터 표현이 아닙니다. 대신이 공존 매트릭스는 PCA, SVD 등의 기법을 사용하여 요인으로 분해되며 이러한 요소의 조합은 단어 벡터 표현을 형성합니다.

이것을 좀더 명확하게 설명해 드리겠습니다. 예를 들어 위의 VXV 행렬에 대해 PCA를 수행합니다. V 주 구성 요소를 얻을 수 있습니다. 이 V 구성 요소 중 k 개의 구성 요소를 선택할 수 있습니다. 따라서, 새로운 행렬은 VX k 형식이 될 것입니다.

그리고 V 차원으로 표현되는 대신 한 단어가 k 차원으로 표현되지만 거의 동일한 의미 론적 의미를 포착합니다. k는 일반적으로 수 백 정도이다.

그래서 PCA가 뒤에서하는 일은 Co-Occurrence 행렬을 U, S 및 V의 세 행렬로 분해합니다. 여기서 U와 V는 모두 직교 행렬입니다. 중요성은 U와 S의 내적은 단어 벡터 표현을 제공하고 V는 단어 문맥 표현을 제공한다는 것입니다.

 

 

동시 발생 행렬의 장점

  1. 그것은 단어 사이의 의미 론적 관계를 보존합니다. 즉 남자와 여자는 사람과 사과보다 더 가깝습니다.

  2. 그것은 핵심에서 SVD를 사용하여 기존 방법보다 더 정확한 단어 벡터 표현을 생성합니다.

  3. 그것은 잘 정의 된 문제이며 효율적으로 해결할 수있는 인수 분해를 사용합니다.

  4. 그것은 한 번 계산되어야하며 계산 된 후에 언제든지 사용될 수 있습니다. 이런 점에서 다른 사람들과 비교할 때 더 빠릅니다.

동시 발생 매트릭스의 단점

  1. 공존 행렬을 저장하기 위해 거대한 메모리가 필요합니다.
    그러나이 문제는 예를 들어 Hadoop 클러스터 등에서 시스템을 매트릭스 밖으로 분해함으로써 회피 될 수 있으며 저장 될 수 있습니다.

2.2 예측 기반 벡터

사전 요구 사항 :이 섹션에서는 신경망의 작동 방식과 NN의 가중치가 업데이트되는 메커니즘에 대한 실무 지식이 있다고 가정합니다. Neural Network에 익숙하지 않다면, NN이 어떻게 작동하는지 아주 잘 이해하기 위해 Sunil이 작성한 멋진 기사 를 읽어 보시기 바랍니다.

지금까지 우리는 단어 벡터를 결정하는 결정 론적 방법을 보았습니다. 그러나 이러한 방법은 Mitolov 등이 NLP 커뮤니티에 word2vec를 도입 할 때까지 단어 표현이 제한적이라는 것이 입증되었습니다. 이 방법은 단어 유추 확률을 제공하고 단어 유추 및 단어 유사성과 같은 작업에 최첨단임을 입증한다는 예측에 기반한 방법입니다. 그들은 또한 왕 – 마누 + 여왕 =과 같은 임무를 성취 할 수 있었으며, 이는 거의 마술적인 결과로 여겨졌습니다. 이제 단어 벡터를 생성하기 위해 오늘부터 사용 된 단어 2vec 모델을 살펴 보겠습니다.

Word2vec는 단일 알고리즘이 아니라 CBOW (연속적인 단어 모음)와 Skip-gram 모델의 두 가지 기술의 조합입니다. 이 두 가지 모두 단어 (들)를 단어 (들) 인 목표 변수에 매핑하는 얕은 신경망입니다. 이 두 기술은 단어 벡터 표현으로 작용하는 가중치를 학습합니다. 이 두 가지 방법을 각각 따로 논의하고 그들의 작업에 직관을 얻자.

2.2.1 CBOW (Continuous Bag of words)

CBOW가 작동하는 방식은 문맥이 주어진 단어의 확률을 예측하는 경향이 있다는 것입니다. 컨텍스트는 단일 단어 또는 단어 그룹 일 수 있습니다. 그러나 단순화를 위해, 나는 하나의 문맥 단어를 취하여 하나의 표적 단어를 예측하려고 노력할 것이다.

우리는 코퍼스 C = “이봐 요, 이것은 하나의 컨텍스트 단어 만 사용하는 샘플 코퍼스입니다”라고 가정하고 컨텍스트 창을 1로 정의했습니다.이 코퍼스는 다음과 같이 CBOW 모델에 대한 학습 집합으로 변환 될 수 있습니다. 입력은 아래와 같습니다. 아래 이미지의 오른쪽에있는 행렬은 왼쪽의 입력에서 인코딩 된 one-hot을 포함합니다.

단일 데이터 포인트에 대한 목표는 Datapoint 4가 아래와 같이 표시됩니다.

위 이미지에 표시된이 행렬은 입력 레이어, 숨겨진 레이어 및 출력 레이어의 세 가지 레이어를 사용하여 얕은 신경 네트워크로 전송됩니다. 출력 레이어는 출력 레이어에서 얻은 확률을 1로 합산하는 데 사용되는 softmax 레이어입니다. 이제 앞으로 전달이 어떻게 숨겨진 레이어 활성화를 계산하는지 봅시다.

먼저 CBOW 모델의 도식적 표현을 보겠습니다.

단일 데이터 포인트에 대한 위 이미지의 매트릭스 표현은 다음과 같습니다.

흐름은 다음과 같습니다.

  1. 입력 레이어와 대상 모두 [1 XV]의 크기로 인코딩 된 핫 코드입니다. 위의 예에서 V = 10입니다.

  2. 두 세트의 가중치가 있습니다. 하나는 입력과 숨겨진 레이어 사이에 있고 두 번째는 숨겨진 레이어와 출력 레이어 사이에 있습니다.
    Input-Hidden layer matrix size =[V X N] , hidden-Output layer matrix size =[N X V] : 여기서 N은 단어를 나타 내기 위해 선택한 차원의 수입니다. 이것은 신경망의 임의 매개 변수 및 하이퍼 매개 변수입니다. 또한, N은 숨겨진 계층의 뉴런 수입니다. 여기서, N = 4이다.

  3. 모든 레이어 사이에 활성화 기능이 없습니다. (아니, 선형 활성화를 의미합니다)

  4. 입력에는 입력 숨겨진 가중치가 곱해지고 숨겨진 활성화라고합니다. 단순히 입력 된 숨겨진 행렬의 해당 행이 복사됩니다.

  5. 숨겨진 입력에는 숨겨진 출력 가중치가 곱해지고 출력이 계산됩니다.

  6. 출력과 목표 간의 오차가 계산되고 다시 전파되어 가중치를 다시 조정합니다.

  7. 숨겨진 레이어와 출력 레이어 사이의 가중치는 단어의 단어 벡터 표현으로 간주됩니다.

위의 단계는 단일 컨텍스트 단어에 대한 것입니다. 이제 여러 문맥 단어가 있다면 어떨까요? 아래 이미지는 여러 컨텍스트 단어에 대한 아키텍처를 설명합니다.

아래는 위의 아키텍처를 쉽게 이해할 수 있도록 매트릭스로 나타낸 것입니다.

위의 이미지는 3 가지 컨텍스트 단어를 사용하고 대상 단어의 확률을 예측합니다. 입력은 적색, 청색 및 녹색으로 위에 표시된 바와 같이 입력 레이어에서 3 개의 핫 코드 된 벡터를 취하는 것으로 가정 할 수 있습니다.

따라서 입력 레이어는 위에 표시된 것과 같이 입력에 3 [1 XV] 벡터를 가지며 출력 레이어에 1 [1 XV] 벡터를 갖습니다. 아키텍처의 나머지 부분은 1- 컨텍스트 CBOW와 동일합니다.

단계는 동일하게 유지되며 숨겨진 활성화 계산 만 변경됩니다. 입력 숨겨진 가중치 행렬의 해당 행을 숨겨진 계층에 복사하는 대신 평균이 행렬의 모든 해당 행에 적용됩니다. 우리는 위의 그림으로 이것을 이해할 수 있습니다. 계산 된 평균 벡터가 숨겨진 활성화가됩니다. 그래서, 우리가 하나의 목표 단어에 대해 3 가지 문맥 단어를 가지고 있다면, 우리는 3 가지 초기 숨겨진 활성화를 갖게 될 것이고, 마지막 활성화를 얻기 위해 요소별로 평균화됩니다.

단일 컨텍스트 단어와 다중 컨텍스트 단어 모두에서 CBOW가 단순한 MLP 네트워크와 다른 부분이므로 숨겨진 활성화를 계산할 때까지 이미지를 표시했습니다. 숨겨진 레이어를 계산 한 후 단계는이 기사에서 설명한 것처럼 처음부터 신경 네트워크를 이해하고 코딩 합니다.

MLP와 CBOW의 차이점은 다음과 같습니다.

  1. MLP의 목적 함수는 MSE (평균 제곱 오차) 인 반면 CBOW에서는 문맥 집합 ie -log (p (wo / wi))가 주어진 단어의 음의 대수 우도인데, 여기서 p (wo / wi)는 주어진다 같이

    wo : 출력 단어
    wi : 컨텍스트 단어

    2. 숨겨진 출력 가중치 및 입력 숨김 가중치에 대한 오류 그라디언트는 MLP가 Sigmoid 활성화 (일반적으로)가 있지만 CBOW는 선형 활성화가 있기 때문에 다릅니다. 그러나 그래디언트를 계산하는 방법은 MLP와 같습니다.

CBOW의 장점 :

  1. 확률 론적 인 것은 자연이며, 결정 론적 방법보다 우월한 (일반적으로) 수행되어야합니다.

  2. 메모리가 부족합니다. 3 개의 거대한 행렬을 저장할 필요가있는 동시 발생 행렬과 같은 거대한 RAM 요구 사항이 필요하지 않습니다.

CBOW의 단점 :

  1. CBOW는 단어의 컨텍스트 평균을 취합니다 (숨겨진 활성화 계산시 위에서 보았 듯이). 예를 들어, 애플은 과일과 회사가 될 수 있지만 CBOW는 컨텍스트를 평균적으로 받아 들여 과일과 회사의 클러스터 사이에 배치합니다.

  2. 처음부터 CBOW 교육은 제대로 최적화되지 않은 경우 영원히 걸릴 수 있습니다.

2.2.2 Skip – Gram model

건너 뛰기 – 그램은 CBOW와 동일한 토폴로지를 따릅니다. CBOW의 아키텍처를 뒤집어 쓴 것뿐입니다. 건너 뛰기 그램의 목적은 단어가 주어진 상황을 예측하는 것입니다. CBOW 모델을 구축 한 코퍼스를 사용합시다. C = “Hey, this is sample corpus using only one context word.”. 교육 데이터를 구성 해 보겠습니다.

skip-gram에 대한 입력 벡터는 1- 문맥 CBOW 모델과 유사합니다. 또한 숨겨진 레이어 활성화까지의 계산이 동일해질 것입니다. 차이는 대상 변수에 있습니다. 컨텍스트 창을 양쪽에 1로 정의 했으므로 이미지의 파란색 섹션에서 볼 수있는 것과 같이 두 개의 핫 인코딩 된 대상 변수 와 두 개의 해당 출력 이 있습니다.

2 개의 개별 오차가 2 개의 목표 변수에 대해 계산되고, 얻어진 2 개의 오차 벡터가 요소별로 추가되어 최종 오차 벡터가 얻어지고,이 오차 벡터가 가중치를 갱신하기 위해 역 전파된다.

입력과 숨겨진 레이어 사이의 가중치는 학습 후에 단어 벡터 표현으로 간주됩니다. 손실 함수 또는 목적은 CBOW 모델과 동일한 유형이다.

skip-gram 아키텍처는 다음과 같습니다.

 

 

더 나은 이해를 위해 계산을 포함한 행렬 스타일 구조가 아래에 나와 있습니다.

위의 이미지를 분해합시다.

Input layer  size – [1 X V], Input hidden weight matrix size – [V X N], Number of neurons in hidden layer – N, Hidden-Output weight matrix size – [N X V], Output layer size – C [1 X V]

위의 예에서 C는 number of context words = 2, V = 10, N = 4

  1. 빨간색 행은 입력 된 핫 코드 벡터에 해당하는 숨겨진 활성화입니다. 이것은 기본적으로 입력 숨겨진 행렬의 해당 행을 복사 한 것입니다.

  2. 노란색 행렬은 숨겨진 레이어와 출력 레이어 사이의 가중치입니다.

  3. 파란색 매트릭스는 숨겨진 활성화와 숨겨진 출력 가중치의 매트릭스 곱셈에 의해 얻어집니다. 두 개의 대상 (컨텍스트) 단어에 대해 계산 된 두 개의 행이 있습니다.

  4. 파란색 상자의 각 행은 녹색 상자에 표시된대로 개별적으로 softmax 확률로 변환됩니다.

  5. 회색 행렬에는 두 개의 컨텍스트 단어 (대상)의 핫 인코딩 된 벡터가 포함됩니다.

  6. 오류는 녹색 행렬 (출력) 요소의 첫 번째 행에서 회색 행렬 (대상)의 첫 번째 행을 빼서 계산됩니다. 이것은 다음 행에 대해 반복됩니다. 따라서 n 개의  대상 문맥 단어에 대해 n 개의 오류 벡터가 있습니다.

  7. 요소 – 와이즈 합은 최종 오차 벡터를 얻기 위해 모든 오차 벡터에 대해 취해진 다.

  8. 이 오류 벡터는 가중치를 업데이트하기 위해 전파됩니다.

Skip-Gram Model의 장점
  1. 스킵 그램 모델은 한 단어에 대해 두 가지 의미를 포착 할 수 있습니다. ie 그것은 애플의 두 가지 벡터 표현을 가질 것이다. 하나는 회사를위한 것이고 다른 하나는 과일을위한 것입니다.

  2. 네거티브 서브 샘플링을 사용하는 스킵 그램은 일반적으로 다른 모든 방법보다 우수합니다.

이것은  CBOW를 시각화하고 실제로 작동하는 그램을 건너 뛰는 훌륭한 대화식 도구입니다. 더 나은 이해를 위해이 링크를 실제로 통과하라고 제안합니다.

3. Word Embedding은 사례 시나리오를 사용합니다.

단어 삽입 또는 단어 벡터는 단어 사이의 문맥상의 유사성을 수치로 표현하므로 조작 할 수 있으며 다음과 같은 놀라운 작업을 수행 할 수 있습니다.

  1. 두 단어 사이의 유사도를 찾는 것.
    model.similarity(‘woman’,’man’)
    0.73723527

  2. 이상한 것을 찾아 내.
    model.doesnt_match(‘breakfast cereal dinner lunch’;.split())
    ‘cereal’

  3. woman+king-man =queen과 같은 놀라운 것들
    model.most_similar(positive=[‘woman’,’king’],negative=[‘man’],topn=1)
    queen: 0.508

  4. 모델에서 텍스트의 확률
    model.score([‘The fox jumped over the lazy dog’.split()])
    0.21

다음은 word2vec의 흥미로운 시각화입니다.

 

위 이미지는 2 차원 단어 벡터의 t-SNE 표현이며 사과의 두 가지 컨텍스트가 캡처 된 것을 볼 수 있습니다. 하나는 과일과 다른 회사입니다.

5. 기계 번역을 수행하는 데 사용할 수 있습니다.

 

위의 그래프는 중국어와 녹색의 2 개 언어로 된 임베디드입니다. 중국어와 영어에서 비슷한 의미를 가진 단어를 알고 있다면 위의 이중 언어를 사용하여 한 언어를 다른 언어로 번역 할 수 있습니다.

4. 사전 훈련 된 단어 벡터 사용하기

Google은 사전 훈련 된 Google 모델을 사용하려고합니다. 여기에는 Google 뉴스 데이터 세트에서 약 1,000 억 단어에 대해 학습 한 3 백만 단어의 어휘에 대한 단어 벡터가 포함되어 있습니다. 모델에 대한 다운로드 링크는 다음과 같습니다 . 1.5 GB 다운로드에주의하십시오.

from gensim.models import Word2Vec

#loading the downloaded model
model = Word2Vec.load_word2vec_format(‘GoogleNews-vectors-negative300.bin’, binary=True,norm_only=True)

#the model is loaded. It can be used to perform all of the tasks mentioned above.

# getting word vectors of a word
dog = model[‘dog’]

#performing king queen magic
print(model.most_similar(positive=[‘woman’, ‘king’], negative=[‘man’]))

#picking odd one out
print(model.doesnt_match(“breakfast cereal dinner lunch”.split()))

#printing similarity index
print(model.similarity(‘woman’, ‘man’))

5. 자신의 단어 벡터 훈련

우리는 커스텀 코퍼스에서 우리 자신의 word2vec를 교육 할 것입니다. 모델 교육을 위해 우리는 gensim을 사용할 것이고 그 단계는 다음과 같습니다.

word2Vec에는 모든 문서가 목록에 포함되어 있고 모든 목록에 해당 문서의 토큰 목록이 포함 된 교육 목록 목록 형식이 필요합니다. 전 사전 처리 부분은 다루지 않을 것입니다. 이제 word2vec 모델을 교육하기위한 목록의 예제 목록을 살펴 보겠습니다.

sentence = [[Neeraj], [Boy], [Sarwan], [is], [good], [boy]]]

#training word2vec on 3 sentences
model = gensim.models.Word2Vec(sentence, min_count=1,size=300,workers=4)

이 모델의 매개 변수를 이해하려고 합시다.

sentence – 우리 코퍼스리스트의 목록
min_count = 1 – 단어의 문턱 값. 이보다 큰 빈도의 단어는 모델에 포함될 것입니다.
size = 300 – 우리가 단어를 표현하고자하는 차원의 수. 단어 벡터의 크기입니다.
workers = 4 – 병렬 처리에 사용됨

#using the model
#The new trained model can be used similar to the pre-trained ones.

#printing similarity index
print(model.similarity(‘woman’, ‘man’))

6. 노트 끝내기

Word Embeddings는 기존 단어 표현보다 나은 단어 표현을 파악하려고하는 적극적인 연구 영역입니다. 그러나 시간이지나면서 그들은 점점 더 많아지고 복잡해졌습니다. 이 기사는 수학적인 오버 헤드없이이 임베딩 모델의 일부 동작을 간소화하기위한 것입니다.

출처 : https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/