Tensorflow Decision Forest 모델로 텍스트를 사용하는 방법

이것은 문서 Markdown 페이지입니다. 자세한 내용은 마크다운 참조(go/documentation-reference) 및 문서 스타일 가이드(go/documentation-style)를 참조하세요.

배경

의사결정 포레스트 학습 알고리즘은 신경망이나 선형 예측변수와 같은 경사하강법 기반 모델과 다르게 작동합니다. 이러한 차이점은 다양한 모델링 결정에서 나타나지만, 데이터 세트에 아키텍처별 기능 엔지니어링이 필요한 경향이 있는 토큰화된 텍스트 기능과 같은 가변 길이 범주 기능이 포함된 경우 특히 두드러집니다. 이 가이드에서는 의사결정 포리스트 모델의 텍스트 기능에 대한 다양한 기능 엔지니어링 전략 간의 장단점을 간략하게 설명합니다.

다음 섹션에서는 이러한 기능이 포함된 데이터 세트를 참조하고 사용자가 특정 제품을 구매할지 여부를 예측한다고 가정합니다.

특징 사용자 ID 사전 구매 제품명 제품 설명
예시 데이터 1234 [“TV”, “진공”] “와이파이 라우터” “이 라우터는…”


이 예에서 "이전 구매"는 희소 텍스트 기능(또는 범주형 항목 집합)입니다. "제품 제목"도 마찬가지이지만 이 예에서는 토큰화되지 않습니다. "제품 설명"은 자연어 기능으로, 다른 기능과 다른 속성을 가지고 있습니다. 왜냐하면 우리는 어휘가 크고(또는 제한이 없으며) 단어 순서가 중요하고 제품에 내재된 다른 의미론적 및 어휘적 속성을 가질 것으로 기대하기 때문입니다. 언어. 아래에서 설명하는 전략은 이러한 모든 기능에 적합하지만 각 기능마다 서로 다른 장단점이 있습니다.

빠른 참조

훈련 및 추론 비용이 문제가 되지 않는 경우 가장 좋은 솔루션은 각 텍스트 기능에 대해 범주형 세트와 사전 훈련된 임베딩을 모두 사용하는 것입니다. 두 요소는 보완적인 강점과 약점을 갖고 있기 때문입니다. 아래에 언급된 제약 조건 중 하나가 존재하지 않는 한 이 방법을 권장합니다.

추론 속도 훈련 속도 토큰 <> 라벨 관계를 기억하는 기능 일반화
다중 범주형 가장 빠름 (++) 가장 빠름 (++) 제한된 제한적 (+)
멀티핫 빠르게 (+) 빠름 (상대적으로 작은 어휘 크기를 가정) (++) 좋은 제한적 (+)
범주형 세트 가장 빠름(+++) 느리게 (+) 최상의 제한적(++)
삽입 가장 느림(행렬 곱셈과 같은 중요하지 않은 인코더 연산 가정) (+에서 +++까지) 가장 빠름(어휘 크기 >> 임베딩 차원 가정) (+++) 나쁜 좋음(++ ~ +++)

N-그램

N-그램(예: {"the", "cat", "is", "blue"} -> {"<start> the", "the cat", "cat is", "is blue", "blue < end>"})는 많은 경우에 도움이 될 수 있으며 로컬 어휘 정보를 캡처할 수 있습니다. 아래의 모든 방법에서 지원되지만 어휘 크기가 엄청나게 커지므로 훈련 비용으로 인해 실용적이지 않을 수 있습니다.

권장되지 않는 전략

원-핫/멀티-핫 인코딩/Bag of Words

원-핫 인코딩은 희소 텍스트를 밀도화하기 위한 고전적인 전략입니다. 여기서는 희소 텍스트 기능이 멀티 핫(포함된 모든 토큰에 대해 1) 또는 개수 기반 벡터화(어휘에 있는 각 토큰의 개수)로 표현되는 확장을 가정합니다.

예를 들어, 어휘가 4개 항목이고 [“TV”, “Vacuum”, “Wifi”, “Router”]와 같이 색인이 지정된 경우 “이전 구매” 기능은 밀집 벡터 <1, 1, 0, 0입니다. >. 개수를 고려하고 특성이 [“TV”, “TV”, “Vacuum”]인 경우 <2, 1, 0, 0>이 됩니다.

장점

  • 결정 포리스트 분할은 개별 기능에 대해 학습되므로 범주형 세트보다 훈련 시간에 비용이 적게 듭니다.
  • 전자와 달리 클리핑이나 패딩이 필요하지 않으며 토큰은 여러 예에서 동일한 의미를 갖습니다(예: "TV"는 위치에 관계없이 분할 전체에서 일정합니다).

