가소성이 개발 한 빠르고 효율적이며 간단한 방식으로 기계 학습 모델에 벡터 임베딩을 활용하기위한 기능이 가득한 파이썬 패키지 및 벡터 저장 파일 형식. 주로 Gensim에 대한 간단하고 빠른 대안이지만 NLP 외부의 도메인의 일반적인 키 벡터 저장소로 사용될 수 있습니다. 비정규 외 조회 및 HTTP를 통해 대형 모델 스트리밍과 같은 고유 한 기능을 제공합니다. EMNLP 2018에서 본 논문에 출판되었으며 Arxiv에서 구할 수 있습니다.
pip 로이 패키지를 설치할 수 있습니다.
pip install pymagnitude # Python 2.7
pip3 install pymagnitude # Python 3Google 공동 작업은 상충되는 종속성으로 인해 규모를 설치하는 데 몇 가지 종속성 문제가 있습니다. 다음 스 니펫을 사용하여 Google 공동 작업에 규모를 설치할 수 있습니다.
# Install Magnitude on Google Colab
! echo " Installing Magnitude.... (please wait, can take a while) "
! (curl https://raw.githubusercontent.com/plasticityai/magnitude/master/install-colab.sh | /bin/bash 1> /dev/null 2> /dev/null)
! echo " Done installing Magnitude. " 벡터 공간 임베딩 모델은 머신 러닝에서 점점 더 흔해지고 있으며 전통적으로 자연어 처리 응용 분야에서 인기가 있습니다. 이러한 큰 벡터 공간 임베딩 모델을 효율적으로 소비하는 빠르고 가벼운 도구는 부족합니다.
벡터 임베드에 대한 크기 파일 형식 ( .magnitude )은 개발에서 더 빠른 콜드 스타트를위한 게으른로드, 생산 성능을위한 LRU 메모리 캐싱, 여러 핵심 쿼리, 신경 네트워크에 대한 입력, 공연자 유사성 계산에 대한 직접적인 특징에 대한 직접적인 특징에 대한 직접적인 특징을 갖기위한보다 효율적인 보편적 벡터 임베딩 형식으로 고안되었습니다. 또는 틀린 키와 여러 벡터 모델을 함께 연결합니다. 또한 메모리에 맞지 않는 대형 벡터 모델과 함께 작동하도록 의도되었습니다.
기본 데이터 저장소로 빠르고 인기있는 임베디드 데이터베이스 인 SQLITE를 사용합니다. 빠른 키 조회에 인덱스를 사용하고 메모리 매핑, SIMD 명령 및 공간 인덱싱을 사용하여 여러 프로세스 간에도 메모리 성능이 우수한 벡터 공간 오프 디스크에서 빠른 유사성 검색을 위해 공간 인덱싱을 사용합니다. 또한, 메모리 맵은 실행 사이에 캐시되므로 프로세스를 닫은 후에도 속도 개선이 거부됩니다.
| 메트릭 | 크기 광 | 크기 매체 | 크기가 무겁습니다 | 크기 스트림 |
|---|---|---|---|---|
| 초기로드 시간 | 0.7210S | ━ 1 | ━ 1 | 7.7550S |
| 콜드 단일 키 쿼리 | 0.0001S | ━ 1 | ━ 1 | 1.6437S |
| 따뜻한 단일 키 쿼리 (콜드 쿼리와 동일한 키) | 0.00004 | ━ 1 | ━ 1 | 0.0004s |
| 콜드 다중 키 쿼리 (n = 25) | 0.0442S | ━ 1 | ━ 1 | 1.7753S |
| 여러 개의 키 쿼리를 따뜻하게합니다 (n = 25) (콜드 쿼리와 동일한 키) | 0.00004 | ━ 1 | ━ 1 | 0.0001S |
첫 번째 most_similar 검색 쿼리(n = 10) (최악의 경우) | 247.05S | ━ 1 | ━ 1 | - |
첫 번째 most_similar 검색 쿼리(n = 10) (평균 사례) (w/ 디스크 영구 캐시) | 1.8217S | ━ 1 | ━ 1 | - |
후속 most_similar 검색(n = 10) (첫 번째 쿼리와 다른 키) | 0.2434S | ━ 1 | ━ 1 | - |
따뜻한 후속 most_similar 검색(n = 10) (첫 번째 쿼리와 동일한 키) | 0.00004 | 0.00004 | 0.00004 | - |
First most_similar_approx 검색 쿼리(n = 10, 노력 = 1.0) (최악의 경우) | N/A | N/A | 29.610S | - |
First most_similar_approx 검색 쿼리(n = 10, 노력 = 1.0) (평균 케이스) (w/ 디스크 영구 캐시) | N/A | N/A | 0.9155s | - |
후속 most_similar_approx 검색(n = 10, 노력 = 1.0) (첫 번째 쿼리와 다른 키) | N/A | N/A | 0.1873S | - |
후속 most_similar_approx 검색(n = 10, 노력 = 0.1) (첫 번째 쿼리와 다른 키) | N/A | N/A | 0.0199S | - |
따뜻한 후속 most_similar_approx 검색(n = 10, 노력 = 1.0) (첫 번째 쿼리와 동일한 키) | N/A | N/A | 0.00004 | - |
| 파일 크기 | 4.21GB | 5.29GB | 10.74GB | 0.00GB |
| 프로세스 메모리 (RAM) 사용 | 18KB | ━ 1 | ━ 1 | 1.71MB |
| 100 개의 주요 쿼리 후 프로세스 메모리 (RAM) 사용 | 168KB | ━ 1 | ━ 1 | 1.91MB |
| 100 개의 키 쿼리 후 프로세스 메모리 (RAM) 활용도 + 유사성 검색 | 342KB 2 | ━ 1 | ━ 1 | |
| 무결성 점검 및 테스트 | ✅ | ✅ | ✅ | ✅ |
Word2Vec ( .txt , .bin ), 장갑 ( .txt ), FastText ( .vec ) 및 Elmo ( .hdf5 ) 사이의 범용 형식은 변환기 유틸리티가 있습니다. | ✅ | ✅ | ✅ | ✅ |
| 간단하고 피스닉 인터페이스 | ✅ | ✅ | ✅ | ✅ |
| 의존성이 거의 없습니다 | ✅ | ✅ | ✅ | ✅ |
| 메모리 모델보다 큰 지원 | ✅ | ✅ | ✅ | ✅ |
| 속도와 성능을 위해 가능할 때마다 게으른 로딩 | ✅ | ✅ | ✅ | ✅ |
threading 및 multiprocessing 에 최적화되었습니다 | ✅ | ✅ | ✅ | ✅ |
| 패딩, 잘림, 자리 표시 자 및 기능화 지원을 통한 대량 및 다중 키 조회 | ✅ | ✅ | ✅ | ✅ |
| 여러 벡터 모델을 함께 연결합니다 | ✅ | ✅ | ✅ | ✅ |
| 기본적인 비경 평균 키 조회 (캐릭터 N- 그램 기능 해싱) | ✅ | ✅ | ✅ | ✅ |
| 철자를 지원하는 고급 비경 평균 키 조회 (비슷한 비정규 키에 대한 캐릭터 N- 그램 기능 해싱) | ✅ | ✅ | ✅ | |
| 성가신 색인으로 가장 유사한 검색을 대략적으로 표현하십시오 | ✅ | ✅ | ||
| 새로운 모델을위한 내장 교육 |
1 : 이전 열과 동일한 값
2 : mmap 사용하여 디스크에서 읽으므로 OS는 메모리를 사용할 수있을 때 메모리 페이지를 여전히 할당하지만 프로세스간에 공유 할 수 있으며 성능이 우승 한 매우 큰 파일에 대해 각 프로세스 내에서 관리되지 않습니다.
*: 모든 벤치 마크는 MacBook Pro (Retina, 15 인치, 2014 년 중반)가 장착 된 Google 뉴스 미리 훈련 된 워드 벡터 ( GoogleNews-vectors-negative300.bin )에서 수행되었습니다.
인기있는 임베딩 모델은 Immmediate 다운로드 및 사용을 위해 .magnitude 형식으로 사전 전환되었습니다.
| 기부자 | 데이터 | 빛 (비정규직 키에 대한 기본 지원) | 중간 (권장) (비정규직 열쇠에 대한 고급 지원) | 무거운 (비정규 키 및 더 빠른 대부분의 대부분 most_similar_approx 대한 고급 지원) |
|---|---|---|---|---|
| Google -Word2vec | Google News 100B | 300d | 300d | 300d |
| 스탠포드 - 글러브 | Wikipedia 2014 + Gigaword 5 6B | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d |
| 스탠포드 - 글러브 | Wikipedia 2014 + Gigaword 5 6B (가소성에 의해 lemmatized) | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d | 50d, 100d, 200d, 300d |
| 스탠포드 - 글러브 | 일반적인 크롤링 840b | 300d | 300d | 300d |
| 스탠포드 - 글러브 | 트위터 27b | 25d, 50d, 100d, 200d | 25d, 50d, 100d, 200d | 25d, 50d, 100d, 200d |
| Facebook -FastText | 영어 Wikipedia 2017 16B | 300d | 300d | 300d |
| Facebook -FastText | 영어 Wikipedia 2017 + 서브 워드 16B | 300d | 300d | 300d |
| Facebook -FastText | 일반적인 크롤링 600b | 300d | 300d | 300d |
| AI2 -Allennlp Elmo | 엘모 모델 | 엘모 모델 | 엘모 모델 | 엘모 모델 |
| 구글 - 버트 | 곧 올다 ... | 곧 올다 ... | 곧 올다 ... | 곧 올다 ... |
.bin , .txt , .vec , .hdf5 파일을 .magnitude 파일로 변환하기위한 지침이 아래에 있습니다.
SO와 같은 크기 객체를 만들 수 있습니다.
from pymagnitude import *
vectors = Magnitude ( "/path/to/vectors.magnitude" ) 필요한 경우 편의를 위해 포함되면 .bin , .txt , .vec , .hdf5 파일을 크기로 직접 열 수 있습니다. 그러나 이는 첫 번째 실행의 임시 디렉토리로 파일을 .magnitude 파일로 변환하기 때문에 큰 모델의 경우 효율적이고 매우 느립니다. 임시 디렉토리는 컴퓨터가 재부팅 할 때 지속되지 않으며 지속되지 않습니다. python -m pymagnitude.converter 가있는 .bin , .txt , .vec , .hdf5 파일을 사전 통합해야하지만이 기능은 일회성 사용 사례에 유용합니다. .bin , .txt , .vec , .hdf5 와 직접 크기 객체를 인스턴스화 할 때 경고가 생성됩니다. 생성자의 supress_warnings 인수를 True 로 설정하여 경고를 억제 할 수 있습니다.
lazy_loading 인수는 값 -1 사용하여 Lazy-Loading을 비활성화하고 Lazy-Loading을 비활성화하고 모든 벡터를 메모리 (LA Gensim), 0 (기본값), 0 (기본값), 0 (기본값), 0 (기본값 X 으로 전달하여 Unbounded In-Memory LRU Cache를 사용하여 Lazy Loading을 사용하여 가장 최근에 Latho X 를 사용하여 Lazy Loading을 사용할 수 있습니다.most_similar 함수에 대한 데이터가 사전로드되기를 원한다면 eager 설정 True .lazy_loading 이 -1 로 설정되거나 eager True 데이터로 설정된 경우에도 배경 스레드에서 메모리로 미리로드되어 생성자가 대형 모델의 경우 몇 분 동안 차단되지 않도록합니다. 행동 차단 동작을 원한다면 blocking 인수에 True 할 수 있습니다.normalized False 로 설정하십시오.use_numpy False 로 설정하십시오.case_insensitive True 로 설정하십시오.pad_to_length 인수를 포함시킬 수 있으며, 이는 멀티 플레인 예제를 전달하는 경우 모든 예제가 패딩 해야하는 길이를 지정할 수 있습니다. 패드 길이보다 긴 예제는 잘립니다.pad_to_length 보다 긴 경우 각 예제의 키 목록의 시작이 끝 대신에 잘린 경우 truncate_left 인수를 True 로 설정할 수 있습니다.pad_left 인수를 True 로 설정할 수 있습니다.placeholders 인수를 전달할 수있어, 이는 각 벡터의 차원을 자리 placeholders 금액으로 증가시켜 해당 추가 차원을 제로 상태로 유지할 수 있습니다. 벡터에 다른 값과 정보를 추가하고 효율성을 위해 벡터에 사전 할당 된 공간을 원한다면 이는 유용합니다.language 인수를 전달할 수 있습니다.이 언어 코드는 단어 벡터에 크기를 사용하는 경우 라이브러리가 해당 언어에 대한 스템 밍 및 기타 언어 별 기능을 존중 할 수 있도록합니다. 기본값은 영어에 en 입니다. 단어 벡터에 크기를 사용하지 않으면 None 통과 할 수 있습니다.dtype 인수를 전달하여 크기로 반환 된 Numpy Array의 데이터 유형을 제어 할 수 있습니다.devices 인수를 전달할 수 있습니다. 이 인수는 각 정수가 GPU 장치 번호 ( 0 , 1 등)를 나타내는 정수 목록이어야합니다.temp_dir 인수를 전달할 수 있습니다.log 인수를 전달할 수 있으며, 이는 느린 작업이 진행될 때 표준 오류로 크기 로그가 진행됩니다.파일의 총 벡터 수를 쿼리 할 수 있습니다.
len ( vectors )SO와 같은 벡터의 치수를 쿼리 할 수 있습니다.
vectors . dim키가 어휘에 있는지 확인할 수 있습니다.
"cat" in vectorsSO와 같은 모든 키와 벡터를 반복 할 수 있습니다.
for key , vector in vectors :
...다음과 같은 키의 벡터에 대한 쿼리를 할 수 있습니다.
vectors . query ( "cat" )N-th 키 및 벡터에 대해 다음과 같은 색인을 색인 할 수 있습니다.
vectors [ 42 ]다음과 같은 여러 키의 벡터에 대한 쿼리를 할 수 있습니다.
vectors . query ([ "I" , "read" , "a" , "book" ])2D 배열 (벡터의 키)이 반환됩니다.
다음과 같은 여러 예제의 벡터에 대해 쿼리 할 수 있습니다.
vectors . query ([[ "I" , "read" , "a" , "book" ], [ "I" , "read" , "a" , "magazine" ]]) 3D 배열 (벡터의 키 예제)이 반환됩니다. pad_to_length 지정되지 않고 각 예제의 크기가 고르지 않으면 가장 긴 예제의 길이로 패딩됩니다.
SO와 같은 여러 인덱스의 키 및 벡터에 대해 색인 할 수 있습니다.
vectors [: 42 ] # slice notation
vectors [ 42 , 1337 , 2001 ] # tuple notation그렇게 두 개 또는 다중 키의 거리를 쿼리 할 수 있습니다.
vectors . distance ( "cat" , "dog" )
vectors . distance ( "cat" , [ "dog" , "tiger" ])다음과 같은 두 키 또는 여러 키의 유사성을 쿼리 할 수 있습니다.
vectors . similarity ( "cat" , "dog" )
vectors . similarity ( "cat" , [ "dog" , "tiger" ])주어진 키에 대한 키 목록에서 가장 유사한 키를 쿼리 할 수 있습니다.
vectors . most_similar_to_given ( "cat" , [ "dog" , "television" , "laptop" ]) # dog키 목록과 같은 키 목록과 일치하지 않는 쿼리는 다음과 같은 주어진 키에 쿼리 할 수 있습니다.
vectors . doesnt_match ([ "breakfast" , "cereal" , "dinner" , "lunch" ]) # cereal가장 유사한 (가장 가까운 이웃) 키를 쿼리 할 수 있습니다.
vectors . most_similar ( "cat" , topn = 100 ) # Most similar by key
vectors . most_similar ( vectors . query ( "cat" ), topn = 100 ) # Most similar by vector 선택적으로 min_similarity 인수를 most_similar 에 전달할 수 있습니다. [-1.0-1.0]의 값은 유효합니다.
또한 긍정적이고 부정적인 예를 제공하는 가장 유사한 키를 쿼리 할 수 있습니다.
vectors . most_similar ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queen vectors.most_similar , vectors.most_similar_cosmul 함수는 Levy 및 Goldberg의 3Cosmul 함수를 사용하는 기능이 있습니다.
vectors . most_similar_cosmul ( positive = [ "woman" , "king" ], negative = [ "man" ]) # queen또한 훨씬 더 빠르지 만 정확한 답변을 보장하지는 않는다.
vectors . most_similar_approx ( "cat" )
vectors . most_similar_approx ( positive = [ "woman" , "king" ], negative = [ "man" ]) 선택적으로, [0.0-1.0] 사이의 값으로 most_similar_approx 함수로 런타임 트레이드 오프를 제공하는 effort 인수를 전달할 수 있습니다. effort 의 기본값은 1.0이므로 가장 길지만 가장 정확한 결과를 제공합니다.
다른 키에 가까운 모든 키에 대해 다른 키보다 쿼리 할 수 있습니다.
vectors . closer_than ( "cat" , "rabbit" ) # ["dog", ...] 모델의 모든 기본 벡터에 큰 numpy.memmap 배열 ( len(vectors) x vectors.emb_dim )에서 다음과 같이 액세스 할 수 있습니다.
vectors . get_vectors_mmap ()모든 관련 리소스, 열린 파일 및와 같은 데이터베이스 연결을 정리할 수 있습니다.
vectors . close ()Word 벡터 표현의 경우, 변동성이없는 키를 처리하는 것은 훈련 된 모델이 아닌 새로운 단어를 처리하고, 오해 및 오타를 처리하고, 벡터 표현이라는 단어에 대한 모델을 일반적으로보다 강력하게 만드는 데 중요합니다.
평균 외부 키는 임의의 벡터 값을 할당하여 처리됩니다. 그러나 무작위성은 결정적입니다. 따라서 동일한 비정규 열쇠가 두 번 발생하면, 사정 외 열쇠를 훈련시킬 수 있도록 동일한 랜덤 벡터 값이 할당됩니다. 더욱이, 두 개의 비정규 키가 비슷한 문자 n- 그램 ( "uberx", "uberxl")을 공유하면 두 어휘에 있지 않더라도 서로 가까이 배치됩니다.
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberxl" in vectors # False
vectors . query ( "uberx" ) # array([ 5.07109939e-02, -7.08248823e-02, -2.74812328e-02, ... ])
vectors . query ( "uberxl" ) # array([ 0.04734962, -0.08237578, -0.0333479, -0.00229564, ... ])
vectors . similarity ( "uberx" , "uberxl" ) # 0.955000000200815비정규직 외 지원 (중간 또는 무거운)이 고급 된 크기 파일을 사용하는 경우, 비실리 외 키는 어휘 에있는 유사한 키 (문자열 유사성에 의해 결정됨)에 가깝게 내장됩니다.
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"uberx" in vectors # False
"uberification" in vectors # False
"uber" in vectors # True
vectors . similarity ( "uberx" , "uber" ) # 0.7383483267618451
vectors . similarity ( "uberification" , "uber" ) # 0.745452837882727 이것은 또한 많은 철자 오류에 대한 크기를 강력하게 만듭니다.
vectors = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
"missispi" in vectors # False
vectors . similarity ( "missispi" , "mississippi" ) # 0.35961736624824003
"discrimnatory" in vectors # False
vectors . similarity ( "discrimnatory" , "discriminatory" ) # 0.8309152561753461
"hiiiiiiiiii" in vectors # False
vectors . similarity ( "hiiiiiiiiii" , "hi" ) # 0.7069775034853861캐릭터 N- 그램은 비정규직 키에 대한이 효과를 만드는 데 사용됩니다. 이 기능에 대한 영감은 Facebook AI Research의 서브 워드 정보가있는 강화 된 단어 벡터에서 가져 왔지만, 기차 시간에 문자 N- 그램을 사용하는 대신, 캐릭터 N- 그램은 추론에 사용되므로 Word2Vec 및 Glove와 같은 캐릭터 N- 그램으로 훈련되지 않은 구형 모델에서 효과를 다소 복제 할 수 있습니다 (그러나 완벽하게 복제되지는 않습니다).
선택적으로, 여러 모델의 벡터를 결합하여 더 강력한 정보를 다음과 같은 기계 학습 모델에 공급할 수 있습니다.
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
glove = Magnitude ( "/path/to/glove.6B.50d.magnitude" )
vectors = Magnitude ( word2vec , glove ) # concatenate word2vec with glove
vectors . query ( "cat" ) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cat' from glove)
vectors . query (( "cat" , "cats" )) # returns 350-dimensional NumPy array ('cat' from word2vec concatenated with 'cats' from glove)더 많은 인수를 생성자에게 전달하여 두 벡터 모델을 연결할 수 있습니다.
Speech의 일부, 구문 종속성 정보 또는 FeaturizerMagnitude 클래스를 사용하여 기타 정보와 같은 추가 기능에서 벡터를 자동으로 생성 할 수 있습니다.
from pymagnitude import *
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
pos_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192])
pos_vectors . query ( "JJ" ) # - array([-0.11681135, 0.10259253, 0.8841201 , -0.44063763])
pos_vectors . query ( "NN" ) # - array([ 0.08040417, -0.71705252, 0.61228951, 0.32322192]) (deterministic hashing so the same value is returned every time for the same key)
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
dependency_vectors . dim # 4 - number of dims automatically determined by Magnitude from 100
dependency_vectors . query ( "nsubj" ) # - array([-0.81043793, 0.55401352, -0.10838071, 0.15656626])
dependency_vectors . query ( "prep" ) # - array([-0.30862918, -0.44487267, -0.0054573 , -0.84071788])Micreditue는 기능 해싱 트릭을 내부적으로 사용하여 피처 값의 해시를 직접 사용하여 해당 기능 값에 대한 고유 한 벡터를 만듭니다.
FeaturizerMagnitude 에 대한 첫 번째 주장은 기능의 값 수에 대한 대략적인 상한이어야합니다. 음성 태그의 100 개 부분과 <100 구문 종속성이 있으므로 위의 예에서 모두 100을 선택합니다. 선택한 값은 해시 충돌 가능성을 줄이기 위해 FeaturizerMagnitude 객체를 특정에 자동으로 할당하는 차원 크기의 수를 결정합니다. namespace 인수는 추가 기능을 설명하는 문자열 일 수 있습니다. 선택 사항이지만 적극 권장됩니다.
그런 다음 표준 크기 객체와 함께 사용하기 위해 이러한 기능을 연결할 수 있습니다.
from pymagnitude import *
word2vec = Magnitude ( "/path/to/GoogleNews-vectors-negative300.magnitude" )
pos_vectors = FeaturizerMagnitude ( 100 , namespace = "PartsOfSpeech" )
dependency_vectors = FeaturizerMagnitude ( 100 , namespace = "SyntaxDependencies" )
vectors = Magnitude ( word2vec , pos_vectors , dependency_vectors ) # concatenate word2vec with pos and dependencies
vectors . query ([
( "I" , "PRP" , "nsubj" ),
( "saw" , "VBD" , "ROOT" ),
( "a" , "DT" , "det" ),
( "cat" , "NN" , "dobj" ),
( "." , "." , "punct" )
]) # array of size 5 x (300 + 4 + 4) or 5 x 308
# Or get a unique vector for every 'buffalo' in:
# "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"
# (https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo)
vectors . query ([
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "nsubj" ),
( "buffalo" , "VBP" , "rcmod" ),
( "buffalo" , "VB" , "ROOT" ),
( "Buffalo" , "JJ" , "amod" ),
( "buffalo" , "NNS" , "dobj" )
]) # array of size 8 x (300 + 4 + 4) or 8 x 308이 출력이 주어지면 기계 학습 모델은 이제 단어 벡터 정보 대신 음성 정보 및 구문 종속성 정보에 액세스 할 수 있습니다. 이 경우,이 추가 정보는 시맨틱 정보에 대한 신경 네트워크에 더 강력한 신호를 제공하고 교육 데이터의 필요성을 줄일 수 있습니다.
크기는 많은 사전 처리 코드를 관리하여 텍스트 데이터 세트 (또는 키)를 벡터로 변환하여 벡터 표현을 사용해야하는 모델을 신속하게 구축하고 반복 할 수 있습니다. 또한, 이러한 모델을 비위 외부 단어와 철자로보다 강력하게 만들 수 있습니다.
아래의 몇 가지 인기있는 기계 학습 라이브러리에서 챗봇 또는 대화 인터페이스에 사용되는 ATIS (Airline Travel Information Systems) 데이터 세트 (TRAIN/TEST)에 대한 의도 분류 모델을 구축하기 위해 크기를 사용하여 사용 가능한 예제 코드가 있습니다.
이 Google 공동 작업 Python 노트북에서 keras (Tensorflow, Theano, CNTK를 지원하는)와 함께 크기를 사용하기위한 안내서에 액세스 할 수 있습니다.
Pytorch 가이드가 곧 출시 될 예정입니다.
Tflearn 가이드가 곧 출시 될 예정입니다.
머신 러닝 모델을 만들 때 유용 할 수있는 기능에 편리하게 액세스하기 위해 MagnitudeUtils 클래스를 사용할 수 있습니다.
SO와 같은 규모를 가져올 수 있습니다.
from pymagnitude import MagnitudeUtilsSO와 같은 원격 소스에서 크기 모델을 다운로드 할 수 있습니다.
vecs = Magnitude ( MagnitudeUtils . download_model ( 'word2vec/heavy/GoogleNews-vectors-negative300' )) 기본적으로 download_model http://magnitude.plasticity.ai 에서 파일을 자동으로 만든 ~/.magnitude 폴더로 다운로드합니다. 파일이 이미 다운로드 된 경우 다시 다운로드되지 않습니다. 옵션 download_dir 인수를 사용하여 로컬 다운로드 폴더의 디렉토리를 변경할 수 있습니다. 옵션 remote_path 인수로 모델이 다운로드 될 도메인을 변경할 수 있습니다.
batchify 사용하여 X 및 y 데이터에 대한 배치 생성기를 만들 수 있습니다.
X = [ .3 , .2 , .7 , .8 , .1 ]
y = [ 0 , 0 , 1 , 1 , 0 ]
batch_gen = MagnitudeUtils . batchify ( X , y , 2 )
for X_batch , y_batch in batch_gen :
print ( X_batch , y_batch )
# Returns:
# 1st loop: X_batch = [.3, .2], y_batch = [0, 0]
# 2nd loop: X_batch = [.7, .8], y_batch = [1, 1]
# 3rd loop: X_batch = [.1], y_batch = [0]
# next loop: repeats infinitely... 클래스 레이블을 정수로 인코딩하고 class_encoding 으로 다시 인코딩 할 수 있습니다.
add_class , class_to_int , int_to_class = MagnitudeUtils . class_encoding ()
add_class ( "cat" ) # Returns: 0
add_class ( "dog" ) # Returns: 1
add_class ( "cat" ) # Returns: 0
class_to_int ( "dog" ) # Returns: 1
class_to_int ( "cat" ) # Returns: 0
int_to_class ( 1 ) # Returns: "dog"
int_to_class ( 0 ) # Returns: "cat" 클래스 정수 to_categorical 범주 형 데이터를 변환 할 수 있습니다.
y = [ 1 , 5 , 2 ]
MagnitudeUtils . to_categorical ( y , num_classes = 6 ) # num_classes is optional
# Returns:
# array([[0., 1., 0., 0., 0., 0.]
# [0., 0., 0., 0., 0., 1.]
# [0., 0., 1., 0., 0., 0.]]) 1 인상의 Numpy 어레이에서 다시 from_categorical 있는 1D Numpy 클래스 정수 배열로 다시 변환 할 수 있습니다.
y_c = [[ 0. , 1. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 1. ]]
MagnitudeUtils . from_categorical ( y_c )
# Returns:
# array([1., 5.]) 라이브러리는 스레드 안전 (스레드 당 기본 스토어와 다른 연결을 사용)이며 읽기 전용이며 파일에 쓰지 않습니다. 라이트 메모리 사용으로 인해 다른 라이브러리와 같이 메모리 내 데이터를 복제 할 필요없이 다른 주소 공간으로 여러 프로세스 (또는 multiprocessing 사용)로 실행할 수도 있고 다중 프로세스 공유 변수를 생성 할 필요없이 데이터가 오프 디스크를 읽고 각 프로세스가 자체 LRU 메모리 캐시를 유지할 수 있습니다. most_similar 와 같은 무거운 함수의 경우 공유 메모리 매핑 파일이 생성되어 프로세스간에 메모리를 공유합니다.
크기 패키지는 Word2Vec, Glove, FastText 및 Elmo와 같은 다른 벡터 모델과 마찬가지로 .bin , .txt , .vec , 또는 .hdf5 대신 .magnitude 파일 형식을 사용합니다. Word2Vec, Glove, FastText 및 Elmo 파일을 크기 파일로 변환하기위한 명령 줄 유틸리티가 포함되어 있습니다.
그렇게 변환 할 수 있습니다.
python -m pymagnitude.converter -i < PATH TO FILE TO BE CONVERTED > -o < OUTPUT PATH FOR MAGNITUDE FILE >입력 형식은 입력 파일의 내용 / 내용에 의해 자동으로 결정됩니다. 모델의 경우이 변환을 한 번만 수행하면됩니다. 변환 후, 크기 파일 형식은 정적이며 동시 읽기 액세스를 안전하게 만들기 위해 수정되거나 기록되지 않습니다.
pymagnitude.converter 의 플래그는 다음과 같습니다.
-h 플래그를 전달할 수 있습니다.-p <PRECISION> 플래그를 사용하여 유지할 소수점 정밀도를 지정할 수 있습니다 (더 낮은 숫자를 선택하면 더 작은 파일이 생성됩니다). 실제 기본 값은 플로트 대신 정수로 저장되므로 더 작은 모델 풋 프린트에 대한 본질적으로 양자화입니다.-a 플래그를 사용하여 most_similar_approx 함수를 사용할 수 있습니다. -t <TREES> 플래그는 -a 깃발과 함께 사용될 때 대략적인 이웃 이웃 지수의 나무 수를 제어합니다 (공급되지 않으면 나무의 수는 자동으로 결정됨).-s 플래그를 전달하여 파일에 서브 워드 정보 추가를 비활성화 할 수 있지만 (파일을 더 작게 만들 수 있음), 보급되지 않은 비방 유지 키 지원을 비활성화 할 수 있습니다.-v 플래그와 함께 어휘를 가져 가려는 다른 크기 파일로의 경로와 함께 전달할 수 있습니다. 선택적으로 입력 파일 및 출력 파일 대신 입력 폴더와 출력 폴더를 전달하여 많은 파일을 대량 변환 할 수 있습니다. 입력 폴더의 모든 .txt , .bin , .vec , .hdf5 파일은 출력 폴더의 .magnitude 파일로 변환됩니다. 출력 폴더는 대량 변환 작업 전에 존재해야합니다.
로컬 파일 경로 대신 Msice의 원격 저장소에서 Micrudite 다운로드를 지시하고 개방할 수 있습니다. 파일은 첫 번째 실행에서 로컬로 ~/.magnitude/ 로 다운로드되며 파일이 이미 로컬로 존재하는 경우 다운로드를 건너 뜁니다.
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' ) # or, use the shorthand for the url 원격 다운로드 도메인 및 로컬 다운로드 디렉토리에 대한 자세한 내용을 보려면 MagnitudeUtils.download_model 사용하는 방법을 참조하십시오.
.magnitude 모델은. 크기에는 이러한 큰 파일을 HTTP로 스트리밍 할 수있는 옵션이 있습니다. 모델을 전혀 다운로드 할 필요조차 없다는 점에서 원격 로딩 기능과 명시 적으로 다릅니다. 디스크 공간이 전혀 사용되지 않은 상태에서 즉시 모델 쿼리를 시작할 수 있습니다.
vecs = Magnitude ( 'http://magnitude.plasticity.ai/word2vec/heavy/GoogleNews-vectors-negative300.magnitude' , stream = True ) # full url
vecs = Magnitude ( 'word2vec/heavy/GoogleNews-vectors-negative300' , stream = True ) # or, use the shorthand for the url
vecs . query ( "king" ) # Returns: the vector for "king" quickly, even with no local model file downloadedGoogle 공동 작업 Python 노트북에서 이것의 데모로 놀 수 있습니다.
이 기능은 컴퓨팅 환경이 리소스 제약 (낮은 RAM 및 낮은 디스크 공간) 인 경우 매우 유용하거나 대형 모델 파일을 다운로드하고 설정하지 않고 벡터로 빠르게 실험하려고하거나 작은 모델을 훈련시키고 자합니다. 데이터가 스트리밍되기 때문에 추가 된 네트워크 대기 시간이 추가되지만, 크기는 lazy_loading 생성자 매개 변수로 지정된대로 인 메모리 캐시를 사용합니다. 언어는 일반적으로 ZIPF-AIA 분포를 가지고 있으므로 적은 쿼리 후 캐시가 따뜻해지면 네트워크 대기 시간이 크게 문제가되지 않아야합니다.
HTTP 범위 요청 헤더를 사용하여 정적 HTTP 웹 서버에서 직접 쿼리됩니다. 그러나 모든 크기 방법은 스트리밍을 지원하지만 most_similar 및 most_similar_approx 아직 스트리밍에 최적화되지 않았으므로 느리게 될 수 있습니다. 이 스트리밍 모드는 현재 벤치 마크에서 어떻게 수행되는지 알 수 있지만 향후 최적화함에 따라 더 빠르게 진행됩니다!
현재 다른 문서를 사용할 수 없습니다. 메소드의 인수에 대한 자세한 정보가 필요하거나 지원되는 모든 기능을보고 싶다면 소스 파일을 직접 확인하십시오 (잘 댓글이 잘 표시됨).
현재이 페이지에서 .magnitude 형식으로 사전 전환 된 영어 단어 벡터 모델 만 제공합니다. 그러나 여전히 다른 언어의 단어 벡터와 함께 크기를 사용할 수 있습니다. Facebook은 다양한 언어에 대해 FastText 벡터를 교육했습니다. 원하는 언어에 대해 .vec 파일을 다운 한 다음 변환기와 함께 .magnitude 로 변환 할 수 있습니다.
현재, 읽기 규모 파일은 기계 학습의 사실상 언어가 되었기 때문에 파이썬에서만 지원됩니다. 이것은 대부분의 사용 사례에 충분합니다. SQLITE가 기본 C 구현을 가지고 있으며 대부분의 언어로 바인딩이 있기 때문에 파일 형식을 다른 언어로 확장하는 것은 어렵지 않아야합니다. 파일 형식 자체와 읽기 및 검색 프로토콜 도이 저장소의 소스 코드를 읽을 때 매우 간단합니다.
현재 자연어 처리는 Word 벡터 표현에 미리 훈련 된 벡터 임베딩 모델을 사용하는 가장 인기있는 영역입니다. 그러나 이미지 표현을 위해 Deep1B와 같은 미리 훈련 된 벡터 임베딩 모델을 사용하기 시작한 컴퓨터 비전과 같은 다른 도메인이 있습니다. 이 라이브러리는 다양한 도메인에 대한 불가지성을 유지하고 대신 모든 도메인에 유용한 일반적인 키 벡터 저장소 및 인터페이스를 제공합니다.
이 프로젝트의 주요 저장소는 Gitlab에서 찾을 수 있습니다. Github 저장소는 거울 일뿐입니다. 더 많은 테스트 요청, 더 나은 오류 확인, 버그 수정, 성능 개선 또는 문서화 또는 추가 유도 / 기능 추가를 Gitlab에서 사용하십시오.
[email protected]로 문의하십시오.
most_similar_approx 스트리밍에 최적화하십시오most_similar 조회의 제약 조건을 제거하는 "우스 우스"향료를 추가하십시오..bin 형식을 지원합니다 most_similar_approx 의 대략적인 가장 가까운 이웃 알고리즘에 힘을 발휘합니다. 크기와 성가신 사이의 통합 세부 사항을 도와 준 저자 Erik Bernhardsson에게 감사드립니다. EMNLP 2018에서 본 논문을 인용하려면 다음 Bibtex 인용을 사용할 수 있습니다.
@inproceedings{patel2018magnitude,
title={Magnitude: A Fast, Efficient Universal Vector Embedding Utility Package},
author={Patel, Ajay and Sands, Alexander and Callison-Burch, Chris and Apidianaki, Marianna},
booktitle={Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing: System Demonstrations},
pages={120--126},
year={2018}
}또는 Google Scholar 링크를 따라 다른 방법은 논문을 인용 할 수 있습니다.
이 저장소를 인용하려면 다음 doi 배지를 사용할 수 있습니다.
배지를 클릭하면 적절한 Bibtex 인용, JSON-LD 인용 및 기타 인용을 생성하는 데 도움이되는 페이지로 이어집니다.
이 저장소는 여기에있는 라이센스에 따라 라이센스가 부여됩니다.
명사 프로젝트의 Johnnyzi의 "지진"아이콘.