전체 문서에 단어 포함을 적용하여 피처 벡터를 얻습니다.


38

지도 학습에 사용하기에 적합한 단어를 포함하여 문서를 기능 벡터에 매핑하려면 어떻게해야합니까?

워드 삽입은 각각의 워드를 맵핑 벡터에 여기서, 일부하지 너무나 많은 수 (예를 들어, 500)이다. 널리 사용되는 단어 포함word2vecGlove 입니다.v R d dwvRdd

문서를 분류하기 위해지도 학습을 적용하고 싶습니다. 현재 bag-of-words 표현을 사용하여 각 문서를 지형지 물 벡터에 매핑 한 다음 상용 분류기를 적용하고 있습니다. 단어 묶음 기능 벡터를 기존의 사전 훈련 된 단어 포함을 기반으로하는 단어로 바꾸고 단어 포함에 포함 된 의미 지식을 활용하고 싶습니다. 그렇게하는 표준 방법이 있습니까?

몇 가지 가능성을 상상할 수 있지만 가장 적합한 것이 있는지 모르겠습니다. 내가 고려한 후보자 접근법 :

  • 문서의 각 단어에 대한 벡터를 계산하고 평균을 구할 수 있습니다. 그러나 이것은 많은 정보를 잃을 수도 있습니다. 예를 들어, bag-of-words 표현을 사용하여 분류 작업과 관련성이 높은 단어가 거의없고 대부분의 단어가 관련이없는 경우 분류자는 쉽게이를 배울 수 있습니다. 문서의 모든 단어에 대한 벡터의 평균을 구하면 분류자가 기회가 없습니다.

  • 모든 단어의 벡터를 연결하면 고정 크기의 피처 벡터가 생성되지 않으므로 작동하지 않습니다. 또한 단어의 특정 배치에 지나치게 민감하기 때문에 나쁜 생각처럼 보입니다.

  • 나는 단어 임베딩을 사용하여 모든 단어의 어휘를 1000 개의 클러스터와 같은 고정 된 클러스터 세트로 묶을 수 있는데, 여기서 단어 유사성의 척도로 벡터에 코사인 유사성을 사용합니다. 그런 다음, bag-of-words 대신에 bag-of-clusters를 가질 수 있습니다. 분류기에 제공하는 기능 벡터는 1000- 벡터 일 수 있습니다. 여기서 번째 구성 요소는 문서의 단어 수를 계산합니다. 클러스터 일부입니다 .내가ii

  • 단어 주어지면 이러한 단어 임베딩을 사용하면 가장 유사한 상위 20 개의 단어 및 유사성 점수 있습니다. 이것을 사용하여 bag-of-words와 같은 특징 벡터를 조정할 수 있습니다. I 단어 보면 단어에 대응하는 소자 증가에 부가하여, 하여 , I는 단어에 대응하는 요소가 증가 할 수 의해 단어에 대응하는 요소 증분 의해 등.w (1) , ... , w (20)1 , ... , s의 20 w w 1 w 1 1 w 2 S 2ww1,,w20s1,,s20ww1w1s1w2s2

문서 분류에 효과적 일 수있는 특정 접근 방법이 있습니까?


단락 2vec 또는 doc2vec를 찾고 있지 않습니다. 그것들은 큰 데이터 코퍼스에 대한 훈련이 필요하며, 큰 데이터 코퍼스는 없습니다. 대신 기존 단어 임베딩을 사용하고 싶습니다.


1
사전 훈련 된 임베딩을 사용하여 문서를 표현하는 특정 방법을 결정 했습니까? 아마도 이것이 조금 도움 될 수 있습니까?
turdus-merula

1
@ user115202, 깔끔하다! 그것은 내가 가진 문제를 완전히 해결하지는 못하지만 알만한 가치가있는 영리한 아이디어입니다. 지적 해 주셔서 감사합니다! 나는 단순히이 단어를 사용하는 것보다 훨씬 더 좋은이 문제에 대한 아주 좋은 해결책을 찾지 못했습니다. 어쩌면 이것은 단어 삽입이 잘되지 않는 것일 수도 있습니다. 감사!
DW

이것은 또한 문제와 관련이 있으며 아마도 이전보다 조금 더 중요합니다 . 가중 단어 포함 집계를 사용하여 매우 짧은 텍스트에 대한 표현 학습 .
turdus-merula


1
RNN을 사용하지 않는 이유는 무엇입니까? 가변 길이 문서는 RNN의 문제가 아닙니다. wildml.com/2015/09/…
kalu

답변:


23

짧은 텍스트 (예 : 문장 또는 트윗)에 대해 합리적으로 잘 작동하는 간단한 기술 중 하나는 문서의 각 단어에 대한 벡터를 계산 한 다음 좌표 별 평균, 최소 또는 최대를 사용하여 집계하는 것입니다.