단점

  • 이 전략은 종종 매우 불균형하고 희박한 분할로 이어져 DF 학습 알고리즘의 수렴 속도가 느려지거나 수준 이하가 될 수 있습니다. 이 때문입니다:
    • 동일한 정보를 학습하려면 더 많은 분할이 필요함
    • 매우 희소한 트리는 균형 잡힌 트리보다 더 나쁘게 일반화되므로 일반적으로 모델의 정확도가 떨어집니다.
  • 위치 정보를 고려하지 않습니다. 이로 인해 자연어 기능의 성능이 저하될 수 있습니다.
  • 범주형 데이터에 대한 수치 분할을 학습하는 것은 차선책입니다. 여기서는 활용되지 않는 범주형 분할을 찾기 위한 최적화가 있습니다.
  • 학습 계산 복잡성은 어휘 항목 수(각각 수치 특성으로 사용됨)에 따라 선형적으로 확장됩니다. 실제로 데이터 세트가 매우 작지 않은 한(이 경우 큰 어휘가 과적합을 조장할 수 있음) 5,000개가 넘는 항목의 어휘 학습 속도가 매우 느려집니다.
  • 훈련 메모리 소비는 예당 어휘 항목당 1바이트(원-핫의 경우) 또는 4바이트(카운트의 경우)입니다. 인덱싱 시 데이터는 희소 데이터의 밀집된 버전으로 저장되기 때문입니다. 더 큰 어휘와 데이터 세트의 경우 이는 엄청나게 커질 수 있습니다.

고정 길이의 다중 범주형 기능

범주형 기능은 의사 결정 포리스트 알고리즘을 통해 효율적으로 학습할 수 있으므로 희소 토큰을 사용하는 자연스러운 방법 중 하나는 예당 고정된 수의 입력 토큰이 있고 각 토큰 위치가 별도의 독립적인 기능이 되도록 패드/클리핑하는 것입니다. 위의 예에서 "이전 구매"에 최대 5개의 토큰이 있는 경우 토큰 1-5를 나타내는 기능 f1...f5를 생성하고 5보다 큰 토큰을 버리고 5보다 작은 예에 대해 누락된 값을 추가할 수 있습니다.

장점

  • 훈련하는 것이 효율적입니다.
  • 예시당 토큰 수의 차이가 낮고 토큰이 독립적인 경우 모델 품질이 저하되지 않을 수 있습니다.
  • 이는 다른 방법보다 더 자연스럽게 추가 의미(예: 구매 주문)를 포착할 수 있습니다.

단점

  • 모델에 노이즈 역할을 할 "누락된" 패딩 토큰에 의미 체계를 추가합니다. 이는 예를 들어 “제품 설명” 기능에서 발생할 수 있는 예시당 토큰 수에 큰 차이가 있는 경우 특히 두드러집니다.
  • 학습된 트리는 순서에 매우 민감합니다. 즉, 특성이 [“A”, “B”]인 경우 예측은 [“B”, “A”]에 대한 예측과 다르며 후자가 전혀 표시되지 않은 경우 데이터에서 모델은 전자로부터 일반화할 수 없습니다. 일반적으로 위치 불변성을 학습하려면 훨씬 더 많은 데이터가 필요합니다.
  • 기본적으로 각 토큰은 서로 다른 어휘를 사용하는 기능으로 표시됩니다. 구현에서 기능당 동일한 어휘 항목 세트를 고려하도록 강제하더라도 f1=”TV”는 f2=”TV”와 다른 어휘 항목이 됩니다. 이는 알고리즘이 토큰 "TV"와 레이블 간의 관계를 학습하는 데 효율성이 떨어진다는 것을 의미합니다. 즉, 각 토큰 위치에 대해 별도로 학습해야 합니다.

더 나은 전략

범주형 세트

