kipi-ai / korpatbert

특허분야 특화된 한국어 AI언어모델 KorPatBERT

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

특허분야 특화된 한국어 AI언어모델 KorPatBERT(base, large)

KorPatBERT(Korean Patent BERT)는 한국특허정보원이 연구개발한 AI 언어모델입니다.
특허분야 한국어 자연어처리 문제 해결 및 특허산업분야의 지능정보화 인프라 마련을 위해 기존 Google BERT base 모델의 아키텍쳐를 기반으로 대용량 국내 특허문헌 (base: 약 406만 문헌, large: 약 506만 문헌)을 사전학습(pre-training)하였고, 무료로 제공하고 있습니다.

  • KorPatBERT 언론보도 소개
  • Google ELECTRA 기반 특허분야 특화된 언어모델 KorPatELECTRA 소개
  • 미국특허 320만 문헌(310GB)을 사전학습한 영어 BERT-large 모델 별도 제공

 

1. KorPatBERT

특허분야 특화된 고성능 사전학습(pre-trained) 언어모델로 다양한 자연어처리 태스크에서 활용 할 수 있습니다.

  KorPatBERT

 

2. KorPatBERT 개요

2-1. 사전학습 환경

개발환경

  • Anaconda >=4.6.8
  • Python >= 3.6
  • MSP Tokenizer(Mecab-ko Sentencepiece Patent Tokenizer)
  • Tensorflow-gpu >= 1.15.0
  • Sentencepiece >= 0.1.96
  • Horovod >= 0.19.2

학습환경

[KorPatBERT-base]

  • 특허문헌 120GB 코퍼스의 4억 6천만 문장 학습
  • NVIDIA V100 32GB GPU 16개로 분산학습 라이브러리 Horovod를 이용하여 학습
  • NVIDIA AMP(Automated Mixed Precision) 방식을 활용하여, 메모리 최적화
  • 128 Sequence 2,300,000 Step 학습 + 512 Sequence 750,000 Step 학습

[KorPatBERT-large]

  • 특허문헌 150GB 코퍼스의 6억 7천만 문장 학습
  • NVIDIA V100 32GB GPU 8개로 분산학습 라이브러리 Horovod를 이용하여 학습
  • NVIDIA AMP(Automated Mixed Precision) 방식을 활용하여, 메모리 최적화
  • 128 Sequence 2,250,000 Step 학습 + 512 Sequence 825,000 Step 학습

2-2. 코퍼스

[KorPatBERT-base]

  • 특허문헌수 : 4,065,519건
  • 문장 수 : 460,448,189건
  • 토큰 수 : 약 266억건
  • 코퍼스 크기 : 약 120GB

[KorPatBERT-large]

  • 특허문헌수 : 5,069,714건
  • 문장 수 : 675,017,195건
  • 토큰 수 : 약 332억건
  • 코퍼스 크기 : 약 150GB

2-3. 사전 및 토크나이저

언어모델 학습에 사용된 특허문헌을 대상으로 약 1,000만개의 주요 명사 및 복합명사를 추출하였으며, 이를 한국어 형태소분석기 Mecab-ko의 사용자 사전에 추가 후 Google SentencePiece를 통하여 Subword로 분할하는 방식의 특허 텍스트에 특화된 MSP 토크나이저(Mecab-ko Sentencepiece Patent Tokenizer)입니다.

  • Mecab-ko 특허 사용자 사전파일명 : pat_all_mecab_dic.csv (base 6,663,693개 용어, large 10,874,418개 용어)
  • SentencePiece 사전파일명 : korpat_vocab.txt (base 21,400개, large 27000개)
  • SentencePiece 스페셜 토큰 : [PAD], [UNK], [CLS], [SEP], [MASK]
  • KorPat Tokenizer 파일명 : korpat_tokenizer.py

2-4. 평가

  • 특허문헌 CPC코드 서브클래스(subclass) 분류 태스크
    • 144 labels, train data 351,487, dev data 39,053, test data 16,316
모델 Top@1(ACC)
Google BERT 72.33
KorBERT 73.29
KoBERT 33.75
KrBERT 72.39
KorPatBERT-base 76.32
KorPatBERT-large 77.06

 

  • 특허문헌 CPC코드 메인그룹(maingroup) 분류 태스크
    • 10,327 labels, train data 4,991,984, dev data 554,665, test data 297,034
