hanbert-tokenizer

Hanbert Tokenizer


Keywords
hanbert, tokenizer, moran
Install
pip install hanbert-tokenizer==0.1.7

Documentation

HanBERT-54kN


ํ•œ๊ตญ์–ด BERT (HanBert-54kN) Model & Code Download

  • HanBERT 54kN 500๋งŒ Steps ๋ชจ๋ธ์„ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„์ƒ์—…์ ์ธ ์—ฐ๊ตฌ์™€ ๊ต์œก, ๊ทธ๋ฆฌ๊ณ  ๊ฒฝ์ง„๋Œ€ํšŒ์— ํ™œ์šฉํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒ์—…์  ๋ชฉ์ ์˜ ํ™œ์šฉ (์„œ๋น„์Šค ํ˜น์€ ์ œํ’ˆ์— ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ)์— ๋Œ€ํ•ด์„œ๋Š” ํšŒ์‚ฌ์™€ ํ˜‘์˜ํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. info@twoblockai.com
  • ๊ธฐ์—…์—์„œ์˜ ํ™œ์šฉ์€ ๋น„์ƒ์—…์  ๋ชฉ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ผ์ด์„ผ์Šค ๊ตฌ์ž… ๋ฌธ์˜๋ฅผ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ณ  ํŽ˜์ด์ง€ : https://twoblockai.com/resource-2/
  • ๋‹ค์šด๋กœ๋“œ ํŽ˜์ด์ง€ : https://twoblockai.com/2020/01/22/hanbert%EB%A5%BC-%EA%B3%B5%EA%B0%9C%ED%95%A9%EB%8B%88%EB%8B%A4/
  • ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์—์„œ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œ : https://drive.google.com/file/d/1EcrsAIWrhnWDoo0O6M-ikmYT3R-z0Kna/view?usp=sharing

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๋งŒ (๊ณต๊ฐœ ๋ฒ„์ ผ์€ 300๋งŒ)
    • ํŠนํ—ˆ ์ถ”๊ฐ€ Step์ˆ˜ : 600๋งŒ (์ผ๋ฐ˜ 500๋งŒ + ํŠนํ—ˆ๋ฌธ์„œ 100๋งŒ)
  • ํ•œ๊ตญ์–ด ํ˜•ํƒœ์†Œ ๋ถ„์ ˆ

    • 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๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • hanbert54kN.tar.gz๋ฅผ ํ’€๋ฉด, ๋งจ์ฒ˜์Œ ํ•ด์•ผ ํ•˜๋Š” ์ผ์€ moran์˜ ํ™œ์„ฑํ™”์ž…๋‹ˆ๋‹ค.
  • 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
    
    

