safetensors bert region:us
---
{}
---
# KoBERT-NER-Diet

KoBERT를 이용한 Diet Domain 한국어 Named Entity Recognition(NER) 작업을 위한 가이드입니다. 🤗 `Huggingface Transformers` 라이브러리를 활용하여 KoBERT를 손쉽게 사용할 수 있습니다.

## How to use KoBERT on Huggingface Transformers Library

- 기존의 KoBERT를 transformers 라이브러리에서 곧바로 사용할 수 있도록 최적화하였습니다.
  - transformers v2.2.2부터는 개인이 만든 모델을 transformers를 통해 직접 업로드하고 다운로드하여 사용할 수 있습니다.
- Tokenizer를 사용하려면 `utils.py`에서 `KoBERTTokenizer`를 임포트해야 합니다.

```python
from transformers import BertModel
from kobert_tokenizer import KoBERTTokenizer

def load_tokenizer(args):
    bert_tokenizer = KoBERTTokenizer.from_pretrained(pretrained_model_name_or_path="skt/kobert-base-v1")
    return bert_tokenizer
```

## Usage

```bash
$ python3 main.py --model_type kobert --do_train --do_eval
```

- `--write_pred` 옵션을 주면 **evaluation의 prediction 결과**가 `preds` 폴더에 저장됩니다.

## Prediction

```bash
$ python3 predict.py --input_file {INPUT_FILE_PATH} --output_file {OUTPUT_FILE_PATH} --model_dir {SAVED_CKPT_PATH}
```

## Results

| 모델                        | Slot F1 (%) |
|---------------------------|-------------|
| KoBERT                    | 99.00       |
| DistilKoBERT              | 90.00       |
| Bert-Multilingual         | 99.00       |

## 데이터 설명
- **FOOD-B**: 음식 시작 태그
- **FOOD-I**: 음식 안에 있는 태그
- **QTY-B**: 수량 시작 태그
- **QTY-I**: 수량 안에 있는 태그
- **UNIT-B**: 단위 시작 태그

### NER 입력 예시
```
나는 한잔은 아이스 아메리카노를 마시고 디저트는 마카롱 3개를 먹음.
```

### NER 출력 예시
```
나는 [한:QTY-B] [잔:UNIT-B] 은 [아이스:FOOD-B] [아메리카노:FOOD-I] 마시고 디저트는 [마카롱:FOOD-B] [3:QTY-B] [개:UNIT-B] 를 먹음.
```

## References

- [Naver NLP Challenge](https://github.com/naver/nlp-challenge)
- [Huggingface Transformers](https://github.com/huggingface/transformers)
