데이터를 NLP에서 단어 임베딩으로 변환하는 경우
단어 임베딩을 사용하여 네트워크를 훈련 할 때 임베딩 레이어를 추가하여 먼저 입력 벡터를 임베딩으로 변환하는 것이 표준입니다.
그러나 임베딩이 사전 훈련되고 고정되었다고 가정하면 다른 옵션이 있습니다. 학습 데이터를 모델에 제공하기 전에 간단히 전처리하여 이미 임베딩으로 변환되도록 할 수 있습니다. 이 변환은 각 에포크에 대해 즉석에서 수행하는 것과 달리 한 번만 수행하면되므로 훈련 속도가 빨라집니다.
따라서 두 번째 옵션이 더 좋아 보입니다. 그러나 첫 번째 선택이 더 일반적으로 보입니다. 임베딩이 사전 훈련되고 고정되었다고 가정하면 두 번째 옵션보다 첫 번째 옵션을 선택할 수있는 이유가 있습니까?
답변
훈련 중에 많은 데이터를 이동해야하는 경우 (예 : 디스크 / 네트워크에서 배치 검색 / 당신이 가지고있는 것), [배치, 문서, 인덱스]의 3 위 텐서보다 순위보다 훨씬 빠릅니다. -4 텐서의 [배치, 문서, 색인, 벡터]. 이 경우 임베딩은 어디에 두든 O (1)이지만 그래프의 일부로하는 것이 더 효율적입니다.
말뭉치에서 단어 임베딩을 얻는 방법에는 여러 가지가 있습니다.
- Count Vectorizer :
CountVectorizer()
fromsklearn.feature_extraction.text
을 사용fit_transform()
하고 말뭉치가 문장 목록으로 변환 된 경우 사용할 수 있습니다. - TF-IDF Vectorizer :
TfidfVectorizer
fromsklearn.feature_extraction.text
을 사용한 다음fit_transform()
문장 목록에서 다시 사용할 수 있습니다. - word2vec : 를 사용하여
word2vec
모델을 만들 수 있습니다 .gensim.models
word2vec.Word2vec
모델이 제공하는 단어 사전이 사전 학습 된 임베딩의 하위 집합 (예 : Google의 사전 학습 된 word2vec)이라고 가정하면 모델이 해당 크기의 크기를 처리 할 수 있다면 이러한 임베딩을 따르는 것이 더 나은 옵션 일 수 있습니다. .
그러나 때로는 문제의 성격을 고려할 때 항상 최선의 해결책이 아닐 수도 있습니다. 예를 들어 희귀하고 특수한 단어가 포함 된 의료 텍스트에 NLP를 사용하려는 경우 적절한 데이터 크기 또는 둘 모두가 있다고 가정하고 임베딩 레이어를 사용해야 할 수 있습니다. 그것은 단지 내 생각입니다. 물론 임베딩 레이어를 제안해야하는 여러 다른 사용 사례가있을 수 있습니다.