문장에있는 토큰의 word2vec에서 문장에 대한 벡터를 얻는 방법
word2vec를 사용하여 큰 문서에서 토큰 목록에 대한 벡터를 생성했습니다. 문장이 주어지면 문장의 토큰 벡터에서 문장의 벡터를 얻을 수 있습니까?
문장 벡터를 얻는 다른 방법이 있습니다.
- Doc2Vec : Doc2Vec을 사용하여 데이터 세트를 훈련 한 다음 문장 벡터를 사용할 수 있습니다.
- Word2Vec 벡터의 평균 : 문장에있는 모든 단어 벡터의 평균을 구할 수 있습니다. 이 평균 벡터는 문장 벡터를 나타냅니다.
- TF-IDF를 사용하는 Word2Vec 벡터의 평균 : 이것이 제가 권장하는 최선의 방법 중 하나입니다. 단어 벡터에 TF-IDF 점수를 곱하면됩니다. 평균을 취하면 문장 벡터를 나타냅니다.
문장의 벡터를 얻는 방법에는 여러 가지가 있습니다. 각 접근 방식에는 장점과 단점이 있습니다. 하나를 선택하는 것은 벡터로 수행하려는 작업에 따라 다릅니다.
먼저 word2vec의 벡터를 평균화 할 수 있습니다. Le and Mikolov 에 따르면 ,이 접근 방식은 "표준 bag-of-words 모델과 동일한 방식으로 단어 순서를 잃고" "많은 정교한 언어 현상을 인식하지 못하기 때문에 감정 분석 작업에 적합하지 않습니다." 예를 들어 풍자 ". 반면에 Kenter et al. 2016 , "단순 텍스트 유사성 작업과 같이 텍스트에있는 모든 단어의 평균 단어 임베딩은 여러 작업에서 강력한 기준 또는 기능으로 입증되었습니다." 변형은 가장 일반적인 단어의 영향을 줄이기 위해 TF-IDF로 단어 벡터에 가중치를 부여하는 것입니다.
Socher et al.에 의해 개발 된보다 정교한 접근 방식 . 행렬-벡터 연산을 사용하여 문장의 구문 분석 트리에 지정된 순서대로 단어 벡터를 결합하는 것입니다. 이 방법은 구문 분석에 의존하기 때문에 문장 감정 분석에 적합합니다.
가능하지만 word2vec에서는 불가능합니다. 문장 (그리고 단락과 문서에 대한 더 높은 수준의 표현)을 얻기위한 단어 벡터의 구성은 정말 활발한 연구 주제입니다. 이를 수행하는 최선의 해결책은 없습니다. 실제로 이러한 벡터를 적용하려는 작업에 따라 다릅니다. 연결, 단순 합산, 점별 곱셈, 컨볼 루션 등을 시도 할 수 있습니다. 이에 대해 배울 수있는 여러 출판물이 있지만 궁극적으로 실험하고 가장 적합한 것을 확인하면됩니다.
사용법에 따라 다릅니다.
1) 알려진 데이터에 대한 문장 벡터 만 얻으려는 경우. 다음 문서에서 단락 벡터를 확인하십시오.
Quoc V. Le와 Tomas Mikolov. 2014. 문장과 문서의 분산 된 표현. Eprint Arxiv, 4 : 1188–1196.
AM Dai, C. Olah 및 QV Le. 2015. 단락 벡터를 사용한 문서 임베딩. ArXiv e- 프린트, 7 월.
2) 모델이 감독되지 않은 접근 방식으로 알려지지 않은 (테스트) 문장에 대한 문장 벡터를 추정하도록하려면 :
이 문서를 확인할 수 있습니다.
3) 연구원은 또한 RNN 또는 LSTM 네트워크에서 특정 계층의 출력을 찾고 있습니다. 최근 예는 다음과 같습니다.
http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195
4) gensim doc2vec의 경우 많은 연구자들이 사전 훈련 된 단어 벡터를 기반으로 doc2vec을 사용한 논문에 따라이 문제를 극복하기 위해 좋은 결과를 얻지 못했습니다.
Facebook에는 문장 벡터의 품질을 평가하기위한 SentEval 프로젝트가 있습니다.
https://github.com/facebookresearch/SentEval
6) 다음 문서에 더 많은 정보가 있습니다.
의역 식별, 시맨틱 텍스트 유사성, 자연어 추론 및 질문 응답을위한 신경망 모델
그리고 지금은 'BERT'를 사용할 수 있습니다.
Google은 사전 학습 된 모델과 함께 소스 코드를 출시합니다.
https://github.com/google-research/bert
다음은 bert를 서비스로 실행하는 예입니다.
https://github.com/hanxiao/bert-as-service
훈련 단계에서 문장의 벡터 표현을 얻을 수 있습니다 (테스트에 참여하고 문장을 단일 파일로 훈련시키고 다음 링크에서 얻은 word2vec 코드 실행).
문장 2vec에 대한 코드는 여기에서 Tomas Mikolov에 의해 공유되었습니다 . 줄의 첫 단어를 문장 ID로 가정합니다. 다음을 사용하여 코드 컴파일
gcc word2vec.c -o word2vec -lm -pthread -O3 -march=native -funroll-loops
사용하여 실행하십시오.
./word2vec -train alldata-id.txt -output vectors.txt -cbow 0 -size 100 -window 10 -negative 5 -hs 0 -sample 1e-4 -threads 40 -binary 0 -iter 20 -min-count 1 -sentence-vectors 1
편집하다
Gensim (개발 버전)은 새로운 문장의 벡터를 추론하는 방법을 가지고있는 것 같습니다. https://github.com/gojomo/gensim/blob/develop/gensim/models/doc2vec.py 에서 model.infer_vector(NewDocument)
방법을 확인 하십시오.
나는 좋은 결과를 얻었다 :
- 단어 벡터를 합산합니다 (tf-idf 가중치 사용). 이것은 단어 순서를 무시하지만 많은 응용 프로그램에 충분합니다 (특히 짧은 문서의 경우).
- Fastsent
Google의 Universal Sentence Encoder 임베딩은이 문제에 대한 업데이트 된 솔루션입니다. Word2vec을 사용하지 않지만 경쟁 솔루션이됩니다.
다음은 TFHub 및 Keras에 대한 설명 입니다.
DAN (Deep averaging network)은 단어 바이그램이 평균화되고 피드 포워드 심층 신경망 (DNN)을 통해 전달되는 문장 임베딩을 제공 할 수 있습니다.
문장 임베딩을 사용하는 전이 학습은 의미 관계를 보존하기 때문에 단어 수준 전이를 능가하는 경향이 있습니다.
학습을 처음부터 시작할 필요가 없으며 사전 학습 된 DAN 모델을 열람 할 수 있습니다 (Google 허브의 Universal Sentence Encoder 모듈 확인).
'Program Tip' 카테고리의 다른 글
모델을 통해 입력 자리 표시 자의 값을 변경 하시겠습니까? (0) | 2020.11.26 |
---|---|
파이썬에서 for 루프 피라미드를 더 간결하게 만들려면 어떻게해야합니까? (0) | 2020.11.26 |
Swift XCTest UI에서 테스트 사이에 앱을 재설정하는 방법이 있습니까? (0) | 2020.11.26 |
다른 유형에 대한 반복 (0) | 2020.11.26 |
값에 따라 DataGrid 셀 색상 변경 (0) | 2020.11.26 |