Google Word2Vec 도구의 Node.js 인터페이스
이는 다양한 NLP 작업에 사용할 수있는 "Word의 벡터 표현을 계산하기위한 연속 단어 및 스킵 그램 아키텍처의 효율적인 구현"을 위해 Google Research에서 개발 한 Word2Vec 도구의 Node.js 인터페이스입니다. Word2Vec 프로젝트에 대한 자세한 내용은 https://code.google.com/p/word2vec/를 참조하십시오.
현재 node-word2vec 는 UNIX 운영 체제에만 지원됩니다.
NPM을 통해 설치하십시오.
npm install word2vecNode.js 내부에서 사용하려면 다음과 같이 모듈이 필요합니다.
var w2v = require ( 'word2vec' ) ;특정 단어 쌍이 단일 용어 (예 : "Barack Obama"또는 "New York"으로 취급되는 것이 중요 한 경우, 교육에 사용되는 텍스트 Corpora는 Word2phrases 함수를 통해 사전 처리되어야합니다. 서로 옆에 따르는 단어는 "New"및 "York"이라는 단어가 밑줄을 통해 연결 될 것입니다.
내부적 으로이 기능은 Google Word2Vec 프로젝트의 C 명령 줄 응용 프로그램을 호출합니다. 이를 통해 멀티 스레딩을 사용할 수 있으며 원래 C 코드의 효율성을 유지합니다. input 텍스트 문서에 의해 제공된 텍스트를 처리하여 출력을 output 에 의해 주어진 이름으로 파일에 기록합니다.
params 매개 변수는 JS 객체를 선택적으로 다음 키와 관련 값을 포함하는 것을 기대합니다. 공급되지 않으면 기본값이 사용됩니다.
| 열쇠 | 설명 | 기본값 |
|---|---|---|
| Mincount | MinCount 시간보다 적은 단어를 버립니다 | 5 |
| 한계점 | 문구 수를 결정하고 값이 높음이 더 적은 문구를 의미합니다. | 100 |
| 디버그 | 디버그 모드를 설정합니다 | 2 |
| 조용한 | 출력을 콘솔에 인쇄 해야하는지 설정 | 거짓 |
성공적인 실행 후 제공된 callback 기능이 호출됩니다. 출구 코드의 수를 첫 번째 매개 변수로 수신합니다.
이 기능은 Google의 Word2Vec 명령 줄 응용 프로그램을 호출하고 input 교육 코퍼스의 단어에 대한 벡터 표현을 찾아 결과를 output 파일에 작성합니다. 그런 다음 loadModel 함수를 통해 출력을 노드에로드 할 수 있으며, 이는 단어의 학습 된 벡터 표현과 상호 작용하는 몇 가지 방법을 노출시킵니다.
params 매개 변수는 JS 객체를 선택적으로 다음 키와 관련 값을 포함하는 것을 기대합니다. 누락 된 사람들의 경우 기본값이 사용됩니다.
| 열쇠 | 설명 | 기본값 |
|---|---|---|
| 크기 | 단어 벡터의 크기를 설정합니다 | 100 |
| 창문 | 단어 사이에서 최대 건너 뛰기 길이를 설정합니다 | 5 |
| 견본 | 단어 발생에 대한 임계 값을 설정합니다. 훈련 데이터에서 더 높은 빈도로 나타나는 것들은 무작위로 다운 샘플링됩니다. 유용한 범위는 (0, 1e-5)입니다. | 1E-3 |
| HS | 1 = 계층 적 SoftMax를 사용하십시오 | 0 |
| 부정적인 | 부정적인 예의 수; 공통 값은 3-10입니다 (0 = 사용되지 않음) | 5 |
| 스레드 | 중고 스레드 수 | 12 |
| 반복 | 훈련 반복 횟수 | 5 |
| Mincount | 이것은 mincount 시간보다 적은 단어를 폐기합니다. | 5 |
| 알파 | 시작 학습 속도를 설정합니다 | Skip-Gram의 경우 0.025, Cbow의 경우 0.05 |
| 수업 | 단어 벡터가 아닌 출력 단어 클래스 | 0 (벡터가 작성되었습니다) |
| 디버그 | 디버그 모드를 설정합니다 | 2 |
| 이진 | 결과 벡터를 이진 모드로 저장하십시오 | 0 (OFF) |
| SaveVocab | 어휘는 SaveVocab 값으로 저장됩니다 | |
| readvocab | 어휘는 훈련 데이터에서 구성되지 않은 readvocab 값에서 읽습니다. | |
| cbow | 연속적인 단어 모델을 사용하십시오 | 1 (Skip-Gram 모델의 경우 0 사용) |
| 조용한 | 출력을 콘솔에 인쇄 해야하는지 설정 | 거짓 |
성공적인 실행 후 제공된 callback 기능이 호출됩니다. 출구 코드의 수를 첫 번째 매개 변수로 수신합니다.
이것은 패키지의 주요 기능으로, 단어의 벡터 표현을 포함하는 저장된 모델 파일을 메모리에로드합니다. 이러한 파일은 Word2Vec 함수를 사용하여 만들 수 있습니다. 파일이 성공적으로로드되면 제공된 콜백 함수가 발사되며, 다음 규칙에는 err 및 model 두 가지 매개 변수가 있습니다. 모든 것이 원활하게 실행되고 오류가 발생하지 않으면 첫 번째 인수는 null 되어야합니다. model 매개 변수는 모든 데이터를 보유하고 모델 객체 섹션에 설명 된 속성 및 메소드를 노출시키는 모델 객체입니다.
예:
w2v . loadModel ( './vectors.txt' , function ( error , model ) {
console . log ( model ) ;
} ) ;샘플 출력 :
{
getVectors : [ Function ] ,
distance : [ Function : distance ] ,
analogy : [ Function : analogy ] ,
words : '98331' ,
size : '200'
} 훈련 코퍼스의 독특한 단어 수.
배운 단어 벡터의 길이.
word1 과 word2 사이의 단어 유사성을 계산합니다.
예:
model . similarity ( 'ham' , 'cheese' ) ;샘플 출력 :
0.4907762118841032 제공된 문구 (내부적으로 단어 배열 로 변환되는 string ) 사이의 코사인 거리를 계산하여 어휘의 다른 단어 벡터를 계산합니다. 반환 된 문구와 가장 유사한 number 단어입니다. number 제공되지 않으면 기본적으로 40 개의 가장 높은 점수를받는 단어가 반환됩니다. 사전에 문구의 단어가 나타나지 않으면 함수는 null 반환합니다. 다른 모든 경우에, 알려지지 않은 단어는 코사인 거리의 계산에서 삭제됩니다.
예:
model . mostSimilar ( 'switzerland' , 20 ) ;샘플 출력 :
[
{ word : 'chur' , dist : 0.6070252929307018 } ,
{ word : 'ticino' , dist : 0.6049085549621765 } ,
{ word : 'bern' , dist : 0.6001648890419077 } ,
{ word : 'cantons' , dist : 0.5822226582323267 } ,
{ word : 'z_rich' , dist : 0.5671853621346818 } ,
{ word : 'iceland_norway' , dist : 0.5651901750812693 } ,
{ word : 'aargau' , dist : 0.5590524831511438 } ,
{ word : 'aarau' , dist : 0.555220055372284 } ,
{ word : 'zurich' , dist : 0.5401119092258485 } ,
{ word : 'berne' , dist : 0.5391358099043649 } ,
{ word : 'zug' , dist : 0.5375590160292268 } ,
{ word : 'swiss_confederation' , dist : 0.5365824598661265 } ,
{ word : 'germany' , dist : 0.5337325187293028 } ,
{ word : 'italy' , dist : 0.5309218588704736 } ,
{ word : 'alsace_lorraine' , dist : 0.5270204106304165 } ,
{ word : 'belgium_denmark' , dist : 0.5247942780963807 } ,
{ word : 'sweden_finland' , dist : 0.5241634037188426 } ,
{ word : 'canton' , dist : 0.5212495170066538 } ,
{ word : 'anterselva' , dist : 0.5186651140386938 } ,
{ word : 'belgium' , dist : 0.5150383129735169 }
] man 과 king 과 같은 관계에서 한 쌍의 단어의 경우,이 기능은 제공된 word 와 유사한 관계에있는 용어를 찾으려고합니다. number 제공되지 않으면 기본적으로 40 개의 가장 높은 점수를받는 결과가 반환됩니다.
예:
model . analogy ( 'woman' , [ 'man' , 'king' ] , 10 ) ;샘플 출력 :
[
{ word : 'queen' , dist : 0.5607083309028658 } ,
{ word : 'queen_consort' , dist : 0.510974781496456 } ,
{ word : 'crowned_king' , dist : 0.5060923120115347 } ,
{ word : 'isabella' , dist : 0.49319425034513376 } ,
{ word : 'matilda' , dist : 0.4931204901924969 } ,
{ word : 'dagmar' , dist : 0.4910608716969606 } ,
{ word : 'sibylla' , dist : 0.4832698899279795 } ,
{ word : 'died_childless' , dist : 0.47957251302898396 } ,
{ word : 'charles_viii' , dist : 0.4775804990655765 } ,
{ word : 'melisende' , dist : 0.47663194967001704 }
] 입력 word 에 대해 학습 된 벡터 표현을 반환합니다. 어휘에 word 존재하지 않으면 함수는 null 반환합니다.
예:
model . getVector ( 'king' ) ;샘플 출력 :
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} 제공된 단어에 대해 학습 된 벡터 표현을 반환합니다. 단어가 정의되지 않은 경우, 즉 인수를 전달하지 않고 함수가 유발됩니다. 모든 학습 된 단어에 대해 벡터를 반환합니다. 반환 된 값은 클래스 WordVec 의 인스턴스 인 객체 array 입니다.
예:
model . getVectors ( [ 'king' , 'queen' , 'boy' , 'girl' ] ) ;샘플 출력 :
[
{
word : 'king' ,
values : [
0.006371254151248689 ,
- 0.04533821363410406 ,
0.1589142808632736 ,
...
0.042080221123209825 ,
- 0.038347102017109225
]
} ,
{
word : 'queen' ,
values : [
0.014399041122817985 ,
- 0.000026896638109750347 ,
0.20398248693190596 ,
...
- 0.05329081648586445 ,
- 0.012556868376422963
]
} ,
{
word : 'girl' ,
values : [
- 0.1247347144692245 ,
0.03834108759049417 ,
- 0.022911846734360187 ,
...
- 0.0798994867922872 ,
- 0.11387393949666696
]
} ,
{
word : 'boy' ,
values : [
- 0.05436531234037158 ,
0.008874993957578164 ,
- 0.06711992414442335 ,
...
0.05673998568026764 ,
- 0.04885347925837509
]
}
] 입력 vec 에 가장 가까운 벡터 표현을 갖는 단어를 반환합니다. 이 함수는 생성자 WordVector 의 인스턴스 또는 길이 size 의 숫자 값 배열 인 Word 벡터를 기대합니다. 벡터와 제공된 입력 벡터 사이의 거리가 가장 낮은 어휘에서 단어를 반환합니다.
예:
model . getNearestWord ( model . getVector ( 'empire' ) ) ;샘플 출력 :
{ word : 'empire' , dist : 1.0000000000000002 } 벡터 표현이 입력 vec 에 가장 가까운 단어를 반환합니다. 함수의 첫 번째 매개 변수는 생성자 WordVector 의 인스턴스 또는 길이 size 의 숫자 값 배열 인 Word 벡터를 기대합니다. 두 번째 매개 변수 인 number 는 선택 사항이며 반환 된 단어의 수를 지정합니다. 공급되지 않으면 기본값 10 사용됩니다.
예:
model . getNearestWords ( model . getVector ( 'man' ) , 3 )샘플 출력 :
[
{ word : 'man' , dist : 1.0000000000000002 } ,
{ word : 'woman' , dist : 0.5731114915085445 } ,
{ word : 'boy' , dist : 0.49110060323870924 }
] 어휘의 단어.
단어에 대한 배운 벡터 표현, 길이 size 의 배열.
입력 wordVector 의 벡터를 벡터 .values 에 추가합니다.
입력 wordVector 의 벡터를 벡터 .values 에 빼냅니다.
명령 npm test 통해 테스트를 실행합니다
GIT 저장소를 명령으로 복제하십시오
$ git clone https://github.com/Planeshifter/node-word2vec.git프로젝트 디렉토리로 변경하고 C 소스 파일을 컴파일합니다.
$ cd node-word2vec
$ make --directory=src아파치 V2.