├── Quora ├── A look at different embeddings.!.ipynb └── how-to-preprocessing-when-using-embeddings.ipynb ├── README.md ├── Toxic Comment Classification Challenge └── Do_Pretrained_Embeddings_Give_You_The_Extra_Edge?.ipynb └── use_tutorial.md /Quora/how-to-preprocessing-when-using-embeddings.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "#在这个内核中,我想说明在构建深度学习NLP模型时如何进行有意义的预处理。\n", 10 | "#我开始的两条黄金法则:\n", 11 | "#1.使用标准的预处理步骤不喜欢阻止或stopword切除时pre-trained嵌入\n", 12 | "#一些您可能使用标准的预处理步骤时基于字数等特征提取(例如TFIDF)删除stopwords,引发等。原因很简单:你宽松的有价值的信息,这将有助于你神经网络图的东西。\n", 13 | "#2.让你的词汇量尽可能接近嵌入\n", 14 | "#我将集中在这个笔记本,如何实现这一点。以GoogleNews预培训的嵌入式为例,这种选择没有更深层次的原因。" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "import pandas as pd\n", 24 | "from tqdm import tqdm\n", 25 | "tqdm.pandas()" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 2, 31 | "metadata": {}, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "Train shape: (1306122, 3)\n", 38 | "Test shape: (56370, 2)\n" 39 | ] 40 | } 41 | ], 42 | "source": [ 43 | "# 加载数据\n", 44 | "train = pd.read_csv('../input/train.csv')\n", 45 | "test = pd.read_csv('../input/test.csv')\n", 46 | "print('Train shape:', train.shape)\n", 47 | "print('Test shape:', test.shape)" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 3, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "#我将使用下面的函数来跟踪我们的训练词汇,它将遍历我们的所有文本并计算包含的单词的出现次数。\n", 57 | "def build_vocab(sentences, verbose = True):\n", 58 | " # 参数 sentences list of list of words,就是二维的\n", 59 | " # 返回值 对应 词和词的次数 的字典\n", 60 | " vocab = {}\n", 61 | " for sentence in tqdm(sentences, disable = (not verbose)):\n", 62 | " for word in sentence:\n", 63 | " try:\n", 64 | " vocab[word] += 1\n", 65 | " except KeyError:\n", 66 | " vocab[word] = 1\n", 67 | " return vocab" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 4, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "name": "stderr", 77 | "output_type": "stream", 78 | "text": [ 79 | "100%|███| 1306122/1306122 [00:04<00:00, 266825.76it/s]\n", 80 | "100%|███| 1306122/1306122 [00:05<00:00, 254818.90it/s]\n" 81 | ] 82 | }, 83 | { 84 | "name": "stdout", 85 | "output_type": "stream", 86 | "text": [ 87 | "{'How': 261930, 'did': 33489, 'Quebec': 97, 'nationalists': 91, 'see': 9003}\n" 88 | ] 89 | } 90 | ], 91 | "source": [ 92 | "#因此,让我们填充词汇表并显示前5个元素及其计数。注意,现在我们可以使用progess_apply查看进度条\n", 93 | "sentences = train['question_text'].progress_apply(lambda x: x.split()).values\n", 94 | "vocab = build_vocab(sentences)\n", 95 | "print({k: vocab[k] for k in list(vocab)[:5]})" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 6, 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [ 104 | "#接下来,我们导入我们稍后要在模型中使用的Embedding。为了说明这一点,我在这里使用GoogleNews\n", 105 | "from gensim.models import KeyedVectors\n", 106 | "\n", 107 | "news_path = '../input/embeddings/GoogleNews-vectors-negative300/GoogleNews-vectors-negative300.bin'\n", 108 | "embedding_index = KeyedVectors.load_word2vec_format(news_path, binary=True)" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 15, 114 | "metadata": {}, 115 | "outputs": [], 116 | "source": [ 117 | "#接下来,我定义一个函数来检查词汇表和嵌入之间的交集。它将输出一个out of vocabulary (oov)单词列表,我们可以使用它来改进我们的预处理\n", 118 | "import operator\n", 119 | "def check_coverage(vocab, embeddings_index):\n", 120 | " a = {}\n", 121 | " oov = {}\n", 122 | " k = 0\n", 123 | " i = 0\n", 124 | " for word in tqdm(vocab):\n", 125 | " try:\n", 126 | " a[word] = embeddings_index[word]\n", 127 | " k += vocab[word]\n", 128 | " except:\n", 129 | " oov[word] = vocab[word]\n", 130 | " i += vocab[word]\n", 131 | " pass\n", 132 | " \n", 133 | " print('Found embeddings for {:.2%} of vocab'.format(len(a) / len(vocab)))\n", 134 | " print('Found embeddings for {:.2%} of all text'.format(k / (k + i)))\n", 135 | " sorted_x = sorted(oov.items(), key=operator.itemgetter(1))[::-1]#取axis=1维度进行排序,并换为逆序\n", 136 | " \n", 137 | " return sorted_x" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": 16, 143 | "metadata": {}, 144 | "outputs": [ 145 | { 146 | "name": "stderr", 147 | "output_type": "stream", 148 | "text": [ 149 | "100%|█████| 508823/508823 [00:01<00:00, 374703.65it/s]\n" 150 | ] 151 | }, 152 | { 153 | "name": "stdout", 154 | "output_type": "stream", 155 | "text": [ 156 | "Found embeddings for 24.31% of vocab\n", 157 | "Found embeddings for 78.75% of all text\n" 158 | ] 159 | } 160 | ], 161 | "source": [ 162 | "oov = check_coverage(vocab, embedding_index)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 17, 168 | "metadata": {}, 169 | "outputs": [ 170 | { 171 | "data": { 172 | "text/plain": [ 173 | "[('to', 403183),\n", 174 | " ('a', 402682),\n", 175 | " ('of', 330825),\n", 176 | " ('and', 251973),\n", 177 | " ('India?', 16384),\n", 178 | " ('it?', 12900),\n", 179 | " ('do?', 8753),\n", 180 | " ('life?', 7753),\n", 181 | " ('you?', 6295),\n", 182 | " ('me?', 6202)]" 183 | ] 184 | }, 185 | "execution_count": 17, 186 | "metadata": {}, 187 | "output_type": "execute_result" 188 | } 189 | ], 190 | "source": [ 191 | "#哎哟,只有24%的词汇表会有嵌入,这使得21%的数据或多或少是无用的。所以让我们来看看并开始改进。为此,我们可以很容易地看一看顶部的oov单词\n", 192 | "oov[:10]" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 18, 198 | "metadata": {}, 199 | "outputs": [ 200 | { 201 | "name": "stdout", 202 | "output_type": "stream", 203 | "text": [ 204 | "False\n", 205 | "True\n" 206 | ] 207 | } 208 | ], 209 | "source": [ 210 | "#:首先是“to”。为什么?仅仅是因为“to”在训练GoogleNews嵌入时被删除了。稍后我们将对此进行修复,因为现在我们要注意标点符号的分割,因为这似乎也是一个问题。但是,我们该如何处理标点符号呢?我们是想删除标点符号,还是将其视为一种标记?我想说:这要看情况。如果标记有嵌入,保留它,如果没有,我们就不再需要它了。我们检查:\n", 211 | "print('?' in embedding_index)\n", 212 | "print('&' in embedding_index)" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 19, 218 | "metadata": {}, 219 | "outputs": [], 220 | "source": [ 221 | "#有趣。虽然“&”出现在谷歌新闻的嵌入中,“?”却不是。因此,我们基本上定义了一个函数,它分割“&”并删除其他标点符号。\n", 222 | "\n", 223 | "def clean_text(x):\n", 224 | " x = str(x)\n", 225 | " for punct in \"/-'\":\n", 226 | " x = x.replace(punct, ' ')\n", 227 | " for punct in '&':\n", 228 | " x = x.replace(punct, f' {punct} ')#f''解释:你不再需要直接调用一个字符串的.format()方法,但是要简单地用前缀f来标记格式以及内联最终字符串中你想要包括的表达式,不然它们就会被期望着去提供如同你从.format()函数得到的相同功能。这些格式化字符串也在文档中被称为“f字符串”。\n", 229 | " for punct in '?!.,\"#$%\\'()*+-/:;<=>@[\\\\]^_`{|}~' + '“”’':\n", 230 | " x = x.replace(punct, '')\n", 231 | " return x" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 21, 237 | "metadata": {}, 238 | "outputs": [ 239 | { 240 | "name": "stderr", 241 | "output_type": "stream", 242 | "text": [ 243 | "100%|████| 1306122/1306122 [00:16<00:00, 79190.25it/s]\n", 244 | "100%|███| 1306122/1306122 [00:05<00:00, 218846.61it/s]\n" 245 | ] 246 | } 247 | ], 248 | "source": [ 249 | "train['question_text'] = train['question_text'].progress_apply(lambda x: clean_text(x))\n", 250 | "sentences = train['question_text'].apply(lambda x: x.split())\n", 251 | "vocab = build_vocab(sentences)" 252 | ] 253 | }, 254 | { 255 | "cell_type": "code", 256 | "execution_count": 23, 257 | "metadata": {}, 258 | "outputs": [ 259 | { 260 | "name": "stderr", 261 | "output_type": "stream", 262 | "text": [ 263 | "100%|█████| 253623/253623 [00:00<00:00, 329145.72it/s]\n" 264 | ] 265 | }, 266 | { 267 | "name": "stdout", 268 | "output_type": "stream", 269 | "text": [ 270 | "Found embeddings for 57.38% of vocab\n", 271 | "Found embeddings for 89.99% of all text\n" 272 | ] 273 | } 274 | ], 275 | "source": [ 276 | "oov = check_coverage(vocab, embedding_index)" 277 | ] 278 | }, 279 | { 280 | "cell_type": "code", 281 | "execution_count": 25, 282 | "metadata": {}, 283 | "outputs": [ 284 | { 285 | "data": { 286 | "text/plain": [ 287 | "[('to', 406298),\n", 288 | " ('a', 403852),\n", 289 | " ('of', 332964),\n", 290 | " ('and', 254081),\n", 291 | " ('2017', 8781),\n", 292 | " ('2018', 7373),\n", 293 | " ('10', 6642),\n", 294 | " ('12', 3694),\n", 295 | " ('20', 2942),\n", 296 | " ('100', 2883)]" 297 | ] 298 | }, 299 | "execution_count": 25, 300 | "metadata": {}, 301 | "output_type": "execute_result" 302 | } 303 | ], 304 | "source": [ 305 | "#好了!我们能够增加我们的嵌入比从24%到57%仅仅通过处理穿刺。好的,让我们检查一下这些单词。\n", 306 | "oov[:10]" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 30, 312 | "metadata": {}, 313 | "outputs": [ 314 | { 315 | "ename": "AttributeError", 316 | "evalue": "'KeyedVectors' object has no attribute 'index2entity'", 317 | "output_type": "error", 318 | "traceback": [ 319 | "\u001b[1;31m-------------------------------------------------------\u001b[0m", 320 | "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", 321 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#嗯,似乎数字也是个问题。让我们检查一下前10个嵌入来获得线索。\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0membedding_index\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex2entity\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 322 | "\u001b[1;31mAttributeError\u001b[0m: 'KeyedVectors' object has no attribute 'index2entity'" 323 | ] 324 | } 325 | ], 326 | "source": [ 327 | "#嗯,似乎数字也是个问题。让我们检查一下前10个嵌入来获得线索。\n", 328 | "for i in range(10):\n", 329 | " print(embedding_index.index2entity[i])" 330 | ] 331 | }, 332 | { 333 | "cell_type": "code", 334 | "execution_count": 31, 335 | "metadata": {}, 336 | "outputs": [], 337 | "source": [ 338 | "#为什么里面有\"##\" ?原因很简单,因为作为一个再处理,所有大于9的数字都被hashs替换了。即成为# #,123变成# # #或15.80€变成# #,# #€。因此,让我们模拟这个预处理步骤来进一步改进我们的嵌入式覆盖率\n", 339 | "import re\n", 340 | "\n", 341 | "def clean_numbers(x):\n", 342 | " x = re.sub('[0-9]{5,}', '#####', x)\n", 343 | " x = re.sub('[0-9]{4}', '####', x)\n", 344 | " x = re.sub('[0-9]{3}', '###', x)\n", 345 | " x = re.sub('[0-9]{2}', '##', x)\n", 346 | " return x" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": 33, 352 | "metadata": {}, 353 | "outputs": [ 354 | { 355 | "name": "stderr", 356 | "output_type": "stream", 357 | "text": [ 358 | "100%|████| 1306122/1306122 [00:16<00:00, 80227.57it/s]\n", 359 | "100%|███| 1306122/1306122 [00:05<00:00, 249280.32it/s]\n", 360 | "100%|███| 1306122/1306122 [00:05<00:00, 259681.59it/s]\n" 361 | ] 362 | } 363 | ], 364 | "source": [ 365 | "train['question_text'] = train['question_text'].progress_apply(lambda x: clean_numbers(x))\n", 366 | "sentences = train['question_text'].progress_apply(lambda x: x.split())\n", 367 | "vocab = build_vocab(sentences)" 368 | ] 369 | }, 370 | { 371 | "cell_type": "code", 372 | "execution_count": 37, 373 | "metadata": {}, 374 | "outputs": [ 375 | { 376 | "name": "stderr", 377 | "output_type": "stream", 378 | "text": [ 379 | "100%|█████| 242997/242997 [00:00<00:00, 319105.53it/s]\n" 380 | ] 381 | }, 382 | { 383 | "name": "stdout", 384 | "output_type": "stream", 385 | "text": [ 386 | "Found embeddings for 60.41% of vocab\n", 387 | "Found embeddings for 90.75% of all text\n" 388 | ] 389 | } 390 | ], 391 | "source": [ 392 | "oov = check_coverage(vocab,embedding_index)" 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": 24, 398 | "metadata": {}, 399 | "outputs": [ 400 | { 401 | "data": { 402 | "text/plain": [ 403 | "[('to', 406298),\n", 404 | " ('a', 403852),\n", 405 | " ('of', 332964),\n", 406 | " ('and', 254081),\n", 407 | " ('2017', 8781),\n", 408 | " ('2018', 7373),\n", 409 | " ('10', 6642),\n", 410 | " ('12', 3694),\n", 411 | " ('20', 2942),\n", 412 | " ('100', 2883),\n", 413 | " ('15', 2762),\n", 414 | " ('12th', 2551),\n", 415 | " ('11', 2356),\n", 416 | " ('30', 2163),\n", 417 | " ('18', 2066),\n", 418 | " ('50', 1993),\n", 419 | " ('16', 1589),\n", 420 | " ('14', 1533),\n", 421 | " ('17', 1505),\n", 422 | " ('13', 1390)]" 423 | ] 424 | }, 425 | "execution_count": 24, 426 | "metadata": {}, 427 | "output_type": "execute_result" 428 | } 429 | ], 430 | "source": [ 431 | "#好了!另一个3%的增长。现在就像处理撞击一样,但是每一点都有帮助。让我们检查oov单词\n", 432 | "oov[:20]" 433 | ] 434 | }, 435 | { 436 | "cell_type": "code", 437 | "execution_count": 38, 438 | "metadata": {}, 439 | "outputs": [], 440 | "source": [ 441 | "#好了,现在我们来处理一下在使用美式/英式vocab时常见的拼写错误,并将一些“现代”单词替换为“social media”。此外,我们将简单地删除“a”、“to”、“and”和“of”等词,因为在培训GoogleNews嵌入式时,这些词显然已被下采样。\n", 442 | "def _get_mispell(mispell_dict):\n", 443 | " mispell_re = re.compile('(%s)' % '|'.join(mispell_dict.keys()))#编写一个正则式\n", 444 | " return mispell_dict, mispell_re\n", 445 | "\n", 446 | "\n", 447 | "mispell_dict = {'colour':'color',\n", 448 | " 'centre':'center',\n", 449 | " 'didnt':'did not',\n", 450 | " 'doesnt':'does not',\n", 451 | " 'isnt':'is not',\n", 452 | " 'shouldnt':'should not',\n", 453 | " 'favourite':'favorite',\n", 454 | " 'travelling':'traveling',\n", 455 | " 'counselling':'counseling',\n", 456 | " 'theatre':'theater',\n", 457 | " 'cancelled':'canceled',\n", 458 | " 'labour':'labor',\n", 459 | " 'organisation':'organization',\n", 460 | " 'wwii':'world war 2',\n", 461 | " 'citicise':'criticize',\n", 462 | " 'instagram': 'social medium',\n", 463 | " 'whatsapp': 'social medium',\n", 464 | " 'snapchat': 'social medium'\n", 465 | "\n", 466 | " }\n", 467 | "mispellings, mispellings_re = _get_mispell(mispell_dict)" 468 | ] 469 | }, 470 | { 471 | "cell_type": "code", 472 | "execution_count": 39, 473 | "metadata": {}, 474 | "outputs": [], 475 | "source": [ 476 | "def replace_typical_misspell(text):\n", 477 | " def replace(match):\n", 478 | " return mispellings[match.group(0)]\n", 479 | "\n", 480 | " return mispellings_re.sub(replace, text)" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": 47, 486 | "metadata": {}, 487 | "outputs": [ 488 | { 489 | "name": "stderr", 490 | "output_type": "stream", 491 | "text": [ 492 | "\n", 493 | " 0%| | 0/1306122 [00:00" 627 | ] 628 | }, 629 | "metadata": {}, 630 | "output_type": "display_data" 631 | } 632 | ], 633 | "source": [ 634 | "#f, ax = plt.subplots(1)\n", 635 | "epochRange = np.arange(1,5,1)\n", 636 | "plt.plot(epochRange,all_losses['word2vec_loss'])\n", 637 | "plt.plot(epochRange,all_losses['glove_loss'])\n", 638 | "plt.plot(epochRange,all_losses['fasttext_loss'])\n", 639 | "plt.plot(epochRange,all_losses['baseline_loss'])\n", 640 | "plt.title('Training loss for different embeddings')\n", 641 | "plt.ylabel('loss')\n", 642 | "plt.xlabel('epoch')\n", 643 | "plt.legend(['Word2Vec', 'GLOVE','FastText','Baseline'], loc='upper left')\n", 644 | "plt.show()" 645 | ] 646 | }, 647 | { 648 | "cell_type": "markdown", 649 | "metadata": {}, 650 | "source": [ 651 | "看起来baseline的训练损失是最小的。但是在我们结束这个案例并选择baseline模型作为赢家之前,这个情节并不能说明全部,因为在baseline模型中似乎存在一些过拟合。
从第二阶段开始,随着验证损失大于训练损失,过拟合开始出现" 652 | ] 653 | }, 654 | { 655 | "cell_type": "code", 656 | "execution_count": 48, 657 | "metadata": {}, 658 | "outputs": [ 659 | { 660 | "data": { 661 | "image/png": "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\nAElFTkSuQmCC\n", 662 | "text/plain": [ 663 | "" 664 | ] 665 | }, 666 | "metadata": {}, 667 | "output_type": "display_data" 668 | } 669 | ], 670 | "source": [ 671 | "epochRange = np.arange(1,5,1)\n", 672 | "plt.plot(epochRange,all_losses['baseline_loss'])\n", 673 | "plt.plot(epochRange,all_losses['baseline_val_loss'])\n", 674 | "plt.title('Training Vs Validation loss for baseline model')\n", 675 | "plt.ylabel('loss')\n", 676 | "plt.xlabel('epoch')\n", 677 | "plt.legend(['Training', 'Validation'], loc='upper left')\n", 678 | "plt.show()" 679 | ] 680 | }, 681 | { 682 | "cell_type": "markdown", 683 | "metadata": {}, 684 | "source": [ 685 | "剩下的呢?让我们画出所有的训练/验证损失图来进行比较。" 686 | ] 687 | }, 688 | { 689 | "cell_type": "code", 690 | "execution_count": 49, 691 | "metadata": {}, 692 | "outputs": [ 693 | { 694 | "data": { 695 | "image/png": "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\n4lMPzTajhudt516Z393+YLtLAoABpS8ziw5KMrvWemetdWmSi5IcuUqfI5OcXxumJxldShnbbOtK\nslEppSvJiCTz1lLtAAAMUltvOjzfPfXQ7LDFiLzjm1flf265v90lAcCA0ZewaNskc3od39s8t8Y+\ntda5ST6X5E9J7kuysNb689V9SCllaillZill5oIFC/paPwAAz9GGPv7acuNhuWjqIdl9601y6reu\nzs9unN/ukgBgQFinG1yXUjZLY9bRTknGJRlZSjl+dX1rrWfVWqfUWqeMGTNmXZYFAEAGxvhr9Iih\nueCUgzNpu9F5z3euyY+um9vukgBgg9eXsGhukvG9jrdrnutLn1ckuavWuqDWuizJD5K84LmXCwAA\nK9t0+JCc/46DcuCOm+X9370uF8+cs+aLAIBn1Jew6KokE0opO5VShqaxQfWlq/S5NMmJzaeiHZLG\ncrP70lh+dkgpZUQppSR5eZKb12L9AACQkcO6ct7bD8qLdt0yH/re9fnWtLvbXRIAbLDWGBbVWruT\nnJ7k8jSCnotrrbNKKaeVUk5rdrssyZ1JZif5epJ3N6+dkeR7Sa5JckPz885a218CAAA2GtqZs982\nJa/Yc+v8849m5ezf3tnukgBgg9TVl0611svSCIR6nzuj1/ua5D3PcO1Hk3z0edQIAAB9MqyrM187\nfnLef9F1+def3pzFy5bn9JdNaHdZALBB6VNYBAAAG4ohnR354jH7ZVhXRz7389uyeFlP/vZVu6Wx\nKwIAsCbCIgAABpyuzo587s37ZtiQjnz5V7OzeNny/ONr9hQYAUAfCIsAABiQOjpKPvmGfTKsqzNn\n/+6uLOnuycdet1c6OgRGAPDnCIsAABiwSin56GsnZtiQjpz5mzuzeNny/NubJqVTYAQAz0hYBADA\ngFZKyYcP2yMbDenMF/779ixd3pN/f/O+6epc44OBAWBQEhYBADDglVLy/lfslmFdnfn0z27JkmU9\n+dKx+2dol8AIAFblX0cAAAaNd710l3z0tRPzs1nzc9q3r87iZcvbXRIA9DvCIgAABpWTXrhTPvmG\nffKrWx/Iyd+cmSeXdre7JADoV4RFAAAMOscdvH0+d9S++cMdD+bt516VxxYva3dJANBvCIsAABiU\n3nTAdvnSsfvnmj89khPOuTILnxIYAUAiLAIAYBA7YtK4fPWtk3PTvEU57uvT8/ATS9tdEgC0nbAI\n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\n", 696 | "text/plain": [ 697 | "" 698 | ] 699 | }, 700 | "metadata": {}, 701 | "output_type": "display_data" 702 | } 703 | ], 704 | "source": [ 705 | "f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row',figsize=(20, 20))\n", 706 | "\n", 707 | "plt.title('Training Vs Validation loss for all embeddings')\n", 708 | "ax1.plot(epochRange,all_losses['baseline_loss'])\n", 709 | "ax1.plot(epochRange,all_losses['baseline_val_loss'])\n", 710 | "ax1.set_title('Baseline')\n", 711 | "ax1.set_ylim(0.03, 0.12)\n", 712 | "\n", 713 | "ax2.plot(epochRange,all_losses['word2vec_loss'])\n", 714 | "ax2.plot(epochRange,all_losses['word2vec_val_loss'])\n", 715 | "ax2.set_title('Word2Vec')\n", 716 | "ax2.set_ylim(0.03, 0.12)\n", 717 | "\n", 718 | "ax3.plot(epochRange,all_losses['glove_loss'])\n", 719 | "ax3.plot(epochRange,all_losses['glove_val_loss'])\n", 720 | "ax3.set_title('GLOVE')\n", 721 | "ax3.set_ylim(0.03, 0.12)\n", 722 | "\n", 723 | "\n", 724 | "ax4.plot(epochRange,all_losses['fasttext_loss'])\n", 725 | "ax4.plot(epochRange,all_losses['fasttext_val_loss'])\n", 726 | "ax4.set_title('FastText')\n", 727 | "ax4.set_ylim(0.03, 0.12)\n", 728 | "\n", 729 | "plt.show()" 730 | ] 731 | }, 732 | { 733 | "cell_type": "markdown", 734 | "metadata": {}, 735 | "source": [ 736 | "考虑到所有的损失,很容易看出哪个是最好的选择。虽然这只手套看起来仍有一些空间,但与其他手套相比,它的损耗是很大的。另一方面,Word2Vec和FastText分别在第4和第3个时代开始过度匹配。那么你会选择哪一个作为赢家呢?在我看来,仍然是基线模型。\n", 737 | "那么问题出在哪里呢?难道预先训练的嵌入不应该改进吗?因为它是用来自大量特征丰富语料库的数十亿单词进行训练的。\n", 738 | "一种可能性是,这些预先训练的嵌入没有针对文本i进行训练" 739 | ] 740 | }, 741 | { 742 | "cell_type": "code", 743 | "execution_count": 50, 744 | "metadata": {}, 745 | "outputs": [], 746 | "source": [ 747 | "wordCount = {'word2vec':66078,'glove':81610,'fasttext':59613,'baseline':210337}" 748 | ] 749 | }, 750 | { 751 | "cell_type": "code", 752 | "execution_count": 51, 753 | "metadata": {}, 754 | "outputs": [ 755 | { 756 | "data": { 757 | "image/png": "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\n", 758 | "text/plain": [ 759 | "" 760 | ] 761 | }, 762 | "metadata": {}, 763 | "output_type": "display_data" 764 | } 765 | ], 766 | "source": [ 767 | "ind = np.arange(0,4,1) # the x locations for the groups\n", 768 | "width = 0.35 # the width of the bars\n", 769 | "\n", 770 | "plt.title('Number of common words used in different embeddings')\n", 771 | "embNames = list(wordCount.keys())\n", 772 | "embVals = list(wordCount.values())\n", 773 | "plt.barh(ind,embVals,align='center', height=0.5, color='m',tick_label=embNames)\n", 774 | "plt.show()" 775 | ] 776 | }, 777 | { 778 | "cell_type": "markdown", 779 | "metadata": {}, 780 | "source": [ 781 | "从上面的条形图中可以明显看出,baseline包含的单词最多
\n", 782 | "因为嵌入层是使用数据集中的单词进行训练的。
重要的结论是,预先训练的嵌入只包含大约60,000个共同的单词(少于基线的一半),\n", 783 | "
而由这些预先训练的权重构建的嵌入层不能很好地表示训练数据。\n", 784 | "
虽然构建您自己的嵌入需要更长的时间,但它可能是值得的,因为它是专门为您的上下文构建的。" 785 | ] 786 | }, 787 | { 788 | "cell_type": "markdown", 789 | "metadata": {}, 790 | "source": [ 791 | "这就完成了这个内核!我希望有人在这个内核中学到了一些东西。\n", 792 | "
如果你发现了一个错误,请在下面的评论中告诉我。\n", 793 | "
感谢阅读,祝比赛顺利!" 794 | ] 795 | }, 796 | { 797 | "cell_type": "markdown", 798 | "metadata": {}, 799 | "source": [ 800 | "**TODO:**\n", 801 | "1. There are many pretrained embeddings in Kaggle, and they are trained in different contexts of text corpus. You could try out other pretrained embeddings that is more suitable to the dataset in our competition.\n", 802 | "2. Introduce LSTM drop out and recurrent drop out in baseline model, and tune the dropout rate to decrease overfitting." 803 | ] 804 | }, 805 | { 806 | "cell_type": "code", 807 | "execution_count": null, 808 | "metadata": {}, 809 | "outputs": [], 810 | "source": [] 811 | } 812 | ], 813 | "metadata": { 814 | "kernelspec": { 815 | "display_name": "tensorflow-gpu", 816 | "language": "python", 817 | "name": "tensorflow-gpu" 818 | }, 819 | "language_info": { 820 | "codemirror_mode": { 821 | "name": "ipython", 822 | "version": 3 823 | }, 824 | "file_extension": ".py", 825 | "mimetype": "text/x-python", 826 | "name": "python", 827 | "nbconvert_exporter": "python", 828 | "pygments_lexer": "ipython3", 829 | "version": "3.6.2" 830 | } 831 | }, 832 | "nbformat": 4, 833 | "nbformat_minor": 2 834 | } 835 | -------------------------------------------------------------------------------- /use_tutorial.md: -------------------------------------------------------------------------------- 1 | ## 简介 2 | 我是NLP小白一枚。从1.16开始接触Quora比赛,以下是我对**预训练词向量**的一些归纳~(大部分是照搬kernel的 ...) 3 | - 预训练词向量会带来优势吗?(通过kernel里的例子) 4 | - 使用预训练词向量之前的清洗 5 | - 如何使用预训练词向量 6 | 7 | ## 1. 预训练词向量真会给你带来额外的优势吗? 8 | 9 | ![word2vec](https://qph.fs.quoracdn.net/main-qimg-3e812fd164a08f5e4f195000fecf988f) 10 | 11 | - 参考的[kernel](https://www.kaggle.com/sbongo/do-pretrained-embeddings-give-you-the-extra-edge) 12 | - 嵌入通常表示基于在文本语料库中一起出现的频率的单词的几何编码。下面描述的word嵌入的各种实现在构造方式上有所不同。 13 | 14 | ### 1.1 Word2Vec 15 | - 主要思想:在每个单词的**上下文中**训练一个模型,这样类似的单词就会有类似的数字表示。 16 | - 就像一个正常的前馈网络,其中你有一组自变量和一个你试图预测的目标因变量,你首先把你的句子分解成单词(tokenize),并根据窗口大小创建一些单词对。其中一个组合可以是一对词,如(cat, purr)其中cat是自变量(X) purr是我们要预测的目标因变量(Y) 17 | - 我们将‘cat’通过一个初始化为随机权值的嵌入层送入NN,并将其通过softmax层传递,最终目的是预测‘purr’。优化方法如SGD最小化损失函数“(target word | context words)”,该函数的目的是在给定上下文单词的情况下最小化预测目标单词的损失。如果我们用足够的时间来做这件事,嵌入层中的权值最终将代表单词向量的词汇,也就是单词在这个几何向量空间中的“坐标”。 18 | ![Word2Vec示意](https://i.imgur.com/R8VLFs2.png) 19 | - 注:上面的例子采用了skip模型。对于连续单词包(CBOW),我们基本上是在给定上下文的情况下预测一个单词 20 | 21 | ### 1.2 GLOVE 22 | 23 | ​ GLOVE的工作原理类似于Word2Vec。上面可以看到Word2Vec是一个“预测”模型,它预测给定单词的上下文,GLOVE通过构造一个共现矩阵(words X context)来学习,该矩阵主要计算单词在上下文中出现的频率。因为它是一个巨大的矩阵,我们分解这个矩阵来得到一个低维的表示。有很多细节是相互配合的,但这只是粗略的想法。 24 | 25 | ### 1.3 FastText 26 | ​ FastText与上面的两个嵌入有很大的不同。Word2Vec和GLOVE将每个单词作为最小的训练单元,而FastText使用n-gram字符作为最小的单元。例如,单词vector,“apple”,可以分解为单词vector的不同单位,如“ap”,“app”,“ple”。使用FastText的最大好处是,它可以为罕见的单词,甚至是在训练过程中没有看到的单词生成更好的嵌入,因为n-gram字符向量与其他单词共享。这是Word2Vec和GLOVE无法做到的。 27 | 28 | ### 1.4 See 29 | 实验基于Kaggle的比赛Toxic Comment Classification Challenge,请参见kernel。 30 | 我也实验了该kernel,也可以看我的[中文版该kernel](https://github.com/Cooper111/pretrained_embedding_tutorial/blob/master/Toxic%20Comment%20Classification%20Challenge/Do_Pretrained_Embeddings_Give_You_The_Extra_Edge%EF%BC%9F.ipynb)。 31 | 注:其中值得一提的技巧 32 | - 该kernel开头给出了另一个keras教程,其中一步,通过查看句子长度图分布来设置maxlen 33 | - 不同的预训练词向量基于不同的语料训练而成,画出训练和验证损失来评估性能 34 | - 使用函数封装制作Embedding_matrix 35 | - 查看预训练词向量包含的喂入文本词汇占总喂入文本词汇的比率或柱状统计 36 | 37 | ## 2.使用预训练词向量之前的清洗 38 | - 参考的[kernel](https://www.kaggle.com/christofhenkel/how-to-preprocessing-when-using-embeddings) 39 | - 实验基于Kaggle的比赛Quora Insincere Questions Classification,请参见kernel。 40 | 我也实验了该kernel,也可以看我的[中文版该kernel](https://github.com/Cooper111/pretrained_embedding_tutorial/blob/master/Quora/how-to-preprocessing-when-using-embeddings.ipynb)。 41 | 42 | ### 2.1 清洗的两条法则 43 | - 看情况使用stopwords操作,不一定得按照标准的清洗流程 44 | - 使用于训练的语料尽可能接近预训练的语料,就是未登录词尽量少 45 | 46 | ### 2.2 几个好用的函数 47 | - 计算包含的单词的出现次数,返回w2id的字典 48 | ``` 49 | 函数: 50 | #我将使用下面的函数来跟踪我们的训练词汇,它将遍历我们的所有文本并计算包含的单词的出现次数。 51 | def build_vocab(sentences, verbose = True): 52 | # 参数 sentences list of list of words,就是二维的 53 | # 返回值 对应 词和词的次数 的字典 54 | vocab = {} 55 | for sentence in tqdm(sentences, disable = (not verbose)): 56 | for word in sentence: 57 | try: 58 | vocab[word] += 1 59 | except KeyError: 60 | vocab[word] = 1 61 | return vocab 62 | 使用方法: 63 | #因此,让我们填充词汇表并显示前5个元素及其计数。注意,现在我们可以使用progess_apply查看进度条 64 | sentences = train['question_text'].progress_apply(lambda x: x.split()).values 65 | vocab = build_vocab(sentences) 66 | print({k: vocab[k] for k in list(vocab)[:5]}) 67 | ``` 68 | 69 | - 检查词汇表和嵌入之间的交集 70 | 71 | ``` 72 | #接下来,我定义一个函数来检查词汇表和嵌入之间的交集。它将输出一个out of vocabulary (oov)单词列表,我们可以使用它来改进我们的预处理 73 | import operator 74 | def check_coverage(vocab, embeddings_index): 75 | a = {} 76 | oov = {} 77 | k = 0 78 | i = 0 79 | for word in tqdm(vocab): 80 | try: 81 | a[word] = embeddings_index[word] 82 | k += vocab[word] 83 | except: 84 | oov[word] = vocab[word] 85 | i += vocab[word] 86 | pass 87 | 88 | print('Found embeddings for {:.2%} of vocab'.format(len(a) / len(vocab))) 89 | print('Found embeddings for {:.2%} of all text'.format(k / (k + i))) 90 | sorted_x = sorted(oov.items(), key=operator.itemgetter(1))[::-1]#取axis=1维度进行排序,并换为逆序 91 | 92 | return sorted_x 93 | 94 | 使用方法: 95 | oov = check_coverage(vocab, embedding_index) 96 | 97 | 样例输出: 98 | 100%|█████| 253623/253623 [00:00<00:00, 329145.72it/s] 99 | Found embeddings for 57.38% of vocab 100 | Found embeddings for 89.99% of all text 101 | 102 | 然后可以 oov[:10]这样查看次数靠前的未登录词 103 | ``` 104 | - 清洗操作 105 | 106 | ``` 107 | train['question_text'] = train['question_text'].progress_apply(lambda x: clean_numbers(x))#progress_apply可以显示进度,tqdm也是 108 | sentences = train['question_text'].progress_apply(lambda x: x.split())#分割英文句子成词汇列表 109 | vocab = build_vocab(sentences)#构建词汇表 110 | ``` 111 | 112 | ### 2.3 清洗流程 113 | - ①加载数据,导入预训练词向量 114 | - ②对于Pandas.Series实例应用apply清洗函数 115 | >e.g. train['question_text'] = train['question_text'].progress_apply(lambda x: clean_text(x)) 116 | 117 | - ③构造词汇表 118 | - ④检查词汇表和嵌入之间的交集 119 | - ⑤查看未登录词靠前的几个,构造新的清洗函数 120 | - ②③④⑤循环,例子见2.2清洗操作 121 | 122 | ### 2.4 清洗思路 123 | - ‘a’,'to'这种停用词在训练GoogleNews预训练词向量训练时被删除了,所以会出现在oov靠前,在最后对用于训练的文本剔除这些词(Kernel里这么做的) 124 | - 特殊符号的去除视情况而定,一些空格替换,一些去除(效果: 未登录词类占总词汇类比76%to43%) 125 | - 数字再处理,预训练词向量里所有大于9的数字都被hashs替换了。即成为# #,123变成# # #或15.80€变成# #,# #€。因此,让我们模拟这个预处理步骤来进一步改进我们的嵌入式覆盖率(效果:未登录词词类占总词汇类 43%to40%) 126 | - 口语用词替换成标准词汇(和思路第一步一起的效果:未登录词量占总词量 11% to 1%) 127 | 128 | ## 3. 如何使用预训练词向量 129 | - 参考的[kernel](https://www.kaggle.com/sudalairajkumar/a-look-at-different-embeddings) 130 | - 实验基于Kaggle的比赛Quora Insincere Questions Classification,请参见kernel。 131 | 我也实验了该kernel,也可以看我的[中文版该kernel](https://github.com/Cooper111/pretrained_embedding_tutorial/blob/master/Quora/A%20look%20at%20different%20embeddings.!.ipynb)。 132 | 133 | ### 3.1 使用流程 134 | - 将文本划分训练集和验证集 135 | 136 | ``` 137 | ## split to train and val 138 | train_df, val_df = train_test_split(train_df, test_size=0.1, random_state=2018) 139 | ``` 140 | 141 | 142 | - 填充文本缺失值 143 | 144 | ``` 145 | ## fill up the missing values 146 | train_X = train_df['question_text'].fillna('_na_').values 147 | val_X = val_df['question_text'].fillna('_na_').values 148 | test_X = test_df['question_text'].fillna('_na_').values 149 | ``` 150 | 151 | 152 | 153 | - 使用Tokenizer讲文本转换为向量序列 154 | 155 | ``` 156 | ## Tokenize the sentences 157 | tokenizer = Tokenizer(num_words=max_features) 158 | tokenizer.fit_on_texts(list(train_X)) 159 | train_X = tokenizer.texts_to_sequences(train_X) 160 | val_X = tokenizer.texts_to_sequences(val_X) 161 | test_X = tokenizer.texts_to_sequences(test_X) 162 | ``` 163 | 164 | 165 | 166 | - 根据max_len来Pad_sequences,固定句子长度 167 | 168 | ``` 169 | ## Pad the sentences 170 | train_X = pad_sequences(train_X, maxlen=maxlen) 171 | val_X = pad_sequences(val_X, maxlen=maxlen) 172 | test_X = pad_sequences(test_X, maxlen=maxlen) 173 | ``` 174 | 175 | 176 | 177 | - 构造词向量嵌入矩阵 178 | 法① 179 | 180 | ``` 181 | EMBEDDING_FILE = '../input/embeddings/glove.840B.300d/glove.840B.300d.txt' 182 | def get_coefs(word, *arr): 183 | return word, np.asarray(arr, dtype='float32') 184 | embeddings_index = dict(get_coefs(*o.split(" ")) for o in open(EMBEDDING_FILE, encoding='utf-8') if len(o)>100 ) 185 | 186 | all_embs = np.stack(embeddings_index.values()) 187 | emb_mean, emb_std = all_embs.mean(), all_embs.std() 188 | embed_size = all_embs.shape[1] 189 | 190 | word_index = tokenizer.word_index 191 | nb_words = min(max_features, len(word_index)) 192 | embedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size)) 193 | for word, i in word_index.items(): 194 | if i >= max_features: 195 | continue 196 | embedding_vector = embeddings_index.get(word) 197 | if embedding_vector is not None: 198 | embedding_matrix[i] = embedding_vector 199 | ``` 200 | 法② 201 | 202 | ``` 203 | def loadEmbeddingMatrix(typeToLoad): 204 | #根据Embedding的不同,从Kaggle加载不同的嵌入文件 205 | #我们要实验的矩阵 206 | if(typeToLoad=='glove'): 207 | EMBEDDING_FILE = '../input/glove.twitter.27B.25d.txt' 208 | embed_size = 25 209 | elif(typeToLoad=='word2vec'): 210 | word2vecDict = word2vec.KeyedVectors.load_word2vec_format('../../Quora/input/embeddings/GoogleNews-vectors-negative300/GoogleNews-vectors-negative300.bin', binary=True) 211 | embed_size = 300 212 | elif(typeToLoad=='fasttext'): 213 | EMBEDDING_FILE='../input/wiki.simple.vec' 214 | embed_size = 300 215 | 216 | if(typeToLoad=='glove' or typeToLoad=='fasttext'): 217 | embeddings_index = dict() 218 | #通过遍历文件的每一行,将Embedding权重转移到字典中。 219 | f = open(EMBEDDING_FILE) 220 | for line in f: 221 | #split up line into an indexed array 222 | values = line.split() 223 | #first index is word 224 | word = values[0] 225 | #store the rest of the values in the array as a new array 226 | coefs = np.asarray(values[1:], dtype='float32') 227 | embeddings_index[word] = coefs #50 dimensions 228 | f.close() 229 | print('Loaded %s word vectors.' % len(embeddings_index)) 230 | else: 231 | embeddings_index = dict() 232 | for word in word2vecDict.wv.vocab: 233 | embeddings_index[word] = word2vecDict.word_vec(word) 234 | print('Loaded %s word vectors.' % len(embeddings_index)) 235 | 236 | gc.collect() 237 | #我们得到嵌入权值的均值和标准差,这样我们就可以保持 238 | #对于我们自己随机产生的权值的其余部分,同样的统计数据。 239 | all_embs = np.stack(list(embeddings_index.values())) 240 | emb_mean, emb_std = all_embs.mean(), all_embs.std() 241 | 242 | nb_words = len(tokenizer.word_index) 243 | #我们讲设置Embedding的尺寸为我们复制的预训练的维度 244 | #Embedding矩阵大小将为 词汇中词数 X Embedding Size 245 | embedding_matrix = np.random.normal(emb_mean, emb_std, (nb_words, embed_size)) 246 | gc.collect() 247 | 248 | #使用新创建的嵌入矩阵,我们将用两个矩阵中的单词填充它 249 | #我们自己的字典和加载预训练嵌入。 250 | embeddedCount = 0 251 | for word, i in tokenizer.word_index.items(): 252 | i -= 1 253 | #然后我们看看这个词是否在GLove的字典里,如果是,得到相应的权重 254 | embedding_vector = embeddings_index.get(word) 255 | #并存储在Embedding矩阵中,我们稍后将用其进行训练。 256 | if embedding_vector is not None: 257 | embedding_matrix[i] = embedding_vector 258 | embeddedCount += 1 259 | print('total embedded:', embeddedCount,'common words') 260 | 261 | del(embeddings_index) 262 | gc.collect() 263 | 264 | #最后,返回Embedding矩阵 265 | return embedding_matrix 266 | 267 | ``` 268 | 269 | 270 | 271 | - 训练模型 272 | 273 | ``` 274 | model.fit(train_X, train_y, batch_size=512, epochs=2, validation_data=(val_X, val_y)) 275 | ``` 276 | 277 | 278 | 279 | - 得到验证样本预测和F1得分的最佳阈值,得到测试集预测 280 | 281 | ``` 282 | pred_noemb_val_y = model.predict([val_X], batch_size=1024, verbose=1) 283 | for thresh in np.arange(0.1, 0.501, 0.01): 284 | thresh = np.round(thresh, 2) 285 | print("F1 score at threshold {0} is {1}".format(thresh, metrics.f1_score(val_y, (pred_noemb_val_y>thresh).astype(int)))) 286 | #得到测试集预测 287 | pred_noemb_test_y = model.predict([test_X], batch_size=1024, verbose=1) 288 | ``` 289 | 290 | 291 | 292 | - 清理一些内存 293 | 294 | ``` 295 | del model, inp, x 296 | import gc 297 | gc.collect() 298 | time.sleep(10) 299 | ``` 300 | 301 | 302 | 303 | ## 3.2 词向量优化方法 304 | - 通过统一模型对不同预训练词向量和无预训练词向量,绘制损失曲线来选取 305 | - 尝试给定各个结果以权重进行ensemble 306 | 307 | 308 | ## TODO 309 | - 学习大佬的总结~ 310 | - 复现大佬的代码~ 311 | - 吸取建议,然后补全词向量优化方法~ 312 | - 祝各位比赛取的好成绩,我先去旅游到28号再继续··· 313 | 314 | 315 |
316 | 学号: 071-沈凯文 --------------------------------------------------------------------------------