[뉴스] 2020 인공지능 온라인 경진대회 종합 1위

과학기술 정보통신부가 주최하고 NIPA 정보통신 산업진흥원이 주관하여 지난 6월 1일부터
접수를 받아 인공지능 허브를 통해 한 달간 진행한 2020 인공지능 온라인 경진대회에서
인공지능 자연어처리 전문기술 스타트업 투블럭에이아이팀이 종합 1위를 하였다
신들의 궁전이란 팀이름으로 참가한 투블럭에이아이 ( 대표 조영환 ) 팀은 총 약 400여개 팀이
참가하여 20개 과제 중에서 참가한 과제 상위 3개 과제의 점수를 총합하여 산정하는
종합 순위에서 기계독해 분야 1위 , 문자인식분야 1위를 하여 합산 종합 1위를 하였다.


투블럭에이아이는 2019년 7월 창업한 스타트업으로 2019년 작년 같은 대회에서
기계독해분야 1위로 선정된 바가 있다. 2020 인공지능 온라인 경진대회는 약 400여개 팀이
참가하여 상위 60개 팀을 가리고 이들의 사업화 계획서를 제출 받아 총 48억원의 사업화 자금을
지원하는 프로그램으로 기존의 연구개발과 사업화 지원이 사업계획서를 제출 받고 이를 심사하여 수행기관을 선정하는 방식이었다면, 인공지능 온라인 경진대회는
△주어진 문제에 대해 △다수의 참가자들이 이를 해결하기 위한 알고리즘을 개발하고,
△이를 평가하여 우수팀의 사업화를 지원하는 도전·경쟁형 방식의 지원 방법이다.

현재 AI 양재 허브에 입주해 있는 투블럭에이아이는 AI 자연어 처리분야의 기술을 이용하여
사람과 사람을 연결하는 대화형 인공지능 서비스를 개발하고자 만들어진 스타트업이다.

관련 URL http://www.aichallenge.or.kr/main/main.do

[데모] 기계 독해

글을 읽고 대답을 하는 수준을 알아 볼 수 있도록 데모페이지를 만들어서 보여드립니다

이미 공개되어 있는 HanBert-54kN-MRC의 모델로 제작이 되었습니다.

HanBert의 상업적인 활용을 위해서는 [상업적 활용] 을 참고해주세요.

모비젠의 IRIS SaaS 서비스로도 제공되고 있습니다.

데모는 KorQuAD 1.0 수준의 학습셋으로 테이블을 읽는 능력은 포함되어 있지 않지만, 뉴스 기사나 대화 문장에서 질문에 답을 찾아내는 것을 보여줍니다. NER이나 온톨로지 등의 Classical NLP에서 필요로 했던 지식이 없이도, 왠만하게 대답을 만들어 내는 것을 보실 수 있겠습니다.

[데모 페이지로 가기]

간혹 “읽을 꺼리”에 입력 되지 않은 엉뚱한 질문을 하시는 경우가 있습니다.

기계독해는 질문에 가장 근접한 대답의 위치를 주어진 “읽을 꺼리”에서 찾아내는 것입니다. 본문에 없는 답이나 연관성이 없는 질문에 대해서는 제대로된 대답을 하지 못합니다.

저희 TwoBlock Ai 에서 보여드리는 기계독해 데모는, 한번 질문에 보통 30~40ms 에 본문의 분석과 학습된 한국어 BERT HanBert-54kN을 사용해서 답변을 추출해 냅니다. 계약서의 경우에는 초당 70페이지 정도를 처리할 수 있습니다.

GPU는 비싼 것을 사용하지 않아도 됩니다. 저희도 현재 100만원 이내의 저가형 모델을 사용하고 있습니다.

한국어 BERT, HanBert를 소개합니다.


