Hugging Face Transformers의 Constrained Beam Search를 이용한 텍스트 생성 가이드

Hugging Face는 transformers 라이브러리에 constrained beam search를 구현하여, 사용자가 특정 단어나 구절을 포함하도록 강제함으로써 모델 출력에 대해 정밀한 제어를 할 수 있도록 했습니다. 이 기능은 사전 검색을 통해 필수 용어를 지정해야 하는 신경망 기계 번역(Neural Machine Translation)이나, 문맥에 따라 특정 격식 수준(예: 독일어의 격식체 vs. 비격식체)을 강제해야 하는 작업에서 매우 중요합니다.

제약 조건이 있는 생성의 과제

텍스트 생성 작업에서 특정 하위 시퀀스를 강제하는 것은 쉽지 않은 일입니다. 빔 서치(beam search)가 토큰 단위로 작동하기 때문입니다. 표준 디코딩 함수는 현재 시퀀스를 기반으로 다음 토큰을 예측하지만, 필요한 토큰이 현재 단계에서 나타나야 하는지 아니면 미래의 어느 단계에서 나타나야 하는지에 대한 내재적인 메커니즘이 없습니다.

게다가, 두 개의 서로 다른 구절을 동시에 요구하거나, 여러 가능성 중 하나를 선택하도록 모델에게 허용하는 것과 같이 여러 제약 조건을 관리하는 것은 디코딩 과정에 상당한 복잡성을 더합니다.

Constrained Beam Search 기능

Constrained beam search를 사용하면 출력이 생성된 후에 필터링하는 대신, 생성 단계에서 사전 지식을 주입할 수 있습니다. 이 구현은 두 가지 주요 제약 조건 유형을을 지원합니다:

Forced Word Constraints

model.generate()force_words_ids 키워드 인자를 사용하여, 사용자는 출력에 반드시 나타나야 하는 정확한 토큰을 지정할 수 있습니다. 예를 들어, "How old are you?"를 영어에서 독일어로 번역할 때, "Sie"라는 단어를 강제하면 모델이 비격식체("Wie alt bist du?") 대신 격식체 번역("Wie alt sind Sie?")을 생성하도록 보장합니다.

Disjunctive Constraints

Disjunctive constraints를 사용하면 제공된 목록에서 최소한 하나의 단어를 포함함으로써 요구 사항을 충족할 수 있습니다. 이는 여러 단어 형태(예: "raining", "rained", "rains")가 허용되는 경우에 유용합니다. 혼합 제약 조건 시나리오에서, 모델은 특정 단어를 그대로 포함하도록 강제되는 동시에 관련 용어의 유연한 목록 중에서 하나의 옵션을 선택할 수 있습니다.

기술적 구현: Banks와 Round-Robin Selection

Constrained beam search는 생성의 매 단계마다 원하는 토큰을 주입하여 시퀀스가 제약 조건을 충족하는 방향으로 이동하도록 합니다. 그러나 토큰을 맹목적으로 강제하면 종종 터무니없는 결과(예: "The is fast")가 초래될 수 있습니다. 이를 해결하기 위해 Hugging Face는 제약 조건 충족과 언어적 확률 사이의 균형을 맞추기 위해 "Banks" 시스템을 활용합니다.

The Bank System

빔(beams)은 제약 조건을 충족하는 진행 상황에 따라 뱅크(banks)로 분류됩니다:

  • Bank $n$: 제약 조건을 충족하는 데 $n$단계의 진행을 거친 빔들을 포함합니다.

Round-Robin Selection

모델이 가장 제약이 심한(하지만 잠재적으로 터무니없는) 빔만을 선택하지 않도록, 알고리즘은 뱅크 간에 round-robin selection을 수행합니다. 만약 num_beams=3이라면, 시스템은 Bank 2에서 가장 확률이 높은 출력을 선택한 다음, Bank 1, 그리고 Bank 0 순으로 선택합니다. 이는 모델이 제약 조건을 향하도록 유도되는 동안에도 높은 확률을 가진 상식적인 시퀀스가 보존되도록 보장합니다.

Constraint Class를 통한 제약 조건 확장

force_words_ids가 주요 사용자 인터페이스이지만, 백엔드는 진행 상황을 추적하고 다음 토큰을 제안하기 위해 Constraint 객체를 사용합니다. 개발자는 Constraint 추상 인터페이스 클래스를 서브클래싱하여 커스텀 제약 조건을 만들 수 있습니다.

언급된 잠재적인 미래 확장 기능은 다음과 같습니다:

  • OrderedConstraints: 제약 조건이 특정 순서로 충족되도록 보장합니다.
  • TemplateConstraints: 모델이 빈칸을 채워야 하는 특정 구조적 템플릿을 따르도록 강제합니다.

연구 기반

이 기능은 open vocabulary image captioning 및 neural machine translation에 관한 연구를 포함하여, lexically constrained decoding 및 guided generation에 초점을 맞춘 여러 연구 논문을 기반으로 합니다.}

Sources

관련