범주형 세트( https://arxiv.org/pdf/2009.09991.pdf )는 희소 텍스트에 대한 TF-DF의 기본 기능 표현입니다. 범주형 세트는 사실상 중복과 순서를 무시하는 단어 모음입니다. 예를 들어, "The TV is the best" 특성은 범주 세트 {"best", "is", "the", "TV}로 표시됩니다.

다양한 작업에 대한 벤치마크(논문 참조)에 따르면 기본 범주 집합 분할기는 일반적으로 다중 핫 및 고정 길이 범주 기능보다 성능이 뛰어납니다. 이론적으로 원-핫 인코딩된 기능에 대한 범주형 세트 분할과 부울 분할은 모두 동일한 정보를 학습할 수 있습니다. 그러나 트리가 다음 기능을 학습하려고 하는 다음 예를 살펴보겠습니다.

if description contains “high” AND “speed” AND “gaming”:
  return True

이 경우 기본 범주형 집합 분할기는 1개의 분할을 학습합니다. 여기서 {“high”, “speed”, “gaming”} => True입니다.

하나의 핫 표현에는 "높음", "분할" 및 "게임"에 대한 3개의 분할이 필요하며 해당 범주의 가능한 모든 분리에 대해 합리적인 리프 노드(예: "속도"가 아닌 "높음")를 찾아야 합니다. 실제로 원-핫 인코딩은 최고 성능의 의사 결정 포레스트 학습 알고리즘으로 효율적으로 최적화할 수 없는 매우 불균형한 트리를 생성합니다.

장점

  • 의사결정 포리스트에 대한 단어 모음 정보 학습에 가장 적합합니다.
  • 매우 효율적인 서비스 제공(예제당 최대 마이크로초 미만의 시간 내에 큰 트리를 제공할 수 있는 QuickScorer와 함께 제공 가능) 제공 시간 복잡도는 각 예의 범주 세트에 있는 항목 수에 선형적이며 실제로는 어휘 크기보다 훨씬 작습니다.
  • 기능당 단일 어휘를 최적화하므로 의미 체계가 공유됩니다.

단점

  • 범주형 세트 분할 훈련 비용은 num_examples * 어휘 크기로 확장되므로 원-핫 알고리즘과 유사하게 훈련 가능한 어휘 크기는 실제 설정에서 상당히 작을 수 있습니다(N,000). 그리디 알고리즘의 샘플링 비율을 조정하여 이 훈련 속도를 향상할 수 있지만 최적이 아닌 품질을 달성할 수 있습니다.

임베딩

신경망은 다양한 NLP 작업에서 최첨단 성능을 보여줬으며, 내부적으로 매우 다르게 사용되는 기능에도 불구하고 경험적으로 수치 특성으로 사용되는 사전 훈련된 임베딩도 의사 결정 포레스트 알고리즘과 잘 작동합니다. 여기서는 "임베딩"을 임의의 신경망 인코딩(예: 변환기/컨벌루션/반복 레이어의 출력)으로 지칭합니다.

사전 훈련된 임베딩을 사용하면 유클리드 공간에서 비슷한 토큰이나 문장이 가까운 벡터 공간의 초기화가 NLP 작업 전반에 걸쳐 잘 전달되는 것으로 나타났고 해당 초기화의 그라데이션이 더 작고 더 빠르게 수렴되기 때문에 부분적으로 신경망과 잘 작동합니다. 완전 무작위 초기화보다. 그러나 의사결정 트리는 임베딩을 개별 숫자 특성으로 사용하고 해당 개별 특성의 축 정렬 파티션을 학습합니다 1 . 이는 동일한 의미 정보를 활용하는 것이 거의 불가능하다는 것을 의미합니다. 예를 들어 내적이나 행렬 곱셈은 축 정렬 분할 세트로 표현할 수 없습니다. 또한 훈련 중에 경사하강법을 통해 임베딩을 업데이트할 수 있는 신경망과 달리 기본 의사결정 포레스트 학습 알고리즘은 미분 불가능합니다. 즉, 임베딩이 고정된 상태로 유지되어야 합니다. 미분 가능한 결정 포레스트에 대한 작업(예 : https://arxiv.org/pdf/2007.14761.pdf )이 있습니다. 그러나 부분적으로는 실제로 임베딩의 모든 정보 비트가 실제로 신경망에서도 활용되지 않기 때문에 이 전략은 여전히 ​​의사결정 포레스트에서 잘 작동합니다.

장점:

  • 훨씬 더 큰 어휘 크기를 처리할 수 있습니다. 임베딩은 소수의 임베딩 차원으로 효과적으로 밀도화되므로 의사결정 포리스트에 대한 입력 기능 수가 극적으로 증가할 가능성은 없습니다.
  • 이론적으로는 유사한 임베딩이 파티션 세트를 공유할 수 있으므로 더 잘 일반화할 수 있습니다. 위에서 언급한 것처럼 벡터 공간의 기본 변환 또는 회전은 결정 포리스트의 축 정렬 분할 공간에서 완전히 다른 두 개의 유사한 임베딩을 가질 수 있다는 점에 유의하세요.
  • 예를 들어 인코더에 컨볼루션, Attention 또는 RNN이 포함된 경우 반복/단어 순서를 자연스럽게 캡슐화할 수 있습니다.
  • 다른 데이터 세트의 정보를 활용할 수 있습니다(전이 학습을 위한 사전 훈련).

단점

  • 정보를 잘 기억하지 못함 - 분할로 인해 퍼지 분류가 발생하거나 구문(예: "라우터가 훌륭함" 대 "훌륭한 라우터")에 대한 높은 민감도가 발생하여 유클리드 공간에서는 유사할 수 있지만 반드시 유사하지는 않을 수 있는 다양한 임베딩이 생성됩니다. 수치적 특징.
  • 추론 시간에 전체 인코더 정방향 전달을 수행해야 하기 때문에 제공 속도가 가장 느립니다. 실제 대기 시간은 임베딩을 생성한 아키텍처에 따라 크게 달라집니다. 즉, 변환기 인코더는 일반적으로 평균 풀링을 사용한 원시 임베딩 테이블 조회보다 훨씬 느립니다.

노트


  1. 경사 분할을 활성화하면 비축 정렬 정보를 학습할 수 있지만 여전히 차원별 기반입니다.