Markov Chain 으로 랜덤 문장 생성

1. 패키지 설명

https://github.com/codebox/markov-text

This is a Python implementation of a Markov Text Generator.

Markov Text Generator can be used to randomly generate (somewhat) realistic sentences, using words from a source text. Words are joined together in sequence, with each new word being selected based on how often it follows the previous word in the source document.

Parsing

>python markov.py parse hitchhikers_guide 2 /path/to/hitchhikers.txt
>python markov.py parse <name> <depth> <file>

name : 마음대로 지정
depth : 특정 단어 기준 앞뒤로 참고하는 단어의 depth
file :  읽어올 파일명

Generating

>python markov.py gen hitchhikers_guide 3
python markov.py gen <name> <count>

name : 위에서 지정한 name 사용
count : 생성하려는 문장의 수

 

2. 실제로 사용해보기

깃허브에서 다운로드 git clone 사용, 마우스 클릭으로 다운로드도 가능

챗봇용 단일 문장 유사질의 준비
> python markov.py parse test1 2 test.txt
test.txt에 있는 문장을 이용해서 test1라는 이름으로 2 depth 설정 후
( depth를 늘릴 경우 더 다양한 문장이 만들어지지만 말이 안될 경우가 더 많아짐)
> python markov.py gen test1 10
test1 을 이용해 10문장 생성
생성 후 중복제거하여 살펴보면 2문장이 추가됨

같은 방법으로 100문장 추가 생성시
기존 22 문장 + 추가 문장생성 100문장 후 중복 제거
실제 추가로 만들어진 문장은 10문장(90문장이 중복 삭제됨)

 

3. 생성된 문장 살펴보기

문장생성여부
밥이 뭐야기존
메뉴가 뭐야기존
점심이 뭐야기존
저녁이 뭐야기존
오늘 밥이 뭐야기존
오늘 메뉴가 뭐야기존
오늘 점심이 뭐야기존
오늘 저녁이 뭐야기존
내일 점심이 뭐야기존
내일 저녁이 뭐야기존
월요일 점심이 뭐야기존
식당 점심이 뭐야기존
웰스토리 점심이 뭐야기존
웰스토리 저녁이 뭐야기존
식당 저녁이 뭐야기존
오늘 웰스토리 메뉴가 뭐야기존
내일 메뉴가 뭐야기존
이번주 금요일 밥 뭐줘?기존
오늘 웰스토리 점심 알려줘기존
내일 웰스토리 저녁 알려줘기존
내일 식당 저녁 알려줘기존
웰스토리 저녁 알려줘생성
식당 저녁 알려줘생성
내일 웰스토리 점심이 뭐야생성
오늘 웰스토리 점심이 뭐야생성
오늘 웰스토리 저녁이 뭐야생성
내일 식당 점심이 뭐야생성
내일 웰스토리 점심 알려줘생성
웰스토리 메뉴가 뭐야생성
내일 식당 저녁이 뭐야생성
내일 웰스토리 메뉴가 뭐야생성

 

4. 추가

  • 기존에 존재하는 단어의 조합으로만 새로운 문장을 생성하기 때문에, 추가 생성된 문장들이 챗봇 성능을 올려줄지 모르겠음
  • 기존 문장들이 복잡하면 말도 안되는 문장들이 많이 생겨남, 중복 제거 후 하나씩 살펴보며 말이 안되는 문장을 체크해야하는 이중 작업이 필요