nv1,v2,,vnRd최대 ( v 1 , , v n ) u u i = 최소 ( v 1 i , , v n i ) R 2 dmin(v1,,vn)max(v1,,vn)uui=min(vi1,,vin), 마찬가지로 최대 특징 벡터는이 두 벡터의 연결이므로 에서 특징 벡터를 얻습니다 . 이것이 bag-of-words 표현보다 낫거나 나쁜지 모르겠지만 짧은 문서의 경우 bag-of-words보다 성능이 좋을 것으로 예상되며 사전 훈련 된 단어 임베딩을 사용할 수 있습니다.R2d

TL; DR : 놀랍게도, 최소와 최대의 연결은 합리적으로 잘 작동합니다.

참고:

가중 단어 포함 집계를 사용하여 매우 짧은 텍스트에 대한 표현 학습. 세드릭 드 붐, 스티븐 반 카니 넷, 토마스 데메 스터, 바트 드 호트 패턴 인식 문자; arxiv : 1607.00570. 초록 , pdf . 특히 표 1과 2를 참조하십시오.

크레디트 :이 문서를 주목 해 주신 @ user115202에게 감사드립니다.


4
짧은 텍스트의 경우 평균 / 분 / 최대가 잘 작동 할 수 있지만 뉴스 기사와 같이 긴 텍스트는 어떻게됩니까?
아보카도

1
그 논문을 읽고 나처럼 혼란스러워하는 사람에게는 @DW가 언급 한 접근 방식에 초점을 맞추지 않고 "5.1. 기준선"아래에서 간단히 기준 접근 방식으로 언급합니다. 논문의 본문은 여기에 설명 된 접근 방식보다 훨씬 더 복잡한 임베딩을 사용하여 분류기를 훈련시키는 자체 기술에 중점을 둡니다!
Migwell

16

word2vec와 유사한 doc2vec를 사용하고 큰 말뭉치에서 사전 훈련 된 모델을 사용할 수 있습니다. 그런 다음 .infer_vector()gensim 과 같은 것을 사용 하여 문서 벡터를 구성하십시오. doc2vec 훈련은 훈련 세트에서 올 필요가 없습니다.

또 다른 방법은 RNN, CNN 또는 피드 포워드 네트워크를 사용하여 분류하는 것입니다. 이것은 효과적으로 단어 벡터를 문서 벡터로 결합합니다.

스파 스 피처 (워드)와 치밀한 (워드 벡터) 피처를 결합하여 서로 보완 할 수도 있습니다. 따라서 특징 행렬은 희소 한 단어의 백 행렬과 평균 단어 벡터를 연결 한 것입니다. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html

또 다른 흥미로운 방법은 word2vec와 유사한 알고리즘을 사용하지만 대상 단어를 예측하는 대신 대상 레이블을 예측할 수 있습니다. 이는 분류 작업에 맞게 단어 벡터를 직접 조정합니다. http://arxiv.org/pdf/1607.01759v2.pdf

더 많은 임시 방법을 사용하려면 구문에 따라 단어를 다르게 계량 해 볼 수 있습니다. 예를 들어, 결정자보다 동사를 더 강하게 계량 할 수 있습니다.


6

영어 텍스트로 작업하고 있고 사전 훈련 된 단어 포함을 시작 하려면 https://code.google.com/archive/p/word2vec/ 를 참조하십시오.

이것은 word2vec의 원래 C 버전입니다. 이 릴리스와 함께 Google 뉴스 기사에서 가져온 1000 억 단어에 대한 훈련 된 모델도 발표했습니다 ( "사전 훈련 된 단어 및 구문 벡터"제목 참조).

문서 삽입을 위해 단어 삽입 작업에 대한 나의 의견과 경험에서 doc2vec (CBOW 포함)와 같은 모델은 단어 모음보다 훨씬 잘 작동합니다.

작은 말뭉치가 있으므로 위에서 언급 한 사전 훈련 된 임베딩으로 단어 임베딩 매트릭스를 초기화하는 것이 좋습니다. 그런 다음 doc2vec 코드에서 단락 벡터를 학습하십시오. 파이썬에 익숙하다면 gensim 버전을 확인하면 매우 쉽게 수정할 수 있습니다.

또한 word2vec / doc2vec : http://arxiv.org/abs/1411.2738 의 내부 동작을 자세히 설명하는이 백서를 확인하십시오 . 이것은 gensim 코드를 이해하는 것을 매우 쉽게 만듭니다.


1
제안 해 주셔서 감사합니다. 나는 단어 임베딩을 요구하지 않습니다. 미리 훈련 된 단어 임베딩을 얻는 방법을 이미 알고 있습니다 (제 질문에 word2vec를 언급했습니다). 내 질문은 사전 훈련 된 단어 임베딩에서 기능 벡터를 구성하는 방법입니다. 나는 doc2vec에 대한 참조를 높이 평가하지만, 내 코퍼스는 매우 작기 때문에 doc2vec 코드를 훈련하려고 시도하면 과도하게 잘 수행되지 않을 것입니다 (사전 훈련 된 임베딩으로 행렬을 초기화하더라도).
DW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.