introduction_en.ipynb 8.6 KB
Notebook
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "21e8b000",
   "metadata": {},
   "source": [
    "# KcBERT: Korean comments BERT\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "336ee0b8",
   "metadata": {},
   "source": [
    "Kaggle에 학습을 위해 정제한(아래 `clean`처리를 거친) Dataset을 공개하였습니다!\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "691c1f27",
   "metadata": {},
   "source": [
    "직접 다운받으셔서 다양한 Task에 학습을 진행해보세요 :)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36ec915c",
   "metadata": {},
   "source": [
    "공개된 한국어 BERT는 대부분 한국어 위키, 뉴스 기사, 책 등 잘 정제된 데이터를 기반으로 학습한 모델입니다. 한편, 실제로 NSMC와 같은 댓글형 데이터셋은 정제되지 않았고 구어체 특징에 신조어가 많으며, 오탈자 등 공식적인 글쓰기에서 나타나지 않는 표현들이 빈번하게 등장합니다.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b5b8d7d7",
   "metadata": {},
   "source": [
    "KcBERT는 위와 같은 특성의 데이터셋에 적용하기 위해, 네이버 뉴스에서 댓글과 대댓글을 수집해, 토크나이저와 BERT모델을 처음부터 학습한 Pretrained BERT 모델입니다.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0095da8",
   "metadata": {},
   "source": [
    "KcBERT는 Huggingface의 Transformers 라이브러리를 통해 간편히 불러와 사용할 수 있습니다. (별도의 파일 다운로드가 필요하지 않습니다.)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4bf51d97",
   "metadata": {},
   "source": [
    "## KcBERT Performance\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9679c8b9",
   "metadata": {},
   "source": [
    "- Finetune 코드는 https://github.com/Beomi/KcBERT-finetune 에서 찾아보실 수 있습니다.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "486782a2",
   "metadata": {},
   "source": [
    "|                       | Size<br/>(용량)  | **NSMC**<br/>(acc) | **Naver NER**<br/>(F1) | **PAWS**<br/>(acc) | **KorNLI**<br/>(acc) | **KorSTS**<br/>(spearman) | **Question Pair**<br/>(acc) | **KorQuaD (Dev)**<br/>(EM/F1) |\n",
    "| :-------------------- | :---: | :----------------: | :--------------------: | :----------------: | :------------------: | :-----------------------: | :-------------------------: | :---------------------------: |\n",
    "| KcBERT-Base                | 417M  |       89.62        |         84.34          |       66.95        |        74.85         |           75.57           |            93.93            |         60.25 / 84.39         |\n",
    "| KcBERT-Large                | 1.2G  |       **90.68**        |         85.53          |       70.15        |        76.99         |           77.49           |            94.06            |         62.16 / 86.64          |\n",
    "| KoBERT                | 351M  |       89.63        |         86.11          |       80.65        |        79.00         |           79.64           |            93.93            |         52.81 / 80.27         |\n",
    "| XLM-Roberta-Base      | 1.03G |       89.49        |         86.26          |       82.95        |        79.92         |           79.09           |            93.53            |         64.70 / 88.94         |\n",
    "| HanBERT               | 614M  |       90.16        |       **87.31**        |       82.40        |      **80.89**       |           83.33           |            94.19            |         78.74 / 92.02         |\n",
    "| KoELECTRA-Base    | 423M  |     **90.21**      |         86.87          |       81.90        |        80.85         |           83.21           |            94.20            |         61.10 / 89.59         |\n",
    "| KoELECTRA-Base-v2 | 423M  |       89.70        |         87.02          |     **83.90**      |        80.61         |         **84.30**         |          **94.72**          |       **84.34 / 92.58**       |\n",
    "| DistilKoBERT           | 108M |       88.41        |         84.13          |       62.55        |        70.55         |           73.21           |            92.48            |         54.12 / 77.80         |\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e86103a2",
   "metadata": {},
   "source": [
    "\\*HanBERT의 Size는 Bert Model과 Tokenizer DB를 합친 것입니다.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1078bc5d",
   "metadata": {},
   "source": [
    "\\***config의 세팅을 그대로 하여 돌린 결과이며, hyperparameter tuning을 추가적으로 할 시 더 좋은 성능이 나올 수 있습니다.**\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ac2ee11",
   "metadata": {},
   "source": [
    "## How to use\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e171068a",
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install --upgrade paddlenlp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "38c7ad79",
   "metadata": {},
   "outputs": [],
   "source": [
    "import paddle\n",
    "from paddlenlp.transformers import AutoModel\n",
    "\n",
    "model = AutoModel.from_pretrained(\"beomi/kcbert-base\")\n",
    "input_ids = paddle.randint(100, 200, shape=[1, 20])\n",
    "print(model(input_ids))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a794d15a",
   "metadata": {},
   "source": [
    "```\n",
    "@inproceedings{lee2020kcbert,\n",
    "title={KcBERT: Korean Comments BERT},\n",
    "author={Lee, Junbum},\n",
    "booktitle={Proceedings of the 32nd Annual Conference on Human and Cognitive Language Technology},\n",
    "pages={437--440},\n",
    "year={2020}\n",
    "}\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0183cbe",
   "metadata": {},
   "source": [
    "- 논문집 다운로드 링크: http://hclt.kr/dwn/?v=bG5iOmNvbmZlcmVuY2U7aWR4OjMy (*혹은 http://hclt.kr/symp/?lnb=conference )\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba768b26",
   "metadata": {},
   "source": [
    "## Acknowledgement\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea148064",
   "metadata": {},
   "source": [
    "KcBERT Model을 학습하는 GCP/TPU 환경은 TFRC 프로그램의 지원을 받았습니다.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78732669",
   "metadata": {},
   "source": [
    "모델 학습 과정에서 많은 조언을 주신 [Monologg](https://github.com/monologg/) 님 감사합니다 :)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ffa9ed9",
   "metadata": {},
   "source": [
    "## Reference\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea69da89",
   "metadata": {},
   "source": [
    "### Github Repos\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d72d564c",
   "metadata": {},
   "source": [
    "- [BERT by Google](https://github.com/google-research/bert)\n",
    "- [KoBERT by SKT](https://github.com/SKTBrain/KoBERT)\n",
    "- [KoELECTRA by Monologg](https://github.com/monologg/KoELECTRA/)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38503607",
   "metadata": {},
   "source": [
    "- [Transformers by Huggingface](https://github.com/huggingface/transformers)\n",
    "- [Tokenizers by Hugginface](https://github.com/huggingface/tokenizers)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a71a565f",
   "metadata": {},
   "source": [
    "### Papers\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9aa4d324",
   "metadata": {},
   "source": [
    "- [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b1ba932",
   "metadata": {},
   "source": [
    "### Blogs\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c9e32e1",
   "metadata": {},
   "source": [
    "- [Monologg님의 KoELECTRA 학습기](https://monologg.kr/categories/NLP/ELECTRA/)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b551dcf",
   "metadata": {},
   "source": [
    "> The model introduction and model weights originate from [https://huggingface.co/beomi/kcbert-base](https://huggingface.co/beomi/kcbert-base) and were converted to PaddlePaddle format for ease of use in PaddleNLP.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}