HanBERT Package에는 한국어 BERT와 이를 사용하기 위한 한국어 분석기 Moran, 그리고 기계독해 예제 등이 포함되어 있습니다. HanBert를 이용한 재미있는 [기계독해 데모] 를 방문해 보세요.
HanBert의 상업적인 활용을 위해서는 [상업적 활용] 을 참고해주세요.

[다운로드]


Pre-trained Hangul-BERT (HanBERT-54kN)

  • HanBERT-54kN : HanBert 기본 모델 (500만 Step 학습)
    • bert_config.json
    • checkpoint
    • model.ckpt-5000000.data-00000-of-00001
    • model.ckpt-5000000.meta
    • model.ckpt-5000000.index
    • vocab_54k.txt
  • HanBERT-54kN-MRC : 기계독해 학습 데이터로 Fine-tuning된 모델 (mrc_test.py에서 사용)
    • bert_config.json
    • checkpoint
    • model.ckpt-60000.data-00000-of-00001
    • model.ckpt-60000.meta
    • model.ckpt-60000.index
    • vocab_54k.txt
  • usr_local_moran : 한국어 분석 라이브러리와 DB
    • libmoran4dnlp.so
    • moran.db
    • udict.txt
    • uentity.txt
  • src :
    • 구글에서 배포한 프로그램
      • modeling.py
      • optimization.py
    • 구글에서 배포한 프로그램을 구미에 맞게 수정한 프로그램 by TwoBlock Ai
      • mrc_test.py : 기계 독해 맛보기
      • run_korquad_1.0.py : 기계 독해 (KorQuAD 1.0 학습 프로그램)
    • 구글에서 배포한 프로그램을 구미에 맞게 수정한 프로그램 by TwoBlock Ai
      • tokenization.py : 한글 토크나이저 (moran 구동 모듈 포함)
      • tokenization_test.py : 한글 토크나이저 테스트
    • 투블럭Ai에서 배포하는 형태소 분석 구동 프로그램 by TwoBlock Ai
      • moran.py
      • moran_test.py


Training Settings

  • 학습 코퍼스 (일반 문서)
    • size : 3.5억개 문장, 113억개 형태소, 70G바이트
    • Dup : 1 ~ 10 (코퍼스 성격에 따라 조합)
  • 학습 코퍼스 (특허 문서)
    • size : 3.7억개 문장, 150억개 형태소, 75G바이트
    • Dup : 2
  • 학습 환경
    • Google TPU V3-8
    • 기본 학습 Step수 : 500만
  • 한국어 형태소 분절
    • moran wiki 버젼 : moran-2013 버젼 형태소 분석기의 Deep NLP 버젼
    • 품사를 표시하지 않고 음절단위로 분절 및 ~기호 부착
    • 앞의 형태소에 붙여야 하는 경우 ~, 그런데 기능어였던 경우 ~~
    • moran.db (126M) : 기본 지식 (64만단어 + 57만 기분석사전 + 174만 명칭어) + wiki 표제어 (445,701 단어)
    • 초당 0.5M 수준의 분절 속도 (형태소 분석후, 분절 + 기호 부착)
  • Vocab
    • 크기 : 총 54000표제어 : 53800개 단어 + 200개의 여유 공간


Requirements

  • Python : 3.6.8
  • tensorflow-gpu : 1.11.0
  • OS : ubuntu 18.04

How to Install

  • 모델과 DB File의 크기가 2.6G입니다. Git 배포 용량을 초과합니다.
  • 윈도우 버젼이나, ubuntu 18.04와 호환되지 않는 환경은 코드를 지원하고 있지 않습니다.
  • hanbert54kN.tar.gz를 풀면, 맨처음 해야 하는 일은 moran의 활성화입니다.
  • 다른 디렉토리에 사용하고 싶은 경우는 이 글의 아래부분에 설명되어 있습니다.