모델 Top@1(ACC) Top@3(ACC) Top@5(ACC)
KorPatBERT-base 61.91 82.18 86.97
KorPatBERT-large 62.89 82.18 87.26

 

3. KorPatBERT 사용 안내

3-1. 요구사항

프로그램명 버전 설치안내 경로 필수여부
python 3.6 이상 https://www.python.org/ Y
anaconda 4.6.8 이상 https://www.anaconda.com/ N
tensorflow 2.2.0 이상 https://www.tensorflow.org/install/pip?hl=ko Y
sentencepiece 0.1.96 이상 https://github.com/google/sentencepiece N
mecab-ko 0.996-ko-0.0.2 https://bitbucket.org/eunjeon/mecab-ko-dic/src/master/ Y
mecab-ko-dic 2.1.1 https://bitbucket.org/eunjeon/mecab-ko-dic/src/master/ Y
mecab-python 0.996-ko-0.9.2 https://bitbucket.org/eunjeon/mecab-ko-dic/src/master/ Y
python-mecab-ko 1.0.11 이상 https://pypi.org/project/python-mecab-ko/ Y
keras 2.4.3 이상 https://github.com/keras-team/keras N
bert_for_tf2 0.14.4 이상 https://github.com/kpe/bert-for-tf2 N
tqdm 4.59.0 이상 https://github.com/tqdm/tqdm N
soynlp 0.0.493 이상 https://github.com/lovit/soynlp N

3-2. 토크나이저

3-2-1. Mecab-ko 설치 및 사용자 사전

Installation URL: https://bitbucket.org/eunjeon/mecab-ko-dic/src/master/
mecab-ko > 0.996-ko-0.9.2
mecab-ko-dic > 2.1.1
mecab-python > 0.996-ko-0.9.2

3-2-2. MSP 토크나이저

from korpat_tokenizer import Tokenizer

# (vocab_path=Vocabulary 파일 경로, cased=한글->True, 영문-> False)
tokenizer = Tokenizer(vocab_path="./korpat_vocab.txt", cased=True)
	
# 테스트 샘플 문장
example = "본 고안은 주로 일회용 합성세제액을 집어넣어 밀봉하는 세제액포의 내부를 원호상으로 열중착하되 세제액이 배출되는 절단부 쪽으로 내벽을 협소하게 형성하여서 내부에 들어있는 세제액을 잘짜질 수 있도록 하는 합성세제 액포에 관한 것이다."

# 샘플 토크나이즈
tokens = tokenizer.tokenize(example)

# 샘플 인코딩 (max_len=토큰 최대 길이)
ids, _ = tokenizer.encode(example, max_len=256)
# 샘플 디코딩
decoded_tokens = tokenizer.decode(ids)
	
# 결과 출력
print("Length of Token dictionary ===>", len(tokenizer._token_dict.keys()))
print("Input example ===>", example)
print("Tokenized example ===>", tokens)
print("Converted example to IDs ===>", ids)
print("Converted IDs to example ===>", decoded_tokens)

Result

