[파이썬] nltk 질의 응답 시스템 기초

소개

자연어 처리는 인공 지능 분야에서 중요한 역할을 하는 기술 중 하나입니다. 그 중에서도 자연어 이해(NLU)와 질의 응답 시스템은 많은 관심을 받고 있습니다. 이번 블로그 포스트에서는 파이썬의 Natural Language Toolkit(nltk) 라이브러리를 사용하여 간단한 질의 응답 시스템을 구현하는 방법에 대해 알아보겠습니다.

nltk 소개

NLTK는 파이썬에서 자연어 처리를 위해 제공되는 라이브러리입니다. 다양한 자연어 처리 작업을 수행하는 데 도움이 되는 도구와 데이터 세트를 제공하여 개발자들이 쉽게 자연어 처리 애플리케이션을 구현할 수 있도록 지원합니다.

데이터 준비

질의 응답 시스템을 구현하기 위해 적절한 데이터 세트가 필요합니다. 가장 간단한 형태의 데이터 세트로는 질문과 그에 대한 답변이 포함된 짝을 가지고 있는 텍스트 파일을 사용할 수 있습니다. 예를 들어, “질문: 답변” 형식으로 기록된 텍스트 파일을 사용합니다.

질문1: 답변1
질문2: 답변2
질문3: 답변3
...

질의 응답 시스템 구현

nltk를 사용하여 간단한 질의 응답 시스템을 구현해보겠습니다. 먼저, 데이터 세트를 준비하고 로드하는 함수를 작성해보겠습니다.

import nltk

def load_dataset(file_path):
    dataset = []
    with open(file_path, 'r') as file:
        for line in file:
            q, a = line.strip().split(':')
            dataset.append((q.strip(), a.strip()))
    return dataset

다음으로, 질문과 가장 유사한 답변을 찾는 함수를 작성해보겠습니다. 이 함수는 입력된 질문과 데이터 세트의 질문들을 비교하여 가장 유사한 질문을 찾고 해당하는 답변을 반환합니다.

def find_most_similar_question(question, dataset):
    question_tokens = nltk.word_tokenize(question.lower())
    max_similarity = 0
    most_similar_question = ''
    for q, a in dataset:
        q_tokens = nltk.word_tokenize(q.lower())
        similarity = nltk.jaccard_distance(set(q_tokens), set(question_tokens))
        if similarity > max_similarity:
            max_similarity = similarity
            most_similar_question = q
    return most_similar_question

그리고, 질문을 입력받고 해당하는 답변을 출력하는 메인 함수를 작성해보겠습니다.

def main():
    file_path = 'dataset.txt'
    dataset = load_dataset(file_path)
    while True:
        question = input('질문을 입력하세요 (종료: q): ')
        if question == 'q':
            break
        most_similar_question = find_most_similar_question(question, dataset)
        for q, a in dataset:
            if q == most_similar_question:
                print('답변:', a)
                break

if __name__ == '__main__':
    main()

실행

위의 코드를 실행하면 질문을 입력할 수 있는 프롬프트가 나타납니다. 사용자는 원하는 질문을 입력한 후 엔터를 누르면 해당하는 답변이 출력됩니다. “q”를 입력하면 프로그램이 종료됩니다.

질문을 입력하세요 (종료: q): 날씨가 어때요?
답변: 오늘은 맑은 날씨입니다.
질문을 입력하세요 (종료: q): q

이와 같은 간단한 방식으로 nltk를 사용하여 질의 응답 시스템을 구현할 수 있습니다.

결론

이번 블로그 포스트에서는 파이썬의 nltk를 이용한 간단한 질의 응답 시스템을 구현하는 방법에 대해 알아보았습니다. nltk는 강력한 자연어 처리 도구로 다양한 자연어 처리 작업을 쉽게 수행할 수 있도록 도와줍니다. 앞으로 더 다양한 자연어 처리 애플리케이션을 구현하기 위해 nltk를 활용해보시기 바랍니다.