텍스트 분류 : 다른 종류의 기능 결합


19

내가 다루는 문제는 짧은 텍스트를 여러 클래스로 분류하는 것입니다. 내 현재 접근 방식은 tf-idf 가중 항 주파수를 사용하고 간단한 선형 분류기 (로지스틱 회귀)를 배우는 것입니다. 이것은 합리적으로 잘 작동합니다 (테스트 세트에서 약 90 % 매크로 F-1, 훈련 세트에서 거의 100 %). 큰 문제는 보이지 않는 단어 / n- 그램입니다.

분포 특징을 사용하여 계산 된 고정 크기의 벡터 (word2vec로 계산) 또는 예제의 다른 범주 기능을 추가하여 분류기를 개선하려고합니다. 내 생각은 단어 모음에서 스파 스 입력 기능에 기능을 추가하는 것이 었습니다. 그러나 이로 인해 테스트 및 교육 세트에서 성능이 저하됩니다. 추가 기능 자체는 테스트 세트에서 약 80 %의 F-1을 제공하므로 쓰레기가 아닙니다. 기능을 확장해도 도움이되지 않았습니다. 나의 현재 생각은 이러한 종류의 기능이 (단순한) 단어 기능과 잘 섞이지 않는다는 것입니다.

문제는 추가 기능이 추가 정보를 제공한다고 가정하면이를 통합하는 가장 좋은 방법은 무엇입니까? 별도의 분류자를 훈련시키고 어떤 종류의 앙상블 작업으로 결합 할 수 있습니까? 고려해야 할 더 복잡한 다른 모델이 있습니까?


3
일부 업데이트 : 추가 밀도 벡터를 l2 정규화하여 허용 가능한 결과를 얻을 수있었습니다. 나는 Sklearn StandardScaler가 그렇게 할 것이라고 잘못 가정했습니다. 그래도 레이블 종속성을 모델링하거나 하위 분류 자의 신뢰도를 통합 할 수있는 더 복잡한 방법을 찾고 있습니다.
elmille

나는 작년에 동일한 실험을 기본으로했고 정확히 같은 문제를 겪었습니다. l2 정규화 프로세스 후 word2vec 벡터가 BOW를 이길 수 있습니까? l2 정규화를 수행하지는 않았지만 많은 사후 처리 방법 의미 벡터를 테스트 한 후에도 여전히 BOW tf / idf 기능보다 2-4 절대 퍼센트입니다. 저의 원래 추구는 밀도가 높은 의미 론적 벡터와 전통적인 BOW를 결합하여 주제 분류 / 모델링 성능을 향상시킬 수 있는지 확인하는 것입니다. BTW : 어떤 데이터 세트를 작업하고 있습니까?

CIKM 2014 경쟁을위한 데이터 세트를 사용하고있었습니다. 나를 위해, 벡터 표현은 tf-idf 가중치로 BOW를 이길 수 없었습니다. 저의 계획은 품질을 향상시키기 위해 그것들을 사용하는 것이 었습니다. 내 경험 (텍스트 분류)에서 tf-idf + n 그램이있는 선형 모델의 형태는 매우 강력한 접근 방식입니다. 나는 현재 컨볼 루션 신경망과 심지어 이길 수없는 복잡한 모델을 실험하고 있습니다.
elmille

모드 : 50 평판이 없어서 죄송합니다. 댓글 영역에 쓸 수 없습니다. 안녕 elmille : 그렇습니다, 그것은 내가 모든 시험에서 경험하는 것입니다. 그러나 vec + BOW 도움말이라는 단어가 있습니까? 내 경험에 따르면, 단어 vec를 BOW tf-idf와 연결하면 (이 경우 vec는 실제로 전체 기사 내에서 단어 vec가 아니지만 매우 유사한 전체 벡터입니다) 성능이 훨씬 떨어집니다. 원래 BOW + vec> BOW> vec 여야한다고 생각합니다. 상호 보조 정보가 포함되어 있기 때문입니다. 실제로 결과는 BOW> vec> BOW + vec입니다. 그런 다음 표준 스케일링 및 정규화를 수행하여 절 및 vec

답변:


13

올바르게 이해하면 기본적으로 모델에 대한 두 가지 형태의 기능이 있습니다. (1) 희소 한 단어 모음으로 표현한 텍스트 데이터 및 (2) 더 전통적인 조밀 한 기능. 이 경우 3 가지 일반적인 접근 방식이 있습니다.

  1. TruncatedSVD희소 데이터에서 차원 축소 (예 : LSA via )를 수행하여 밀도를 높이고 피쳐를 단일 밀도 매트릭스로 결합하여 모델을 훈련시킵니다.
  2. scipy와 같은 것을 사용 hstack하여 모델을 훈련 시키기 위해 희소 행렬에 몇 가지 고밀도 기능을 추가하십시오 .
  3. 희소 텍스트 데이터 만 사용하여 모델을 만든 다음 예측 (분류 인 경우 확률)을 조밀 한 기능으로 다른 조밀 한 기능과 결합하여 모델을 만듭니다 (예 : 스태킹을 통해 조립). 이 경로를 사용하면 모델을 훈련시키는 기능으로 CV 예측 만 사용하는 것을 기억하십시오 Pipeline.

