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
내부 동작 방식
- 사용자의 원시 메시지를 받습니다.
- YAML 파일에 정의된 각 regex 패턴을 순회합니다.
- 텍스트에 패턴을 적용합니다.
- 매치가 발견되면:
- 매치된 부분 문자열을 추출합니다.
- 이를 엔터티로 할당합니다.
- 시작 및 종료 문자 인덱스를 저장합니다.
예시
사용자 메시지:
My phone number is 9876543210
추출된 엔터티:
{
"entity": "phone_number",
"value": "9876543210",
"start": 19,
"end": 29
}
Entity Synonym Mapper와 결합하기
RegexEntityExtractor가 원시 엔터티를 추출합니다.EntitySynonymMapper가 이를 정규화된(표준) 값으로 변환합니다.
이 조합이 제공하는 장점:
- 높은 정확도
- 일관성
- 다운스트림 데이터 정제
언제 RegexEntityExtractor를 사용해야 할까요?
- 엔터티 형식이 예측 가능할 때.
- 정밀도가 재현율보다 중요할 때.
- ML 복잡성을 줄이고 싶을 때.
- 결정적인 동작이 요구될 때.
다음 주제
다음에는 CRFEntityExtractor를 살펴보겠습니다. 여기서는 엔터티를 명시적으로 매치하는 것이 아니라 통계적으로 학습합니다.