๊ธฐ๊ณ„ ๋…ํ•ด ๋ง›๋ณด๊ธฐ

  • GPU๋งŒ ์žˆ์œผ๋ฉด ์‹คํ–‰ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฏธ๋ฆฌ ํ•™์Šต์„ ์‹œํ‚จ ๊ธฐ๊ณ„ ๋…ํ•ด ๋ชจ๋ธ๋กœ ๋Š๊ปด๋ณด์‹ค ์ˆ˜ ์žˆ๋„๋ก ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค.

    • 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 ์ฝ”๋“œ์— ๊ธฐ๋ณธ์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ์œผ๋‚˜, ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์— ์ง€์ •ํ•ด ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    $ python src/mrc_test.py --example_file=korquad.1.0/KorQuAD_v1.0_dev.json
    
    =========== ๊ธฐ๊ณ„๋…ํ•ด ์˜ˆ๋ฌธ 964๊ฑด Loadind Done ...  by TBai ==============
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : 1
    ์˜ˆ์ œ : 1989๋…„ 2์›” 15์ผ ์—ฌ์˜๋„ ๋†๋ฏผ ํญ๋ ฅ ์‹œ์œ„๋ฅผ ์ฃผ๋„ํ•œ ํ˜์˜(ํญ๋ ฅํ–‰์œ„๋“ฑ์ฒ˜๋ฒŒ์—๊ด€ํ•œ๋ฒ•๋ฅ ์œ„๋ฐ˜)์œผ๋กœ ์ง€๋ช…์ˆ˜๋ฐฐ๋˜์—ˆ๋‹ค. 1989๋…„ 3์›” 12์ผ ์„œ์šธ์ง€๋ฐฉ๊ฒ€์ฐฐ์ฒญ ๊ณต์•ˆ๋ถ€๋Š” ์ž„์ข…์„์˜ ์‚ฌ์ „๊ตฌ์†์˜์žฅ์„ ๋ฐœ๋ถ€๋ฐ›์•˜๋‹ค. ๊ฐ™์€ ํ•ด 6์›” 30์ผ ํ‰์–‘์ถ•์ „์— ์ž„์ˆ˜๊ฒฝ์„ ๋Œ€ํ‘œ๋กœ ํŒŒ๊ฒฌํ•˜์—ฌ ๊ตญ๊ฐ€๋ณด์•ˆ๋ฒ•์œ„๋ฐ˜ ํ˜์˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๊ฒฝ์ฐฐ์€ 12์›” 18์ผ~20์ผ ์‚ฌ์ด ์„œ์šธ ๊ฒฝํฌ๋Œ€ํ•™๊ต์—์„œ ์ž„์ข…์„์ด ์„ฑ๋ช… ๋ฐœํ‘œ๋ฅผ ์ถ”์ง„ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ฒฉ๋ณด๋ฅผ ์ž…์ˆ˜ํ–ˆ๊ณ , 12์›” 18์ผ ์˜ค์ „ 7์‹œ 40๋ถ„ ๊ฒฝ ๊ฐ€์Šค์ด๊ณผ ์ „์ž๋ด‰์œผ๋กœ ๋ฌด์žฅํ•œ ํŠน๊ณต์กฐ ๋ฐ ๋Œ€๊ณต๊ณผ ์ง์› 12๋ช… ๋“ฑ 22๋ช…์˜ ์‚ฌ๋ณต ๊ฒฝ์ฐฐ์„ ์Šน์šฉ์ฐจ 8๋Œ€์— ๋‚˜๋ˆ„์–ด ๊ฒฝํฌ๋Œ€ํ•™๊ต์— ํˆฌ์ž…ํ–ˆ๋‹ค. 1989๋…„ 12์›” 18์ผ ์˜ค์ „ 8์‹œ 15๋ถ„ ๊ฒฝ ์„œ์šธ์ฒญ๋Ÿ‰๋ฆฌ๊ฒฝ์ฐฐ์„œ๋Š” ํ˜ธ์œ„ ํ•™์ƒ 5๋ช…๊ณผ ํ•จ๊ป˜ ๊ฒฝํฌ๋Œ€ํ•™๊ต ํ•™์ƒํšŒ๊ด€ ๊ฑด๋ฌผ ๊ณ„๋‹จ์„ ๋‚ด๋ ค์˜ค๋Š” ์ž„์ข…์„์„ ๋ฐœ๊ฒฌ, ๊ฒ€๊ฑฐํ•ด ๊ตฌ์†์„ ์ง‘ํ–‰ํ–ˆ๋‹ค. ์ž„์ข…์„์€ ์ฒญ๋Ÿ‰๋ฆฌ๊ฒฝ์ฐฐ์„œ์—์„œ ์•ฝ 1์‹œ๊ฐ„ ๋™์•ˆ ์กฐ์‚ฌ๋ฅผ ๋ฐ›์€ ๋’ค ์˜ค์ „ 9์‹œ 50๋ถ„ ๊ฒฝ ์„œ์šธ ์žฅ์•ˆ๋™์˜ ์„œ์šธ์ง€๋ฐฉ๊ฒฝ์ฐฐ์ฒญ ๊ณต์•ˆ๋ถ„์‹ค๋กœ ์ธ๊ณ„๋˜์—ˆ๋‹ค.
    
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : ๋ช‡์‹œ๊ฐ„ ๋™์•ˆ ์กฐ์‚ฌ ๋ฐ›์•˜์–ด?
    ... Reading : 1 pages Start ... Done ... ๋‹ต๋ณ€ ์‹ ๋ขฐ๋„ :  (8.460, 75.38%)
    ๋…ํ•ด๊ฒฐ๊ณผ  : 1์‹œ๊ฐ„
    
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : ๋ช‡์‹œ์— ๊ณต์•ˆ๋ถ„์‹ค๋กœ ์ธ๊ณ„๋˜์—ˆ์–ด?
    ... Reading : 1 pages Start ... Done ... ๋‹ต๋ณ€ ์‹ ๋ขฐ๋„ :  (15.47, 91.88%)
    ๋…ํ•ด๊ฒฐ๊ณผ  : ์˜ค์ „ 9์‹œ 50๋ถ„
    
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : 2
    ๋‹ค์Œ ๋ฌธ์„œ๋กœ ๊ฐ‘๋‹ˆ๋‹ค.
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : 1
    ์˜ˆ์ œ : "๋‚ด๊ฐ๊ณผ ์žฅ๊ด€๋“ค์ด ์†Œ์™ธ๋˜๊ณ  ๋Œ€ํ†ต๋ น๋น„์„œ์‹ค์˜ ๊ถŒํ•œ์ด ๋„ˆ๋ฌด ํฌ๋‹ค", "ํ–‰๋ณด๊ฐ€ ๋น„์„œ ๋ณธ์—ฐ์˜ ์—ญํ• ์„ ๋ฒ—์–ด๋‚œ๋‹ค"๋Š” ์˜๊ฒฌ์ด ์ œ๊ธฐ๋˜์—ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ 10์ฐจ ๊ฐœํ—Œ์•ˆ ๋ฐœํ‘œ์ด๋‹ค. ์›๋กœ ํ—Œ๋ฒ•ํ•™์ž์ธ ํ—ˆ์˜ ๊ฒฝํฌ๋Œ€ ์„์ขŒ๊ต์ˆ˜๋Š” ์ •๋ถ€์˜ ํ—Œ๋ฒ•๊ฐœ์ •์•ˆ ์ค€๋น„ ๊ณผ์ •์— ๋Œ€ํ•ด "์ฒญ์™€๋Œ€ ๋น„์„œ์‹ค์ด ์•„๋‹Œ ๊ตญ๋ฌดํšŒ์˜ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ค„์กŒ์–ด์•ผ ํ–ˆ๋‹ค"๊ณ  ์ง€์ ํ–ˆ๋‹ค. '๊ตญ๋ฌดํšŒ์˜์˜ ์‹ฌ์˜๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค'(์ œ89์กฐ)๋Š” ํ—Œ๋ฒ• ๊ทœ์ •์— ์ถฉ์‹คํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ "๋ฒ•๋ฌด๋ถ€ ์žฅ๊ด€์„ ์ œ์ณ๋†“๊ณ  ๋ฏผ์ •์ˆ˜์„์ด ๊ฐœ์ •์•ˆ์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒŒ ์ดํ•ด๊ฐ€ ์•ˆ ๋œ๋‹ค"๊ณ  ์ง€์ ํ–ˆ๋‹ค. ๋ฏผ์ •์ˆ˜์„์€ ๊ตญํšŒ์˜์›์— ๋Œ€ํ•ด ์ฑ…์ž„์ง€๋Š” ๋ฒ•๋ฌด๋ถ€ ์žฅ๊ด€๋„ ์•„๋‹ˆ๊ณ , ๊ตญ๋ฏผ์— ๋Œ€ํ•ด ์ฑ…์ž„์ง€๋Š” ์‚ฌ๋žŒ๋„ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋‹น์„ฑ์ด ์—†๊ณ , ๋‹จ์ง€ ๋Œ€ํ†ต๋ น์˜ ์‹ ์ž„์ด ์žˆ์„ ๋ฟ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ๊ตญ๋ฌด์ด๋ฆฌ ์„ ์ถœ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ธฐ์ž์˜ ์งˆ๋ฌธ์— "๋ฌธ ๋Œ€ํ†ต๋ น๋„ ์ทจ์ž„ ์ „์— ๊ตญ๋ฌด์ด๋ฆฌ์—๊ฒŒ ์‹ค์งˆ์  ๊ถŒํ•œ์„ ์ฃผ๊ฒ ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ ๊ทธ๋Ÿฌ์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค. ๋Œ€ํ†ต๋ น๋น„์„œ์‹ค์žฅ๋งŒ๋„ ๋ชปํ•œ ๊ถŒํ•œ์„ ํ–‰์‚ฌํ•˜๊ณ  ์žˆ๋‹ค."๊ณ  ๋‹ต๋ณ€ํ–ˆ๋‹ค.
    
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : ๊ฒฝํฌ๋Œ€ ์„์ขŒ๊ต์ˆ˜๊ฐ€ ๋ˆ„๊ตฌ์•ผ?
    ... Reading : 1 pages Start ... Done ... ๋‹ต๋ณ€ ์‹ ๋ขฐ๋„ :  (16.08, 99.84%)
     ๋…ํ•ด๊ฒฐ๊ณผ  : ํ—ˆ์˜
    
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : ๊ตญ๋ฌดํšŒ์˜์˜ ์‹ฌ์˜๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ—Œ๋ฒ• ๋ช‡์กฐ์•ผ?
    ... Reading : 1 pages Start ... Done ... ๋‹ต๋ณ€ ์‹ ๋ขฐ๋„ :  (17.55, 93.74%)
    ๋…ํ•ด๊ฒฐ๊ณผ  : ์ œ89์กฐ
    
    
    * ๋ช…๋ น์–ด  : 1) ๋‚ด์šฉ๋ณด๊ธฐ, 2) ๋‹ค์Œ ์˜ˆ์ œ, 3) ๋๋‚ด๊ธฐ
    * ์งˆ์˜๋ฌธ  : 3
    
    
        ํˆฌ๋ธ”๋Ÿญ์—์ด์•„์ด์—์„œ ์ œ๊ณตํ•˜์—ฌ ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. https://twoblockai.com/
    
    