Length of Token dictionary  ===>  21400
Input example ===>  본 고안은 주로 일회용 합성세제액을 집어넣어 밀봉하는 세제액포의 내부를 원호상으로 열중착하되 세제액이 배출되는 절단부 쪽으로 내벽을 협소하게 형성하여서 내부에 들어있는 세제액을 잘짜질 수 있도록 하는 합성세제 액포에 관한 것이다.
Tokenized example ===> ['[CLS]', '본', '고안', '은', '주로', '일회용', '합성', '##세', '##제', '##액', '을', '집', '##어넣', '어', '밀봉', '하', '는', '세제', '##액', '##포', '의', '내부', '를', '원호', '상', '으로', '열', '##중', '착하', '되', '세제', '##액', '이', '배출', '되', '는', '절단부', '쪽', '으로', '내벽', '을', '협소', '하', '게', '형성', '하', '여서', '내부', '에', '들', '어', '있', '는', '세제', '##액', '을', '잘', '짜', '질', '수', '있', '도록', '하', '는', '합성', '##세', '##제', '액', '##포', '에', '관한', '것', '이', '다', '.', '[SEP]']
Converted example to IDs ===>  [5, 58, 554, 32, 2716, 6554, 817, 20418, 20308, 20514, 15, 732, 15572, 39, 1634, 12, 11, 5934, 20514, 20367, 9, 315, 16, 5922, 17, 33, 279, 20399, 16971, 26, 5934, 20514, 13, 674, 26, 11, 10132, 1686, 33, 3781, 15, 11950, 12, 64, 87, 12, 3958, 315, 10, 51, 39, 25, 11, 5934, 20514, 15, 1803, 12889, 399, 24, 25, 118, 12, 11, 817, 20418, 20308, 299, 20367, 10, 439, 56, 13, 18, 14, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Converted IDs to example ===>  ['본', '고안', '은', '주로', '일회용', '합성', '##세', '##제', '##액', '을', '집', '##어넣', '어', '밀봉', '하', '는', '세제', '##액', '##포', '의', '내부', '를', '원호', '상', '으로', '열', '##중', '착하', '되', '세제', '##액', '이', '배출', '되', '는', '절단부', '쪽', '으로', '내벽', '을', '협소', '하', '게', '형성', '하', '여서', '내부', '에', '들', '어', '있', '는', '세제', '##액', '을', '잘', '짜', '질', '수', '있', '도록', '하', '는', '합성', '##세', '##제', '액', '##포', '에', '관한', '것', '이', '다', '.']

3-3. 파인튜닝

Google BERT base 학습 방식과 동일하며, 사용 예시는 특허분야 사전학습 언어모델(KorPatBERT) 사용자 매뉴얼 2.3절 참조하세요.

 

4. KorPatBERT 신청 안내

4-1. 사용신청 및 담당부서 안내

한국특허정보원 언어모델에 관심 있는 기관·기업, 연구자를 대상으로 일정한 절차를 통해 보급을 수행 중에 있습니다. 아래의 사용신청 절차에 따라 사용신청서 및 협약서를 작성하시어 담당자의 이메일로 신청·접수를 하시면 됩니다.

  • 담당부서 : IP디지털혁신센터 지능정보전략실
  • 모델제공 및 기타문의 : ai_support@kipi.or.kr

4-2. 사용신청 절차

  1. 언어모델 사용신청서(한글ver(1), 워드ver(2)) 및 협약서 서식을 내려 받아 원하는 모델을 선택하여(동시 선택 가능) 소속정보를 포함해 작성합니다.
  • 본 언어모델은 활용현황 및 사후관리를 위하여 소속이 인증된 사용자를 대상으로 배포하며, 소속은 기관·기업 및 학교 도메인의 메일을 통해 접수해주시는 것으로 갈음합니다.
  1. 작성된 신청서류를 담당자 이메일(ai_support@kipi.or.kr)로 제출합니다.
  2. 제출서류하신 서류의 담당자 확인 이후 언어모델 및 사용자 매뉴얼을 이메일을 통해 제공받습니다.
  3. 추후 본 언어모델을 활용하여 상업적 용도로의 사용을 위해서는 라이선스 안내에 따라 관련내용을 작성하여 담당자에게 보내주시면 협의 후 진행이 가능합니다.

4-3. 제공 파일

파일명 설명
pat_all_mecab_dic.csv Mecab 특허사용자사전
lm_test_data.tsv 분류 샘플 데이터 셋
korpat_tokenizer.py KorPat Tokenizer 프로그램
test_tokenize.py Tokenizer 사용 샘플
test_tokenize.ipynb Tokenizer 사용 샘플 (주피터)
test_lm.py 언어모델 사용 샘플
test_lm.ipynb 언어모델 사용 샘플 (주피터)
korpat_bert_config.json KorPatBERT Config 파일
korpat_vocab.txt KorPatBERT Vocabulary 파일
model.ckpt-381250.meta KorPatBERT Model 파일
model.ckpt-381250.index KorPatBERT Model 파일
model.ckpt-381250.data-00000-of-00001 KorPatBERT Model 파일

4-4. 관련 서식

About

특허분야 특화된 한국어 AI언어모델 KorPatBERT