RASA에서 RegexEntityExtractor 이해하기

발행: (2026년 1월 19일 오후 09:00 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

RegexEntityExtractor란?

텍스트가 미리 정의된 패턴과 일치하면 엔터티로 추출됩니다.
이 추출기는 다음과 같은 특징을 가집니다:

  • 결정적(Deterministic)
  • 빠름(Fast)
  • 패턴이 잘 정의되어 있을 때 매우 정확함(Extremely precise)

왜 필요할까요?

다음과 같은 엔터티에 사용합니다:

  • 고정된 형식을 따르는 경우
  • 숫자이거나 구조화된 형태인 경우
  • 머신러닝 일반화의 이점을 얻기 어려운 경우

대표적인 예시:

  • 전화번호
  • 이메일 주소
  • 주문 ID
  • 날짜
  • 우편번호(ZIP code)

이러한 패턴을 추출하기 위해 머신러닝 모델을 학습시키는 것은 과도한 작업이 될 수 있습니다.

YAML 설정 예시

version: "3.1"

nlu:
  - regex: phone_number
    examples: |
      - abc@gmail.com
      - xyz@gmail.com

파이프라인 설정

pipeline:
  - name: WhitespaceTokenizer
  - name: RegexEntityExtractor

내부 동작 방식

  1. 사용자의 원시 메시지를 받습니다.
  2. YAML 파일에 정의된 각 regex 패턴을 순회합니다.
  3. 텍스트에 패턴을 적용합니다.
  4. 매치가 발견되면:
    • 매치된 부분 문자열을 추출합니다.
    • 이를 엔터티로 할당합니다.
    • 시작 및 종료 문자 인덱스를 저장합니다.

예시

사용자 메시지:

My phone number is 9876543210

추출된 엔터티:

{
  "entity": "phone_number",
  "value": "9876543210",
  "start": 19,
  "end": 29
}

Entity Synonym Mapper와 결합하기

  • RegexEntityExtractor가 원시 엔터티를 추출합니다.
  • EntitySynonymMapper가 이를 정규화된(표준) 값으로 변환합니다.

이 조합이 제공하는 장점:

  • 높은 정확도
  • 일관성
  • 다운스트림 데이터 정제

언제 RegexEntityExtractor를 사용해야 할까요?

  • 엔터티 형식이 예측 가능할 때.
  • 정밀도가 재현율보다 중요할 때.
  • ML 복잡성을 줄이고 싶을 때.
  • 결정적인 동작이 요구될 때.

다음 주제

다음에는 CRFEntityExtractor를 살펴보겠습니다. 여기서는 엔터티를 명시적으로 매치하는 것이 아니라 통계적으로 학습합니다.

Back to Blog

관련 글

더 보기 »