Moran (ํ•œ๊ตญ์–ด ๋ฌธ์žฅ์„ Deep NLP์šฉ ํ•œ๊ตญ์–ด ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜) ์˜ˆ์ œ

  • moran.db, libmoran4dnlp.so์˜ ๊ธฐ๋ณธ ์œ„์น˜๋Š” /usr/local/moran ์ž…๋‹ˆ๋‹ค.
  • moran.py์˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ ํ•ด๋‹น so์˜ ์œ„์น˜๋ฅผ ์ˆ˜์ •ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • moran.db๋Š” moran์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ „๊ณผ ๋ฌธ๋ฒ•์ด ํ•ฉ์ณ์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ /usr/local/moran์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • udict.txt๋Š” ์‚ฌ์šฉ์ž ๊ธฐ๋ถ„์„œ-์‚ฌ์ „์ž…๋‹ˆ๋‹ค. ๋„์–ด์“ฐ๊ธฐ ๋‹จ์œ„์ธ ์–ด์ ˆ์— ๋Œ€ํ•œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ /usr/local/moran์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • uentity.txt๋Š” ์‚ฌ์šฉ์ž ๋ช…์นญ์–ด ์‚ฌ์ „์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋ฒ„์ ผ์—์„œ๋Š” ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ, ๊ทธ๋Œ€๋กœ ๋‘์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ /usr/local/moran์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
