머신러닝에서의 텍스트 분류 알고리즘

주요 ML 문제 중 하나는 텍스트 분류입니다. 예를 들어 스팸을 감지하거나 뉴스 기사의 주제를 정의하거나 다중 값 단어의 올바른 마이닝을 선택하는 데 사용됩니다. 이 글에서 머신러닝의 텍스트 분석에 대해 더 깊이 알아 봅니다.

최고의 텍스트 분류기를 정의하는 것이 불가능하다는 것을 알고있을 것입니다. 컴퓨터 비전과 같은 분야에서는 모델을 설계하는 일반적인 방법, 즉 잔여 연결(residual connection)이 많은 심층 네트워크에 대해서는 확고히 정리가 되어있습니다. 그와 달리 텍스트 분류는 좁은 영역에서 아직 정리가 되어 있지 않습니다.

이 글에서는 텍스트 분류기 알고리즘과 그 사용 사례의 몇 가지 주요 일반화된 접근법에 초점을 맞춥니다. 고수준의 토론과 함께 우리는 자신만의 모델을 구축하는 데 도움이 되는 실습 자습서 및 도구 모음을 제공합니다.

텍스트 분류 벤치 마크

TF-IDF 기능과 Linear SVM, word2vec 및 주의 기반 신경 구조에 이르는 텍스트 마이닝에 중점을 둔 최신 머신러닝 실습 도구로 진행합니다.

특정 방법의 효과가 입증된 두 가지 사례(연구 및 경쟁)를 구별하는 것이 중요합니다.

연구자가 텍스트 분류 알고리즘을 비교할 때, 그들은 동일한 문제에 대한 다른 많은 시도와 결과를 비교할 수있는 잘 알려진 데이터세트에 대해 약간의 트릭을 추가하여 그대로 사용합니다.

잘 알려진 텍스트 분류 벤치 마크 :
  • AG’s news articles

  • Sogou news corpora

  • Amazon Review Full

  • Amazon Review Polarity

  • DBPedia

  • Yahoo Answers

  • Yelp Review Full

  • Yelp Review Polarity

다운로드 할 수 있도록 구글 드라이브의 특정 폴더에 업로드를 해두었습니다.

깊이 대 얕은 학습

NLP 연구에서 널리 채택된 데이터세트에 대한 정말 놀라운 점은 간단하고 복잡한 모델 모두 잘 작동한다는 것입니다. 이것을 보여주기 위해 두 개의 논문을 논의해 보겠습니다.

두 경우의 데이터세트는 동일하며 정밀도 측면에서의 결과는 모든 실험에서 대략 동일합니다. 그러나 훈련과 추론 시간은 이 둘 사이에서 크게 다릅니다.

첫 번째 모델은 말 그대로 초훈련을 필요로하는 반면, 두 번째 모델은 몇 시간을 필요로하며, 이는 hyperparameter를 선택할 때 게임 체인저가 될 것입니다.

 

 

이 접근법을 흥미롭게 만드는 것은 이 모델이 데이터에 대해 어떤 가정도 하지 않는다는 것입니다. 최하위 레벨에서는 텍스트를 일련의 문자로 취급하므로 convolutional layer가 완전히 내용을 인식하지 못하는 방식으로 기능을 구성 할 수 있습니다.

두 번째 논문은 CPU에서 빠르게 작동하도록 설계된 훨씬 가벼운 모델을 특징으로하며 embedding layer와 softmax classifier로 구성됩니다.

다른 한편, Kaggle에서 성공한 솔루션을 살펴보면, 고도로 맞춤화된 복잡한 ensemble이 지배적이라는 것을 알 수 있습니다.

가장 좋은 사례는 최근의 Quora Question Pairs 경쟁과 지속적인 DeepHack.Turing입니다 . 최상위 솔루션은 여러 가지 모델로 구성됩니다 : gradient boosting machine, RNN, CNN.

우리가 여기서 배울 수있는 실용적인 교훈은 연구에서 발표된 특정 방법의 결과에도 불구하고 특정 작업으로부터 최상의 성능을 얻는 것이 과학보다는 기술에 가깝고 복잡한 파이프 라인을 신중하게 조정해 한다는 것입니다.

이 연구와 현저한 대조는 Kaggle에서 우승한 솔루션에 대한 기사에서 볼 수 있습니다 .

신경망 기반 텍스트 분류기는 일반적으로 동일한 선형 메타 아키텍처를 따릅니다.
  • Embedding

  • Deep representation

  • Fully connected part

Embedding

Embedding layer는 일련의 단어 ID를 입력으로 사용하여 해당 벡터의 시퀀스를 출력으로 생성합니다. 이들의 기능은 정말 간단하며 벡터의 실제 의미가 우리 문제에 대해 흥미롭지 않기 때문에 남은 질문은 “가중치(weight)를 초기화하는 가장 좋은 방법은 무엇입니까?”입니다.

 

 