tar xvfz hanbert.tar.gz
cd HanBert-54kN/
sudo mkdir /usr/local/moran
cp usr_local_moran/* /usr/local/moran
  • Moran의 동작여부 확인
    • $ python src/tokenization_test.py
    • Cat.12가 600 Mbps,
    • 12 ~~가 600 ~mbps
    • ['cat.12', '~~가', '600', 'mbps', ',']
    • cat.12 ~~가 600 mbps , Cat.12가 600 Mbps
    • ['나', '~~는', '걸어가', '~~고', '있', '~~는', '중', '~~입', '~~니다', '.', '나는걸어', '가', '~~고', '~있', '~~는', '중', '~~입', '~~니다', '.', '잘', '분류', '~~되', '~~기', '~~도', '한', '~~다', '.', '잘', '먹', '~~기', '~~도', '한', '~~다', '.']
    • 나 ~~는 걸어가 ~~고 있 ~~는 중 ~~입 ~~니다 . 나는걸어 가 ~~고 ~있 ~~는 중 ~~입 ~~니다 . 잘 분류 ~~되 ~~기 ~~도 한 ~~다 . 잘 먹 ~~기 ~~도 한 ~~다 .
    • ['나', '~~는', '걸어가', '~~고', '있', '~~는', '중', '~~입', '~~니다', '.', '나', '##는걸', '##어', '가', '~~고', '~있', '~~는', '중', '~~입', '~~니다', '.', '잘', '분류', '~~되', '~~기', '~~도', '한', '~~다', '.', '잘', '먹', '~~기', '~~도', '한', '~~다', '.']
  • HanBert에 대해서는 더 이상의 필요사항이 없습니다.
  • 추가적인 사항들은 구글에서 공개한 https://github.com/google-research/bert 실행 환경과 동일합니다.
    • Python : 3.6.8
    • tensorflow-gpu : 1.11.0
  • KorQuAD 1.0 학습 (https://korquad.github.io/category/1.0_KOR.html)
    • KorQuAD 1.0의 데이터를 다운로드 받으세요. KorQuAD_v1.0_train.json, KorQuAD_v1.0_dev.json
    • 평가용 프로그램을 다운로드 받으세요. KorQuAD_v1.0_dev.json
    • 예제로 나와있는 코드를 실행해 보세요
      • python src/run_korquad_1.0.py --init_checkpoint=HanBert-54kN --bert_config_file=HanBert-54kN/bert_config.json --vocab_file=HanBert-54kN/vocab_54k.txt --do_train=true --do_predict=true --train_batch_size=16 --num_train_epochs=1.0 --learning_rate=3e-5 --train_file=korquad.1.0/KorQuAD_v1.0_train.json --predict_file=korquad.1.0/KorQuAD_v1.0_dev.json --output_dir=result python evaluate-v1.0.py korquad.1.0/KorQuAD_v1.0_dev.json result/predictions.json

기계 독해 맛보기

  • 미리 학습을 시킨 기계 독해 모델로 느껴보실 수 있도록 학습된 모델을 소개합니다.
    • Model명 : HanBert-54kN-MRC
    • epochs : 3.0
  • 학습 데이터가 서로 다른 지침으로 작성되어서 동일한 형식의 질문에 각각 다른 답변의 유형이 존재합니다.
    • 학습데이터의 품질에 대해서도 의구심이 있지만, 공개되어 있는 학습데이터를 사용하여 학습하였습니다.
      • 문제시 되는 것들 :
      • 예 : 어디에서 출발해? A) 부산 B) 부산에서
  • 학습 데이터
    • HanBert-54kN + 기계독해 학습 데이터 (총 253,466건)
      • NIA의 기계독해 데이터 : 162,632건
      • KorQuAD 1.0의 데이터 : 66,181건
      • KorQuAD 2.0의 데이터 : 24,653건
  • 실행 방법과 예제
  • HanBert-54kN-MRC 디렉토리에 있는 bert_config와 model, vocab을 사용하세요.
  • src/mrc_test.py 코드에 기본으로 지정되어 있으나, 디렉토리가 변경된 경우에 지정해 주셔야 합니다.

Moran (한국어 문장을 Deep NLP용 한국어 표현으로 변환) 예제

>>> import moran
>>> moran_tokenizer = moran.MoranTokenizer()
>>> x = '한국어 BERT를 소개합니다.'
>>> moran_line = moran.text2moran(x, moran_tokenizer)
>>> print(moran_line)
['한국어', 'bert', '~~를', '소개', '~~합', '~~니다', '.']
>>> x = '<table> <tr> <td> 한국어 BERT를 소개합니다. </td> </tr> </table>'
>>> moran_line = moran.text2moran(x, moran_tokenizer)
>>> print(moran_line)
['<table>', '<tr>', '<td>', '한국어', 'bert', '~~를', '소개', '~~합', '~~니다', '.', '</td>', '</tr>', '</table>']

Contacts

  • info@twoblockai.com, 주식회사 투블럭에이아이, https://twoblockai.com/
  • HanBert와 Moran의 기술 및 Resouce 도입과 튜닝, 현업 적용 등의 상업적 이용을 위한 문의를 환영합니다.
  • HanBERT_MRC, HanBERT_NER의 라이센스에 대한 문의를 환영합니다.
  • 자체 보유중인 코퍼스와 투블럭Ai가 보유한 정제된 코퍼스를 통합하여 자체적인 BERT를 개발하기 위한 문의를 환영합니다.

HanBert 굽는데는 일부 TFRC 프로그램의 협찬을 받았습니다.

2019년 개방형 경진대회 우수기업 사업화 지원의 결과물 중 일부 입니다.

[뉴스] 투블럭에이아이 특허출원

정부기관과 투자사들은 객관적인 평가를 위해서 일정 수준의 Spec을 요구합니다. 그중에 하나가 지적자산이 특허입니다. 많은 경쟁자들 중에서 공정성있는 평가를 했다는 나름의 기준이 있어야 하니까 어쩔 수 없는 것 같습니다. 그래서 3개의 특허를 출원했습니다. (2019. 12)

딥러닝 학습을 위한 한국어 표기 방법 (출원번호 10-2019-0177174)

딥러닝을 위한 한국어 코퍼스는 어떻게 구성이 되어야 할까?

명사 “가”와 조사 “가”는 어떻게 구별될 수 있을까?

주제 특화 챗봇 서비스 제공 방법 및 장치 (출원번호 10-2019-0177173)

챗봇과 대화를 할때에 과거에 이야기했던 주제로 어떻게 돌아가지?
챗봇은 이미 대화의 주제를 알고 있는데, 이것을 사용자와 어떻게 쉽게 소통하지?

휴먼 인터랙티브 AI를 사용한 반자동 작문 방법 및 장치 (출원번호 10-2019-0177172)

글쓰기 Ai가 문법적으로 깔끔하고, 보통의 상식에 근거해서 글을 쓰기는 하는데…
주제는 정할 수 있지만, 흐름을 조절할 수 없으니까, 어떻게 사용해서 글을 쓰지?

“인공지능을 활용하는 시대에 더 이상 특허라는 제도가 의미가 있을까 싶기도 하고, 아이디어는 나누어야 발전할 수 있다는 생각이기는 하지만, Spec을 요구하는 사회 시스템을 따르지 않을 수도 없어서, 특허로 출원은 했습니다만, 여전히 특허 제도는 저작권 제도와 마찬가지로 진보되어야 한다는 생각입니다.” (TwoBlock Ai, 조영환)

글쓰는 Ai를 “특허 문서”에 학습을 시켰습니다. 문법적으로 완벽하고, 과거에 있지 않았던 내용을 술술써내려 갑니다. 한건의 특허 문서를 만들어내는데에 10분이내에 100원 정도의 비용이면 되는 것 같습니다. 그런데, 이 결과물을 특허로 내면 어찌 될까? 이 친구를 통해서 무한히 특허를 내볼 수도 있겠는데, 이제 특허 시스템은 어디로 가야 할까요?