python
>>> 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>']


KorQuAD 1.0 ํ•™์Šต๊ณผ ์ถ”๋ก 

  • ๊ตฌ๊ธ€์˜ Code๋ฅผ ์ผ๋ถ€ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์‹ ๋‹ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.
   $ python src/run_korquad_1.0.py --init_checkpoint=HanBert-54kN/HanBert-54kN --bert_config_file=HanBert-54kN/HanBert-54kN/bert_config.json --vocab_file=HanBert-54kN/HanBert-54kN/vocab_54k.txt --do_train=true --do_predict=true --train_batch_size=16 --num_train_epochs=5.0 --learning_rate=3e-5 --train_file=KorQuAD_v1.0_train.json --predict_file=KorQuAD_v1.0_dev.json --output_dir=54kN-result
   $ time python src/run_korquad_1.0.py --init_checkpoint=HanBert-54kN/HanBert-54kN-IP --bert_config_file=HanBert-54kN/HanBert-54kN-IP/bert_config.json --vocab_file=HanBert-54kN/HanBert-54kN-IP/vocab_54k.txt --do_train=true --do_predict=true --train_batch_size=16 --num_train_epochs=5.0 --learning_rate=3e-5 --train_file=KorQuAD_v1.0_train.json --predict_file=KorQuAD_v1.0_dev.json --output_dir=54kN-IP-result
   real	130m5.984s
   user	54m54.364s
   sys	28m56.004s

   $ python evaluate-v1.0.py KorQuAD_v1.0_dev.json 54kN-result/predictions.json
   EM = 83.495     F1 = 93.146 

   $ python evaluate-v1.0.py KorQuAD_v1.0_dev.json 54kN-IP-result/predictions.json
   EM = 81.902     F1 = 92.026 

Version History

  • v.0.1 : ์ดˆ๊ธฐ ๋ชจ๋ธ ๋ฆด๋ฆฌ์ฆˆ
  • v.1.0 : 500๋งŒ Step ๋ชจ๋ธ ๋ฆด๋ฆฌ์ฆˆ

Contacts

  • info@twoblockai.com, ์ฃผ์‹ํšŒ์‚ฌ ํˆฌ๋ธ”๋Ÿญ์—์ด์•„์ด, https://twoblockai.com/
  • HanBert์™€ Moran์˜ ๊ธฐ์ˆ  ๋ฐ Resouce ๋„์ž…๊ณผ ํŠœ๋‹, ํ˜„์—… ์ ์šฉ ๋“ฑ์˜ ์ƒ์—…์  ์ด์šฉ์„ ์œ„ํ•œ ๋ฌธ์˜๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • HanBERT_MRC, HanBERT_NER์˜ ๋ผ์ด์„ผ์Šค์— ๋Œ€ํ•œ ๋ฌธ์˜๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์ฒด ๋ณด์œ ์ค‘์ธ ์ฝ”ํผ์Šค์™€ ํˆฌ๋ธ”๋ŸญAi๊ฐ€ ๋ณด์œ ํ•œ ์ •์ œ๋œ ์ฝ”ํผ์Šค๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์ž์ฒด์ ์ธ BERT๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์˜๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

HanBERT์˜ ์ƒ์—…์  ํ™œ์šฉ ์•ˆ๋‚ด ํŽ˜์ด์ง€