문제에 따라 대답은 “자신의 synthetic label을 생성하고, word2vec를 열거하고, embedding layer를 초기화하십시오”라는 조언과 직관이 어긋납니다.

그러나 모든 실제적인 목적을 위해 미리 훈련된 임베딩 세트를 사용하고 특정 모델에 맞게 공동으로 미세 조정할 수 있습니다. 결과 단어 벡터가 vanilla word2vec model에서와 동일한 속성을 나타내는 것을 중단할 가능성이 있습니다.

 

 

그러나 이 경우에는 중요하지 않습니다.

여기서 제시하는 해결 방법은 사전 학습된 word2vec embedding을 사용하고 embedding layer에 더 낮은 learning rate를 사용하는 것입니다 (일반 학습 속도에 0.1을 곱함).

Deep representation

deep representation 부분의 주된 목적은 출력에서 모든 관련 정보를 응축하는 동시에 하나의 샘플을 식별 할 수 있는 부분을 억제하는 것입니다. 높은 용량을 가진 네트워크가 특정 예제에서 과장되어 테스트 세트에서 제대로 수행되지 않을 가능성이 높기 때문에 이는 매우 바람직합니다.

RNN

문제가 특정 문서 (스팸 / 스팸 아님)에 대한 단일 예측을 얻는 것으로 구성된 경우 가장 간단하고 신뢰할 수있는 아키텍처는 recurrent network의 hidden state에 적용되는 multilayer fully connected text classifier입니다. 이 상태의 의미는 부적절한 것으로 간주되며 전체 벡터는 텍스트의 압축된 설명으로 취급됩니다.

다음은 유용한 소스입니다.

• 텍스트 분류(이 경우 감정 분석)를 위해 LSTM을 사용하는 방법을 이해 하기 위한 훌륭한 출발점

• PyTorch에 대한 LSTM 자습서

• Chris Olah의 고전적인 자습서

주요 작업은 반복적인 레이어에서 수행되므로 중요한 정보만 캡처하는 것이 중요합니다. 자연어 응용 및 오픈된 과학적 문제에 자주 도전합니다.

높은 수준에서 수행 할 수있는 두 가지 작업이 있습니다.

  1. Bidirectional LSTM을 사용하십시오 . 이는 기본적으로 순차적인 “읽기”대신 각 단어 주변의 컨텍스트를 캡처하기 때문에 거의 항상 좋습니다.

  2. embedding에 transitional layer를 사용하십시오 . LSTM은 시퀀스의 중요한 부분과 중요하지 않은 부분을 구분하는 법을 배우지만, 특히 embedding을 미세 조정하지 않으면 embedding layer의 표현이 최상의 입력이라는 것을 확신 할 수 없습니다. 독립적으로 각 단어를 포함하는 레이어를 추가하면 결과를 향상시켜 간단한 주의 레이어(attention layer)로 사용할 수 있습니다.

CNN

deep text classifier를 훈련시키는 또 다른 방법은 convolutional network를 사용하는 것 입니다 . 일반적으로 충분히 큰 수용 영역이 주어지면 전용 주의 레이어(dedicated attention layer)를 사용할 때와 동일한 결과를 얻을 수 있습니다. 여기에는 하나의 트릭이 없지만 처음에는 많은 feature map을 유지하고 그 수를 기하 급수적으로 줄여 무의미한 패턴을 배제하는 데 도움이됩니다.

 

PyTorch에서 CNN classifier의 간단한 구현을 살펴보십시오 . 자체 embedding layer가있는 convolutional classifier를 학습하고 평가하는 방법을 보여줍니다.

Dense Classifier

완벽하게 연결된 부분은 deep representation에 대한 일련의 변환을 수행하고 마지막으로 각 클래스의 점수를 출력합니다. 가장 좋은 방법은 다음과 같이 변환을 적용하는 것입니다.

  1. 완전히 연결된 레이어

  2. 일괄 정규화

  3. (선택 사항) 비선형 변환 (hyperbolic tangent 또는 ELU)

  4. Dropout

보다 정교한 방법을 사용하여 신경 텍스트 분류 알고리즘에 대해 더 자세히 설명 할 수 있기를 바랍니다. 여기에 언급된 몇 가지 팁과 트릭은 더 나은 모델을 만들고 더 빠른 융합을 달성하는 데 도움이 될 것입니다.

또한 classification 및 representation learning task을 위한 자습서 및 도구에 대한 링크가 아래에 나와 있습니다.

유용한 자료

원문 : https://blog.statsbot.co/text-classifier-algorithms-in-machine-learning-acc115293278