클러스터링에 BERT 임베딩을 사용하는 방법 (감독 된 작업을위한 BERT 모델 미세 조정과 반대)
먼저 클러스터링을 수행하기 위해 BERT 임베딩을 문서 기능으로 사용하는 데 관심이 있기 때문에이 질문을하고 싶습니다. Hugging Face 라이브러리의 Transformers를 사용하고 있습니다. 각 문서가 고유 한 벡터를 갖도록 각 문서에 대한 모든 Word Piece 임베딩을 평균화하려고했습니다. 그런 다음 클러스터링에이 벡터를 사용합니다. 이것이 좋은 생각이 아니라고 생각하거나 내가 무언가를 놓치고 있거나 무언가를 이해하지 못한다면 언제든지 의견을 말하십시오.
내가 본 문제 max_length
는 Hugging Face 라이브러리에 지정된 처음 N 개의 토큰 만 사용하고 있다는 것 입니다. 처음 N 개의 토큰이 해당 문서에 대한 최상의 표현이 아니라면 어떻게됩니까? N 개의 토큰을 무작위로 선택하거나 N 개의 토큰을 10 번 무작위로 선택하는 것이 더 낫지 않을까요?
또한 WordPiece 토크 나이저를 사용하는 것이 lemmatization을 대체하는 것이므로 표준 NLP 사전 처리가 더 간단해야한다는 것을 알고 있습니다. 그러나 우리는 이미 처음 N 개의 토큰만을 사용하고 있기 때문에 불용어를 제거하지 않으면 쓸모없는 불용어가 처음 N 개의 토큰에있을 것입니다. 지금까지 Hugging Face의 예에서 토큰 화 전에는 아무도 실제로 더 많은 전처리를 수행하지 않습니다.
[(Hugging Face에서) 토큰 화 된 아래 예제, 문서의 처음 64 개 토큰]
따라서 여기에서 몇 가지 질문을하고 있습니다 (하나만 답하거나 읽을 수있는 논문 또는 리소스에 대한 참조를 제공해도됩니다).
- 처음 N 개의 토큰이 무작위가 아닌 선택되는 이유는 무엇입니까? 1a) N 개의 토큰을 무작위로 여러 번 선택하는 것이 있습니까?
- 질문 1과 마찬가지로 토큰을 선택하는 더 좋은 방법이 있습니까? 적어도 특정 쓸모없는 토큰을 배제하기 위해 토큰에 TF-IDF를 사용하고 있습니까?
- 사람들은 일반적으로 Word Piece 토크 나이저를 사용하기 전에 더 많은 전처리를 사용합니까?
- 선택이
max_length
성능에 어느 정도 영향 을 미칩니 까? - Hugging Face 라이브러리에서 최대 길이가 512 개로 제한되는 이유는 무엇입니까? 왜 가장 긴 문서의 길이를 사용하지 않습니까?
- 행렬을 얻기 위해 WordPiece 임베딩의 평균을 구하는 것이 좋은 생각입니까 (클러스터링을 수행하려는 경우)?
- BERT 임베딩을 사용하여 유사한 문서 그룹을 찾기 위해 클러스터링 할 수있는 문서에 대한 기능을 얻는 것이 좋은 생각입니까? 아니면 더 나은 다른 방법이 있습니까?
실물: 'Trump tries to smooth things over with GOP insiders. Hollywood, Florida (CNN) Donald Trump\'s new delegate guru told Republican Party insiders at a posh resort here on Thursday that the billionaire front-runner is recalibrating the part "that he\'s been playing" and is ready
토큰 화 :
['[CLS]',
'trump',
'tries',
'to',
'smooth',
'things',
'over',
'with',
'go',
'##p',
'insider',
'##s',
'.',
'hollywood',
',',
'florida',
'(',
'cnn',
')',
'donald',
'trump',
"'",
's',
'new',
'delegate',
'guru',
'told',
'republican',
'party',
'insider',
'##s',
'at',
'a',
'po',
'##sh',
'resort',
'here',
'on',
'thursday',
'that',
'the',
'billionaire',
'front',
'-',
'runner',
'is',
'rec',
'##ali',
'##bra',
'##ting',
'the',
'part',
'"',
'that',
'he',
"'",
's',
'been',
'playing',
'"',
'and',
'is',
'ready',
'[SEP]']
답변
답은 다음과 같습니다.
- 시퀀스 모델링에서 우리는 문장이 순서가있는 순서를 기대하므로 임의의 단어를 취할 수 없습니다 (단어가 실제로 순서가 아닌 단어에 대해 신경 쓰이는 단어 가방과는 달리). 예 : "I ate- ice-cream"과 "ice-cream ate I"는 동일하지만 전체 문장을 순서대로 처리하는 모델에는 해당되지 않습니다. 따라서 무작위 순서로 N 개의 무작위 단어를 선택할 수 없습니다.
- 토큰 선택은 모델에 따라 다릅니다. 불용어와 기호, 숫자 등과 같은 기타 내용이 정보보다 노이즈로 작용하는 경우 항상 사전 처리하여 제거 할 수 있습니다.
- 나는 lemmatizing과 word-piece tokenization이 동일하지 않다는 것을 분명히하고 싶습니다. 예를 들어, lemmatization에서 "playing"과 "played"는 "play"로 lemmatized됩니다. 그러나 단어 조각 토큰 화의 경우 어휘에 따라 "play"+ "## ing"또는 "play"+ "ed"로 나뉩니다. 따라서 더 많은 정보가 보존됩니다.
max_length
대부분의 문장이 완전히 고려되도록 최적으로 선택되어야합니다. (즉, 대부분의 문장은max_length
토큰 화 이후 보다 짧아야합니다 ). 전체 시퀀스 길이를 고려하는 일부 모델이 있습니다. 예 : Universal Sentence Encoder (USE), Transformer-XL 등. 그러나 더 작은으로 더 높은 배치 크기를 사용할 수도 있으므로max_length
학습 / 미세 조정이 더 빨라지고 언젠가 더 나은 결과가 생성됩니다.- 사전 훈련 된 모델은
MAX_LEN
512 개로 훈련되었습니다. 이는 모델의 한계입니다. - BERT와 관련하여 논문에서 주장한 바와 같이
[CLS]
토큰의 분류 포함으로 충분합니다. 주의 기반 모델이므로[CLS]
토큰은 전체 문장의 구성을 포착하므로 충분합니다. 그러나 모든 토큰의 임베딩을 평균화 할 수도 있습니다. 나는 대부분의 작품에서 모든 단어 조각 토큰의 평균이 더 높은 성능을 얻었습니다. 또한 일부 작업에서는 마지막 4 개 레이어에서 평균 임베딩을 가져 오라고 제안하기도합니다. 단지 디자인 선택 일뿐입니다. - 문장 임베딩을 사용하는 것은 일반적으로 괜찮습니다. 그러나 문헌으로 확인해야합니다. 항상 더 나은 기술이있을 수 있습니다. 또한 문장 임베딩에 특화된 모델이 있습니다 (USE는 그러한 모델 중 하나입니다). 확인할 수 있습니다.
귀하의 많은 질문이 이미 답변되었으므로 마지막 질문에 대한 개인적인 경험 만 공유 할 수 있습니다.
7) BERT 임베딩을 사용하여 유사한 문서 그룹을 찾기 위해 클러스터링 할 수있는 문서에 대한 기능을 얻는 것이 좋은 생각입니까? 아니면 더 나은 다른 방법이 있습니까?
더 간단한 접근 방식으로 시작 하는 것이 좋은 아이디어 라고 생각합니다 . 특히 벡터 라이저에 의존하는 긴 문서를 다룰 때 tf-idf
더 나은 결과를 가져 오면서 덜 복잡하고 일반적으로 더 많은 해석 성을 가질 수 있습니다.
더 긴 문서에 대한 클러스터 연습을 방금 마치고 비슷한 사고 과정과 실험을 거쳤습니다. 결국 tf-idf
기능으로 최상의 결과를 얻었습니다 . 내가 사용한 파이프 라인은 다음과 같이 구성되었습니다.
- 프로세스 데이터 (중단 어 제거, lemmatising 등)
- tf-idf 벡터 라이저를 맞 춥니 다 (또는 시도 할 수도 있습니다
doc2vec
). - 일종의 차원 축소 알고리즘 (제 경우에는 PCA)을 실행하십시오.
- (K- 평균) 클러스터링-최적의 클러스터 수를 평가합니다.
다운 스트림 작업에서 긴 문서와 함께 BERT를 사용하려는 경우 다음 두 가지 주요 접근 방식을 살펴볼 수 있습니다.
자르기 방법
- 헤드 전용 (처음 512 개 토큰)
- 꼬리 만 (마지막 512 개 토큰
- 머리 + 꼬리
도메인에 따라, 예를 들어 각 문서가 요약으로 마무리되는 경우 테일 전용이 결과를 개선 할 수 있습니다.
계층 적 방법
- 평균 풀링
- 최대 풀링
여기에 언급 된대로 절단 방법은 BERT 모델 (토큰)의 입력에 적용되는 반면 계층 적 방법은 Bert 모델의 출력 (임베딩)에 적용됩니다.