세 가지 접근 방식 모두 유효하며 자체 장단점이 있습니다. 개인적으로, 나는 (1)이 비교적 느리기 때문에 일반적으로 최악이라고 생각합니다. 또한 (3)은 일반적으로 최고이며, 충분히 빠르며 예측이 매우 좋습니다. 좀 더 광범위한 조합을 기꺼이 원한다면 분명히 그 조합을 수행 할 수 있습니다.

사용하는 알고리즘은 기본적으로 모두 해당 프레임 워크에 맞을 수 있습니다. 로지스틱 회귀 분석은 대부분 놀랍게도 잘 수행되지만, 문제에 대한 조정 및 조정 방법에 따라 다른 작업이 더 잘 수행 될 수 있습니다. GBM에 대해서는 부분적이지만, 결론은 원하는만큼 많은 알고리즘을 시도 할 수 있으며 예측의 간단한 가중치 앙상블을 수행해도 거의 항상 전체 솔루션이 더 좋아질 것입니다.


10

선형 모델은 단순히 해당 가중치를 곱한 기능을 추가합니다. 예를 들어, 각 인스턴스에서 3 개 또는 4 개만 활성화 된 스파 스 피처가 1000 개이고 다른 인스턴스가 0 인 경우와 0이 아닌 20 개의 밀도가있는 경우 밀도가 높은 기능이 스파 스 기능이 미치는 영향은 약간만 가치가 있습니다. 몇 가지 인스턴스에 대한 기능 가중치와 결과 합계에 미치는 영향을 확인하여이를 확인할 수 있습니다.

이를 해결하는 한 가지 방법은 추가 모델에서 벗어나는 것입니다. 다음은 몇 가지 후보 모델입니다.

SVM 은 분리 초평면을 기반으로합니다. 하이퍼 플레인은 선형 모델 자체이지만 SVM은 매개 변수를 요약하지 않고 대신 최적의 방식으로 피쳐 공간을 분할하려고합니다. 기능의 수를 감안할 때 선형 SVM은 잘 작동하지만 더 복잡한 커널은 데이터를 과도하게 맞추는 경향이 있습니다.

이름에도 불구하고 Naive Bayes 는 텍스트 분류에 좋은 결과를 보여주는 매우 강력한 통계 모델입니다. 또한 스파 스 및 밀도가 높은 기능의 주파수 불균형을 포착 할 수있을만큼 유연하므로 반드시 시도해보아야합니다.

마지막으로 임의의 포리스트 는이 경우 좋은 앙상블 방법으로 작동 할 수 있습니다. 무작위 화는 서로 다른 종류의 기능 (희소 / 밀도)이 다른 트리에서 기본 결정 노드로 사용되도록합니다. RF / 결정 트리는 또한 기능 자체를 검사하는 데 유용하므로 구조를 주목할 가치가 있습니다.

이 모든 방법에는 단점이 있으므로 귀하의 경우에는 쓰레기로 만들 수 있습니다. 드문 드문 고밀도 기능을 결합하는 것은 실제로 잘 연구되지 않은 작업이므로 이러한 접근법 중 어떤 것이 귀하의 경우에 가장 적합한 지 알려주십시오.


답변 주셔서 감사합니다! 다음 두 가지 후속 질문이 있습니다. 1) SVM (선형 커널 사용)과 Naive Bayes는 기능과 해당 가중치를 합산하지 않는다는 점에서 어떻게 다른가? 둘 다 효과적으로 분리 초평면을 생성하므로 결과에 항상 가중치를 곱한 기능이 추가되지 않습니까? 2) 임의의 포리스트를 시도하고 싶지만 불행히도 지형 공간이 너무 커서 밀도가 높은 형식으로 표현하기가 어렵습니다 (sklearn을 사용하고 있습니다). 그것을 처리 할 수있는 구현이 있습니까?
elmille

1) 선형 회귀 분석에서는 초평면의 점 관심이 있으므로 가중 피처를 추가하여 예측 점을 얻습니다. 반면 SVM에서는 초평면 측면 의 점 찾고 있습니다. 예를 들어 어느 쪽이 예시인지 간단히 확인하여 분류를 수행하며 예측 중에는 합산이 없습니다. Naive Bayes는 다른 종류의 모델 (예 : 이항 또는 다항식)을 통합 할 수 있지만 기본적으로 확률을 곱하지 않고 추가합니다.
ffriend

2) 나는이 주제에서 약간의 연구를 보았지만 구현에 결코 직면하지 않았다 (아마도 인터넷 검색은 여기에 링크를 줄 것이다). 그러나 항상 다른 방식으로 진행할 수 있습니다. 예를 들어 PCA를 사용하여 차원을 줄인 다음 축소 된 데이터 집합을 기반으로 임의 포리스트를 실행하십시오.
ffriend
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.