NLU 이해하기

NLU 이해하기

Rasa의 자연어 이해(NLU)는 사용자가 입력한 문장을 구조화된 의미로 바꾸는 부분이에요. 문장에서 "무엇을 원하는지"(인텐트)와 "어떤 값을 넣었는지"(엔티티)를 뽑아내는 거죠. 이 결과를 바탕으로 어시스턴트가 다음 행동을 결정해요.

출처: https://rasa.com/docs/rasa/

인텐트와 엔티티

  • 인텐트(Intent): 사용자의 의도. 예를 들어 주문, 예약, 환불 같은 것들이 인텐트가 돼요.
  • 엔티티(Entity): 그 의도 안에서 추출할 값. 예컨대 예약 인텐트라면 날짜·시간·인원이 엔티티예요.
  • 슬롯(Slot): 추출한 값을 담는 대화 상태 저장소예요. 엔티티 값을 슬롯에 저장해 다음 대화에 이어 써요.

NLU 데이터 작성

NLU 예시 문장은 data/nlu.yml에 인텐트별로 모아요. 각 인텐트에 여러 예시를 넣을수록 파이프라인이 의도를 더 잘 일반화해요.

nlu:
  - intent: greet
    examples: |
      - 안녕하세요
      - 안녕
      - 좋은 아침이에요
  - intent: book_room
    examples: |
      - 오늘 저녁 7시에 방 예약할게요
      - 내일 오후 방 하나 잡아주세요

엔티티가 필요한 인텐트는 문장 중간에 엔티티 위치를 표기해 학습시켜요. [값](엔티티명) 형식으로 표기하죠.

파이프라인

config.yml에서 NLU 처리 파이프라인을 정해요. 토크나이저, 피처라이저, 인텐트 분류기, 엔티티 추출기가 순서대로 연결돼요. 한국어를 다룬다면 한국어용 토크나이저(예: JiebaTokenizer를 한국어로 조정하거나 커스텀 토크나이저)를 파이프라인에 넣어야 해요.

대화 상태와 액션

NLU가 뽑아낸 정보는 domain.yml의 슬롯에 채워지고, 대화 관리기가 다음으로 어떤 액션을 실행할지 정해요. 응답을 내보내거나, 커스텀 파이썬 액션(actions/)을 호출하거나, 사용자에게 정보를 더 물을 수도 있어요.

더 알아보기

  • 설치부터 시작하려면 «설치와 첫 어시스턴트»를 보세요.
  • LLM 기반으로 대화를 설계하는 방식은 «CALM으로 대화 설계하기»에서 다뤄요.