이 튜토리얼에서 우리는 설명 할 것입니다,미콜로프 등의 알에 의해 제안 된 워드 투 벡이라는 신흥 눈에 띄는 단어 삽입 기술 중 하나. 2013 년. 우리는 한 곳에서 독자를 용이하게하기 위해 다른 자습서 및 소스에서 이러한 콘텐츠를 수집했다. 나는 그것이 도움이되기를 바랍니다.
워드 2 벡은 코퍼스에서 단어의 분산 표현을 나타내는 데 사용되는 모델의 조합입니다.:
이 알고리즘에는 두 가지 맛이 있습니다. 주어진 문장 세트(코퍼스라고도 함)모델은 각 문장의 단어를 반복하고 이웃을 예측하기 위해 현재 단어를 사용하려고합니다(즉,컨텍스트).이 접근 방식을”건너 뛰기 그램”또는 이러한 각 컨텍스트를 사용하여 현재 단어를 예측합니다. 각 컨텍스트의 단어 수를 제한하기 위해”창 크기”라는 매개 변수가 사용됩니다.
우리가 단어를 나타내는 데 사용하는 벡터를 신경 단어 임베딩이라고하며 표현은 이상합니다. 이 두 가지가 근본적으로 다르더라도 한 가지는 다른 것을 설명합니다. 엘비스 코스텔로는”음악에 대한 글쓰기는 건축에 대한 춤과 같다. 우리는 그들의 유사성을 감지하는 단어에 대한 강력한 수학 연산을 수행하기 시작할 수 있습니다.
따라서 신경 단어 임베딩은 숫자가있는 단어를 나타냅니다. 그것은 간단,아직 가능성,번역. 이 프로그램은 자바 바이트코드 프로그램의 갯수를 카운트하고,스크립트의 메인 형식을 합계냅니다,그리고 확인되지 않은 실행 텍스트 파일을 찾습니다..
두 가지 방법 중 하나로 컨텍스트를 사용하여 대상 단어(연속 단어 백 또는 카 보우라고도 함)를 예측하거나 단어를 사용하여 대상 컨텍스트를 예측합니다.이 컨텍스트를 건너 뛰기 그램이라고합니다. 이 큰 데이터 세트에 더 정확한 결과를 생성하기 때문에 우리는 후자의 방법을 사용.
단어에 할당된 특징 벡터를 사용하여 해당 단어의 컨텍스트를 정확하게 예측할 수 없는 경우 벡터의 구성 요소가 조정됩니다. 코퍼스의 각 단어의 컨텍스트는 기능 벡터를 조정하기 위해 오류 신호를 다시 보내는 교사입니다. 그들의 문맥에 의하여 유사한 재판된 낱말의 벡터는 벡터에 있는 수를 조정해서 더 가깝게 함께 슬쩍 찔러진다. 이 자습서에서는 스킵 그램 모델에 초점을 맞출 것입니다.
모델 개요
우리는 우리가 단어의 일부 쌍 이상한 신경 네트워크를 공급해야한다는 것을 이해하지만 우리는 단지 입력으로 실제 문자를 사용하여 그렇게 할 수 없다,우리는 네트워크가 그들을 처리 할 수 있도록 수학적으로 이러한 단어를 표현하는 방법을 찾을 수있다. 이 작업을 수행하는 한 가지 방법은 우리의 텍스트에있는 모든 단어의 어휘를 만든 다음 우리의 어휘의 동일한 차원의 벡터로 우리의 단어를 인코딩하는 것입니다. 각 차원은 우리의 어휘의 단어로 생각 될 수있다. 그래서 우리는 모든 0 과 1 을 가진 벡터를 가질 것입니다.이 벡터는 어휘의 해당 단어를 나타냅니다. 이 인코딩 기술을 원 핫 인코딩이라고합니다. 우리의 예를 고려,우리는 단어로 만든 어휘가있는 경우”는”,”빠른”,”갈색”,”여우”,”점프”,”위에”,”는””게으른”,”개”,단어”갈색”이 벡터로 표현된다:.
건너 뛰기 그램 모델은 텍스트 모음을 가져 와서 각 단어에 대한 핫 벡터를 만듭니다. 핫 벡터는 벡터가 어휘(총 고유 단어)의 크기 인 단어의 벡터 표현입니다. 모든 차원은 해당 시점에서 입력으로 사용되는 단어를 나타내는 차원을 제외하고 0 으로 설정됩니다. 다음은 핫 벡터의 예입니다:
위의 입력은 단일 숨겨진 계층을 가진 신경망에 제공됩니다.
우리는”개미”와 같은 입력 단어를 하나의 뜨거운 벡터로 나타낼 것입니다. 이 벡터는 10,000 개의 구성 요소(어휘의 모든 단어에 대해 하나씩)를 가지며”개미”라는 단어에 해당하는 위치에”1″을 배치하고 다른 모든 위치에 0 을 배치합니다. 네트워크의 출력은 어휘의 모든 단어에 대해 무작위로 선택된 주변 단어가 그 어휘 단어 일 확률을 포함하는 단일 벡터(또한 10,000 개의 구성 요소 포함)입니다.
워드투벡에서는 워드의 분산 표현이 사용된다. 수백 차원(예:1000)을 가진 벡터를 가져 가십시오. 각 단어는 해당 요소에 걸쳐 가중치 분포로 표시됩니다. 따라서 벡터의 요소와 단어 사이의 일대일 매핑 대신 단어의 표현이 벡터의 모든 요소에 분산되고 벡터의 각 요소는 많은 단어의 정의에 기여합니다.
가상의 단어 벡터로 치수에 레이블을 붙이면(물론 알고리즘에 미리 할당 된 레이블이 없음)다음과 같이 보일 수 있습니다:
그런 벡터는 어떤 추상적인 방법으로 낱말의’의미’를 대표하기 위하여 온다. 그리고 우리가 다음에 볼 수 있듯이,단순히 큰 코퍼스를 검사하여 놀라 울 정도로 표현 방식으로 단어 사이의 관계를 캡처 할 수있는 단어 벡터를 배울 수 있습니다. 우리는 또한 신경 네트워크에 입력으로 벡터를 사용할 수 있습니다. 우리의 입력 벡터는 1 뜨겁기 때문에 입력 벡터에 가중치 행렬을 곱하면 단순히 행을 선택하는 것입니다.
숨겨진 레이어에서 출력 레이어에 이르기까지 두 번째 가중치 매트릭스를 사용하여 어휘의 각 단어에 대한 점수를 계산할 수 있으며 소프트 맥스를 사용하여 단어의 후방 분포를 얻을 수 있습니다. 스킵 그램 모델은 씨 보우 모델과 반대입니다. 포커스 워드를 단일 입력 벡터로 구성하고 대상 컨텍스트 워드는 이제 출력 레이어에 있습니다. 숨겨진 레이어에 대한 활성화 기능은 이전에 본 것처럼 가중치 행렬 1(선형)에서 해당 행을 복사하는 것입니다. 출력 계층에서 우리는 이제 하나의 다항 분포 대신 다항 분포를 출력합니다. 학습 목표는 출력 계층의 모든 컨텍스트 단어에 걸쳐 요약된 예측 오류를 모방하는 것입니다. 이 예에서 입력은”학습”이 될 것이며 출력 계층에서(“한”,”효율적”,”방법”,”용”,”높음”,”품질”,”분산”,”벡터”).
여기 신경망의 아키텍처가 있습니다.
예를 들어,우리는 300 개의 특징을 가진 단어 벡터를 배우고 있다고 말할 것입니다. 따라서 숨겨진 레이어는 10,000 개의 행(어휘의 모든 단어에 대해 하나)과 300 개의 열(모든 숨겨진 뉴런에 대해 하나)이있는 가중치 행렬로 표시됩니다. 300 기능은 구글이 구글 뉴스 데이터 세트(당신은 여기에서 다운로드 할 수 있습니다)에 훈련 된 자신의 게시 된 모델에 사용되는 것입니다. 기능 수는 응용 프로그램에 맞게 조정해야 하는”하이퍼 매개 변수”입니다(즉,다른 값을 시도하고 최상의 결과를 얻을 수 있는지 확인).
이 가중치 행렬의 행을 보면 이것이 우리의 단어 벡터가 될 것입니다!
그래서이 모든 최종 목표는이 숨겨진 레이어 무게 행렬을 배울 정말-우리가 완료되면 출력 레이어는 우리가 그냥 던져거야! 그런 다음”개미”에 대한 1 엑스 300 단어 벡터가 출력 레이어에 공급됩니다. 출력 계층은 소프트 맥스 회귀 분류 자입니다. 특히 각 출력 뉴런은 숨겨진 레이어의 단어 벡터에 대해 가중치 벡터를 곱한 다음 함수 경험치를 결과에 적용합니다. 마지막으로 출력을 최대 1 로 합치기 위해 이 결과를 모든 10,000 개의 출력 노드의 결과 합계로 나눕니다. 다음은”자동차”라는 단어에 대한 출력 뉴런의 출력을 계산하는 그림입니다.
두 개의 다른 단어가 매우 유사한”컨텍스트”(즉,그 주위에 어떤 단어가 나타날 가능성이 있는지)를 가지고 있다면,우리 모델은이 두 단어에 대해 매우 유사한 결과를 출력해야합니다. 그리고 네트워크가 이 두 단어에 대해 유사한 컨텍스트 예측을 출력하는 한 가지 방법은 단어 벡터가 유사한 경우입니다. 따라서 두 단어가 비슷한 컨텍스트를 가지고 있다면 우리의 네트워크는이 두 단어에 대해 유사한 단어 벡터를 배우도록 동기를 부여합니다! 따 다!
입력의 각 차원은 숨겨진 레이어의 각 노드를 통과합니다. 치수에 숨겨진 레이어로 이어지는 가중치를 곱합니다. 입력이 핫 벡터이기 때문에 입력 노드 중 하나만 0 이 아닌 값(즉,값 1)을 갖습니다. 즉,단어의 경우 위의 이미지와 같이 값이 1 인 입력 노드와 관련된 가중치 만 활성화됩니다.
이 경우 입력이 핫 벡터이므로 입력 노드 중 하나만 0 이 아닌 값을 갖습니다. 즉,해당 입력 노드에 연결된 가중치만 숨겨진 노드에서 활성화됩니다.
어휘의 두 번째 단어(위의 신경망에 표시됨)의 벡터 표현은 숨겨진 레이어에서 활성화되면 다음과 같이 표시됩니다:
그 가중치는 임의의 값으로 시작합니다. 네트워크는 입력 단어를 나타내는 가중치를 조정하기 위해 훈련된다. 여기서 출력 레이어가 중요합니다. 이제 우리는 단어의 벡터 표현과 숨겨진 레이어에 있는지 우리는 우리가 단어가 특정 상황에 맞는 것으로 예측 얼마나 잘 결정하는 방법이 필요합니다. 아래 그림과 같이 단어의 컨텍스트는 그 주위의 창 내의 단어 집합입니다:
위의 이미지는 금요일의 컨텍스트에”고양이”및”이다”와 같은 단어가 포함되어 있음을 보여줍니다. 신경 네트워크의 목표는”금요일”이 이러한 맥락에서 떨어지는 것을 예측하는 것입니다.
우리는 숨겨진 레이어를 통과 한 벡터(숨겨진 노드에 들어가는 입력 핫 벡터*가중치)에 컨텍스트 단어(출력 노드에 들어가는 컨텍스트 단어*가중치의 핫 벡터)의 벡터 표현을 곱하여 출력 레이어를 활성화합니다. 첫 번째 컨텍스트 단어에 대한 출력 계층의 상태는 아래에서 시각화 할 수 있습니다:
위의 곱셈은 각 단어에 대해 컨텍스트 단어 쌍에 대해 수행됩니다. 그런 다음 숨겨진 레이어와 출력 레이어에서 발생하는 값을 사용하여 컨텍스트 단어 집합과 함께 단어가 속할 확률을 계산합니다. 마지막으로,우리는 계산 된 확률에 대해 더 바람직한 값을 얻기 위해 가중치의 값을 변경하기 위해 확률 적 기울기 하강을 적용합니다.
그라디언트 디센트에서 우리는 변화하는 가중치를 나타내는 지점에서 최적화되는 함수의 그라데이션을 계산해야합니다. 그라디언트는 아래의 최소화 예제와 같이 로컬 최적값을 향해 이동하는 단계를 만들 방향을 선택하는 데 사용됩니다.
가중치는 최적의 점(위의 예에서는 그래프에서 가장 낮은 점)의 방향으로 단계를 수행하여 변경됩니다. 새로운 값은 학습 속도에 의해 스케일링 된 가중치의 시점에서 파생 된 함수를 현재 가중치 값에서 빼서 계산됩니다. 다음 단계는 역 전파를 사용하여 여러 레이어 간의 가중치를 조정하는 것입니다. 출력 계층의 끝에서 계산되는 오류는 체인 규칙을 적용하여 출력 계층에서 숨겨진 계층으로 다시 전달됩니다. 그라디언트 디센트는 이 두 레이어 사이의 가중치를 업데이트하는 데 사용됩니다. 그런 다음 오류는 각 레이어에서 조정되고 더 멀리 다시 전송됩니다. 다음은 역 전파를 나타내는 다이어그램입니다:
예를 사용하여 이해
아래 그림과 같이 하나의 숨겨진 레이어,완전히 연결된 신경망을 사용합니다. 숨겨진 층의 뉴런은 모두 선형 뉴런입니다. 입력 레이어는 학습용 어휘에 있는 단어만큼 많은 뉴런을 갖도록 설정됩니다. 숨겨진 레이어 크기는 결과 단어 벡터의 차원으로 설정됩니다. 출력 레이어의 크기는 입력 레이어와 동일합니다. 따라서,단어 벡터를 학습하기 위한 어휘가 브이 워드와 엔 워드 벡터의 차원으로 구성되는 경우,히든 레이어 연결에 대한 입력은 각 행이 어휘 단어를 나타내는 크기의 행렬로 표현될 수 있다. 같은 방법으로 숨겨진 레이어에서 출력 레이어로의 연결을 행렬로 설명 할 수 있습니다. 이 경우 행렬의 각 열은 주어진 어휘의 단어를 나타냅니다.
즉,하나의 입력 라인만 1 로 설정되고 나머지 입력 라인은 0 으로 설정됩니다.
“개가 고양이를 보았다”,”개가 고양이를 쫓아 갔다”,”고양이가 나무를 올랐다”
코퍼스 어휘에는 8 개의 단어가 있습니다. 알파벳순으로 정렬되면 각 단어를 색인으로 참조 할 수 있습니다. 이 예에서 우리의 신경망에는 8 개의 입력 뉴런과 8 개의 출력 뉴런이 있습니다. 우리가 숨겨진 계층에서 세 개의 뉴런을 사용하기로 결정한다고 가정 해 봅시다. 이 의미는 무선하고 WO 것입 8 개×3 3×8 행렬,각각합니다. 훈련이 시작되기 전에 이러한 행렬은 신경망 훈련에서 평소와 같이 작은 무작위 값으로 초기화됩니다. 그냥 그림을 위해,우리는 다음과 같은 값으로 초기화 할 와이와 우와 가정하자:
네트워크가”고양이”와”상승”이라는 단어 사이의 관계를 배우기를 원한다고 가정합니다. 즉,네트워크는”고양이”가 네트워크에 입력 될 때”상승”에 대한 높은 확률을 보여 주어야합니다. 단어 삽입 용어에서”고양이”라는 단어는 컨텍스트 단어라고하며”상승”이라는 단어는 대상 단어라고합니다. 이 경우 입력 벡터 엑스 티.벡터의 두 번째 구성 요소 만 1 임을 알 수 있습니다. 이것은 입력 단어가 코퍼스 단어의 정렬 된 목록에서 두 번째 위치를 유지하는”고양이”이기 때문입니다. “고양이”를 나타내는 입력 벡터와 함께 숨겨진 레이어 뉴런의 출력은 다음과 같이 계산 될 수 있습니다.
따라서 숨겨진 레이어 연결에 대한 입력의 기능은 기본적으로 입력 단어 벡터를 숨겨진 레이어에 복사하는 것입니다. 출력 계층에 숨겨진 유사한 조작을 수행,출력 계층 뉴런에 대한 활성화 벡터는 다음과 같이 쓸 수 있습니다
출력 계층 뉴런의 활성화 값을 소프트맥스 함수를 사용하여 확률로 변환하여 이를 달성합니다. 따라서 케이-번째 뉴런의 출력은 다음 식에 의해 계산되며 여기서 활성화(엔)는 엔-번째 출력 계층 뉴런의 활성화 값을 나타냅니다:
따라서 코퍼스의 8 개 단어에 대한 확률은 다음과 같습니다:
0.143073 0.094925 0.114441 0.111166 0.149289 0.122874 0.119431 0.144800
굵게 표시된 확률은 선택한 대상 단어”상승”에 대한 것입니다. 주어진 대상 벡터 티,출력 레이어에 대한 오류 벡터는 대상 벡터에서 확률 벡터를 빼서 쉽게 계산할 수 있습니다. 오류가 알려지면 역 전파를 사용하여 행렬의 가중치를 업데이트 할 수 있습니다. 따라서 훈련은 코퍼스에서 다른 컨텍스트 대상 단어 쌍을 제시하여 진행할 수 있습니다. 이것은 단어들 사이의 관계를 학습하고 그 과정에서 코퍼스의 단어들에 대한 벡터 표현을 개발하는 방법이다.
아이디어 뒤에 word2vec 을 대표하는 단어로는 벡터의 실제 번호의 차원 d. 따라서 두 번째 행렬은 그 단어의 표현입니다. 이 행렬의 1 번째 선은 1 번째 단어의 벡터 표현입니다. 당신의 예에서 당신이 5 단어를 가지고 있다고 가정 해 봅시다:,첫 번째 벡터는 당신이 단어”말”을 고려하고 있다는 것을 의미하므로”말”의 표현은. 마찬가지로”사자”라는 단어의 표현입니다.
내가 아는 한,이러한 표현의 각 숫자에 특별히”인간의 의미”는 없습니다. 하나의 숫자는 단어가 동사인지 아닌지,형용사인지 아닌지를 나타내지 않습니다…그것은 단지 단어의 표현을 배우기 위해 최적화 문제를 해결하기 위해 변경하는 가중치입니다.
다음 그림에서는 가장 정교하게 표현한 단어 2 벡 행렬 곱셈 과정을 보여 줍니다:
첫 번째 행렬은 입력 벡터를 하나의 핫 형식으로 나타냅니다. 두 번째 행렬은 입력 레이어 뉴런에서 숨겨진 레이어 뉴런에 이르는 시냅스 가중치를 나타냅니다. 특히 입력 레이어 행렬에 가중치 행렬이 곱해진 왼쪽 상단 모서리를 확인하십시오. 이제 오른쪽 상단을 보세요. 이 행렬 곱셈 입력 레이어 도트 생성 가중치 전치 오른쪽 상단의 신경망을 나타내는 편리한 방법 일뿐입니다.
첫 번째 부분은 입력 워드를 하나의 핫 벡터로 나타내고 다른 매트릭스는 각 입력 레이어 뉴런과 숨겨진 레이어 뉴런의 연결에 대한 가중치를 나타냅니다. 이 프로그램은 자바 바이트코드 프로그램의 갯수를 카운트하고,스크립트의 메인 형식을 합계냅니다,그리고 확인되지 않은 실행 텍스트 파일을 찾습니다.. 일단 훈련이 달성되면,당신은 이 무게 모체만 이용하고,말”개”를 위해 가지고 가고 숨겨지은 층 뉴런의 차원=아니에서”개”의 벡터 표현을 얻기 위하여 개량한 무게 모체에 곱한다. 이 다이어그램에서 숨겨진 레이어 뉴런의 수는 3 입니다.
간단히 말해서,건너 뛰기 그램 모델은 대상 및 컨텍스트 단어의 사용을 뒤집습니다. 이 경우,대상 단어는 입력에 공급되고,숨겨진 레이어는 동일하게 유지되며,신경망의 출력 레이어는 선택된 수의 컨텍스트 단어를 수용하기 위해 여러 번 복제됩니다. “고양이”와”나무”의 예를 컨텍스트 단어로 취하고”상승”을 대상 단어로 취하면 탈지 그램 모델의 입력 벡터는 티,두 출력 레이어는 티 과 티 각각 대상 벡터로 사용됩니다. 하나의 확률 벡터를 생성하는 대신 현재 예제에 대해 두 개의 벡터가 생성됩니다. 각 출력 계층에 대한 오류 벡터는 위에서 설명한 방식으로 생성됩니다. 그러나 모든 출력 레이어의 오류 벡터가 합산되어 역 전파를 통해 가중치를 조정합니다. 이렇게하면 각 출력 레이어에 대한 가중치 행렬이 훈련을 통해 모두 동일하게 유지됩니다.
우리는 가능한 훈련을 만들기 위해 중요한 기본 스킵 그램 모델에 몇 가지 추가 수정이 필요합니다. 큰 신경 네트워크에 그라디언트 디센트 실행 속도가 느려질 것입니다. 그리고 설상가상으로,당신은 많은 가중치를 조정하고 과도한 피팅을 피하기 위해 엄청난 양의 훈련 데이터가 필요합니다. 훈련 샘플의 무게 배 수십억의 수백만은이 모델을 훈련하는 것은 짐승이 될 것입니다 것을 의미한다. 이를 위해 저자는 하위 샘플링이라는 두 가지 기술과 중요하지 않은 단어가 제거되고 특정 가중치 샘플 만 업데이트되는 네거티브 샘플링을 제안했습니다.
미콜로프 외. 또한 간단한 서브샘플링 방식을 사용하여 학습 집합의 드문 단어와 빈번한 단어 사이의 불균형을 방지합니다(예:”에서”,”는”및”는”는 드문 단어보다 정보 값이 적습니다). 훈련 세트의 각 단어는 확률로 삭제됩니다 피(위스콘신)여기서
에프(와이)는 단어의 빈도입니다 와이 과 티 선택한 임계 값,일반적으로 약 10-5.
구현 세부 정보
워드 투벡은 다양한 언어로 구현되었지만 여기서는 특히 자바에 초점을 맞출 것입니다. 그리고 그 이유는 다음과 같습니다. 다양한 신경망 알고리즘이 구현되었습니다.
1)워드투벡 설정
인텔리이 메이븐에서 새 프로젝트를 생성한다. 그런 다음 폼의 속성 및 종속성을 지정하십시오.프로젝트의 루트 디렉토리에 있는 파일.이제 자바에서 새 클래스를 만들고 이름을 지정합니다. 그 후,당신은 당신의 원시 문장을 취할 것입니다.모든 단어를 소문자로 변환하는 것과 같은 일종의 사전 처리 방법을 적용 할 수 있습니다.이 문제를 해결하려면 다음 단계를 수행하십시오.”).().();
log.info(“로드&문장을 벡터화….”);
// 스트립 공백기 전과 후에는 각 라인
SentenceIterator iter=new BasicLineIterator(filePath);
를 로드하려면 텍스트 파일 외장에서 제공하는 우리를 들어,당신은 이렇:
log.info("Load data....");SentenceIterator iter = new LineSentenceIterator(new File("/Users/cvn/Desktop/file.txt"));iter.setPreProcessor(new SentencePreProcessor() {@Overridepublic String preProcess(String sentence) {return sentence.toLowerCase();}});
다)데이터를 토큰화
단어 2 는 전체 문장이 아닌 단어를 공급해야하므로 다음 단계는 데이터를 토큰화하는 것입니다. 텍스트를 토큰 화하는 것은 예를 들어 공백을 칠 때마다 새 토큰을 만들어 원자 단위로 나누는 것입니다.이제 데이터가 준비되었으므로 토큰에 신경망과 피드를 구성할 수 있습니다.
log.info("Building model....");Word2Vec vec = new Word2Vec.Builder().minWordFrequency(5).layerSize(100).seed(42).windowSize(5).iterate(iter).tokenizerFactory(t).build();log.info("Fitting Word2Vec model....");vec.fit();
이 구성은 여러 하이퍼파라미터를 허용합니다. 몇 가지 설명이 필요합니다:
- 일괄 처리 크기는 한 번에 처리하는 단어의 양입니다.
- 최소 주파수는 단어가 모음에 나타나야 하는 최소 횟수입니다. 이 미만 5 번 나타나는 경우 여기에,그것은 학습되지 않습니다. 단어는 그들에 대한 유용한 기능을 배울 수있는 여러 컨텍스트에 표시해야합니다. 매우 큰 말뭉치에서는 최소값을 높이는 것이 합리적입니다.각 피처마다 다른 그라데이션을 만듭니다. 여기서 우리는 그것에 관심이 없습니다.
- 레이어 크기 단어 벡터의 피처 수를 지정합니다. 이 기능은 기능의 차원 수와 같습니다.공간. 500 개의 특징으로 표현되는 단어는 500 차원 공간에서 포인트가됩니다.
- 학습 속도는 계수의 각 업데이트에 대한 단계 크기이며,특징 공간에서 단어가 재배치됩니다.
- 최소 학습률은 학습률의 바닥입니다. 학습 속도는 감소에 훈련 단어의 수로 붕괴. 학습 속도가 너무 많이 줄어들면 그물의 학습이 더 이상 효율적이지 않습니다. 이 이동 계수를 유지합니다.
- 반복은 학습중인 데이터 세트의 배치를 그물에 알려줍니다.
- 토크나이저는 현재 배치에서 단어를 공급합니다.
- 맞춤()교육을 시작하는 구성된 네트워크를 알려줍니다.다음 단계는 형상 벡터의 품질을 평가하는 것입니다.
// Write word vectorsWordVectorSerializer.writeWordVectors(vec, "pathToWriteto.txt");log.info("Closest Words:");Collection<String> lst = vec.wordsNearest("day", 10);System.out.println(lst);UiServer server = UiServer.getInstance();System.out.println("Started on port " + server.getPort());//output:
vec.similarity("word1","word2")
줄은 입력한 두 단어의 코사인 유사성을 반환합니다. 1 에 가까울수록 그물은 그 단어를 더 비슷하게 인식합니다(위의 스웨덴-노르웨이 예 참조). 예를 들어:double cosSim = vec.similarity("day", "night");System.out.println(cosSim);//output: 0.7704452276229858
vec.wordsNearest("word1", numWordsNearest)
와 함께 화면에 인쇄 된 단어를 사용하면 그물이 의미 상 유사한 단어를 클러스터했는지 여부를 알 수 있습니다. 당신은 단어의 두 번째 매개 변수로 원하는 가장 가까운 단어의 수를 설정할 수 있습니다. 예를 들어:Collection<String> lst3 = vec.wordsNearest("man", 10);System.out.println(lst3);//output:
1) http://mccormickml.com/2016/04/27/word2vec-resources/
2) https://towardsdatascience.com/word2vec-skip-gram-model-part-1-intuition-78614e4d6e0b
3) https://deeplearning4j.org/docs/latest/deeplearning4j-nlp-word2vec
4) https://intothedepthsofdataengineering.wordpress.com/2017/06/26/an-overview-of-word2vec/
5) https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/
6) 자바에서 워드 2 벡http://deeplearning4j.org/word2vec.html
7) 파이썬에서 유니 즘의 워드 2 벡과 닥 2 벡http://radimrehurek.com/2013/09/deep-learning-with-word2vec-and-gensim/
8) http://rare-technologies.com/word2vec-tutorial/
9) https://www.tensorflow.org/versions/r0.8/tutorials/word2vec/index.html