home..

Parlai

개요

ParlAI는 페이스북 AI에서 개발한 대화, QA 모델을 위한 Python 프레임 워크입니다.

정확한 발음은 par-lay라고 말하고 있으며 프랑스어 팔레(대화)를 의미하는 것으로 알고 있습니다.

ParlAI가 제공하는 특징으로는 다음이 있습니다.

등이 있습니다.

자세한 설명은 논문으로 제출되어있으니 필요하면 참고바랍니다.

설치

요구사항은 python 3.7+ 그리고 pytorch 1.6+ 입니다.

설치는 왠만하면 python 가상환경을 추천드리며

pip 기준으로는 다음처럼 설치하면 됩니다.

pip install parlai

QuickStart

BlenderBot(90M)을 fine-tuning하는 구글 코렙이 있습니다.

하지만 더 간단하게 살펴보고 싶다면 다음을 따라 주시면 됩니다.

  1. 데이터셋 보기
    # bAbI 10k의 task 1을 출력하여 보여주는 예제입니다.
    parlai display_data --task babi:task10k:1
    
  2. 훈련
    # batch 사이즈 1, 5 epoch으로 MemNN을 훈련시킵니다.
    parlai train_model --task babi:task10k:1 --model-file /tmp/babi_memnn --batchsize 1 --num-epochs 5 --model memnn --no-cuda
    

    명령어를 보면 GPU가 사용되지 않고 빠르게 처리될 수 있으니 노트북으로도 수행가능합니다.

  3. 예측
    # bABI task 1에 대한 예측 결과를 출력합니다.
    parlai display_model --task babi:task10k:1 --model-file /tmp/babi_memnn --eval-candidates vocab
    
  4. 대화형 예측
    # 저장된 모델과 대화형으로
    parlai interactive --model-file /tmp/babi_memnn --eval-candidates vocab
    ...
    Enter your message: John went to the hallway.\n Where is John?
    

주요 개념

환경을 world라고 하고 각 world에는 agent들이 있습니다.

agent로는 모델이나 데이터셋이 될 수 있습니다.

agent는 뭔갈(act) 하거나 다른 agent를 관찰함(observe)으로서 서로 상호작용합니다.

트위터 데이터셋을 학습하는 transformer ranker를 예시로 들어봅시다.

훈련 환경을 world 그리고 transformer 모델과 데이터셋 두 agent가 있습니다.

데이터셋이 먼저 배치 훈련 셋을 출력하고

모델이 그것을 (observe)관찰하여 이 배치에 대한 훈련 스텝을 진행합니다.

모델과 데이터셋 두 agent는 이런 식으로 상호작용을 반복하여 학습을 진행합니다.

좀더 자세히 보도록 하죠

Agent

Agent는 사람, 봇, 신경망, 데이터셋 등이 될 수 있습니다.

Agent는 다음 두가지 함수가 구현되어야합니다.

def observe(self, observation): # update internal state with observation
def act(self): # produce action based on internal state

Message

Message는 agent의 observation 파라미터나 act()의 리턴값을 의미합니다.

이 방법들이 ParlAI에서 agent들이 world에서 상호작용하는 기초적인 방법으로

Message는 python의 dict를 상속 받은 자식 클래스입니다.

주요 기능은 사용자가 의도치 않게 act나 observe 중에 필드를 변경하는 것을 방지합니다.

Message의 기본 필드는 다음과 같습니다.

Message

Teacher

Teacher는 agent의 특별한 타입입니다.

agent처럼 act와 observe 함수를 구현하지만 report 함수를 통해 metric을 추적할 수 있습니다.

유저가 제기한 질문의 수 또는 그 질문에 대한 답을 얼마나 잘 맞췄는지를 예시로 들 수 있습니다.

학생 agent와 bAbI Teacher의 상호 관찰은 다음처럼 표현됩니다.

Teacher: {
    'text': 'Sam went to the kitchen\nPat gave Sam the milk\nWhere is the milk?',
    'labels': ['kitchen'],
    'label_candidates': ['hallway', 'kitchen', 'bathroom'],
    'episode_done': False  # indicates next example will be related to this one
}
Student: {
    'text': 'hallway'
}
Teacher: {
    'text': 'Sam went to the hallway\nPat went to the bathroom\nWhere is the milk?',
    'labels': ['hallway'],
    'label_candidates': ['hallway', 'kitchen', 'bathroom'],
    'episode_done': True
}
Student: {
    'text': 'hallway'
}
Teacher: {
    ... # starts next episode
}
...

World

world는 agent가 상호작용하는 환경을 정의합니다.

parley 메소드를 구현해야하며 각 parley 마다 agent가 행동을 한번 합니다.

update의 개념입니다.

간단한 world의 예로는 DialogPartnerWorld가 있습니다.

예시는 다음과 같습니다.

query = teacher.act()
student.observe(query)
reply = student.act()
teacher.observe(reply)
© 2022 HookSSi   •  Powered by Soopr   •  Theme  Moonwalk