├── DL 双重Demo.ipynb ├── data ├── bad_cut_jieba.txt ├── good_cut_jieba.txt └── mid_cut_jieba.txt ├── stopword.txt ├── test.txt ├── train.txt └── 文本分类模型终极大炮.ipynb /DL 双重Demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 7, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "# -*- coding: utf-8 -*-\n", 12 | "\"\"\"\n", 13 | "Created on Sat Sep 9 14:13:37 2017\n", 14 | "\n", 15 | "@author: stevewyl\n", 16 | "\"\"\"\n", 17 | "# 保证映射后结构一样\n", 18 | "from keras.preprocessing.sequence import pad_sequences\n", 19 | "# 文本预处理\n", 20 | "from keras.preprocessing.text import Tokenizer\n", 21 | "# 将类别映射成需要的格式\n", 22 | "from keras.utils.np_utils import to_categorical\n", 23 | "\n", 24 | "# 这个是连接层\n", 25 | "from keras.layers.merge import concatenate\n", 26 | "\n", 27 | "# 搭建模型\n", 28 | "from keras.models import Sequential, Model\n", 29 | "\n", 30 | "# 这个是层的搭建\n", 31 | "from keras.layers import Dense, Embedding, Activation, Input\n", 32 | "\n", 33 | "from keras.layers import Convolution1D, Flatten, Dropout, MaxPool1D\n", 34 | "\n", 35 | "from keras.layers import BatchNormalization\n", 36 | "from keras.layers import Conv1D,MaxPooling1D\n", 37 | "\n", 38 | "# 数据分割\n", 39 | "from sklearn.model_selection import train_test_split\n", 40 | "\n", 41 | "# 数据管道\n", 42 | "from sklearn.pipeline import Pipeline,make_pipeline\n", 43 | "# 数据处理\n", 44 | "from data_helper_ml import load_data_and_labels\n", 45 | "\n", 46 | "# 数据可视化\n", 47 | "import matplotlib.pyplot as plt\n", 48 | "\n", 49 | "good_data_file = \"./data/good_cut_jieba.txt\"\n", 50 | "bad_data_file = \"./data/bad_cut_jieba.txt\"\n", 51 | "mid_data_file = \"./data/mid_cut_jieba.txt\"\n", 52 | "x_text, y = load_data_and_labels(good_data_file, bad_data_file, mid_data_file)\n", 53 | "\n", 54 | "# Tokenizer是一个用于向量化文本,或将文本转换为序列\n", 55 | "tokenizer = Tokenizer(filters='!\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~\\t\\n',lower=True,split=\" \")\n", 56 | "tokenizer.fit_on_texts(x_text)\n", 57 | "vocab = tokenizer.word_index\n", 58 | "\n", 59 | "# 数据分割\n", 60 | "x_train, x_test, y_train, y_test = train_test_split(x_text, y, test_size=0.2, random_state=2017)\n", 61 | "#映射成数字\n", 62 | "x_train_word_ids = tokenizer.texts_to_sequences(x_train)\n", 63 | "x_test_word_ids = tokenizer.texts_to_sequences(x_test)\n", 64 | "#让他共同化\n", 65 | "x_train_padded_seqs = pad_sequences(x_train_word_ids, maxlen=64)\n", 66 | "x_test_padded_seqs = pad_sequences(x_test_word_ids, maxlen=64)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 4, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "name": "stdout", 76 | "output_type": "stream", 77 | "text": [ 78 | "15648\n", 79 | "15648\n" 80 | ] 81 | } 82 | ], 83 | "source": [ 84 | "print(len(x_text))\n", 85 | "print(len(y))" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": null, 91 | "metadata": { 92 | "collapsed": true 93 | }, 94 | "outputs": [], 95 | "source": [] 96 | }, 97 | { 98 | "cell_type": "markdown", 99 | "metadata": {}, 100 | "source": [ 101 | "# CNN模型" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 5, 107 | "metadata": {}, 108 | "outputs": [ 109 | { 110 | "name": "stdout", 111 | "output_type": "stream", 112 | "text": [ 113 | "Model: \"sequential_1\"\n", 114 | "_________________________________________________________________\n", 115 | "Layer (type) Output Shape Param # \n", 116 | "=================================================================\n", 117 | "embedding_1 (Embedding) (None, 64, 300) 4594500 \n", 118 | "_________________________________________________________________\n", 119 | "conv1d_1 (Conv1D) (None, 64, 256) 384256 \n", 120 | "_________________________________________________________________\n", 121 | "max_pooling1d_1 (MaxPooling1 (None, 22, 256) 0 \n", 122 | "_________________________________________________________________\n", 123 | "conv1d_2 (Conv1D) (None, 22, 128) 163968 \n", 124 | "_________________________________________________________________\n", 125 | "max_pooling1d_2 (MaxPooling1 (None, 8, 128) 0 \n", 126 | "_________________________________________________________________\n", 127 | "conv1d_3 (Conv1D) (None, 8, 64) 24640 \n", 128 | "_________________________________________________________________\n", 129 | "flatten_1 (Flatten) (None, 512) 0 \n", 130 | "_________________________________________________________________\n", 131 | "dropout_1 (Dropout) (None, 512) 0 \n", 132 | "_________________________________________________________________\n", 133 | "batch_normalization_1 (Batch (None, 512) 2048 \n", 134 | "_________________________________________________________________\n", 135 | "dense_1 (Dense) (None, 256) 131328 \n", 136 | "_________________________________________________________________\n", 137 | "dropout_2 (Dropout) (None, 256) 0 \n", 138 | "_________________________________________________________________\n", 139 | "dense_2 (Dense) (None, 3) 771 \n", 140 | "=================================================================\n", 141 | "Total params: 5,301,511\n", 142 | "Trainable params: 5,300,487\n", 143 | "Non-trainable params: 1,024\n", 144 | "_________________________________________________________________\n" 145 | ] 146 | } 147 | ], 148 | "source": [ 149 | "model = Sequential()\n", 150 | "model.add(Embedding(len(vocab) + 1, 300, input_length=64)) #使用Embeeding层将每个词编码转换为词向量\n", 151 | "model.add(Conv1D(256, 5, padding='same'))\n", 152 | "model.add(MaxPooling1D(3, 3, padding='same'))\n", 153 | "model.add(Conv1D(128, 5, padding='same'))\n", 154 | "model.add(MaxPooling1D(3, 3, padding='same'))\n", 155 | "model.add(Conv1D(64, 3, padding='same'))\n", 156 | "model.add(Flatten())\n", 157 | "model.add(Dropout(0.1))\n", 158 | "model.add(BatchNormalization()) # (批)规范化层\n", 159 | "model.add(Dense(256, activation='relu'))\n", 160 | "model.add(Dropout(0.1))\n", 161 | "model.add(Dense(3, activation='softmax'))\n", 162 | "model.summary()" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": {}, 169 | "outputs": [ 170 | { 171 | "name": "stderr", 172 | "output_type": "stream", 173 | "text": [ 174 | "C:\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:434: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n", 175 | " \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n" 176 | ] 177 | }, 178 | { 179 | "name": "stdout", 180 | "output_type": "stream", 181 | "text": [ 182 | "Epoch 1/5\n", 183 | " 800/12518 [>.............................] - ETA: 1:05 - loss: 1.1991 - accuracy: 0.3688" 184 | ] 185 | } 186 | ], 187 | "source": [ 188 | "model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n", 189 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 190 | "one_hot_labels=y_train\n", 191 | "model.fit(x_train_padded_seqs, one_hot_labels,epochs=5, batch_size=800)\n", 192 | "y_predict = model.predict_classes(x_test_padded_seqs) # 预测的是类别,结果就是类别号\n", 193 | "y_predict = list(map(str, y_predict))\n" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 12, 199 | "metadata": { 200 | "collapsed": true 201 | }, 202 | "outputs": [], 203 | "source": [ 204 | "from sklearn.metrics import accuracy_score,f1_score" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": 15, 210 | "metadata": { 211 | "collapsed": true 212 | }, 213 | "outputs": [], 214 | "source": [ 215 | "# print('准确率', accuracy_score(y_test, y_predict))\n", 216 | "# print('平均f1-score:',f1_score(y_test, y_predict, average='weighted'))" 217 | ] 218 | }, 219 | { 220 | "cell_type": "markdown", 221 | "metadata": {}, 222 | "source": [ 223 | "# textCNN" 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": 17, 229 | "metadata": {}, 230 | "outputs": [ 231 | { 232 | "name": "stdout", 233 | "output_type": "stream", 234 | "text": [ 235 | "Model: \"model_1\"\n", 236 | "__________________________________________________________________________________________________\n", 237 | "Layer (type) Output Shape Param # Connected to \n", 238 | "==================================================================================================\n", 239 | "input_2 (InputLayer) (None, 64) 0 \n", 240 | "__________________________________________________________________________________________________\n", 241 | "embedding_4 (Embedding) (None, 64, 300) 4594500 input_2[0][0] \n", 242 | "__________________________________________________________________________________________________\n", 243 | "conv1d_7 (Conv1D) (None, 64, 256) 230656 embedding_4[0][0] \n", 244 | "__________________________________________________________________________________________________\n", 245 | "conv1d_8 (Conv1D) (None, 64, 256) 307456 embedding_4[0][0] \n", 246 | "__________________________________________________________________________________________________\n", 247 | "conv1d_9 (Conv1D) (None, 64, 256) 384256 embedding_4[0][0] \n", 248 | "__________________________________________________________________________________________________\n", 249 | "max_pooling1d_5 (MaxPooling1D) (None, 1, 256) 0 conv1d_7[0][0] \n", 250 | "__________________________________________________________________________________________________\n", 251 | "max_pooling1d_6 (MaxPooling1D) (None, 1, 256) 0 conv1d_8[0][0] \n", 252 | "__________________________________________________________________________________________________\n", 253 | "max_pooling1d_7 (MaxPooling1D) (None, 1, 256) 0 conv1d_9[0][0] \n", 254 | "__________________________________________________________________________________________________\n", 255 | "concatenate_1 (Concatenate) (None, 1, 768) 0 max_pooling1d_5[0][0] \n", 256 | " max_pooling1d_6[0][0] \n", 257 | " max_pooling1d_7[0][0] \n", 258 | "__________________________________________________________________________________________________\n", 259 | "flatten_3 (Flatten) (None, 768) 0 concatenate_1[0][0] \n", 260 | "__________________________________________________________________________________________________\n", 261 | "dropout_5 (Dropout) (None, 768) 0 flatten_3[0][0] \n", 262 | "__________________________________________________________________________________________________\n", 263 | "dense_5 (Dense) (None, 3) 2307 dropout_5[0][0] \n", 264 | "==================================================================================================\n", 265 | "Total params: 5,519,175\n", 266 | "Trainable params: 924,675\n", 267 | "Non-trainable params: 4,594,500\n", 268 | "__________________________________________________________________________________________________\n" 269 | ] 270 | } 271 | ], 272 | "source": [ 273 | "main_input = Input(shape=(64,), dtype='float64')\n", 274 | "# 词嵌入(使用预训练的词向量)\n", 275 | "embedder = Embedding(len(vocab) + 1, 300, input_length=64, trainable=False)\n", 276 | "\n", 277 | "embed = embedder(main_input)\n", 278 | "\n", 279 | "# 词窗大小分别为3,4,5\n", 280 | "cnn1 = Conv1D(256, 3, padding='same', strides=1, activation='relu')(embed)\n", 281 | "\n", 282 | "cnn1 = MaxPooling1D(pool_size=48)(cnn1)\n", 283 | "\n", 284 | "cnn2 = Conv1D(256, 4, padding='same', strides=1, activation='relu')(embed)\n", 285 | "\n", 286 | "cnn2 = MaxPooling1D(pool_size=47)(cnn2)\n", 287 | "\n", 288 | "cnn3 = Conv1D(256, 5, padding='same', strides=1, activation='relu')(embed)\n", 289 | "\n", 290 | "cnn3 = MaxPooling1D(pool_size=46)(cnn3)\n", 291 | "\n", 292 | "# 合并三个模型的输出向量\n", 293 | "cnn = concatenate([cnn1, cnn2, cnn3], axis=-1)\n", 294 | "\n", 295 | "flat = Flatten()(cnn)\n", 296 | "\n", 297 | "drop = Dropout(0.2)(flat)\n", 298 | "\n", 299 | "main_output = Dense(3, activation='softmax')(drop)\n", 300 | "\n", 301 | "model = Model(inputs=main_input, outputs=main_output)\n", 302 | "\n", 303 | "model.summary()" 304 | ] 305 | }, 306 | { 307 | "cell_type": "code", 308 | "execution_count": 18, 309 | "metadata": {}, 310 | "outputs": [ 311 | { 312 | "name": "stdout", 313 | "output_type": "stream", 314 | "text": [ 315 | "Epoch 1/10\n", 316 | "12518/12518 [==============================] - 47s 4ms/step - loss: 1.0583 - accuracy: 0.4372\n", 317 | "Epoch 2/10\n", 318 | "12518/12518 [==============================] - 48s 4ms/step - loss: 1.0242 - accuracy: 0.4754\n", 319 | "Epoch 3/10\n", 320 | "12518/12518 [==============================] - 50s 4ms/step - loss: 1.0010 - accuracy: 0.5000\n", 321 | "Epoch 4/10\n", 322 | "12518/12518 [==============================] - 52s 4ms/step - loss: 0.9741 - accuracy: 0.5218\n", 323 | "Epoch 5/10\n", 324 | "12518/12518 [==============================] - 48s 4ms/step - loss: 0.9466 - accuracy: 0.5429\n", 325 | "Epoch 6/10\n", 326 | "12518/12518 [==============================] - 50s 4ms/step - loss: 0.9223 - accuracy: 0.5582\n", 327 | "Epoch 7/10\n", 328 | "12518/12518 [==============================] - 50s 4ms/step - loss: 0.8992 - accuracy: 0.5678\n", 329 | "Epoch 8/10\n", 330 | "12518/12518 [==============================] - 48s 4ms/step - loss: 0.8768 - accuracy: 0.5848\n", 331 | "Epoch 9/10\n", 332 | "12518/12518 [==============================] - 47s 4ms/step - loss: 0.8555 - accuracy: 0.5971\n", 333 | "Epoch 10/10\n", 334 | "12518/12518 [==============================] - 48s 4ms/step - loss: 0.8345 - accuracy: 0.6092\n" 335 | ] 336 | }, 337 | { 338 | "data": { 339 | "text/plain": [ 340 | "" 341 | ] 342 | }, 343 | "execution_count": 18, 344 | "metadata": {}, 345 | "output_type": "execute_result" 346 | } 347 | ], 348 | "source": [ 349 | "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 350 | "\n", 351 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 352 | "one_hot_labels=y_train\n", 353 | "model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=10)\n", 354 | "\n" 355 | ] 356 | }, 357 | { 358 | "cell_type": "code", 359 | "execution_count": 21, 360 | "metadata": { 361 | "collapsed": true 362 | }, 363 | "outputs": [], 364 | "source": [ 365 | "import numpy as np\n", 366 | "#y_test_onehot = keras.utils.to_categorical(y_test, num_classes=3) # 将标签转换为one-hot编码\n", 367 | "result = model.predict(x_test_padded_seqs) # 预测样本属于每个类别的概率\n", 368 | "\n", 369 | "result_labels = np.argmax(result, axis=1) # 获得最大概率对应的标签\n", 370 | "\n", 371 | "y_predict = list(map(str, result_labels))\n", 372 | "# print(y_predict)\n", 373 | "# print('准确率', metrics.accuracy_score(y_test, y_predict))\n", 374 | "\n", 375 | "# print('平均f1-score:', metrics.f1_score(y_test, y_predict, average='weighted'))" 376 | ] 377 | }, 378 | { 379 | "cell_type": "markdown", 380 | "metadata": {}, 381 | "source": [ 382 | "# 使用Word2Vec词向量的TextCNN" 383 | ] 384 | }, 385 | { 386 | "cell_type": "code", 387 | "execution_count": null, 388 | "metadata": { 389 | "collapsed": true 390 | }, 391 | "outputs": [], 392 | "source": [ 393 | "w2v_model=Word2Vec.load('sentiment_analysis/w2v_model.pkl')\n", 394 | "# 预训练的词向量中没有出现的词用0向量表示\n", 395 | "embedding_matrix = np.zeros((len(vocab) + 1, 300))\n", 396 | "for word, i in vocab.items():\n", 397 | " try:\n", 398 | " embedding_vector = w2v_model[str(word)]\n", 399 | " embedding_matrix[i] = embedding_vector\n", 400 | " except KeyError:\n", 401 | " continue\n", 402 | " \n", 403 | " #构建TextCNN模型\n", 404 | "def TextCNN_model_2(x_train_padded_seqs,y_train,x_test_padded_seqs,y_test,embedding_matrix):\n", 405 | " # 模型结构:词嵌入-卷积池化*3-拼接-全连接-dropout-全连接\n", 406 | " main_input = Input(shape=(50,), dtype='float64')\n", 407 | " # 词嵌入(使用预训练的词向量)\n", 408 | " embedder = Embedding(len(vocab) + 1, 300, input_length=50, weights=[embedding_matrix], trainable=False)\n", 409 | " #embedder = Embedding(len(vocab) + 1, 300, input_length=50, trainable=False)\n", 410 | " embed = embedder(main_input)\n", 411 | " # 词窗大小分别为3,4,5\n", 412 | " cnn1 = Conv1D(256, 3, padding='same', strides=1, activation='relu')(embed)\n", 413 | " cnn1 = MaxPooling1D(pool_size=38)(cnn1)\n", 414 | " cnn2 = Conv1D(256, 4, padding='same', strides=1, activation='relu')(embed)\n", 415 | " cnn2 = MaxPooling1D(pool_size=37)(cnn2)\n", 416 | " cnn3 = Conv1D(256, 5, padding='same', strides=1, activation='relu')(embed)\n", 417 | " cnn3 = MaxPooling1D(pool_size=36)(cnn3)\n", 418 | " # 合并三个模型的输出向量\n", 419 | " cnn = concatenate([cnn1, cnn2, cnn3], axis=-1)\n", 420 | " flat = Flatten()(cnn)\n", 421 | " drop = Dropout(0.2)(flat)\n", 422 | " main_output = Dense(3, activation='softmax')(drop)\n", 423 | " model = Model(inputs=main_input, outputs=main_output)\n", 424 | " model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 425 | " \n", 426 | " one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 427 | " model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=20)\n", 428 | " #y_test_onehot = keras.utils.to_categorical(y_test, num_classes=3) # 将标签转换为one-hot编码\n", 429 | " result = model.predict(x_test_padded_seqs) # 预测样本属于每个类别的概率\n", 430 | " result_labels = np.argmax(result, axis=1) # 获得最大概率对应的标签\n", 431 | " y_predict = list(map(str, result_labels))\n", 432 | " print('准确率', metrics.accuracy_score(y_test, y_predict))\n", 433 | " print('平均f1-score:', metrics.f1_score(y_test, y_predict, average='weighted'))" 434 | ] 435 | }, 436 | { 437 | "cell_type": "code", 438 | "execution_count": 3, 439 | "metadata": { 440 | "collapsed": true 441 | }, 442 | "outputs": [], 443 | "source": [ 444 | "\n", 445 | "# 导入使用到的库\n", 446 | "from keras.preprocessing.sequence import pad_sequences\n", 447 | "from keras.preprocessing.text import Tokenizer\n", 448 | "from keras.layers.merge import concatenate\n", 449 | "from keras.models import Sequential, Model\n", 450 | "from keras.layers import Dense, Embedding, Activation, merge, Input, Lambda, Reshape\n", 451 | "from keras.layers import Convolution1D, Flatten, Dropout, MaxPool1D, GlobalAveragePooling1D\n", 452 | "from keras.layers import LSTM, GRU, TimeDistributed, Bidirectional\n", 453 | "from keras.utils.np_utils import to_categorical\n", 454 | "from keras import initializers\n", 455 | "from keras import backend as K\n", 456 | "from keras.engine.topology import Layer\n", 457 | "from sklearn.naive_bayes import MultinomialNB\n", 458 | "from sklearn.linear_model import SGDClassifier\n", 459 | "from sklearn.feature_extraction.text import TfidfVectorizer\n", 460 | "import pandas as pd\n", 461 | "import numpy as np\n" 462 | ] 463 | }, 464 | { 465 | "cell_type": "markdown", 466 | "metadata": {}, 467 | "source": [ 468 | "# One-Hot + MLP" 469 | ] 470 | }, 471 | { 472 | "cell_type": "code", 473 | "execution_count": 27, 474 | "metadata": { 475 | "collapsed": true 476 | }, 477 | "outputs": [], 478 | "source": [ 479 | "\n", 480 | "# model = Sequential()\n", 481 | "# # 全连接层\n", 482 | "# model.add(Dense(512, input_shape=(len(vocab)+1,), activation='relu'))\n", 483 | "# # DropOut层\n", 484 | "# model.add(Dropout(0.5))\n", 485 | "# # 全连接层+分类器\n", 486 | "# model.add(Dense(3,activation='softmax'))\n", 487 | " \n", 488 | "# model.compile(loss='categorical_crossentropy',\n", 489 | "# optimizer='adam',\n", 490 | "# metrics=['accuracy'])\n", 491 | "# # validation_data=(x_test, y_test)\n", 492 | "# model.fit(x_train, y_train,\n", 493 | "# batch_size=32,\n", 494 | "# epochs=15\n", 495 | "# )" 496 | ] 497 | }, 498 | { 499 | "cell_type": "markdown", 500 | "metadata": {}, 501 | "source": [ 502 | "# RNN" 503 | ] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "execution_count": 31, 508 | "metadata": {}, 509 | "outputs": [ 510 | { 511 | "name": "stdout", 512 | "output_type": "stream", 513 | "text": [ 514 | "Model: \"sequential_9\"\n", 515 | "_________________________________________________________________\n", 516 | "Layer (type) Output Shape Param # \n", 517 | "=================================================================\n", 518 | "embedding_7 (Embedding) (None, 64, 300) 4594500 \n", 519 | "_________________________________________________________________\n", 520 | "lstm_3 (LSTM) (None, 256) 570368 \n", 521 | "_________________________________________________________________\n", 522 | "dense_14 (Dense) (None, 3) 771 \n", 523 | "=================================================================\n", 524 | "Total params: 5,165,639\n", 525 | "Trainable params: 5,165,639\n", 526 | "Non-trainable params: 0\n", 527 | "_________________________________________________________________\n" 528 | ] 529 | } 530 | ], 531 | "source": [ 532 | "# 模型结构:词嵌入-LSTM-全连接\n", 533 | "model = Sequential()\n", 534 | "model.add(Embedding(len(vocab)+1, 300, input_length=64))\n", 535 | "model.add(LSTM(256, dropout=0.2, recurrent_dropout=0.1))\n", 536 | "model.add(Dense(3, activation='softmax'))\n", 537 | "model.summary()" 538 | ] 539 | }, 540 | { 541 | "cell_type": "code", 542 | "execution_count": 32, 543 | "metadata": {}, 544 | "outputs": [ 545 | { 546 | "name": "stderr", 547 | "output_type": "stream", 548 | "text": [ 549 | "C:\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:434: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n", 550 | " \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n" 551 | ] 552 | }, 553 | { 554 | "name": "stdout", 555 | "output_type": "stream", 556 | "text": [ 557 | "Epoch 1/10\n", 558 | "12518/12518 [==============================] - 80s 6ms/step - loss: 1.0250 - accuracy: 0.4867\n", 559 | "Epoch 2/10\n", 560 | "12518/12518 [==============================] - 74s 6ms/step - loss: 0.7618 - accuracy: 0.6507\n", 561 | "Epoch 3/10\n", 562 | "12518/12518 [==============================] - 75s 6ms/step - loss: 0.5988 - accuracy: 0.7440\n", 563 | "Epoch 4/10\n", 564 | "12518/12518 [==============================] - 74s 6ms/step - loss: 0.5064 - accuracy: 0.7956\n", 565 | "Epoch 5/10\n", 566 | "12518/12518 [==============================] - 78s 6ms/step - loss: 0.4221 - accuracy: 0.8364\n", 567 | "Epoch 6/10\n", 568 | "12518/12518 [==============================] - 74s 6ms/step - loss: 0.3631 - accuracy: 0.8647\n", 569 | "Epoch 7/10\n", 570 | "12518/12518 [==============================] - 74s 6ms/step - loss: 0.3184 - accuracy: 0.8824\n", 571 | "Epoch 8/10\n", 572 | "12518/12518 [==============================] - 76s 6ms/step - loss: 0.2824 - accuracy: 0.8958\n", 573 | "Epoch 9/10\n", 574 | "12518/12518 [==============================] - 74s 6ms/step - loss: 0.2551 - accuracy: 0.9065\n", 575 | "Epoch 10/10\n", 576 | "12518/12518 [==============================] - 80s 6ms/step - loss: 0.2302 - accuracy: 0.9147\n" 577 | ] 578 | }, 579 | { 580 | "data": { 581 | "text/plain": [ 582 | "" 583 | ] 584 | }, 585 | "execution_count": 32, 586 | "metadata": {}, 587 | "output_type": "execute_result" 588 | } 589 | ], 590 | "source": [ 591 | "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 592 | "\n", 593 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 594 | "one_hot_labels=y_train\n", 595 | "model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=10)" 596 | ] 597 | }, 598 | { 599 | "cell_type": "code", 600 | "execution_count": 33, 601 | "metadata": {}, 602 | "outputs": [ 603 | { 604 | "name": "stdout", 605 | "output_type": "stream", 606 | "text": [ 607 | "Model: \"sequential_9\"\n", 608 | "_________________________________________________________________\n", 609 | "Layer (type) Output Shape Param # \n", 610 | "=================================================================\n", 611 | "embedding_7 (Embedding) (None, 64, 300) 4594500 \n", 612 | "_________________________________________________________________\n", 613 | "lstm_3 (LSTM) (None, 256) 570368 \n", 614 | "_________________________________________________________________\n", 615 | "dense_14 (Dense) (None, 3) 771 \n", 616 | "=================================================================\n", 617 | "Total params: 5,165,639\n", 618 | "Trainable params: 5,165,639\n", 619 | "Non-trainable params: 0\n", 620 | "_________________________________________________________________\n" 621 | ] 622 | } 623 | ], 624 | "source": [ 625 | "model.summary()" 626 | ] 627 | }, 628 | { 629 | "cell_type": "markdown", 630 | "metadata": {}, 631 | "source": [ 632 | "# Bi-GRU" 633 | ] 634 | }, 635 | { 636 | "cell_type": "code", 637 | "execution_count": 4, 638 | "metadata": {}, 639 | "outputs": [ 640 | { 641 | "name": "stdout", 642 | "output_type": "stream", 643 | "text": [ 644 | "Model: \"sequential_1\"\n", 645 | "_________________________________________________________________\n", 646 | "Layer (type) Output Shape Param # \n", 647 | "=================================================================\n", 648 | "embedding_1 (Embedding) (None, 64, 300) 4594500 \n", 649 | "_________________________________________________________________\n", 650 | "bidirectional_1 (Bidirection (None, 64, 512) 855552 \n", 651 | "_________________________________________________________________\n", 652 | "bidirectional_2 (Bidirection (None, 512) 1181184 \n", 653 | "_________________________________________________________________\n", 654 | "dense_1 (Dense) (None, 3) 1539 \n", 655 | "=================================================================\n", 656 | "Total params: 6,632,775\n", 657 | "Trainable params: 6,632,775\n", 658 | "Non-trainable params: 0\n", 659 | "_________________________________________________________________\n" 660 | ] 661 | } 662 | ], 663 | "source": [ 664 | "# 模型结构:词嵌入-双向GRU*2-全连接\n", 665 | "model = Sequential()\n", 666 | "# 64是序列号\n", 667 | "model.add(Embedding(len(vocab)+1, 300, input_length=64))\n", 668 | "model.add(Bidirectional(GRU(256, dropout=0.2, recurrent_dropout=0.1, return_sequences=True)))\n", 669 | "model.add(Bidirectional(GRU(256, dropout=0.2, recurrent_dropout=0.1)))\n", 670 | "model.add(Dense(3, activation='softmax'))\n", 671 | "model.summary()" 672 | ] 673 | }, 674 | { 675 | "cell_type": "code", 676 | "execution_count": null, 677 | "metadata": {}, 678 | "outputs": [ 679 | { 680 | "name": "stderr", 681 | "output_type": "stream", 682 | "text": [ 683 | "C:\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:434: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n", 684 | " \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n" 685 | ] 686 | }, 687 | { 688 | "name": "stdout", 689 | "output_type": "stream", 690 | "text": [ 691 | "Epoch 1/10\n", 692 | " 4800/12518 [==========>...................] - ETA: 5:04 - loss: 1.0801 - accuracy: 0.3985- ETA: 7:49 - loss: 1.0938 - accuracy: " 693 | ] 694 | } 695 | ], 696 | "source": [ 697 | "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 698 | "\n", 699 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 700 | "one_hot_labels=y_train\n", 701 | "model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=10)" 702 | ] 703 | }, 704 | { 705 | "cell_type": "markdown", 706 | "metadata": {}, 707 | "source": [ 708 | "# CNN+RNN" 709 | ] 710 | }, 711 | { 712 | "cell_type": "markdown", 713 | "metadata": {}, 714 | "source": [ 715 | "C-LSTM串联(将CNN的输出直接拼接上RNN)" 716 | ] 717 | }, 718 | { 719 | "cell_type": "code", 720 | "execution_count": null, 721 | "metadata": { 722 | "collapsed": true 723 | }, 724 | "outputs": [], 725 | "source": [ 726 | "# 模型结构:词嵌入-卷积池化-GRU*2-全连接\n", 727 | "model = Sequential()\n", 728 | "model.add(Embedding(len(vocab)+1, 300, input_length=64))\n", 729 | "model.add(Convolution1D(256, 3, padding='same', strides = 1))\n", 730 | "model.add(Activation('relu'))\n", 731 | "model.add(MaxPool1D(pool_size=2))\n", 732 | "model.add(GRU(256, dropout=0.2, recurrent_dropout=0.1, return_sequences = True))\n", 733 | "model.add(GRU(256, dropout=0.2, recurrent_dropout=0.1))\n", 734 | "model.add(Dense(3, activation='softmax'))\n", 735 | "model.summary()" 736 | ] 737 | }, 738 | { 739 | "cell_type": "code", 740 | "execution_count": null, 741 | "metadata": { 742 | "collapsed": true 743 | }, 744 | "outputs": [], 745 | "source": [ 746 | "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 747 | "\n", 748 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 749 | "one_hot_labels=y_train\n", 750 | "model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=10)" 751 | ] 752 | }, 753 | { 754 | "cell_type": "markdown", 755 | "metadata": { 756 | "collapsed": true 757 | }, 758 | "source": [ 759 | "# CNN+RNN并联" 760 | ] 761 | }, 762 | { 763 | "cell_type": "code", 764 | "execution_count": null, 765 | "metadata": { 766 | "collapsed": true 767 | }, 768 | "outputs": [], 769 | "source": [ 770 | "# 模型结构:词嵌入-卷积池化-全连接 ---拼接-全连接\n", 771 | "# -双向GRU-全连接\n", 772 | "main_input = Input(shape=(20,), dtype='float64')\n", 773 | "embed = Embedding(len(vocab)+1, 300, input_length=64)(main_input)\n", 774 | "cnn = Convolution1D(256, 3, padding='same', strides = 1, activation='relu')(embed)\n", 775 | "cnn = MaxPool1D(pool_size=4)(cnn)\n", 776 | "cnn = Flatten()(cnn)\n", 777 | "cnn = Dense(256)(cnn)\n", 778 | "rnn = Bidirectional(GRU(256, dropout=0.2, recurrent_dropout=0.1))(embed)\n", 779 | "rnn = Dense(256)(rnn)\n", 780 | "con = concatenate([cnn,rnn], axis=-1)\n", 781 | "main_output = Dense(3, activation='softmax')(con)\n", 782 | "model = Model(inputs = main_input, outputs = main_output)" 783 | ] 784 | }, 785 | { 786 | "cell_type": "code", 787 | "execution_count": null, 788 | "metadata": { 789 | "collapsed": true 790 | }, 791 | "outputs": [], 792 | "source": [ 793 | "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 794 | "\n", 795 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 796 | "one_hot_labels=y_train\n", 797 | "model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=10)" 798 | ] 799 | }, 800 | { 801 | "cell_type": "markdown", 802 | "metadata": { 803 | "collapsed": true 804 | }, 805 | "source": [ 806 | "# RCNN" 807 | ] 808 | }, 809 | { 810 | "cell_type": "code", 811 | "execution_count": 6, 812 | "metadata": { 813 | "collapsed": true 814 | }, 815 | "outputs": [], 816 | "source": [ 817 | "# # 模型结构:词嵌入*3-LSTM*2-拼接-全连接-最大化池化-全连接\n", 818 | "# # 我们需要重新整理数据集\n", 819 | "# left_train_word_ids = [[len(vocab)] + x[:-1] for x in x_train_word_ids]\n", 820 | "# left_test_word_ids = [[len(vocab)] + x[:-1] for x in x_test_word_ids]\n", 821 | "# right_train_word_ids = [x[1:] + [len(vocab)] for x in x_train_word_ids]\n", 822 | "# right_test_word_ids = [x[1:] + [len(vocab)] for x in x_test_word_ids]\n", 823 | " \n", 824 | "# # 分别对左边和右边的词进行编码\n", 825 | "# left_train_padded_seqs = pad_sequences(left_train_word_ids, maxlen=20)\n", 826 | "# left_test_padded_seqs = pad_sequences(left_test_word_ids, maxlen=20)\n", 827 | "# right_train_padded_seqs = pad_sequences(right_train_word_ids, maxlen=20)\n", 828 | "# right_test_padded_seqs = pad_sequences(right_test_word_ids, maxlen=20)\n", 829 | " \n", 830 | "# # 模型共有三个输入,分别是左词,右词和中心词\n", 831 | "# document = Input(shape = (None, ), dtype = \"int32\")\n", 832 | "# left_context = Input(shape = (None, ), dtype = \"int32\")\n", 833 | "# right_context = Input(shape = (None, ), dtype = \"int32\")\n", 834 | " \n", 835 | "# # 构建词向量\n", 836 | "# embedder = Embedding(len(vocab) + 1, 300, input_length = 64)\n", 837 | "# doc_embedding = embedder(document)\n", 838 | "# l_embedding = embedder(left_context)\n", 839 | "# r_embedding = embedder(right_context)\n", 840 | " \n", 841 | "# # 分别对应文中的公式(1)-(7)\n", 842 | "# forward = LSTM(256, return_sequences = True)(l_embedding) # 等式(1)\n", 843 | "# # 等式(2)\n", 844 | "# backward = LSTM(256, return_sequences = True, go_backwards = True)(r_embedding) \n", 845 | "# together = concatenate([forward, doc_embedding, backward], axis = 2) # 等式(3)\n", 846 | " \n", 847 | "# semantic = TimeDistributed(Dense(128, activation = \"tanh\"))(together) # 等式(4)\n", 848 | "# # 等式(5)\n", 849 | "# pool_rnn = Lambda(lambda x: backend.max(x, axis = 1), output_shape = (128, ))(semantic) \n", 850 | "# output = Dense(3, activation = \"softmax\")(pool_rnn) # 等式(6)和(7)\n", 851 | "# model = Model(inputs = [document, left_context, right_context], outputs = output)\n", 852 | "# model.summary()\n", 853 | "# model.compile(loss='categorical_crossentropy',\n", 854 | "# optimizer='adam',\n", 855 | "# metrics=['accuracy'])\n", 856 | " \n", 857 | "# model.fit([X_train_padded_seqs, left_train_padded_seqs, right_train_padded_seqs],y_train,\n", 858 | "# batch_size=32,\n", 859 | "# epochs=12,\n", 860 | "# validation_data=([X_test_padded_seqs, left_test_padded_seqs,right_test_padded_seqs], y_test))" 861 | ] 862 | }, 863 | { 864 | "cell_type": "markdown", 865 | "metadata": { 866 | "collapsed": true 867 | }, 868 | "source": [ 869 | "# Attention" 870 | ] 871 | }, 872 | { 873 | "cell_type": "code", 874 | "execution_count": 7, 875 | "metadata": { 876 | "collapsed": true 877 | }, 878 | "outputs": [], 879 | "source": [ 880 | "class Attention(Layer):\n", 881 | " def __init__(self, attention_size, **kwargs):\n", 882 | " self.attention_size = attention_size\n", 883 | " super(Attention, self).__init__(**kwargs)\n", 884 | " \n", 885 | " def build(self, input_shape):\n", 886 | " # W: (EMBED_SIZE, ATTENTION_SIZE)\n", 887 | " # b: (ATTENTION_SIZE, 1)\n", 888 | " # u: (ATTENTION_SIZE, 1)\n", 889 | " self.W = self.add_weight(name=\"W_{:s}\".format(self.name),\n", 890 | " shape=(input_shape[-1], self.attention_size),\n", 891 | " initializer=\"glorot_normal\",\n", 892 | " trainable=True)\n", 893 | " self.b = self.add_weight(name=\"b_{:s}\".format(self.name),\n", 894 | " shape=(input_shape[1], 1),\n", 895 | " initializer=\"zeros\",\n", 896 | " trainable=True)\n", 897 | " self.u = self.add_weight(name=\"u_{:s}\".format(self.name),\n", 898 | " shape=(self.attention_size, 1),\n", 899 | " initializer=\"glorot_normal\",\n", 900 | " trainable=True)\n", 901 | " super(Attention, self).build(input_shape)\n", 902 | " \n", 903 | " def call(self, x, mask=None):\n", 904 | " # input: (BATCH_SIZE, MAX_TIMESTEPS, EMBED_SIZE)\n", 905 | " # et: (BATCH_SIZE, MAX_TIMESTEPS, ATTENTION_SIZE)\n", 906 | " et = K.tanh(K.dot(x, self.W) + self.b)\n", 907 | " # at: (BATCH_SIZE, MAX_TIMESTEPS)\n", 908 | " at = K.softmax(K.squeeze(K.dot(et, self.u), axis=-1))\n", 909 | " if mask is not None:\n", 910 | " at *= K.cast(mask, K.floatx())\n", 911 | " # ot: (BATCH_SIZE, MAX_TIMESTEPS, EMBED_SIZE)\n", 912 | " atx = K.expand_dims(at, axis=-1)\n", 913 | " ot = atx * x\n", 914 | " # output: (BATCH_SIZE, EMBED_SIZE)\n", 915 | " output = K.sum(ot, axis=1)\n", 916 | " return output\n", 917 | " \n", 918 | " def compute_mask(self, input, input_mask=None):\n", 919 | " return None\n", 920 | " \n", 921 | " def compute_output_shape(self, input_shape):\n", 922 | " return (input_shape[0], input_shape[-1])" 923 | ] 924 | }, 925 | { 926 | "cell_type": "code", 927 | "execution_count": 8, 928 | "metadata": { 929 | "collapsed": true 930 | }, 931 | "outputs": [], 932 | "source": [ 933 | "# 需要导入两个模型,分别是句子级别的和篇章级别的,以及预处理后的文本序列\n", 934 | "def get_attention(sent_model, doc_model, sequences, topN=5):\n", 935 | " sent_before_att = K.function([sent_model.layers[0].input, K.learning_phase()],\n", 936 | " [sent_model.layers[2].output])\n", 937 | " cnt_reviews = sequences.shape[0]\n", 938 | " \n", 939 | " # 导出这个句子每个词的权重\n", 940 | " sent_att_w = sent_model.layers[3].get_weights()\n", 941 | " sent_all_att = []\n", 942 | " for i in range(cnt_reviews):\n", 943 | " sent_each_att = sent_before_att([sequences[i], 0])\n", 944 | " sent_each_att = cal_att_weights(sent_each_att, sent_att_w, model_name)\n", 945 | " sent_each_att = sent_each_att.ravel()\n", 946 | " sent_all_att.append(sent_each_att)\n", 947 | " sent_all_att = np.array(sent_all_att)\n", 948 | " \n", 949 | " doc_before_att = K.function([doc_model.layers[0].input, K.learning_phase()],\n", 950 | " [doc_model.layers[2].output])\n", 951 | " # 找到重要的分句\n", 952 | " doc_att_w = doc_model.layers[3].get_weights()\n", 953 | " doc_sub_att = doc_before_att([sequences, 0])\n", 954 | " doc_att = cal_att_weights(doc_sub_att, doc_att_w, model_name)\n", 955 | " \n", 956 | " return sent_all_att, doc_att\n", 957 | " \n", 958 | "# 使用numpy重新计算attention层的结果\n", 959 | "def cal_att_weights(output, att_w, model_name):\n", 960 | " if model_name == 'HAN':\n", 961 | " eij = np.tanh(np.dot(output[0], att_w[0]) + att_w[1])\n", 962 | " eij = np.dot(eij, att_w[2])\n", 963 | " eij = eij.reshape((eij.shape[0], eij.shape[1]))\n", 964 | " ai = np.exp(eij)\n", 965 | " weights = ai / np.sum(ai)\n", 966 | " return weights" 967 | ] 968 | }, 969 | { 970 | "cell_type": "code", 971 | "execution_count": 10, 972 | "metadata": {}, 973 | "outputs": [ 974 | { 975 | "ename": "NameError", 976 | "evalue": "name 'AttLayer' is not defined", 977 | "output_type": "error", 978 | "traceback": [ 979 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 980 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", 981 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0membed\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mEmbedding\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvocab\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m300\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_length\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m64\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mgru\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mBidirectional\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mGRU\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdropout\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreturn_sequences\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0membed\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mattention\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mAttLayer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgru\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[0moutput\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mDense\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mactivation\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'softmax'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mattention\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[0mmodel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mModel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0moutput\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 982 | "\u001b[1;31mNameError\u001b[0m: name 'AttLayer' is not defined" 983 | ] 984 | } 985 | ], 986 | "source": [ 987 | "# 模型结构:词嵌入-双向GRU-Attention-全连接\n", 988 | "inputs = Input(shape=(64,), dtype='float64')\n", 989 | "embed = Embedding(len(vocab) + 1,300, input_length = 64)(inputs)\n", 990 | "gru = Bidirectional(GRU(100, dropout=0.2, return_sequences=True))(embed)\n", 991 | "attention = AttLayer()(gru)\n", 992 | "output = Dense(3, activation='softmax')(attention)\n", 993 | "model = Model(inputs, output)\n", 994 | "model.summary()" 995 | ] 996 | }, 997 | { 998 | "cell_type": "markdown", 999 | "metadata": {}, 1000 | "source": [ 1001 | "# FastText" 1002 | ] 1003 | }, 1004 | { 1005 | "cell_type": "code", 1006 | "execution_count": 13, 1007 | "metadata": {}, 1008 | "outputs": [ 1009 | { 1010 | "name": "stdout", 1011 | "output_type": "stream", 1012 | "text": [ 1013 | "Model: \"sequential_1\"\n", 1014 | "_________________________________________________________________\n", 1015 | "Layer (type) Output Shape Param # \n", 1016 | "=================================================================\n", 1017 | "embedding_4 (Embedding) (None, 64, 300) 87423600 \n", 1018 | "_________________________________________________________________\n", 1019 | "global_average_pooling1d_1 ( (None, 300) 0 \n", 1020 | "_________________________________________________________________\n", 1021 | "dense_2 (Dense) (None, 3) 903 \n", 1022 | "=================================================================\n", 1023 | "Total params: 87,424,503\n", 1024 | "Trainable params: 87,424,503\n", 1025 | "Non-trainable params: 0\n", 1026 | "_________________________________________________________________\n" 1027 | ] 1028 | } 1029 | ], 1030 | "source": [ 1031 | "# 模型结构:词嵌入(n-gram)-最大化池化-全连接\n", 1032 | "# 生成n-gram组合的词(以3为例)\n", 1033 | "ngram = 3\n", 1034 | "# 将n-gram词加入到词表\n", 1035 | "def create_ngram(sent, ngram_value):\n", 1036 | " return set(zip(*[sent[i:] for i in range(ngram_value)]))\n", 1037 | "ngram_set = set()\n", 1038 | "for sentence in x_train_padded_seqs:\n", 1039 | " for i in range(2, ngram+1):\n", 1040 | " set_of_ngram = create_ngram(sentence, i)\n", 1041 | " ngram_set.update(set_of_ngram)\n", 1042 | " \n", 1043 | "# 给n-gram词汇编码\n", 1044 | "start_index = len(vocab) + 2\n", 1045 | "token_indice = {v: k + start_index for k, v in enumerate(ngram_set)} # 给n-gram词汇编码\n", 1046 | "indice_token = {token_indice[k]: k for k in token_indice}\n", 1047 | "max_features = np.max(list(indice_token.keys())) + 1\n", 1048 | "# 将n-gram词加入到输入文本的末端\n", 1049 | "def add_ngram(sequences, token_indice, ngram_range):\n", 1050 | " new_sequences = []\n", 1051 | " for sent in sequences:\n", 1052 | " new_list = sent[:]\n", 1053 | " for i in range(len(new_list) - ngram_range + 1):\n", 1054 | " for ngram_value in range(2, ngram_range + 1):\n", 1055 | " ngram = tuple(new_list[i:i + ngram_value])\n", 1056 | " if ngram in token_indice:\n", 1057 | " new_list.append(token_indice[ngram])\n", 1058 | " new_sequences.append(new_list)\n", 1059 | " return new_sequences\n", 1060 | " \n", 1061 | "x_train = add_ngram(x_train_word_ids, token_indice, ngram)\n", 1062 | "x_test = add_ngram(x_test_word_ids, token_indice, ngram)\n", 1063 | "x_train = pad_sequences(x_train, maxlen=25)\n", 1064 | "x_test = pad_sequences(x_test, maxlen=25)\n", 1065 | " \n", 1066 | "model = Sequential()\n", 1067 | "model.add(Embedding(max_features, 300, input_length=64))\n", 1068 | "model.add(GlobalAveragePooling1D())\n", 1069 | "model.add(Dense(3, activation='softmax'))\n", 1070 | "model.summary()" 1071 | ] 1072 | }, 1073 | { 1074 | "cell_type": "code", 1075 | "execution_count": 14, 1076 | "metadata": {}, 1077 | "outputs": [ 1078 | { 1079 | "name": "stderr", 1080 | "output_type": "stream", 1081 | "text": [ 1082 | "C:\\anaconda\\lib\\site-packages\\tensorflow\\python\\framework\\indexed_slices.py:434: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.\n", 1083 | " \"Converting sparse IndexedSlices to a dense Tensor of unknown shape. \"\n" 1084 | ] 1085 | }, 1086 | { 1087 | "name": "stdout", 1088 | "output_type": "stream", 1089 | "text": [ 1090 | "Epoch 1/10\n", 1091 | "12518/12518 [==============================] - 79s 6ms/step - loss: 1.0832 - accuracy: 0.4070A: 23s - loss: 1.0874 - accuracy:\n", 1092 | "Epoch 2/10\n", 1093 | "12518/12518 [==============================] - 66s 5ms/step - loss: 1.0559 - accuracy: 0.4493\n", 1094 | "Epoch 3/10\n", 1095 | "12518/12518 [==============================] - 61s 5ms/step - loss: 1.0265 - accuracy: 0.5006TA: 58s - loss: 1.0406 - a\n", 1096 | "Epoch 4/10\n", 1097 | "12518/12518 [==============================] - 64s 5ms/step - loss: 0.9956 - accuracy: 0.5141\n", 1098 | "Epoch 5/10\n", 1099 | "12518/12518 [==============================] - 77s 6ms/step - loss: 0.9620 - accuracy: 0.5701\n", 1100 | "Epoch 6/10\n", 1101 | "12518/12518 [==============================] - 66s 5ms/step - loss: 0.9252 - accuracy: 0.5915\n", 1102 | "Epoch 7/10\n", 1103 | "12518/12518 [==============================] - 76s 6ms/step - loss: 0.8844 - accuracy: 0.6394\n", 1104 | "Epoch 8/10\n", 1105 | "12518/12518 [==============================] - 82s 7ms/step - loss: 0.8420 - accuracy: 0.6683\n", 1106 | "Epoch 9/10\n", 1107 | "12518/12518 [==============================] - 94s 7ms/step - loss: 0.8012 - accuracy: 0.6981\n", 1108 | "Epoch 10/10\n", 1109 | "12518/12518 [==============================] - 80s 6ms/step - loss: 0.7634 - accuracy: 0.7183\n" 1110 | ] 1111 | }, 1112 | { 1113 | "data": { 1114 | "text/plain": [ 1115 | "" 1116 | ] 1117 | }, 1118 | "execution_count": 14, 1119 | "metadata": {}, 1120 | "output_type": "execute_result" 1121 | } 1122 | ], 1123 | "source": [ 1124 | "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 1125 | "\n", 1126 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3) # 将标签转换为one-hot编码\n", 1127 | "one_hot_labels=y_train\n", 1128 | "model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=10)" 1129 | ] 1130 | }, 1131 | { 1132 | "cell_type": "code", 1133 | "execution_count": null, 1134 | "metadata": { 1135 | "collapsed": true 1136 | }, 1137 | "outputs": [], 1138 | "source": [] 1139 | } 1140 | ], 1141 | "metadata": { 1142 | "kernelspec": { 1143 | "display_name": "Python 3", 1144 | "language": "python", 1145 | "name": "python3" 1146 | }, 1147 | "language_info": { 1148 | "codemirror_mode": { 1149 | "name": "ipython", 1150 | "version": 3 1151 | }, 1152 | "file_extension": ".py", 1153 | "mimetype": "text/x-python", 1154 | "name": "python", 1155 | "nbconvert_exporter": "python", 1156 | "pygments_lexer": "ipython3", 1157 | "version": "3.6.2" 1158 | } 1159 | }, 1160 | "nbformat": 4, 1161 | "nbformat_minor": 2 1162 | } 1163 | -------------------------------------------------------------------------------- /stopword.txt: -------------------------------------------------------------------------------- 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 | 其中 279 | 起 280 | 起见 281 | 岂但 282 | 恰恰相反 283 | 前后 284 | 前者 285 | 且 286 | 然而 287 | 然后 288 | 然则 289 | 让 290 | 人家 291 | 任 292 | 任何 293 | 任凭 294 | 如 295 | 如此 296 | 如果 297 | 如何 298 | 如其 299 | 如若 300 | 如上所述 301 | 若 302 | 若非 303 | 若是 304 | 啥 305 | 上下 306 | 尚且 307 | 设若 308 | 设使 309 | 甚而 310 | 甚么 311 | 甚至 312 | 省得 313 | 时候 314 | 什么 315 | 什么样 316 | 使得 317 | 是 318 | 是的 319 | 首先 320 | 谁 321 | 谁知 322 | 顺 323 | 顺着 324 | 似的 325 | 虽 326 | 虽然 327 | 虽说 328 | 虽则 329 | 随 330 | 随着 331 | 所 332 | 所以 333 | 他 334 | 他们 335 | 他人 336 | 它 337 | 它们 338 | 她 339 | 她们 340 | 倘 341 | 倘或 342 | 倘然 343 | 倘若 344 | 倘使 345 | 腾 346 | 替 347 | 通过 348 | 同 349 | 同时 350 | 哇 351 | 万一 352 | 往 353 | 望 354 | 为 355 | 为何 356 | 为了 357 | 为什么 358 | 为着 359 | 喂 360 | 嗡嗡 361 | 我 362 | 我们 363 | 呜 364 | 呜呼 365 | 乌乎 366 | 无论 367 | 无宁 368 | 毋宁 369 | 嘻 370 | 吓 371 | 相对而言 372 | 像 373 | 向 374 | 向着 375 | 嘘 376 | 呀 377 | 焉 378 | 沿 379 | 沿着 380 | 要 381 | 要不 382 | 要不然 383 | 要不是 384 | 要么 385 | 要是 386 | 也 387 | 也罢 388 | 也好 389 | 一 390 | 一般 391 | 一旦 392 | 一方面 393 | 一来 394 | 一切 395 | 一样 396 | 一则 397 | 依 398 | 依照 399 | 矣 400 | 以 401 | 以便 402 | 以及 403 | 以免 404 | 以至 405 | 以至于 406 | 以致 407 | 抑或 408 | 因 409 | 因此 410 | 因而 411 | 因为 412 | 哟 413 | 用 414 | 由 415 | 由此可见 416 | 由于 417 | 有 418 | 有的 419 | 有关 420 | 有些 421 | 又 422 | 于 423 | 于是 424 | 于是乎 425 | 与 426 | 与此同时 427 | 与否 428 | 与其 429 | 越是 430 | 云云 431 | 哉 432 | 再说 433 | 再者 434 | 在 435 | 在下 436 | 咱 437 | 咱们 438 | 则 439 | 怎 440 | 怎么 441 | 怎么办 442 | 怎么样 443 | 怎样 444 | 咋 445 | 照 446 | 照着 447 | 者 448 | 这 449 | 这边 450 | 这儿 451 | 这个 452 | 这会儿 453 | 这就是说 454 | 这里 455 | 这么 456 | 这么点儿 457 | 这么些 458 | 这么样 459 | 这时 460 | 这些 461 | 这样 462 | 正如 463 | 吱 464 | 之 465 | 之类 466 | 之所以 467 | 之一 468 | 只是 469 | 只限 470 | 只要 471 | 只有 472 | 至 473 | 至于 474 | 诸位 475 | 着 476 | 着呢 477 | 自 478 | 自从 479 | 自个儿 480 | 自各儿 481 | 自己 482 | 自家 483 | 自身 484 | 综上所述 485 | 总的来看 486 | 总的来说 487 | 总的说来 488 | 总而言之 489 | 总之 490 | 纵 491 | 纵令 492 | 纵然 493 | 纵使 494 | 遵照 495 | 作为 496 | 兮 497 | 呃 498 | 呗 499 | 咚 500 | 咦 501 | 喏 502 | 啐 503 | 喔唷 504 | 嗬 505 | 嗯 506 | 嗳 507 | ~ 508 | ! 509 | . 510 | : 511 | " 512 | ' 513 | ( 514 | ) 515 | * 516 | A 517 | 白 518 | 社会主义 519 | -- 520 | .. 521 | >> 522 | [ 523 | ] 524 | 525 | < 526 | > 527 | / 528 | \ 529 | | 530 | - 531 | _ 532 | + 533 | = 534 | & 535 | ^ 536 | % 537 | # 538 | @ 539 | ` 540 | ; 541 | $ 542 | ( 543 | ) 544 | —— 545 | — 546 | ¥ 547 | · 548 | ... 549 | ‘ 550 | ’ 551 | 〉 552 | 〈 553 | … 554 |   555 | 0 556 | 1 557 | 2 558 | 3 559 | 4 560 | 5 561 | 6 562 | 7 563 | 8 564 | 9 565 | 0 566 | 1 567 | 2 568 | 3 569 | 4 570 | 5 571 | 6 572 | 7 573 | 8 574 | 9 575 | 二 576 | 三 577 | 四 578 | 五 579 | 六 580 | 七 581 | 八 582 | 九 583 | 零 584 | > 585 | < 586 | @ 587 | # 588 | $ 589 | % 590 | ︿ 591 | & 592 | * 593 | + 594 | ~ 595 | | 596 | [ 597 | ] 598 | { 599 | } 600 | 啊哈 601 | 啊呀 602 | 啊哟 603 | 挨次 604 | 挨个 605 | 挨家挨户 606 | 挨门挨户 607 | 挨门逐户 608 | 挨着 609 | 按理 610 | 按期 611 | 按时 612 | 按说 613 | 暗地里 614 | 暗中 615 | 暗自 616 | 昂然 617 | 八成 618 | 白白 619 | 半 620 | 梆 621 | 保管 622 | 保险 623 | 饱 624 | 背地里 625 | 背靠背 626 | 倍感 627 | 倍加 628 | 本人 629 | 本身 630 | 甭 631 | 比起 632 | 比如说 633 | 比照 634 | 毕竟 635 | 必 636 | 必定 637 | 必将 638 | 必须 639 | 便 640 | 别人 641 | 并非 642 | 并肩 643 | 并没 644 | 并没有 645 | 并排 646 | 并无 647 | 勃然 648 | 不 649 | 不必 650 | 不常 651 | 不大 652 | 不但...而且 653 | 不得 654 | 不得不 655 | 不得了 656 | 不得已 657 | 不迭 658 | 不定 659 | 不对 660 | 不妨 661 | 不管怎样 662 | 不会 663 | 不仅...而且 664 | 不仅仅 665 | 不仅仅是 666 | 不经意 667 | 不可开交 668 | 不可抗拒 669 | 不力 670 | 不了 671 | 不料 672 | 不满 673 | 不免 674 | 不能不 675 | 不起 676 | 不巧 677 | 不然的话 678 | 不日 679 | 不少 680 | 不胜 681 | 不时 682 | 不是 683 | 不同 684 | 不能 685 | 不要 686 | 不外 687 | 不外乎 688 | 不下 689 | 不限 690 | 不消 691 | 不已 692 | 不亦乐乎 693 | 不由得 694 | 不再 695 | 不择手段 696 | 不怎么 697 | 不曾 698 | 不知不觉 699 | 不止 700 | 不止一次 701 | 不至于 702 | 才 703 | 才能 704 | 策略地 705 | 差不多 706 | 差一点 707 | 常 708 | 常常 709 | 常言道 710 | 常言说 711 | 常言说得好 712 | 长此下去 713 | 长话短说 714 | 长期以来 715 | 长线 716 | 敞开儿 717 | 彻夜 718 | 陈年 719 | 趁便 720 | 趁机 721 | 趁热 722 | 趁势 723 | 趁早 724 | 成年 725 | 成年累月 726 | 成心 727 | 乘机 728 | 乘胜 729 | 乘势 730 | 乘隙 731 | 乘虚 732 | 诚然 733 | 迟早 734 | 充分 735 | 充其极 736 | 充其量 737 | 抽冷子 738 | 臭 739 | 初 740 | 出 741 | 出来 742 | 出去 743 | 除此 744 | 除此而外 745 | 除此以外 746 | 除开 747 | 除去 748 | 除却 749 | 除外 750 | 处处 751 | 川流不息 752 | 传 753 | 传说 754 | 传闻 755 | 串行 756 | 纯 757 | 纯粹 758 | 此后 759 | 此中 760 | 次第 761 | 匆匆 762 | 从不 763 | 从此 764 | 从此以后 765 | 从古到今 766 | 从古至今 767 | 从今以后 768 | 从宽 769 | 从来 770 | 从轻 771 | 从速 772 | 从头 773 | 从未 774 | 从无到有 775 | 从小 776 | 从新 777 | 从严 778 | 从优 779 | 从早到晚 780 | 从中 781 | 从重 782 | 凑巧 783 | 粗 784 | 存心 785 | 达旦 786 | 打从 787 | 打开天窗说亮话 788 | 大 789 | 大不了 790 | 大大 791 | 大抵 792 | 大都 793 | 大多 794 | 大凡 795 | 大概 796 | 大家 797 | 大举 798 | 大略 799 | 大面儿上 800 | 大事 801 | 大体 802 | 大体上 803 | 大约 804 | 大张旗鼓 805 | 大致 806 | 呆呆地 807 | 带 808 | 殆 809 | 待到 810 | 单 811 | 单纯 812 | 单单 813 | 但愿 814 | 弹指之间 815 | 当场 816 | 当儿 817 | 当即 818 | 当口儿 819 | 当然 820 | 当庭 821 | 当头 822 | 当下 823 | 当真 824 | 当中 825 | 倒不如 826 | 倒不如说 827 | 倒是 828 | 到处 829 | 到底 830 | 到了儿 831 | 到目前为止 832 | 到头 833 | 到头来 834 | 得起 835 | 得天独厚 836 | 的确 837 | 等到 838 | 叮当 839 | 顶多 840 | 定 841 | 动不动 842 | 动辄 843 | 陡然 844 | 都 845 | 独 846 | 独自 847 | 断然 848 | 顿时 849 | 多次 850 | 多多 851 | 多多少少 852 | 多多益善 853 | 多亏 854 | 多年来 855 | 多年前 856 | 而后 857 | 而论 858 | 而又 859 | 尔等 860 | 二话不说 861 | 二话没说 862 | 反倒 863 | 反倒是 864 | 反而 865 | 反手 866 | 反之亦然 867 | 反之则 868 | 方 869 | 方才 870 | 方能 871 | 放量 872 | 非常 873 | 非得 874 | 分期 875 | 分期分批 876 | 分头 877 | 奋勇 878 | 愤然 879 | 风雨无阻 880 | 逢 881 | 弗 882 | 甫 883 | 嘎嘎 884 | 该当 885 | 概 886 | 赶快 887 | 赶早不赶晚 888 | 敢 889 | 敢情 890 | 敢于 891 | 刚 892 | 刚才 893 | 刚好 894 | 刚巧 895 | 高低 896 | 格外 897 | 隔日 898 | 隔夜 899 | 个人 900 | 各式 901 | 更 902 | 更加 903 | 更进一步 904 | 更为 905 | 公然 906 | 共 907 | 共总 908 | 够瞧的 909 | 姑且 910 | 古来 911 | 故而 912 | 故意 913 | 固 914 | 怪 915 | 怪不得 916 | 惯常 917 | 光 918 | 光是 919 | 归根到底 920 | 归根结底 921 | 过于 922 | 毫不 923 | 毫无 924 | 毫无保留地 925 | 毫无例外 926 | 好在 927 | 何必 928 | 何尝 929 | 何妨 930 | 何苦 931 | 何乐而不为 932 | 何须 933 | 何止 934 | 很 935 | 很多 936 | 很少 937 | 轰然 938 | 后来 939 | 呼啦 940 | 忽地 941 | 忽然 942 | 互 943 | 互相 944 | 哗啦 945 | 话说 946 | 还 947 | 恍然 948 | 会 949 | 豁然 950 | 活 951 | 伙同 952 | 或多或少 953 | 或许 954 | 基本 955 | 基本上 956 | 基于 957 | 极 958 | 极大 959 | 极度 960 | 极端 961 | 极力 962 | 极其 963 | 极为 964 | 急匆匆 965 | 即将 966 | 即刻 967 | 即是说 968 | 几度 969 | 几番 970 | 几乎 971 | 几经 972 | 既...又 973 | 继之 974 | 加上 975 | 加以 976 | 间或 977 | 简而言之 978 | 简言之 979 | 简直 980 | 见 981 | 将才 982 | 将近 983 | 将要 984 | 交口 985 | 较比 986 | 较为 987 | 接连不断 988 | 接下来 989 | 皆可 990 | 截然 991 | 截至 992 | 藉以 993 | 借此 994 | 借以 995 | 届时 996 | 仅 997 | 仅仅 998 | 谨 999 | 进来 1000 | 进去 1001 | 近 1002 | 近几年来 1003 | 近来 1004 | 近年来 1005 | 尽管如此 1006 | 尽可能 1007 | 尽快 1008 | 尽量 1009 | 尽然 1010 | 尽如人意 1011 | 尽心竭力 1012 | 尽心尽力 1013 | 尽早 1014 | 精光 1015 | 经常 1016 | 竟 1017 | 竟然 1018 | 究竟 1019 | 就此 1020 | 就地 1021 | 就算 1022 | 居然 1023 | 局外 1024 | 举凡 1025 | 据称 1026 | 据此 1027 | 据实 1028 | 据说 1029 | 据我所知 1030 | 据悉 1031 | 具体来说 1032 | 决不 1033 | 决非 1034 | 绝 1035 | 绝不 1036 | 绝顶 1037 | 绝对 1038 | 绝非 1039 | 均 1040 | 喀 1041 | 看 1042 | 看来 1043 | 看起来 1044 | 看上去 1045 | 看样子 1046 | 可好 1047 | 可能 1048 | 恐怕 1049 | 快 1050 | 快要 1051 | 来不及 1052 | 来得及 1053 | 来讲 1054 | 来看 1055 | 拦腰 1056 | 牢牢 1057 | 老 1058 | 老大 1059 | 老老实实 1060 | 老是 1061 | 累次 1062 | 累年 1063 | 理当 1064 | 理该 1065 | 理应 1066 | 历 1067 | 立 1068 | 立地 1069 | 立刻 1070 | 立马 1071 | 立时 1072 | 联袂 1073 | 连连 1074 | 连日 1075 | 连日来 1076 | 连声 1077 | 连袂 1078 | 临到 1079 | 另方面 1080 | 另行 1081 | 另一个 1082 | 路经 1083 | 屡 1084 | 屡次 1085 | 屡次三番 1086 | 屡屡 1087 | 缕缕 1088 | 率尔 1089 | 率然 1090 | 略 1091 | 略加 1092 | 略微 1093 | 略为 1094 | 论说 1095 | 马上 1096 | 蛮 1097 | 满 1098 | 没 1099 | 没有 1100 | 每逢 1101 | 每每 1102 | 每时每刻 1103 | 猛然 1104 | 猛然间 1105 | 莫 1106 | 莫不 1107 | 莫非 1108 | 莫如 1109 | 默默地 1110 | 默然 1111 | 呐 1112 | 那末 1113 | 奈 1114 | 难道 1115 | 难得 1116 | 难怪 1117 | 难说 1118 | 内 1119 | 年复一年 1120 | 凝神 1121 | 偶而 1122 | 偶尔 1123 | 怕 1124 | 砰 1125 | 碰巧 1126 | 譬如 1127 | 偏偏 1128 | 乒 1129 | 平素 1130 | 颇 1131 | 迫于 1132 | 扑通 1133 | 其后 1134 | 其实 1135 | 奇 1136 | 齐 1137 | 起初 1138 | 起来 1139 | 起首 1140 | 起头 1141 | 起先 1142 | 岂 1143 | 岂非 1144 | 岂止 1145 | 迄 1146 | 恰逢 1147 | 恰好 1148 | 恰恰 1149 | 恰巧 1150 | 恰如 1151 | 恰似 1152 | 千 1153 | 千万 1154 | 千万千万 1155 | 切 1156 | 切不可 1157 | 切莫 1158 | 切切 1159 | 切勿 1160 | 窃 1161 | 亲口 1162 | 亲身 1163 | 亲手 1164 | 亲眼 1165 | 亲自 1166 | 顷 1167 | 顷刻 1168 | 顷刻间 1169 | 顷刻之间 1170 | 请勿 1171 | 穷年累月 1172 | 取道 1173 | 去 1174 | 权时 1175 | 全都 1176 | 全力 1177 | 全年 1178 | 全然 1179 | 全身心 1180 | 然 1181 | 人人 1182 | 仍 1183 | 仍旧 1184 | 仍然 1185 | 日复一日 1186 | 日见 1187 | 日渐 1188 | 日益 1189 | 日臻 1190 | 如常 1191 | 如此等等 1192 | 如次 1193 | 如今 1194 | 如期 1195 | 如前所述 1196 | 如上 1197 | 如下 1198 | 汝 1199 | 三番两次 1200 | 三番五次 1201 | 三天两头 1202 | 瑟瑟 1203 | 沙沙 1204 | 上 1205 | 上来 1206 | 上去 1207 | able 1208 | about 1209 | above 1210 | according 1211 | accordingly 1212 | across 1213 | actually 1214 | after 1215 | afterwards 1216 | again 1217 | against 1218 | ain't 1219 | all 1220 | allow 1221 | allows 1222 | almost 1223 | alone 1224 | along 1225 | already 1226 | also 1227 | although 1228 | always 1229 | am 1230 | among 1231 | amongst 1232 | an 1233 | and 1234 | another 1235 | any 1236 | anybody 1237 | anyhow 1238 | anyone 1239 | anything 1240 | anyway 1241 | anyways 1242 | anywhere 1243 | apart 1244 | appear 1245 | appreciate 1246 | appropriate 1247 | are 1248 | aren't 1249 | around 1250 | as 1251 | a's 1252 | aside 1253 | ask 1254 | asking 1255 | associated 1256 | at 1257 | available 1258 | away 1259 | awfully 1260 | be 1261 | became 1262 | because 1263 | become 1264 | becomes 1265 | becoming 1266 | been 1267 | before 1268 | beforehand 1269 | behind 1270 | being 1271 | believe 1272 | below 1273 | beside 1274 | besides 1275 | best 1276 | better 1277 | between 1278 | beyond 1279 | both 1280 | brief 1281 | but 1282 | by 1283 | came 1284 | can 1285 | cannot 1286 | cant 1287 | can't 1288 | cause 1289 | causes 1290 | certain 1291 | certainly 1292 | changes 1293 | clearly 1294 | c'mon 1295 | co 1296 | com 1297 | come 1298 | comes 1299 | concerning 1300 | consequently 1301 | consider 1302 | considering 1303 | contain 1304 | containing 1305 | contains 1306 | corresponding 1307 | could 1308 | couldn't 1309 | course 1310 | c's 1311 | currently 1312 | definitely 1313 | described 1314 | despite 1315 | did 1316 | didn't 1317 | different 1318 | do 1319 | does 1320 | doesn't 1321 | doing 1322 | done 1323 | don't 1324 | down 1325 | downwards 1326 | during 1327 | each 1328 | edu 1329 | eg 1330 | eight 1331 | either 1332 | else 1333 | elsewhere 1334 | enough 1335 | entirely 1336 | especially 1337 | et 1338 | etc 1339 | even 1340 | ever 1341 | every 1342 | everybody 1343 | everyone 1344 | everything 1345 | everywhere 1346 | ex 1347 | exactly 1348 | example 1349 | except 1350 | far 1351 | few 1352 | fifth 1353 | first 1354 | five 1355 | followed 1356 | following 1357 | follows 1358 | for 1359 | former 1360 | formerly 1361 | forth 1362 | four 1363 | from 1364 | further 1365 | furthermore 1366 | get 1367 | gets 1368 | getting 1369 | given 1370 | gives 1371 | go 1372 | goes 1373 | going 1374 | gone 1375 | got 1376 | gotten 1377 | greetings 1378 | had 1379 | hadn't 1380 | happens 1381 | hardly 1382 | has 1383 | hasn't 1384 | have 1385 | haven't 1386 | having 1387 | he 1388 | hello 1389 | help 1390 | hence 1391 | her 1392 | here 1393 | hereafter 1394 | hereby 1395 | herein 1396 | here's 1397 | hereupon 1398 | hers 1399 | herself 1400 | he's 1401 | hi 1402 | him 1403 | himself 1404 | his 1405 | hither 1406 | hopefully 1407 | how 1408 | howbeit 1409 | however 1410 | i'd 1411 | ie 1412 | if 1413 | ignored 1414 | i'll 1415 | i'm 1416 | immediate 1417 | in 1418 | inasmuch 1419 | inc 1420 | indeed 1421 | indicate 1422 | indicated 1423 | indicates 1424 | inner 1425 | insofar 1426 | instead 1427 | into 1428 | inward 1429 | is 1430 | isn't 1431 | it 1432 | it'd 1433 | it'll 1434 | its 1435 | it's 1436 | itself 1437 | i've 1438 | just 1439 | keep 1440 | keeps 1441 | kept 1442 | know 1443 | known 1444 | knows 1445 | last 1446 | lately 1447 | later 1448 | latter 1449 | latterly 1450 | least 1451 | less 1452 | lest 1453 | let 1454 | let's 1455 | like 1456 | liked 1457 | likely 1458 | little 1459 | look 1460 | looking 1461 | looks 1462 | ltd 1463 | mainly 1464 | many 1465 | may 1466 | maybe 1467 | me 1468 | mean 1469 | meanwhile 1470 | merely 1471 | might 1472 | more 1473 | moreover 1474 | most 1475 | mostly 1476 | much 1477 | must 1478 | my 1479 | myself 1480 | name 1481 | namely 1482 | nd 1483 | near 1484 | nearly 1485 | necessary 1486 | need 1487 | needs 1488 | neither 1489 | never 1490 | nevertheless 1491 | new 1492 | next 1493 | nine 1494 | no 1495 | nobody 1496 | non 1497 | none 1498 | noone 1499 | nor 1500 | normally 1501 | not 1502 | nothing 1503 | novel 1504 | now 1505 | nowhere 1506 | obviously 1507 | of 1508 | off 1509 | often 1510 | oh 1511 | ok 1512 | okay 1513 | old 1514 | on 1515 | once 1516 | one 1517 | ones 1518 | only 1519 | onto 1520 | or 1521 | other 1522 | others 1523 | otherwise 1524 | ought 1525 | our 1526 | ours 1527 | ourselves 1528 | out 1529 | outside 1530 | over 1531 | overall 1532 | own 1533 | particular 1534 | particularly 1535 | per 1536 | perhaps 1537 | placed 1538 | please 1539 | plus 1540 | possible 1541 | presumably 1542 | probably 1543 | provides 1544 | que 1545 | quite 1546 | qv 1547 | rather 1548 | rd 1549 | re 1550 | really 1551 | reasonably 1552 | regarding 1553 | regardless 1554 | regards 1555 | relatively 1556 | respectively 1557 | right 1558 | said 1559 | same 1560 | saw 1561 | say 1562 | saying 1563 | says 1564 | second 1565 | secondly 1566 | see 1567 | seeing 1568 | seem 1569 | seemed 1570 | seeming 1571 | seems 1572 | seen 1573 | self 1574 | selves 1575 | sensible 1576 | sent 1577 | serious 1578 | seriously 1579 | seven 1580 | several 1581 | shall 1582 | she 1583 | should 1584 | shouldn't 1585 | since 1586 | six 1587 | so 1588 | some 1589 | somebody 1590 | somehow 1591 | someone 1592 | something 1593 | sometime 1594 | sometimes 1595 | somewhat 1596 | somewhere 1597 | soon 1598 | sorry 1599 | specified 1600 | specify 1601 | specifying 1602 | still 1603 | sub 1604 | such 1605 | sup 1606 | sure 1607 | take 1608 | taken 1609 | tell 1610 | tends 1611 | th 1612 | than 1613 | thank 1614 | thanks 1615 | thanx 1616 | that 1617 | thats 1618 | that's 1619 | the 1620 | their 1621 | theirs 1622 | them 1623 | themselves 1624 | then 1625 | thence 1626 | there 1627 | thereafter 1628 | thereby 1629 | therefore 1630 | therein 1631 | theres 1632 | there's 1633 | thereupon 1634 | these 1635 | they 1636 | they'd 1637 | they'll 1638 | they're 1639 | they've 1640 | think 1641 | third 1642 | this 1643 | thorough 1644 | thoroughly 1645 | those 1646 | though 1647 | three 1648 | through 1649 | throughout 1650 | thru 1651 | thus 1652 | to 1653 | together 1654 | too 1655 | took 1656 | toward 1657 | towards 1658 | tried 1659 | tries 1660 | truly 1661 | try 1662 | trying 1663 | t's 1664 | twice 1665 | two 1666 | un 1667 | under 1668 | unfortunately 1669 | unless 1670 | unlikely 1671 | until 1672 | unto 1673 | up 1674 | upon 1675 | us 1676 | use 1677 | used 1678 | useful 1679 | uses 1680 | using 1681 | usually 1682 | value 1683 | various 1684 | very 1685 | via 1686 | viz 1687 | vs 1688 | want 1689 | wants 1690 | was 1691 | wasn't 1692 | way 1693 | we 1694 | we'd 1695 | welcome 1696 | well 1697 | we'll 1698 | went 1699 | were 1700 | we're 1701 | weren't 1702 | we've 1703 | what 1704 | whatever 1705 | what's 1706 | when 1707 | whence 1708 | whenever 1709 | where 1710 | whereafter 1711 | whereas 1712 | whereby 1713 | wherein 1714 | where's 1715 | whereupon 1716 | wherever 1717 | whether 1718 | which 1719 | while 1720 | whither 1721 | who 1722 | whoever 1723 | whole 1724 | whom 1725 | who's 1726 | whose 1727 | why 1728 | will 1729 | willing 1730 | wish 1731 | with 1732 | within 1733 | without 1734 | wonder 1735 | won't 1736 | would 1737 | wouldn't 1738 | yes 1739 | yet 1740 | you 1741 | you'd 1742 | you'll 1743 | your 1744 | you're 1745 | yours 1746 | yourself 1747 | yourselves 1748 | you've 1749 | zero 1750 | zt 1751 | zz 1752 | br 1753 | p 1754 | 公司简介 1755 | 城市 1756 | 北京 1757 | 天津 1758 | 上海 1759 | 重庆 1760 | 合肥 1761 | 宿州 1762 | 淮北 1763 | 阜阳 1764 | 蚌埠 1765 | 淮南 1766 | 滁州 1767 | 马鞍山 1768 | 芜湖 1769 | 铜陵 1770 | 安庆 1771 | 黄山 1772 | 六安 1773 | 池州 1774 | 宣城 1775 | 亳州 1776 | 界首 1777 | 明光 1778 | 天长 1779 | 桐城 1780 | 宁国 1781 | 巢湖 1782 | 厦门 1783 | 福州 1784 | 南平 1785 | 三明 1786 | 莆田 1787 | 泉州 1788 | 漳州 1789 | 龙岩 1790 | 宁德 1791 | 福清 1792 | 长乐 1793 | 邵武 1794 | 武夷山 1795 | 建瓯 1796 | 建阳 1797 | 永安 1798 | 石狮 1799 | 晋江 1800 | 南安 1801 | 龙海 1802 | 漳平 1803 | 福安 1804 | 福鼎 1805 | 兰州 1806 | 嘉峪关 1807 | 金昌 1808 | 白银 1809 | 天水 1810 | 酒泉 1811 | 张掖 1812 | 武威 1813 | 庆阳 1814 | 平凉 1815 | 定西 1816 | 陇南 1817 | 玉门 1818 | 敦煌 1819 | 临夏 1820 | 合作 1821 | 广州 1822 | 深圳 1823 | 清远 1824 | 韶关 1825 | 河源 1826 | 梅州 1827 | 潮州 1828 | 汕头 1829 | 揭阳 1830 | 汕尾 1831 | 惠州 1832 | 东莞 1833 | 珠海 1834 | 中山 1835 | 江门 1836 | 佛山 1837 | 肇庆 1838 | 云浮 1839 | 阳江 1840 | 茂名 1841 | 湛江 1842 | 从化 1843 | 增城 1844 | 英德 1845 | 连州 1846 | 乐昌 1847 | 南雄 1848 | 兴宁 1849 | 普宁 1850 | 陆丰 1851 | 恩平 1852 | 台山 1853 | 开平 1854 | 鹤山 1855 | 高要 1856 | 四会 1857 | 罗定 1858 | 阳春 1859 | 化州 1860 | 信宜 1861 | 高州 1862 | 吴川 1863 | 廉江 1864 | 雷州 1865 | 贵阳 1866 | 六盘水 1867 | 遵义 1868 | 安顺 1869 | 毕节 1870 | 铜仁 1871 | 清镇 1872 | 赤水 1873 | 仁怀 1874 | 凯里 1875 | 都匀 1876 | 兴义 1877 | 福泉 1878 | 石家庄 1879 | 邯郸 1880 | 唐山 1881 | 保定 1882 | 秦皇岛 1883 | 邢台 1884 | 张家口 1885 | 承德 1886 | 沧州 1887 | 廊坊 1888 | 衡水 1889 | 辛集 1890 | 藁城 1891 | 晋州 1892 | 新乐 1893 | 鹿泉 1894 | 遵化 1895 | 迁安 1896 | 霸州 1897 | 三河 1898 | 定州 1899 | 涿州 1900 | 安国 1901 | 高碑店 1902 | 泊头 1903 | 任丘 1904 | 黄骅 1905 | 河间 1906 | 冀州 1907 | 深州 1908 | 南宫 1909 | 沙河 1910 | 武安 1911 | 哈尔滨 1912 | 齐齐哈尔 1913 | 黑河 1914 | 大庆 1915 | 伊春 1916 | 鹤岗 1917 | 佳木斯 1918 | 双鸭山 1919 | 七台河 1920 | 鸡西 1921 | 牡丹江 1922 | 绥化 1923 | 双城 1924 | 尚志 1925 | 五常 1926 | 阿城 1927 | 讷河 1928 | 北安 1929 | 五大连池 1930 | 铁力 1931 | 同江 1932 | 富锦 1933 | 虎林 1934 | 密山 1935 | 绥芬河 1936 | 海林 1937 | 宁安 1938 | 安达 1939 | 肇东 1940 | 海伦 1941 | 郑州 1942 | 开封 1943 | 洛阳 1944 | 平顶山 1945 | 安阳 1946 | 鹤壁 1947 | 新乡 1948 | 焦作 1949 | 濮阳 1950 | 许昌 1951 | 漯河 1952 | 三门峡 1953 | 南阳 1954 | 商丘 1955 | 周口 1956 | 驻马店 1957 | 信阳 1958 | 济源 1959 | 巩义 1960 | 邓州 1961 | 永城 1962 | 汝州 1963 | 荥阳 1964 | 新郑 1965 | 登封 1966 | 新密 1967 | 偃师 1968 | 孟州 1969 | 沁阳 1970 | 卫辉 1971 | 辉县 1972 | 林州 1973 | 禹州 1974 | 长葛 1975 | 舞钢 1976 | 义马 1977 | 灵宝 1978 | 项城 1979 | 武汉 1980 | 十堰 1981 | 襄樊 1982 | 荆门 1983 | 孝感 1984 | 黄冈 1985 | 鄂州 1986 | 黄石 1987 | 咸宁 1988 | 荆州 1989 | 宜昌 1990 | 随州 1991 | 仙桃 1992 | 天门 1993 | 潜江 1994 | 丹江口 1995 | 老河口 1996 | 枣阳 1997 | 宜城 1998 | 钟祥 1999 | 汉川 2000 | 应城 2001 | 安陆 2002 | 广水 2003 | 麻城 2004 | 武穴 2005 | 大冶 2006 | 赤壁 2007 | 石首 2008 | 洪湖 2009 | 松滋 2010 | 宜都 2011 | 枝江 2012 | 当阳 2013 | 恩施 2014 | 利川 2015 | 长沙 2016 | 衡阳 2017 | 张家界 2018 | 常德 2019 | 益阳 2020 | 岳阳 2021 | 株洲 2022 | 湘潭 2023 | 郴州 2024 | 永州 2025 | 邵阳 2026 | 怀化 2027 | 娄底 2028 | 耒阳 2029 | 常宁 2030 | 浏阳 2031 | 津市 2032 | 沅江 2033 | 汨罗 2034 | 临湘 2035 | 醴陵 2036 | 湘乡 2037 | 韶山 2038 | 资兴 2039 | 武冈 2040 | 洪江 2041 | 冷水江 2042 | 涟源 2043 | 吉首 2044 | 长春 2045 | 吉林市 2046 | 白城 2047 | 松原 2048 | 四平 2049 | 辽源 2050 | 通化 2051 | 白山 2052 | 德惠 2053 | 九台 2054 | 榆树 2055 | 磐石 2056 | 蛟河 2057 | 桦甸 2058 | 舒兰 2059 | 洮南 2060 | 大安 2061 | 双辽 2062 | 公主岭 2063 | 梅河口 2064 | 集安 2065 | 临江 2066 | 延吉 2067 | 图们 2068 | 敦化 2069 | 珲春 2070 | 龙井 2071 | 和龙 2072 | 南昌 2073 | 九江 2074 | 景德镇 2075 | 鹰潭 2076 | 新余 2077 | 萍乡 2078 | 赣州 2079 | 上饶 2080 | 抚州 2081 | 宜春 2082 | 吉安 2083 | 瑞昌 2084 | 乐平 2085 | 瑞金 2086 | 南康 2087 | 德兴 2088 | 丰城 2089 | 樟树 2090 | 高安 2091 | 井冈山 2092 | 贵溪 2093 | 南京 2094 | 徐州 2095 | 连云港 2096 | 宿迁 2097 | 淮安 2098 | 盐城 2099 | 扬州 2100 | 泰州 2101 | 南通 2102 | 镇江 2103 | 常州 2104 | 无锡 2105 | 苏州 2106 | 江阴 2107 | 宜兴 2108 | 邳州 2109 | 新沂 2110 | 金坛 2111 | 溧阳 2112 | 常熟 2113 | 张家港 2114 | 太仓 2115 | 昆山 2116 | 吴江 2117 | 如皋 2118 | 海门 2119 | 启东 2120 | 大丰 2121 | 东台 2122 | 高邮 2123 | 仪征 2124 | 扬中 2125 | 句容 2126 | 丹阳 2127 | 兴化 2128 | 姜堰 2129 | 泰兴 2130 | 靖江 2131 | 沈阳 2132 | 大连 2133 | 朝阳 2134 | 阜新 2135 | 铁岭 2136 | 抚顺 2137 | 本溪 2138 | 辽阳 2139 | 鞍山 2140 | 丹东 2141 | 营口 2142 | 盘锦 2143 | 锦州 2144 | 葫芦岛 2145 | 新民 2146 | 瓦房店 2147 | 普兰店 2148 | 庄河 2149 | 北票 2150 | 凌源 2151 | 调兵山 2152 | 开原 2153 | 灯塔 2154 | 海城 2155 | 凤城 2156 | 东港 2157 | 大石桥 2158 | 盖州 2159 | 凌海 2160 | 北宁 2161 | 兴城 2162 | 济南 2163 | 青岛 2164 | 聊城 2165 | 德州 2166 | 东营 2167 | 淄博 2168 | 潍坊 2169 | 烟台 2170 | 威海 2171 | 日照 2172 | 临沂 2173 | 枣庄 2174 | 济宁 2175 | 泰安 2176 | 莱芜 2177 | 滨州 2178 | 菏泽 2179 | 章丘 2180 | 胶州 2181 | 胶南 2182 | 即墨 2183 | 平度 2184 | 莱西 2185 | 临清 2186 | 乐陵 2187 | 禹城 2188 | 安丘 2189 | 昌邑 2190 | 高密 2191 | 青州 2192 | 诸城 2193 | 寿光 2194 | 栖霞 2195 | 海阳 2196 | 龙口 2197 | 莱阳 2198 | 莱州 2199 | 蓬莱 2200 | 招远 2201 | 文登 2202 | 荣成 2203 | 乳山 2204 | 滕州 2205 | 曲阜 2206 | 兖州 2207 | 邹城 2208 | 新泰 2209 | 肥城 2210 | 西安 2211 | 延安 2212 | 铜川 2213 | 渭南 2214 | 咸阳 2215 | 宝鸡 2216 | 汉中 2217 | 榆林 2218 | 商洛 2219 | 安康 2220 | 韩城 2221 | 华阴 2222 | 兴平 2223 | 太原 2224 | 大同 2225 | 朔州 2226 | 阳泉 2227 | 长治 2228 | 晋城 2229 | 忻州 2230 | 吕梁 2231 | 晋中 2232 | 临汾 2233 | 运城 2234 | 古交 2235 | 潞城 2236 | 高平 2237 | 原平 2238 | 孝义 2239 | 汾阳 2240 | 介休 2241 | 侯马 2242 | 霍州 2243 | 永济 2244 | 河津 2245 | 成都 2246 | 广元 2247 | 绵阳 2248 | 德阳 2249 | 南充 2250 | 广安 2251 | 遂宁 2252 | 内江 2253 | 乐山 2254 | 自贡 2255 | 泸州 2256 | 宜宾 2257 | 攀枝花 2258 | 巴中 2259 | 达州 2260 | 资阳 2261 | 眉山 2262 | 雅安 2263 | 崇州 2264 | 邛崃 2265 | 都江堰 2266 | 彭州 2267 | 江油 2268 | 什邡 2269 | 广汉 2270 | 绵竹 2271 | 阆中 2272 | 华蓥 2273 | 峨眉山 2274 | 万源 2275 | 简阳 2276 | 西昌 2277 | 昆明 2278 | 曲靖 2279 | 玉溪 2280 | 丽江 2281 | 昭通 2282 | 思茅 2283 | 临沧 2284 | 保山 2285 | 安宁 2286 | 宣威 2287 | 芒市 2288 | 瑞丽 2289 | 大理 2290 | 楚雄 2291 | 个旧 2292 | 开远 2293 | 景洪 2294 | 杭州 2295 | 宁波 2296 | 湖州 2297 | 嘉兴 2298 | 舟山 2299 | 绍兴 2300 | 衢州 2301 | 金华 2302 | 台州 2303 | 温州 2304 | 丽水 2305 | 临安 2306 | 富阳 2307 | 建德 2308 | 慈溪 2309 | 余姚 2310 | 奉化 2311 | 平湖 2312 | 海宁 2313 | 桐乡 2314 | 诸暨 2315 | 上虞 2316 | 嵊州 2317 | 江山 2318 | 兰溪 2319 | 永康 2320 | 义乌 2321 | 东阳 2322 | 临海 2323 | 温岭 2324 | 瑞安 2325 | 乐清 2326 | 龙泉 2327 | 西宁 2328 | 格尔木 2329 | 德令哈 2330 | 海口市 2331 | 三亚市 2332 | 文昌市 2333 | 琼海市 2334 | 万宁市 2335 | 东方市 2336 | 儋州市 2337 | 五指山市 2338 | 南宁 2339 | 桂林 2340 | 柳州 2341 | 梧州 2342 | 贵港 2343 | 玉林 2344 | 钦州 2345 | 北海 2346 | 防城港 2347 | 崇左 2348 | 百色 2349 | 河池 2350 | 来宾 2351 | 贺州 2352 | 岑溪 2353 | 桂平 2354 | 北流 2355 | 东兴 2356 | 凭祥 2357 | 宜州 2358 | 合山 2359 | 呼和浩特 2360 | 包头 2361 | 乌海 2362 | 赤峰 2363 | 呼伦贝尔 2364 | 通辽 2365 | 乌兰察布 2366 | 鄂尔多斯 2367 | 巴彦淖尔 2368 | 满洲里 2369 | 扎兰屯 2370 | 牙克石 2371 | 根河 2372 | 额尔古纳 2373 | 乌兰浩特 2374 | 阿尔山 2375 | 霍林郭勒 2376 | 锡林浩特 2377 | 二连浩特 2378 | 丰镇 2379 | 银川 2380 | 石嘴山 2381 | 吴忠 2382 | 中卫 2383 | 固原 2384 | 灵武 2385 | 青铜峡 2386 | 拉萨 2387 | 日喀则 2388 | 乌鲁木齐 2389 | 克拉玛依 2390 | 石河子 2391 | 阿拉尔 2392 | 图木舒克 2393 | 五家渠 2394 | 北屯 2395 | 喀什 2396 | 阿克苏 2397 | 和田 2398 | 吐鲁番 2399 | 哈密 2400 | 阿图什 2401 | 博乐 2402 | 昌吉 2403 | 阜康 2404 | 米泉 2405 | 库尔勒 2406 | 伊宁 2407 | 奎屯 2408 | 塔城 2409 | 乌苏 2410 | 阿勒泰 2411 | 香港 2412 | 澳门 2413 | 直辖市 2414 | 安徽省 2415 | 福建省 2416 | 甘肃省 2417 | 广东省 2418 | 贵州省 2419 | 河北省 2420 | 黑龙江省 2421 | 河南省 2422 | 湖北省 2423 | 湖南省 2424 | 吉林省 2425 | 江西省 2426 | 江苏省 2427 | 辽宁省 2428 | 山东省 2429 | 陕西省 2430 | 山西省 2431 | 四川省 2432 | 云南省 2433 | 浙江省 2434 | 青海省 2435 | 海南省 2436 | 广西壮族 2437 | 内蒙古 2438 | 宁夏回族 2439 | 西藏 2440 | 新疆 2441 | 台湾省 2442 | 安徽 2443 | 福建 2444 | 甘肃 2445 | 广东 2446 | 贵州 2447 | 河北 2448 | 黑龙江 2449 | 河南 2450 | 湖北 2451 | 湖南 2452 | 吉林 2453 | 江西 2454 | 江苏 2455 | 辽宁 2456 | 山东 2457 | 陕西 2458 | 山西 2459 | 四川 2460 | 云南 2461 | 浙江 2462 | 青海 2463 | 海南 2464 | 内蒙 2465 | 洽谈 2466 | 有限公司 2467 | 为您服务 2468 | 产品 2469 | 欢迎 2470 | 广大客户 2471 | 专业 2472 | 公司 2473 | 北京市 2474 | 天津市 2475 | 上海市 2476 | 重庆市 2477 | 厦门市 2478 | 广州市 2479 | 深圳市 2480 | 哈尔滨市 2481 | 武汉市 2482 | 南京市 2483 | 沈阳市 2484 | 大连市 2485 | 济南市 2486 | 青岛市 2487 | 西安市 2488 | 成都市 2489 | 杭州市 2490 | 宁波市 2491 | 石河子市 2492 | 阿拉尔市 2493 | 图木舒克市 2494 | 五家渠市 2495 | 北屯市 2496 | 香港市 2497 | 澳门市 2498 | 老客户 2499 | 锐意进取 2500 | 中山市 2501 | 消费者 2502 | 制品厂 2503 | 国际 2504 | 本厂 2505 | 顺德区 2506 | 我厂 2507 | 研发 2508 | 有限责任 2509 | 江门市 2510 | 经营部 2511 | 龙岗区 2512 | 查看 2513 | 宝安区 2514 | 中心 2515 | 各类 2516 | 参观指导 2517 | 展示 2518 | 品质 2519 | 一流 2520 | 海外市场 2521 | 南海 2522 | 主营 2523 | 提供 2524 | 前来 2525 | 拉手 2526 | 精品 2527 | 至上 2528 | 坐落于 2529 | 联系人 2530 | 暂无 2531 | 村委会 2532 | 专用 2533 | 理念 2534 | 拥有 2535 | 成员 2536 | 联系电话 2537 | 共谋 2538 | 顾问 2539 | 前置 2540 | 复合 2541 | 事务所 2542 | 后方 2543 | 本社 2544 | 附件 2545 | 经营范围 2546 | 用品厂 2547 | 美国 2548 | 德国 2549 | 意大利 2550 | 英国 2551 | 法国 2552 | 韩国 2553 | 意大利 2554 | 日本 2555 | 台湾 2556 | 加拿大 2557 | 澳大利亚 2558 | 欧洲 2559 | 俄罗斯 2560 | 后置 2561 | 本店 2562 | 代办 2563 | 坚持 2564 | 总成 2565 | 微型 2566 | 行政许可 2567 | 信誉至上 2568 | 卓越 2569 | 规格 2570 | 实验室 2571 | 活动 2572 | 分厂 2573 | 拼接 2574 | 完美 2575 | 博士 2576 | 东北 2577 | 客戶 2578 | 华南 2579 | 白沟 2580 | 良好 2581 | 远东 2582 | 万元 2583 | 高端 2584 | 潮流 2585 | 评估 2586 | 现代 2587 | 先锋 2588 | 振兴 2589 | 管理处 2590 | 专项 2591 | 研究 2592 | 精美 2593 | 弹力 2594 | 非凡 2595 | 用药 2596 | 全新 2597 | 广场 2598 | 未获 2599 | 一家 2600 | 招商 2601 | 竭诚 2602 | 各界 2603 | 秉承 2604 | 一专多能 2605 | 一丝不苟 2606 | 一个 2607 | 一个集 2608 | 一些 2609 | 一位 2610 | 一体 2611 | 一体化 2612 | 一元化 2613 | 一千万元 2614 | 一大批 2615 | 一套 2616 | 一如既往 2617 | 一定 2618 | 一应俱全 2619 | 一户 2620 | 一手 2621 | 一批 2622 | 一支 2623 | 一整套 2624 | 一条龙 2625 | 一瓶 2626 | 一直 2627 | 一站式 2628 | 一系列 2629 | 一级 2630 | 一线 2631 | 一致 2632 | 一贯 2633 | 一身 2634 | 一间 2635 | 七十多 2636 | 七台 2637 | 万东 2638 | 三亚 2639 | 三亿 2640 | 三信 2641 | 三包 2642 | 三十余家 2643 | 三大 2644 | 三局 2645 | 上万件 2646 | 上万种 2647 | 上下一心 2648 | 上乘 2649 | 上海市人民政府 2650 | 上述 2651 | 上门 2652 | 下发 2653 | 下属 2654 | 下线 2655 | 下设 2656 | 下限 2657 | 不懈 2658 | 不懈努力 2659 | 不断 2660 | 不断创新 2661 | 不断加强 2662 | 不断完善 2663 | 不断扩大 2664 | 不断改进 2665 | 不断更新 2666 | 不断进取 2667 | 不看 2668 | 不衰 2669 | 不锈钢 2670 | 与时俱进 2671 | 专一 2672 | 专业人士 2673 | 专业人才 2674 | 专业化 2675 | 专业型 2676 | 专业培训 2677 | 专业性 2678 | 专业知识 2679 | 专业队伍 2680 | 专于 2681 | 专利 2682 | 专家 2683 | 专心 2684 | 专才 2685 | 专柜 2686 | 专注 2687 | 专着 2688 | 专门 2689 | 专门从事 2690 | 专项基金 2691 | 世界 2692 | 世界各地 2693 | 世纪 2694 | 业主 2695 | 业内 2696 | 业内外 2697 | 业务 2698 | 业务人员 2699 | 业务培训 2700 | 业务范围 2701 | 业界 2702 | 业经 2703 | 业绩 2704 | 东南亚 2705 | 两千万元 2706 | 两大 2707 | 两家 2708 | 两百人 2709 | 严把 2710 | 严格 2711 | 严格把关 2712 | 严格要求 2713 | 严苛 2714 | 严谨 2715 | 个人化 2716 | 个体 2717 | 个性 2718 | 个性化 2719 | 中华世纪坛 2720 | 中国 2721 | 中国保险监督管理委员会 2722 | 中国电子商会 2723 | 中坚 2724 | 中外 2725 | 中小型 2726 | 中望 2727 | 中立 2728 | 中高档 2729 | 丰富 2730 | 为主 2731 | 为先 2732 | 为本 2733 | 为辅 2734 | 主业 2735 | 主体 2736 | 主导 2737 | 主流 2738 | 主营业务 2739 | 主要 2740 | 主题 2741 | 之初 2742 | 乘势而上 2743 | 买买 2744 | 买家 2745 | 买手 2746 | 了解 2747 | 争光 2748 | 争创 2749 | 事业 2750 | 事业单位 2751 | 事务 2752 | 事宜 2753 | 二十余年 2754 | 二十多年 2755 | 二十年 2756 | 二战 2757 | 二级标准 2758 | 二零零八年 2759 | 于高端 2760 | 云朵 2761 | 互传 2762 | 互利 2763 | 互利互惠 2764 | 互动 2765 | 互惠互利 2766 | 五亿 2767 | 五十余年 2768 | 五局 2769 | 五年 2770 | 亚洲 2771 | 亚邦 2772 | 交易 2773 | 交易会 2774 | 交流 2775 | 交货 2776 | 产业 2777 | 产业化 2778 | 产业政策 2779 | 产品品质 2780 | 产品库 2781 | 产品开发 2782 | 产品种类 2783 | 产品策划 2784 | 产品线 2785 | 产品质量 2786 | 产品销售 2787 | 产销 2788 | 享有 2789 | 享誉 2790 | 京卫 2791 | 人力 2792 | 人员 2793 | 人士 2794 | 人性化 2795 | 人才 2796 | 人才队伍 2797 | 亿度 2798 | 仅限 2799 | 今后 2800 | 今天 2801 | 介绍 2802 | 从业 2803 | 从事 2804 | 从事贸易 2805 | 代价 2806 | 代理权 2807 | 代表 2808 | 以上 2809 | 以人为本 2810 | 以图 2811 | 以来 2812 | 以此 2813 | 价值 2814 | 价值链 2815 | 价廉 2816 | 价廉物美 2817 | 价格 2818 | 价格优势 2819 | 价格体系 2820 | 价格合理 2821 | 任务 2822 | 企业 2823 | 企业宗旨 2824 | 企业资质 2825 | 企事业 2826 | 企划 2827 | 伊始 2828 | 休闲 2829 | 众创 2830 | 众多 2831 | 众望 2832 | 优价 2833 | 优先 2834 | 优势 2835 | 优化 2836 | 优异 2837 | 优惠 2838 | 优才 2839 | 优秀 2840 | 优秀品质 2841 | 优秀成果 2842 | 优良 2843 | 优讯 2844 | 优质 2845 | 优质产品 2846 | 优质优价 2847 | 优质化 2848 | 优质服务 2849 | 优越 2850 | 优达 2851 | 伙伴 2852 | 会务 2853 | 会员 2854 | 会员制 2855 | 会员单位 2856 | 会通 2857 | 传化 2858 | 传导 2859 | 传播 2860 | 传统 2861 | 位于 2862 | 低价 2863 | 低价位 2864 | 低成本 2865 | 住址 2866 | 体制 2867 | 体现 2868 | 体系 2869 | 体验 2870 | 余人 2871 | 余年 2872 | 作业 2873 | 作业线 2874 | 作品 2875 | 作风 2876 | 使命 2877 | 使用 2878 | 供应 2879 | 依托 2880 | 依据 2881 | 依靠 2882 | 便利 2883 | 便捷 2884 | 促进 2885 | 促销 2886 | 保养 2887 | 保卫 2888 | 保持 2889 | 保持良好 2890 | 保洁 2891 | 保真 2892 | 保证 2893 | 保证体系 2894 | 保证质量 2895 | 保质保量 2896 | 保障 2897 | 保障体系 2898 | 保障局 2899 | 保障机制 2900 | 信任 2901 | 信友 2902 | 信得过 2903 | 信心 2904 | 信念 2905 | 信息 2906 | 信息化 2907 | 信息反馈 2908 | 信用 2909 | 信誉 2910 | 信誉度 2911 | 信诚 2912 | 信谊 2913 | 信赖 2914 | 修理 2915 | 倍受 2916 | 借助 2917 | 借助于 2918 | 借款者 2919 | 借鉴 2920 | 倡导 2921 | 值得 2922 | 倾心 2923 | 做到 2924 | 做好 2925 | 健全 2926 | 健康 2927 | 储备 2928 | 储备库 2929 | 储存 2930 | 储能系统 2931 | 储运 2932 | 允许 2933 | 兄弟 2934 | 充分利用 2935 | 充分发挥 2936 | 充换 2937 | 充足 2938 | 先后 2939 | 先导 2940 | 先端 2941 | 先进 2942 | 光临 2943 | 光科 2944 | 免费 2945 | 全世界 2946 | 全体 2947 | 全力支持 2948 | 全国 2949 | 全国性 2950 | 全套 2951 | 全心全意 2952 | 全方位 2953 | 全权 2954 | 全球 2955 | 全球化 2956 | 全球性 2957 | 全疆 2958 | 全省 2959 | 全程 2960 | 全系列 2961 | 全路 2962 | 全过程 2963 | 全面 2964 | 全面实施 2965 | 八亿 2966 | 八千 2967 | 八厂 2968 | 八年 2969 | 公信 2970 | 公共 2971 | 公关 2972 | 公文 2973 | 六亿 2974 | 六街 2975 | 共创 2976 | 共同 2977 | 共同开发 2978 | 共赢 2979 | 关注 2980 | 关系 2981 | 关联 2982 | 兴业 2983 | 其所 2984 | 具体实施 2985 | 具及 2986 | 具备 2987 | 具有 2988 | 具有活力 2989 | 典范 2990 | 养护 2991 | 兼优 2992 | 兼并 2993 | 兼营 2994 | 内勤 2995 | 内外 2996 | 内外贸 2997 | 内容 2998 | 内嵌 2999 | 内核 3000 | 内涵 3001 | 内涵式 3002 | 内聚 3003 | 内销 3004 | 农人 3005 | 农用地 3006 | 农资 3007 | 准则 3008 | 准时 3009 | 准确 3010 | 准确度 3011 | 准许 3012 | 几十位 3013 | 几十年 3014 | 几年 3015 | 几款 3016 | 凭借着 3017 | 凭着 3018 | 出借 3019 | 出发 3020 | 出口 3021 | 出口型 3022 | 出口权 3023 | 出口贸易 3024 | 出品 3025 | 出售 3026 | 出版 3027 | 出租 3028 | 出色 3029 | 出色完成 3030 | 分公司 3031 | 分支机构 3032 | 分析 3033 | 分质 3034 | 分销 3035 | 分销商 3036 | 切实 3037 | 切实有效 3038 | 划片 3039 | 划算 3040 | 创一流 3041 | 创作 3042 | 创办 3043 | 创办者 3044 | 创建 3045 | 创意 3046 | 创新 3047 | 创新型 3048 | 创新能力 3049 | 创立 3050 | 创造 3051 | 初期 3052 | 利时 3053 | 利润 3054 | 利用 3055 | 利用网络 3056 | 利用自身 3057 | 利益 3058 | 到位 3059 | 制作 3060 | 制做 3061 | 制冷 3062 | 制品 3063 | 制定 3064 | 制度 3065 | 制服 3066 | 制版 3067 | 制种 3068 | 制造 3069 | 制造业 3070 | 刻苦钻研 3071 | 前列 3072 | 前景 3073 | 前期 3074 | 前沿 3075 | 前沿性 3076 | 前瞻性 3077 | 前身 3078 | 副产 3079 | 副本 3080 | 力争 3081 | 力成 3082 | 力求 3083 | 力量 3084 | 办公 3085 | 功能 3086 | 功能丰富 3087 | 功能分析 3088 | 功能设计 3089 | 加一 3090 | 加大 3091 | 加工 3092 | 加工业 3093 | 加工能力 3094 | 加强 3095 | 务实 3096 | 动力 3097 | 动力源 3098 | 努力 3099 | 努力提高 3100 | 劳务 3101 | 劳动 3102 | 勃发 3103 | 包含 3104 | 包括 3105 | 北京城 3106 | 北京航天 3107 | 区域 3108 | 医患 3109 | 十余年 3110 | 十佳 3111 | 十八年 3112 | 十几年 3113 | 十几年来 3114 | 十分 3115 | 十分重视 3116 | 十多年 3117 | 十层 3118 | 十年 3119 | 十方 3120 | 千万只 3121 | 千伏安 3122 | 千余家 3123 | 千寻 3124 | 千山 3125 | 升级 3126 | 协会 3127 | 协会会员 3128 | 协作 3129 | 协作关系 3130 | 协作单位 3131 | 协助 3132 | 协合 3133 | 协同 3134 | 协同工作 3135 | 卓有 3136 | 单一 3137 | 单位 3138 | 单项工程 3139 | 卖场 3140 | 卖家 3141 | 南陵 3142 | 博得 3143 | 占有 3144 | 占领市场 3145 | 卡带 3146 | 危险源 3147 | 厂房 3148 | 历史 3149 | 历经 3150 | 厚爱 3151 | 原则 3152 | 原创 3153 | 原厂 3154 | 原有 3155 | 参与 3156 | 参观 3157 | 及时 3158 | 及时雨 3159 | 及本 3160 | 友好合作 3161 | 双成 3162 | 双赢 3163 | 发展 3164 | 发展前景 3165 | 发展商 3166 | 发展壮大 3167 | 发展观 3168 | 发展趋势 3169 | 发布 3170 | 发挥 3171 | 发烧友 3172 | 发证 3173 | 发达 3174 | 发运 3175 | 叔叔 3176 | 取信于 3177 | 取得 3178 | 受到 3179 | 受欢迎 3180 | 变流 3181 | 口碑 3182 | 可为 3183 | 可信 3184 | 可信赖 3185 | 可追溯 3186 | 可靠 3187 | 各个环节 3188 | 各个领域 3189 | 各位朋友 3190 | 各国 3191 | 各地 3192 | 各大 3193 | 各式各样 3194 | 各方 3195 | 各款 3196 | 各界人士 3197 | 各种类型 3198 | 各级 3199 | 各行各业 3200 | 各项 3201 | 合伙 3202 | 合作伙伴 3203 | 合作局 3204 | 合作开发 3205 | 合信 3206 | 合同额 3207 | 合建 3208 | 合格 3209 | 合法 3210 | 合法经营 3211 | 合理 3212 | 合纵 3213 | 合资 3214 | 同时在线 3215 | 同舟 3216 | 同行 3217 | 同行业 3218 | 名列榜首 3219 | 名店 3220 | 名特优 3221 | 后台 3222 | 后期 3223 | 后盾 3224 | 吸引 3225 | 吸纳 3226 | 员工 3227 | 周到 3228 | 周边 3229 | 周边产品 3230 | 呱呱 3231 | 咨询 3232 | 品正 3233 | 品牌 3234 | 品种 3235 | 品种齐全 3236 | 品管 3237 | 品类 3238 | 品评 3239 | 售前 3240 | 售后 3241 | 售后服务 3242 | 唯一 3243 | 商业 3244 | 商业性 3245 | 商务 3246 | 商务局 3247 | 商品 3248 | 商场 3249 | 商客 3250 | 商家 3251 | 商户 3252 | 商机 3253 | 商标 3254 | 商河 3255 | 商贸 3256 | 喜爱 3257 | 器材 3258 | 四化 3259 | 四十余年 3260 | 四十多年 3261 | 四技 3262 | 回声 3263 | 回报 3264 | 回收 3265 | 回馈 3266 | 因科 3267 | 团体 3268 | 团购 3269 | 团队 3270 | 园林 3271 | 围绕 3272 | 国内 3273 | 国内外 3274 | 国内贸易 3275 | 国外 3276 | 国家 3277 | 国家工商 3278 | 国家工商局 3279 | 国家技术监督局 3280 | 国家有关 3281 | 国际性 3282 | 国际标准 3283 | 图样 3284 | 图纸 3285 | 图集 3286 | 土尔其 3287 | 在于 3288 | 在内 3289 | 地处 3290 | 地学 3291 | 地方 3292 | 场地 3293 | 场所 3294 | 坐落 3295 | 坚信 3296 | 坚实 3297 | 坚强 3298 | 垂询 3299 | 培养 3300 | 培育 3301 | 培训 3302 | 基地 3303 | 基本方针 3304 | 基石 3305 | 基础 3306 | 堆存 3307 | 塑造 3308 | 塔架 3309 | 境内外 3310 | 境外 3311 | 增加 3312 | 壮大 3313 | 声望 3314 | 声誉 3315 | 处于 3316 | 处理 3317 | 外业 3318 | 外商 3319 | 外经委 3320 | 外观 3321 | 外设 3322 | 多个 3323 | 多人 3324 | 多位 3325 | 多元化 3326 | 多名 3327 | 多家 3328 | 多年 3329 | 多彩的 3330 | 多方面 3331 | 多极 3332 | 多样 3333 | 多样化 3334 | 多种 3335 | 多种经营 3336 | 多语 3337 | 多项 3338 | 大中型 3339 | 大中小型 3340 | 大众 3341 | 大力 3342 | 大力支持 3343 | 大北农 3344 | 大型 3345 | 大宗 3346 | 大批 3347 | 大批量 3348 | 大理州 3349 | 大英 3350 | 大规模 3351 | 大量 3352 | 大陆 3353 | 天晴 3354 | 奉献 3355 | 奉献给 3356 | 奉行 3357 | 奋发进取 3358 | 契约 3359 | 奠定 3360 | 好评 3361 | 始建 3362 | 始终 3363 | 始终不渝 3364 | 始终如一 3365 | 委员会 3366 | 委托 3367 | 娱乐 3368 | 媒介 3369 | 媒体 3370 | 子公司 3371 | 学校 3372 | 学生家长 3373 | 学苑 3374 | 守信 3375 | 守信用 3376 | 守卫 3377 | 守法 3378 | 安监 3379 | 宋庄 3380 | 完全 3381 | 完善 3382 | 完备 3383 | 完成 3384 | 完整 3385 | 宗旨 3386 | 定位 3387 | 定做 3388 | 定制 3389 | 定点 3390 | 定额 3391 | 宝盒 3392 | 宝贵 3393 | 实业 3394 | 实体 3395 | 实创 3396 | 实力 3397 | 实力雄厚 3398 | 实名 3399 | 实惠 3400 | 实效 3401 | 实施 3402 | 实现 3403 | 实用 3404 | 实用化 3405 | 实用性 3406 | 实行 3407 | 实训室 3408 | 实践 3409 | 实践经验 3410 | 实际 3411 | 审核 3412 | 审评 3413 | 客人 3414 | 客商 3415 | 客户 3416 | 客户群 3417 | 客户资源 3418 | 客站 3419 | 宣传 3420 | 室内 3421 | 室内外 3422 | 家庭 3423 | 密切协作 3424 | 密切合作 3425 | 对外 3426 | 对得起 3427 | 对战 3428 | 对流 3429 | 对象 3430 | 寻找 3431 | 寻求 3432 | 导入 3433 | 导向 3434 | 小型 3435 | 小步 3436 | 小猫 3437 | 尖端 3438 | 尤其 3439 | 尽善尽美 3440 | 尽责任 3441 | 层次 3442 | 层面 3443 | 居住证 3444 | 居家 3445 | 展业 3446 | 展厅 3447 | 展开 3448 | 展柜 3449 | 属下 3450 | 属于 3451 | 工业 3452 | 工业性 3453 | 工业界 3454 | 工人 3455 | 工作 3456 | 工作室 3457 | 工期 3458 | 工程 3459 | 工程师 3460 | 工程技术 3461 | 工程系 3462 | 工程质量 3463 | 工程项目 3464 | 工艺 3465 | 工装 3466 | 工贸 3467 | 巨大成功 3468 | 差旅 3469 | 己任 3470 | 已有 3471 | 已经 3472 | 巴别 3473 | 市场 3474 | 市场化 3475 | 市场占有率 3476 | 市场推广 3477 | 市场竞争 3478 | 市场调研 3479 | 市场需求 3480 | 市容 3481 | 布谷 3482 | 希望 3483 | 带来 3484 | 带给 3485 | 帮助 3486 | 常年 3487 | 常驻 3488 | 平方米 3489 | 平版 3490 | 平等互利 3491 | 年初 3492 | 年底 3493 | 年来 3494 | 并重 3495 | 广东省公安厅 3496 | 广为 3497 | 广交 3498 | 广大 3499 | 广泛 3500 | 广泛应用 3501 | 广阔 3502 | 库存 3503 | 应用 3504 | 应用领域 3505 | 店铺 3506 | 店面 3507 | 庞大 3508 | 座标 3509 | 座落 3510 | 座落在 3511 | 延伸 3512 | 建信 3513 | 建厂 3514 | 建委 3515 | 建立 3516 | 开创 3517 | 开发 3518 | 开发人员 3519 | 开发技术 3520 | 开发新 3521 | 开发者 3522 | 开展 3523 | 开开 3524 | 开拓 3525 | 开拓创新 3526 | 开拓市场 3527 | 开架 3528 | 开能 3529 | 开采 3530 | 引入 3531 | 引导 3532 | 引进 3533 | 引进设备 3534 | 引领 3535 | 弘大 3536 | 强劲 3537 | 强化 3538 | 强大 3539 | 强有力 3540 | 强调 3541 | 归类 3542 | 当今 3543 | 当地 3544 | 形式 3545 | 形成 3546 | 形状记忆 3547 | 形象 3548 | 彩民 3549 | 彩管 3550 | 影响力 3551 | 影视 3552 | 征用土地 3553 | 徐国 3554 | 得到 3555 | 得宝 3556 | 微能 3557 | 德美 3558 | 必胜 3559 | 志存高远 3560 | 忠实 3561 | 忠诚 3562 | 快捷 3563 | 快速 3564 | 态度 3565 | 思想 3566 | 思路 3567 | 性价比 3568 | 性能 3569 | 总公司 3570 | 总署 3571 | 恪守 3572 | 惠顾 3573 | 意中 3574 | 意识 3575 | 愿为 3576 | 成为 3577 | 成功 3578 | 成品 3579 | 成套 3580 | 成套设备 3581 | 成本 3582 | 成果 3583 | 成熟 3584 | 成立 3585 | 成长 3586 | 成长型 3587 | 成长率 3588 | 我司 3589 | 我国 3590 | 战略 3591 | 战略伙伴 3592 | 战神 3593 | 户外 3594 | 户外广告 3595 | 房东 3596 | 房租 3597 | 房管 3598 | 所在 3599 | 所有 3600 | 手动式 3601 | 手工 3602 | 手机 3603 | 手段 3604 | 扎实 3605 | 打动 3606 | 打开 3607 | 打样 3608 | 打造 3609 | 打造出 3610 | 执着 3611 | 执行 3612 | 扩大 3613 | 扩展 3614 | 批准书 3615 | 批发市场 3616 | 批量 3617 | 批量生产 3618 | 找矿 3619 | 承包 3620 | 承建 3621 | 承担 3622 | 承接 3623 | 承揽 3624 | 承诺 3625 | 技师 3626 | 技术 3627 | 技术人员 3628 | 技术创新 3629 | 技术化 3630 | 技术协作 3631 | 技术咨询 3632 | 技术培训 3633 | 技术实力 3634 | 技术密集 3635 | 技术开发 3636 | 技术引进 3637 | 技术承包 3638 | 技术推广 3639 | 技术支持 3640 | 技术服务 3641 | 技术水平 3642 | 技术类 3643 | 技术转让 3644 | 技艺 3645 | 把握 3646 | 投入 3647 | 投放 3648 | 投资者 3649 | 抗爆 3650 | 抚育 3651 | 报价 3652 | 抱歉 3653 | 拆解 3654 | 拉近 3655 | 拍卖 3656 | 拓展 3657 | 拓维 3658 | 拔尖 3659 | 招商引资 3660 | 拟于 3661 | 择业 3662 | 持续 3663 | 指定 3664 | 指导 3665 | 挑选 3666 | 挚友 3667 | 振东 3668 | 捷威 3669 | 捷能 3670 | 授予 3671 | 授权 3672 | 掌握 3673 | 探索 3674 | 接受 3675 | 接轨 3676 | 控制 3677 | 控制室 3678 | 控制精度 3679 | 控股 3680 | 推介 3681 | 推出 3682 | 推动 3683 | 推广 3684 | 推荐 3685 | 推行 3686 | 推进 3687 | 推陈出新 3688 | 提供商 3689 | 提供数据 3690 | 提供方便 3691 | 提升 3692 | 提高 3693 | 搬入 3694 | 搭建 3695 | 搭接 3696 | 搭载 3697 | 搭配 3698 | 携同 3699 | 携手 3700 | 操作 3701 | 操作员 3702 | 支持 3703 | 支援 3704 | 收藏 3705 | 收购 3706 | 改制 3707 | 改变传统 3708 | 改装 3709 | 改进 3710 | 改造 3711 | 放心 3712 | 放心使用 3713 | 政府 3714 | 政策 3715 | 效果 3716 | 效率 3717 | 效益 3718 | 教委 3719 | 敬业 3720 | 敬天爱 3721 | 敬请期待 3722 | 数亿元 3723 | 数以亿计 3724 | 数以百万计 3725 | 数位 3726 | 数值 3727 | 数千台 3728 | 数套 3729 | 数家 3730 | 数年 3731 | 数百套 3732 | 数百家 3733 | 数量 3734 | 整个 3735 | 整体 3736 | 整合 3737 | 整合型 3738 | 整合系统 3739 | 整合营销 3740 | 整套 3741 | 整理 3742 | 文具 3743 | 文化 3744 | 文明 3745 | 文秘 3746 | 新兴 3747 | 新品 3748 | 新型 3749 | 新工艺 3750 | 新潮 3751 | 新维 3752 | 新营销 3753 | 新购 3754 | 新颖 3755 | 方便 3756 | 方便快捷 3757 | 方便性 3758 | 方向 3759 | 方式 3760 | 方案 3761 | 方法 3762 | 方针 3763 | 方面 3764 | 施工单位 3765 | 施工工艺 3766 | 旗下 3767 | 无双 3768 | 无忧 3769 | 无氟 3770 | 无论是 3771 | 日渐壮大 3772 | 日科 3773 | 日程 3774 | 日臻完善 3775 | 日资 3776 | 旨在 3777 | 早孕 3778 | 时代 3779 | 时尚 3780 | 时间 3781 | 明星 3782 | 易学 3783 | 易损 3784 | 易用 3785 | 易知 3786 | 星级 3787 | 星际 3788 | 映射 3789 | 普及 3790 | 普法 3791 | 普通股 3792 | 智囊团 3793 | 更具 3794 | 更多更好 3795 | 更好 3796 | 更新 3797 | 更是 3798 | 最为 3799 | 最优 3800 | 最佳 3801 | 最全 3802 | 最具 3803 | 最前沿 3804 | 最受 3805 | 最大 3806 | 最好 3807 | 最强 3808 | 最新 3809 | 最早 3810 | 最有 3811 | 最高 3812 | 有创造力 3813 | 有利 3814 | 有力 3815 | 有口皆碑 3816 | 有志于 3817 | 有意 3818 | 有意思 3819 | 有效 3820 | 有机 3821 | 有着 3822 | 有远见 3823 | 有限 3824 | 朋友 3825 | 服务 3826 | 服务业 3827 | 服务中心 3828 | 服务体系 3829 | 服务卡 3830 | 服务周到 3831 | 服务型 3832 | 服务态度 3833 | 服务性 3834 | 服务行业 3835 | 服务质量 3836 | 服务项目 3837 | 望城 3838 | 期待 3839 | 木制品 3840 | 木本 3841 | 未来 3842 | 未知 3843 | 本土 3844 | 本地 3845 | 本地化 3846 | 本息 3847 | 机制 3848 | 机器 3849 | 机工 3850 | 机构 3851 | 机械 3852 | 机械局 3853 | 权威 3854 | 权益 3855 | 材质 3856 | 条件 3857 | 来样 3858 | 来电 3859 | 来自 3860 | 杰瑞 3861 | 松源 3862 | 板块 3863 | 极具 3864 | 极高 3865 | 构建 3866 | 构成 3867 | 架构 3868 | 柔性化 3869 | 标准 3870 | 标准化 3871 | 标准规范 3872 | 标志 3873 | 标竿 3874 | 标识 3875 | 树立 3876 | 校办 3877 | 样品 3878 | 样板 3879 | 核查 3880 | 核辐射 3881 | 根本 3882 | 格局 3883 | 格莱特 3884 | 格里 3885 | 档案 3886 | 档次 3887 | 桥隧 3888 | 梦工场 3889 | 检测 3890 | 检测站 3891 | 检验 3892 | 检验室 3893 | 森川 3894 | 概念 3895 | 模内 3896 | 模型 3897 | 模式 3898 | 模特 3899 | 模范 3900 | 欢迎您 3901 | 欢迎惠顾 3902 | 欧美 3903 | 款式 3904 | 正凯 3905 | 正在 3906 | 正规 3907 | 步法 3908 | 步进式 3909 | 武器装备 3910 | 母婴 3911 | 每个 3912 | 毒理 3913 | 民安 3914 | 民族 3915 | 民用 3916 | 民航总局 3917 | 民营 3918 | 民营企业 3919 | 水准 3920 | 水平 3921 | 永创 3922 | 永恒 3923 | 永续 3924 | 永远 3925 | 求生存 3926 | 求购 3927 | 汇聚 3928 | 汇集 3929 | 汽包 3930 | 沉积 3931 | 沟通 3932 | 法律 3933 | 法律法规 3934 | 注册 3935 | 注册手续 3936 | 注册证 3937 | 注册资金 3938 | 注塑 3939 | 注重 3940 | 注重质量 3941 | 洁具 3942 | 洁利 3943 | 洗染 3944 | 派遣 3945 | 流失率 3946 | 流水线 3947 | 流程 3948 | 流行 3949 | 流通 3950 | 测试 3951 | 海内外 3952 | 海外 3953 | 涂附 3954 | 消费 3955 | 消费品 3956 | 消费类 3957 | 涉及 3958 | 涉足 3959 | 涵括 3960 | 涵盖 3961 | 深入 3962 | 深加工 3963 | 深化 3964 | 深受 3965 | 深圳华强 3966 | 深圳市政府 3967 | 深度 3968 | 深得 3969 | 深获 3970 | 清流 3971 | 渠道 3972 | 满勤 3973 | 满意 3974 | 满意度 3975 | 满足 3976 | 满足用户 3977 | 满足用户要求 3978 | 滤油 3979 | 滤清 3980 | 演出 3981 | 演艺 3982 | 潜心于 3983 | 激烈 3984 | 灵活 3985 | 灵活经营 3986 | 热忱 3987 | 热忱地 3988 | 热情 3989 | 热情周到 3990 | 热情欢迎 3991 | 热诚 3992 | 热销 3993 | 热锻 3994 | 焊装 3995 | 熟悉 3996 | 熟练掌握 3997 | 爱好者 3998 | 牢固 3999 | 物品 4000 | 物料 4001 | 物美价廉 4002 | 物语 4003 | 物质奖励 4004 | 物资 4005 | 特别 4006 | 特发 4007 | 特殊 4008 | 特殊要求 4009 | 特点 4010 | 特瑞 4011 | 特种 4012 | 特立 4013 | 特色 4014 | 特许 4015 | 状况 4016 | 独到 4017 | 独家 4018 | 独家生产 4019 | 独特 4020 | 独立 4021 | 独资 4022 | 独资企业 4023 | 率先 4024 | 环节 4025 | 现为 4026 | 现在 4027 | 现场 4028 | 现已 4029 | 现有 4030 | 现有企业 4031 | 现货 4032 | 理想 4033 | 理论 4034 | 理财 4035 | 瑞奇 4036 | 瑞宁 4037 | 瑞辉 4038 | 瑞邦 4039 | 瑞驰 4040 | 生产 4041 | 生产力 4042 | 生产加工 4043 | 生产厂 4044 | 生产型 4045 | 生产工艺 4046 | 生产能力 4047 | 生命 4048 | 生命线 4049 | 生存 4050 | 生态型 4051 | 生活 4052 | 生长素 4053 | 用于 4054 | 用品 4055 | 用心 4056 | 用户 4057 | 用户数量 4058 | 用电 4059 | 电仪 4060 | 电子学 4061 | 畅行 4062 | 畅通 4063 | 留德 4064 | 登记 4065 | 百发 4066 | 百宝箱 4067 | 百家 4068 | 监控 4069 | 监督 4070 | 监督局 4071 | 监管局 4072 | 监造 4073 | 目前 4074 | 目录 4075 | 目标 4076 | 目的 4077 | 直供 4078 | 直销 4079 | 相互合作 4080 | 相信 4081 | 相关 4082 | 相容性 4083 | 相应 4084 | 相结合 4085 | 相继 4086 | 相适应 4087 | 省内外 4088 | 真正 4089 | 真诚 4090 | 着力 4091 | 知名 4092 | 知名人士 4093 | 知名企业 4094 | 知名品牌 4095 | 知名度 4096 | 知识 4097 | 知识产权 4098 | 知识结构 4099 | 砌体 4100 | 砌砖 4101 | 研制 4102 | 研制开发 4103 | 确保 4104 | 确信 4105 | 确立 4106 | 碰碰 4107 | 示范 4108 | 示范场 4109 | 礼仪 4110 | 社会 4111 | 社会各界 4112 | 社区化 4113 | 私人 4114 | 私营 4115 | 私营企业 4116 | 秉持 4117 | 秉着 4118 | 种类 4119 | 科丰 4120 | 科亚 4121 | 科发 4122 | 科学 4123 | 科技 4124 | 科技型 4125 | 科技时代 4126 | 科技类 4127 | 科教兴国 4128 | 科普馆 4129 | 科研 4130 | 科研单位 4131 | 科研开发 4132 | 科研机构 4133 | 科能 4134 | 科蓝 4135 | 积分球 4136 | 积极 4137 | 积极参与 4138 | 积累 4139 | 称号 4140 | 程度 4141 | 稳健 4142 | 稳定 4143 | 稳步发展 4144 | 空间 4145 | 突出 4146 | 突发 4147 | 突破 4148 | 窗口 4149 | 立志 4150 | 立足 4151 | 立足于 4152 | 立高 4153 | 站房 4154 | 竞争 4155 | 竞争力 4156 | 竞合 4157 | 竭诚服务 4158 | 竭诚欢迎 4159 | 竹藤 4160 | 符合 4161 | 符合中国 4162 | 第一 4163 | 第一家 4164 | 第一张 4165 | 第一股 4166 | 第三方 4167 | 第十四 4168 | 筑成 4169 | 筑炉 4170 | 策划 4171 | 策略 4172 | 筹资 4173 | 签章 4174 | 签订 4175 | 简章 4176 | 管理 4177 | 管理人员 4178 | 管理局 4179 | 管理所 4180 | 管理机制 4181 | 管理机构 4182 | 管理模式 4183 | 管理水平 4184 | 管道局 4185 | 箱包 4186 | 类产品 4187 | 类人 4188 | 类型 4189 | 精准 4190 | 精密 4191 | 精密度 4192 | 精工 4193 | 精干 4194 | 精心 4195 | 精心施工 4196 | 精心设计 4197 | 精深 4198 | 精湛 4199 | 精瑞 4200 | 精益求精 4201 | 精确定位 4202 | 精神 4203 | 精细 4204 | 精细化 4205 | 精致 4206 | 精良 4207 | 精英 4208 | 精诚 4209 | 精诚合作 4210 | 精诚所至 4211 | 精通 4212 | 系列产品 4213 | 系列化 4214 | 系统 4215 | 系统优化 4216 | 系统化 4217 | 系统工程 4218 | 系统性 4219 | 系统监控 4220 | 系统集成 4221 | 素质 4222 | 紧密 4223 | 紧密联系 4224 | 紧跟 4225 | 累积 4226 | 纪元 4227 | 纳税人 4228 | 纳贤 4229 | 纽带 4230 | 线下 4231 | 组建 4232 | 组成 4233 | 组方 4234 | 组织 4235 | 组装 4236 | 组配 4237 | 细致 4238 | 终端 4239 | 经历 4240 | 经济 4241 | 经济基础 4242 | 经济收益 4243 | 经纪 4244 | 经纪商 4245 | 经营 4246 | 经营方式 4247 | 经营权 4248 | 经营者 4249 | 经营规模 4250 | 经营项目 4251 | 经销 4252 | 经验 4253 | 经验丰富 4254 | 结交 4255 | 结合 4256 | 结成 4257 | 结构 4258 | 统一 4259 | 统配 4260 | 继续 4261 | 维护 4262 | 维生 4263 | 综合 4264 | 综合型 4265 | 综合性 4266 | 绿卡 4267 | 缺损 4268 | 罐体 4269 | 网上 4270 | 网络化 4271 | 美中 4272 | 美伦 4273 | 美化 4274 | 美观 4275 | 群体 4276 | 翔实 4277 | 考察 4278 | 职能 4279 | 职能部门 4280 | 联合 4281 | 联手 4282 | 联盟 4283 | 联系 4284 | 联系方法 4285 | 联营 4286 | 聘请 4287 | 聚集 4288 | 股份 4289 | 股份制 4290 | 背景 4291 | 胡家 4292 | 能为 4293 | 能力 4294 | 能够 4295 | 脱销 4296 | 自主 4297 | 自主知识产权 4298 | 自主经营权 4299 | 自产自销 4300 | 自已 4301 | 自有 4302 | 自用 4303 | 自营 4304 | 自行 4305 | 自行设计 4306 | 自选 4307 | 至今 4308 | 至诚 4309 | 致力 4310 | 致力于 4311 | 般若 4312 | 舾装 4313 | 良好信誉 4314 | 良好基础 4315 | 艰苦卓绝 4316 | 艺术 4317 | 范围 4318 | 草种 4319 | 荣获 4320 | 荣誉 4321 | 荣誉称号 4322 | 莅临 4323 | 获取 4324 | 获取信息 4325 | 获得 4326 | 获评 4327 | 营运 4328 | 营造 4329 | 著名 4330 | 蓬勃发展 4331 | 融入 4332 | 融合 4333 | 融资 4334 | 融达 4335 | 血透 4336 | 行业 4337 | 行业协会 4338 | 行业性 4339 | 行业新闻 4340 | 行业标准 4341 | 行业龙头 4342 | 行为 4343 | 行政 4344 | 行政部门 4345 | 行销 4346 | 衍生 4347 | 衍生品 4348 | 衣食住行 4349 | 补偿贸易 4350 | 衬底 4351 | 要求 4352 | 覆盖 4353 | 覆盖全国 4354 | 见证 4355 | 观念 4356 | 规划 4357 | 规划设计 4358 | 规模 4359 | 规模化 4360 | 规范 4361 | 规范化 4362 | 视点 4363 | 视觉 4364 | 解决 4365 | 解决方案 4366 | 詹天佑 4367 | 计划 4368 | 订做 4369 | 订制 4370 | 订单 4371 | 订货 4372 | 订购 4373 | 认可 4374 | 认同 4375 | 认证 4376 | 议案 4377 | 讲信用 4378 | 许可证 4379 | 设厂 4380 | 设在 4381 | 设备 4382 | 设备齐全 4383 | 设施 4384 | 设有 4385 | 设立 4386 | 设置 4387 | 设计 4388 | 设计师 4389 | 设计方案 4390 | 设计界 4391 | 设计部门 4392 | 证书及 4393 | 证号 4394 | 评为 4395 | 评价 4396 | 评选活动 4397 | 试制 4398 | 试穿 4399 | 试验场 4400 | 试验站 4401 | 诚信 4402 | 诚信为本 4403 | 诚创 4404 | 诚实 4405 | 诚心 4406 | 诚招 4407 | 诚挚 4408 | 诚邀 4409 | 诱导 4410 | 请参阅 4411 | 诸多 4412 | 课室 4413 | 课程标准 4414 | 课题组 4415 | 调查 4416 | 调研 4417 | 调试 4418 | 谋发展 4419 | 负责 4420 | 责任 4421 | 货源 4422 | 货源充足 4423 | 货物 4424 | 货运 4425 | 质优 4426 | 质优价廉 4427 | 质检 4428 | 质监局 4429 | 质素 4430 | 质量 4431 | 质量上乘 4432 | 质量事故 4433 | 质量体系 4434 | 质量保证 4435 | 质量关 4436 | 质量标准 4437 | 质量检验 4438 | 质量第一 4439 | 购买 4440 | 购并 4441 | 购物 4442 | 购销 4443 | 贮运 4444 | 贯彻 4445 | 贴心 4446 | 贴牌 4447 | 贴附 4448 | 贸易 4449 | 贸易型 4450 | 贸易组织 4451 | 资产 4452 | 资料 4453 | 资本 4454 | 资格 4455 | 资深 4456 | 资源 4457 | 资源优势 4458 | 资源整合 4459 | 资讯 4460 | 资质 4461 | 资质证书 4462 | 资金 4463 | 资金雄厚 4464 | 赞誉 4465 | 赠品 4466 | 赢取 4467 | 赢得 4468 | 起步晚 4469 | 起草人 4470 | 超一流 4471 | 超值 4472 | 超前 4473 | 超群 4474 | 超越 4475 | 超过 4476 | 越来越 4477 | 足额 4478 | 跟踪 4479 | 跟踪服务 4480 | 跟进 4481 | 车是 4482 | 转包 4483 | 转化 4484 | 转售 4485 | 转型 4486 | 转让 4487 | 轻点 4488 | 载体 4489 | 较大 4490 | 较强 4491 | 辅以 4492 | 辅助 4493 | 辉煌 4494 | 辐射 4495 | 达到 4496 | 达成 4497 | 迅联 4498 | 迅速 4499 | 过硬 4500 | 过程 4501 | 迈进 4502 | 运作 4503 | 运用 4504 | 运管 4505 | 运行 4506 | 运输 4507 | 近十年 4508 | 近百家 4509 | 进一步 4510 | 进一步提高 4511 | 进入 4512 | 进军 4513 | 进出 4514 | 进出口 4515 | 进取 4516 | 进口 4517 | 进行 4518 | 进货 4519 | 远光 4520 | 远大抱负 4521 | 远销 4522 | 违法 4523 | 连接起来 4524 | 连邦 4525 | 连锁 4526 | 连锁化 4527 | 追求 4528 | 送货 4529 | 适合 4530 | 适应 4531 | 适用 4532 | 适销 4533 | 选址 4534 | 选型 4535 | 选择 4536 | 选材 4537 | 选用 4538 | 选购 4539 | 逐步 4540 | 逐步形成 4541 | 递交 4542 | 通关 4543 | 通源 4544 | 造型 4545 | 造型师 4546 | 造就 4547 | 遍及 4548 | 遍布 4549 | 遍布全国 4550 | 遵循 4551 | 部分 4552 | 部门 4553 | 郸城 4554 | 配合 4555 | 配备 4556 | 配套 4557 | 配套技术 4558 | 配有 4559 | 配置 4560 | 配送 4561 | 采取 4562 | 采收率 4563 | 采用 4564 | 采购 4565 | 采购员 4566 | 采购商 4567 | 重于 4568 | 重合 4569 | 重塑 4570 | 重庆市政府 4571 | 重构 4572 | 重点 4573 | 重要 4574 | 重视 4575 | 量身 4576 | 量身定做 4577 | 金杯奖 4578 | 鉴定 4579 | 鉴定会 4580 | 针对 4581 | 钻进 4582 | 铸就 4583 | 铸造 4584 | 铸造成 4585 | 销售 4586 | 销售业 4587 | 销售业务 4588 | 销售商 4589 | 销往 4590 | 锻锤 4591 | 长久 4592 | 长宏 4593 | 长年 4594 | 长期 4595 | 长期有效 4596 | 长足发展 4597 | 长远 4598 | 门店 4599 | 门类 4600 | 问题 4601 | 闲散 4602 | 队伍 4603 | 队伍素质 4604 | 防化 4605 | 防范 4606 | 阵容 4607 | 陈列 4608 | 陈立 4609 | 降低成本 4610 | 院校 4611 | 随时 4612 | 雄厚 4613 | 雄厚资金 4614 | 雅斯 4615 | 雅高 4616 | 集中 4617 | 集中管理 4618 | 集合 4619 | 集团 4620 | 集团公司 4621 | 集团化 4622 | 集成度 4623 | 雇佣 4624 | 需求 4625 | 需要 4626 | 青睐 4627 | 青鸟 4628 | 非国家 4629 | 非标 4630 | 非盈利 4631 | 非贸易 4632 | 面向 4633 | 面向全国 4634 | 面对 4635 | 顶尖 4636 | 顶层 4637 | 顶点 4638 | 顶级 4639 | 项下 4640 | 项目 4641 | 项目管理 4642 | 顺应 4643 | 顺特 4644 | 顾客 4645 | 预紧 4646 | 预防为主 4647 | 领先 4648 | 领先地位 4649 | 领军 4650 | 领创 4651 | 领域 4652 | 领域专家 4653 | 领头 4654 | 领头人 4655 | 领导 4656 | 领导小组 4657 | 领导者 4658 | 领跑 4659 | 领路人 4660 | 颇具 4661 | 颇具规模 4662 | 风格 4663 | 飞速发展 4664 | 首家 4665 | 首席专家 4666 | 首航 4667 | 首选 4668 | 驻厂 4669 | 骨干 4670 | 骨干企业 4671 | 高信 4672 | 高危 4673 | 高品位 4674 | 高品质 4675 | 高处 4676 | 高层次 4677 | 高度 4678 | 高度评价 4679 | 高度负责 4680 | 高性价比 4681 | 高性能 4682 | 高技术 4683 | 高效 4684 | 高效快捷 4685 | 高效率 4686 | 高效益 4687 | 高标准 4688 | 高校 4689 | 高档 4690 | 高档化 4691 | 高档次 4692 | 高水平 4693 | 高科技 4694 | 高端用户 4695 | 高素质 4696 | 高级 4697 | 高薪技术 4698 | 高质 4699 | 高质量 4700 | 高起点 4701 | 高附加值 4702 | 鼎力支持 4703 | 齐全 4704 | 齐力 4705 | 龙头企业 4706 | 以多 4707 | 网找 4708 | 空小 4709 | 找人 4710 | 扣扣 4711 | 网月空 4712 | 九年 4713 | 第九届 4714 | 高贵 4715 | 至今已是 4716 | 优美环境 4717 | 本届 4718 | 同建 4719 | 价值观 4720 | 系列 4721 | 梯队 4722 | 广灵 4723 | 三峡 4724 | 尊尊 4725 | 备注 4726 | 多一点 4727 | 更深 4728 | zzpyy 4729 | 是否 4730 | 送交 4731 | 易传 4732 | 打入 4733 | 女士 4734 | 执著 4735 | 触摸 4736 | 集成 4737 | 有的放矢 4738 | 各尽 4739 | 每一分 4740 | 批准 4741 | 詹晓彬 4742 | 融会贯通 4743 | 驾轻就熟 4744 | 渊博 4745 | 第一季 4746 | 现如今 4747 | 变更 4748 | 侵权 4749 | 余万 4750 | 高手 4751 | 雄心 4752 | 特级 4753 | 不绝如缕 4754 | 慎密 4755 | 洋溢 4756 | 浦路 4757 | 相扣 4758 | 晚宴 4759 | 金杨 4760 | 领胜 4761 | 固定 4762 | 中有 4763 | 特装 4764 | 相似 4765 | 入选为 4766 | 无国界 4767 | 进村 4768 | 用来 4769 | 这群人 4770 | 之外 4771 | 回答 4772 | 响应 4773 | 主打 4774 | 无限 4775 | 几千元 4776 | 千万人次 4777 | 审批 4778 | 科工 4779 | 数十项 4780 | 三十多 4781 | 优厚 4782 | 各层次 4783 | 认同感 4784 | 主打 4785 | 双休 4786 | 手拉 4787 | 余久升 4788 | 四十余个 4789 | 第十二 4790 | 第三 4791 | 展团 4792 | 恒久不变 4793 | 如期完成 4794 | 交货期 -------------------------------------------------------------------------------- /文本分类模型终极大炮.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 60, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "data": { 10 | "text/plain": [ 11 | "'\\n作者:英俊\\nQQ:2227495940\\n邮箱 同上\\n'" 12 | ] 13 | }, 14 | "execution_count": 60, 15 | "metadata": {}, 16 | "output_type": "execute_result" 17 | } 18 | ], 19 | "source": [ 20 | "'''\n", 21 | "作者:英俊\n", 22 | "QQ:2227495940\n", 23 | "邮箱 同上\n", 24 | "'''" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "# 解决方案" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "* 1 机器学习方案\n", 39 | "\n", 40 | "通过机器学习为手段进行文本分类\n", 41 | "\n", 42 | "* 2 深度学习方案\n", 43 | "\n", 44 | "通过深度学习为手段进行文本分类\n", 45 | "\n", 46 | "* 3 fastnlp方案的应用\n", 47 | "\n", 48 | "这种模式需要先将现成的数据集读取并且以csv/txt格式导出然后读取" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "### 进行数据预处理" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 61, 61 | "metadata": { 62 | "collapsed": true 63 | }, 64 | "outputs": [], 65 | "source": [ 66 | "import numpy as np\n", 67 | "import re\n", 68 | "import pandas as pd\n", 69 | "\n", 70 | "\n", 71 | "# clean useless characters\n", 72 | "'''\n", 73 | "html_clean = ['& ldquo ;', '& hellip ;', '& rdquo ;', '& yen ;']\n", 74 | "punctuation_replace = '[,。!?]+'\n", 75 | "strange_num = ['①','②','③','④']\n", 76 | "'''\n", 77 | "punctuation_remove = '[:;……()『』《》【】~!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~]+'\n", 78 | "\n", 79 | "def clean(sent):\n", 80 | " sent = re.sub(r'ldquo', \"\", sent)\n", 81 | " sent = re.sub(r'hellip', \"\", sent)\n", 82 | " sent = re.sub(r'rdquo', \"\", sent)\n", 83 | " sent = re.sub(r'yen', \"\", sent)\n", 84 | " sent = re.sub(r'⑦', \"7\", sent)\n", 85 | " sent = re.sub(r'(, ){2,}', \"\", sent)\n", 86 | " sent = re.sub(r'(! ){2,}', \"\", sent) # delete too many!,?,。等\n", 87 | " sent = re.sub(r'(? ){2,}', \"\", sent)\n", 88 | " sent = re.sub(r'(。 ){2,}', \"\", sent)\n", 89 | " sent = re.sub(punctuation_remove, \"\", sent) #delete punctuations\n", 90 | " s = ' '.join(sent.split()) #delete additional space\n", 91 | " \n", 92 | " return s\n", 93 | " \n", 94 | "def sent_filter(l):\n", 95 | " l_new = []\n", 96 | " for s,k in enumerate(l):\n", 97 | " if len(k) > 2:\n", 98 | " l_new.append(k)\n", 99 | " return l_new\n", 100 | "\n", 101 | "# 这里是深度学习模式下的读取数据集\n", 102 | "def dl_load_data_and_labels(good_data_file, bad_data_file, mid_data_file):\n", 103 | " #load reviews and save them in the list\n", 104 | " good_examples = list(open(good_data_file, \"r\", encoding='utf-8').readlines())\n", 105 | " good_examples = [s.strip() for s in good_examples]\n", 106 | " bad_examples = list(open(bad_data_file, \"r\", encoding='utf-8').readlines())\n", 107 | " bad_examples = [s.strip() for s in bad_examples]\n", 108 | " mid_examples = list(open(mid_data_file, \"r\", encoding='utf-8').readlines())\n", 109 | " mid_examples = [s.strip() for s in mid_examples]\n", 110 | "\n", 111 | " #Call the clean () and sent_filter () functions to process the comments, save them in the x_text list\n", 112 | " good_examples = [clean(sent) for sent in good_examples]\n", 113 | " bad_examples = [clean(sent) for sent in bad_examples]\n", 114 | " mid_examples = [clean(sent) for sent in mid_examples]\n", 115 | "\n", 116 | " good_examples = [i.strip() for i in good_examples]\n", 117 | " bad_examples = [i.strip() for i in bad_examples]\n", 118 | " mid_examples = [i.strip() for i in mid_examples]\n", 119 | "\n", 120 | " good_examples = sent_filter(good_examples)\n", 121 | " bad_examples = sent_filter(bad_examples)\n", 122 | " mid_examples = sent_filter(mid_examples)\n", 123 | " x_text = good_examples + bad_examples + mid_examples\n", 124 | "\n", 125 | " #Add a label for each comment and save it in y\n", 126 | " good_labels = [[1, 0, 0] for _ in good_examples]\n", 127 | " bad_labels = [[0, 1, 0] for _ in bad_examples]\n", 128 | " mid_labels = [[0, 0, 1] for _ in mid_examples]\n", 129 | " y = np.concatenate([good_labels, bad_labels, mid_labels], 0)\n", 130 | " return [x_text, y]\n", 131 | "\n", 132 | "# 机器学习模式下的读取到的数据集\n", 133 | "def ml_load_data_and_labels(good_data_file, bad_data_file, mid_data_file):\n", 134 | " #load reviews and save them in the list\n", 135 | " good_examples = list(open(good_data_file, \"r\", encoding='utf-8').readlines())\n", 136 | " good_examples = [s.strip() for s in good_examples]\n", 137 | " bad_examples = list(open(bad_data_file, \"r\", encoding='utf-8').readlines())\n", 138 | " bad_examples = [s.strip() for s in bad_examples]\n", 139 | " mid_examples = list(open(mid_data_file, \"r\", encoding='utf-8').readlines())\n", 140 | " mid_examples = [s.strip() for s in mid_examples]\n", 141 | "\n", 142 | " #Call the clean () and sent_filter () functions to process the comments, save them in the x_text list\n", 143 | " good_examples = [clean(sent) for sent in good_examples]\n", 144 | " bad_examples = [clean(sent) for sent in bad_examples]\n", 145 | " mid_examples = [clean(sent) for sent in mid_examples]\n", 146 | "\n", 147 | " good_examples = [i.strip() for i in good_examples]\n", 148 | " bad_examples = [i.strip() for i in bad_examples]\n", 149 | " mid_examples = [i.strip() for i in mid_examples]\n", 150 | "\n", 151 | " good_examples = sent_filter(good_examples)\n", 152 | " bad_examples = sent_filter(bad_examples)\n", 153 | " mid_examples = sent_filter(mid_examples)\n", 154 | "\n", 155 | " x_text = good_examples + bad_examples + mid_examples\n", 156 | "\n", 157 | " #Add a label for each comment and save it in y\n", 158 | " good_labels = [0 for _ in good_examples]\n", 159 | " bad_labels = [1 for _ in bad_examples]\n", 160 | " mid_labels = [2 for _ in mid_examples]\n", 161 | " y = np.concatenate([good_labels, bad_labels, mid_labels], 0)\n", 162 | " return [x_text, y]\n", 163 | "\n", 164 | "# when you use tensorflow, you need to generate batches yourself, this function may helpe you\n", 165 | "def batch_iter(data, batch_size, num_epochs, shuffle=True):\n", 166 | " \"\"\"\n", 167 | " Generates a batch iterator for a dataset.\n", 168 | " \"\"\"\n", 169 | " data = np.array(data)\n", 170 | " data_size = len(data)\n", 171 | " num_batches_per_epoch = int((len(data)-1)/batch_size) + 1\n", 172 | " for epoch in range(num_epochs):\n", 173 | " # Shuffle the data at each epoch\n", 174 | " if shuffle:\n", 175 | " shuffle_indices = np.random.permutation(np.arange(data_size))\n", 176 | " shuffled_data = data[shuffle_indices]\n", 177 | " else:\n", 178 | " shuffled_data = data\n", 179 | " for batch_num in range(num_batches_per_epoch):\n", 180 | " start_index = batch_num * batch_size\n", 181 | " end_index = min((batch_num + 1) * batch_size, data_size)\n", 182 | " yield shuffled_data[start_index:end_index]" 183 | ] 184 | }, 185 | { 186 | "cell_type": "markdown", 187 | "metadata": {}, 188 | "source": [ 189 | "## 读取数据" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 62, 195 | "metadata": {}, 196 | "outputs": [ 197 | { 198 | "name": "stdout", 199 | "output_type": "stream", 200 | "text": [ 201 | "[0 0 0 ... 2 2 2]\n" 202 | ] 203 | } 204 | ], 205 | "source": [ 206 | "good_data_file = \"./data/good_cut_jieba.txt\"\n", 207 | "bad_data_file = \"./data/bad_cut_jieba.txt\"\n", 208 | "mid_data_file = \"./data/mid_cut_jieba.txt\"\n", 209 | "x_text, y = ml_load_data_and_labels(good_data_file, bad_data_file, mid_data_file)\n", 210 | "print(y)" 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": 63, 216 | "metadata": {}, 217 | "outputs": [ 218 | { 219 | "name": "stdout", 220 | "output_type": "stream", 221 | "text": [ 222 | "15648\n", 223 | "15648\n" 224 | ] 225 | } 226 | ], 227 | "source": [ 228 | "print(len(y))\n", 229 | "print(len(x_text))" 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": 51, 235 | "metadata": { 236 | "collapsed": true 237 | }, 238 | "outputs": [], 239 | "source": [ 240 | "data_dict={\"raw_words\":x_text,\"target\":y}" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 52, 246 | "metadata": {}, 247 | "outputs": [ 248 | { 249 | "data": { 250 | "text/html": [ 251 | "
\n", 252 | "\n", 265 | "\n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | "
raw_wordstarget
0整个 感觉 除了 送货 师傅 新手 来晚 了 外 , 其他 都 很 好0
1京东 自营 很 不错 ,0
2外观 手感 使用 都 不错 , 好 !0
3相信 这个 牌子 , 没有 验证 过 保修期0
4好 , 售后服务 到位 , 能 解决 使用 中 遇见 的 问题 。0
\n", 301 | "
" 302 | ], 303 | "text/plain": [ 304 | " raw_words target\n", 305 | "0 整个 感觉 除了 送货 师傅 新手 来晚 了 外 , 其他 都 很 好 0\n", 306 | "1 京东 自营 很 不错 , 0\n", 307 | "2 外观 手感 使用 都 不错 , 好 ! 0\n", 308 | "3 相信 这个 牌子 , 没有 验证 过 保修期 0\n", 309 | "4 好 , 售后服务 到位 , 能 解决 使用 中 遇见 的 问题 。 0" 310 | ] 311 | }, 312 | "execution_count": 52, 313 | "metadata": {}, 314 | "output_type": "execute_result" 315 | } 316 | ], 317 | "source": [ 318 | "df_all=pd.DataFrame(data_dict)\n", 319 | "df_all.head()" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 64, 325 | "metadata": { 326 | "collapsed": true 327 | }, 328 | "outputs": [], 329 | "source": [ 330 | "# 数据分割\n", 331 | "from sklearn.model_selection import train_test_split\n", 332 | "\n", 333 | "# 数据管道\n", 334 | "from sklearn.pipeline import Pipeline,make_pipeline\n", 335 | "# 数据分割\n", 336 | "x_train, x_test, y_train, y_test = train_test_split(x_text, y, test_size=0.2, random_state=2017)" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 69, 342 | "metadata": { 343 | "collapsed": true 344 | }, 345 | "outputs": [], 346 | "source": [ 347 | "data_dict1={\"raw_words\":x_train,\"target\":y_train}\n", 348 | "data_dict2={\"raw_words\":x_test}" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 70, 354 | "metadata": { 355 | "collapsed": true 356 | }, 357 | "outputs": [], 358 | "source": [ 359 | "df_train=pd.DataFrame(data_dict1)\n", 360 | "df_train.head()\n", 361 | "# 为fastnlp做准备\n", 362 | "df_train.to_csv('train.txt',sep='\\t', index=False,header=None,encoding='utf-8')" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "execution_count": 71, 368 | "metadata": { 369 | "collapsed": true 370 | }, 371 | "outputs": [], 372 | "source": [ 373 | "df_test=pd.DataFrame(data_dict2)\n", 374 | "df_test.head()\n", 375 | "# 为fastnlp做准备\n", 376 | "df_test.to_csv('test.txt',sep='\\t', index=False,header=None,encoding='utf-8')" 377 | ] 378 | }, 379 | { 380 | "cell_type": "markdown", 381 | "metadata": {}, 382 | "source": [ 383 | "# 机器学习方案" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": 14, 389 | "metadata": { 390 | "collapsed": true 391 | }, 392 | "outputs": [], 393 | "source": [ 394 | "import sklearn\n", 395 | "#机器学习算法模型\n", 396 | "from sklearn.linear_model import LogisticRegression\n", 397 | "from sklearn.tree import DecisionTreeClassifier\n", 398 | "from sklearn.ensemble import RandomForestClassifier,BaggingClassifier,AdaBoostClassifier\n", 399 | "from sklearn.svm import SVC,LinearSVC\n", 400 | "from sklearn.naive_bayes import BernoulliNB,MultinomialNB,GaussianNB\n", 401 | "from sklearn.neighbors import KNeighborsClassifier\n", 402 | "# 特征提取\n", 403 | "from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer\n", 404 | "from sklearn.model_selection import train_test_split\n", 405 | "#Pipeline 使用一系列 (key, value) 键值对来构建,其中 key 是你给这个步骤起的名字, value 是一个评估器对象:\n", 406 | "from sklearn.pipeline import Pipeline\n", 407 | "#准确率,精确率,召回率,f1\n", 408 | "from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,classification_report\n", 409 | "import xgboost as xgb\n", 410 | "import joblib" 411 | ] 412 | }, 413 | { 414 | "cell_type": "code", 415 | "execution_count": 15, 416 | "metadata": { 417 | "collapsed": true 418 | }, 419 | "outputs": [], 420 | "source": [ 421 | "# 读取数据\n", 422 | "def readFile(path):\n", 423 | " with open(path, 'r', errors='ignore') as file: # 文档中编码有些问题,所有用errors过滤错误\n", 424 | " content = file.read()\n", 425 | " return content" 426 | ] 427 | }, 428 | { 429 | "cell_type": "code", 430 | "execution_count": 16, 431 | "metadata": { 432 | "collapsed": true 433 | }, 434 | "outputs": [], 435 | "source": [ 436 | "# 读取停用词\n", 437 | "stwlist=[line.strip() for line in open('stopword.txt','r',encoding='utf-8').readlines()]" 438 | ] 439 | }, 440 | { 441 | "cell_type": "code", 442 | "execution_count": 17, 443 | "metadata": { 444 | "collapsed": true 445 | }, 446 | "outputs": [], 447 | "source": [ 448 | "# pipe = make_pipeline(CountVectorizer(), LogisticRegression()) \n", 449 | "# # 这里是后台优化回头再说\n", 450 | "# param_grid = [{'logisticregression__C': [1, 10, 100, 1000]}\n", 451 | "# gs = GridSearchCV(pipe, param_grid)\n", 452 | "# gs.fit(X, y)" 453 | ] 454 | }, 455 | { 456 | "cell_type": "markdown", 457 | "metadata": {}, 458 | "source": [ 459 | "#### 文本向量化工具" 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "execution_count": 18, 465 | "metadata": { 466 | "collapsed": true 467 | }, 468 | "outputs": [], 469 | "source": [ 470 | "# 创建各类cv=CountVectorizer()和tf_idf工具\n", 471 | "cv=CountVectorizer(min_df=3,\n", 472 | " max_df=0.5,\n", 473 | " ngram_range=(1,2),\n", 474 | " stop_words = stwlist)\n", 475 | "tdf=TfidfVectorizer()" 476 | ] 477 | }, 478 | { 479 | "cell_type": "code", 480 | "execution_count": 19, 481 | "metadata": { 482 | "collapsed": true 483 | }, 484 | "outputs": [], 485 | "source": [ 486 | "#%%\n", 487 | "# Count vectoriser --> LogisticRegression()\n", 488 | "\n", 489 | "# 分类模型\n", 490 | "\n", 491 | "#1.逻辑回归\n", 492 | "lr=LogisticRegression()\n", 493 | "# 贝叶斯\n", 494 | "#2.多项式贝叶斯\n", 495 | "mb=MultinomialNB()\n", 496 | "gb=GaussianNB()\n", 497 | "#3.伯努利贝叶斯\n", 498 | "bb=BernoulliNB()\n", 499 | "# 支持向量机\n", 500 | "#4.支持向量机\n", 501 | "svc=SVC(kernel='rbf')\n", 502 | "svc1=SVC(kernel='linear')\n", 503 | "svc2=SVC(kernel='poly')\n", 504 | "svc3=SVC(kernel='sigmoid')\n", 505 | "\n", 506 | "#5.\n", 507 | "linearsvc=LinearSVC()\n", 508 | "#6.决策树\n", 509 | "dtc=DecisionTreeClassifier(random_state=22)\n", 510 | "#7.随机森林\n", 511 | "rfc=RandomForestClassifier(random_state=22)\n", 512 | "#9.KNN分类器\n", 513 | "knn=KNeighborsClassifier()\n", 514 | "\n", 515 | "modelList=[lr,mb,bb,svc,svc1,svc2,svc3,linearsvc,dtc,rfc,knn]\n", 516 | "\n", 517 | "#11个模型\n", 518 | "m_len=len(modelList)\n", 519 | "\n", 520 | "# # 形成 9个模型 2个提取特征 5个指标 \n", 521 | "# # 提取特征分类器\n", 522 | "textVectoriser=[cv,tdf]\n", 523 | "textv_len=len(textVectoriser)\n" 524 | ] 525 | }, 526 | { 527 | "cell_type": "code", 528 | "execution_count": 20, 529 | "metadata": { 530 | "collapsed": true 531 | }, 532 | "outputs": [], 533 | "source": [ 534 | "new_ticks = []\n", 535 | "name=[]\n", 536 | "# modelNamelist=['逻辑回归','多项式贝叶斯','伯努利贝叶斯','高斯贝叶斯','RBF核SVM'\n", 537 | "# ,'线性核SVM','多项式核SVM','sigmoid核SVM'\n", 538 | "# ,'线性分类SVM','决策树','随机森林','KNN']\n", 539 | "# modelNamelist2=['lr','mb','gb','bb','svc','svc1','svc2','svc3','l'+'\\n'+'svc','dtc','rfc','knn']\n", 540 | "modelNamelist=['逻辑回归','多项式贝叶斯','伯努利贝叶斯','RBF核SVM'\n", 541 | " ,'线性核SVM','多项式核SVM','sigmoid核SVM'\n", 542 | " ,'线性分类SVM','决策树','随机森林','KNN']\n", 543 | "modelNamelist2=['lr','mb','bb','svc','svc1','svc2','svc3','l'+'\\n'+'svc','dtc','rfc','knn']\n", 544 | "# textVectorNamelist = ['词袋','TDF']\n", 545 | "for i in range(m_len):\n", 546 | " new_ticks.append([modelNamelist2[i]])\n", 547 | " name.append(modelNamelist[i])" 548 | ] 549 | }, 550 | { 551 | "cell_type": "code", 552 | "execution_count": 21, 553 | "metadata": { 554 | "collapsed": true 555 | }, 556 | "outputs": [], 557 | "source": [ 558 | "name_dict={\"name\":modelNamelist,\"model\":modelList}\n", 559 | "label_dict={\"name\":modelNamelist2,\"model\":modelList}" 560 | ] 561 | }, 562 | { 563 | "cell_type": "code", 564 | "execution_count": 22, 565 | "metadata": { 566 | "collapsed": true 567 | }, 568 | "outputs": [], 569 | "source": [ 570 | "accuracy_score_list=[]\n", 571 | "precision_score_list=[]\n", 572 | "recall_score_list=[]\n", 573 | "f1_score_list=[]\n", 574 | "classification_report_list=[]\n", 575 | "modelClass=[]" 576 | ] 577 | }, 578 | { 579 | "cell_type": "code", 580 | "execution_count": 26, 581 | "metadata": { 582 | "collapsed": true 583 | }, 584 | "outputs": [], 585 | "source": [ 586 | "# 记录结果\n", 587 | "result=pd.DataFrame()" 588 | ] 589 | }, 590 | { 591 | "cell_type": "code", 592 | "execution_count": 27, 593 | "metadata": {}, 594 | "outputs": [ 595 | { 596 | "name": "stdout", 597 | "output_type": "stream", 598 | "text": [ 599 | "CountVectorizer(analyzer='word', binary=False, decode_error='strict',\n", 600 | " dtype=, encoding='utf-8', input='content',\n", 601 | " lowercase=True, max_df=0.5, max_features=None, min_df=3,\n", 602 | " ngram_range=(1, 2), preprocessor=None,\n", 603 | " stop_words=['\\ufeff,', '?', '、', '。', '“', '”', '《', '》', '!',\n", 604 | " ',', ':', ';', '?', '人民', '#', '###', '啊', '阿', '哎',\n", 605 | " '哎呀', '哎哟', '唉', '俺', '俺们', '按', '按照', '吧', '吧哒',\n", 606 | " '把', '罢了', ...],\n", 607 | " strip_accents=None, token_pattern='(?u)\\\\b\\\\w\\\\w+\\\\b',\n", 608 | " tokenizer=None, vocabulary=None)\n" 609 | ] 610 | } 611 | ], 612 | "source": [ 613 | "tracv=CountVectorizer().fit_transform(x_train)\n", 614 | "print(cv)" 615 | ] 616 | }, 617 | { 618 | "cell_type": "code", 619 | "execution_count": null, 620 | "metadata": {}, 621 | "outputs": [ 622 | { 623 | "name": "stderr", 624 | "output_type": "stream", 625 | "text": [ 626 | "C:\\anaconda\\lib\\site-packages\\sklearn\\feature_extraction\\text.py:385: UserWarning: Your stop_words may be inconsistent with your preprocessing. Tokenizing the stop words generated tokens ['ain', 'aren', 'couldn', 'didn', 'doesn', 'don', 'hadn', 'hasn', 'haven', 'isn', 'll', 'mon', 'shouldn', 've', 'wasn', 'weren', 'won', 'wouldn'] not in stop_words.\n", 627 | " 'stop_words.' % sorted(inconsistent))\n", 628 | "C:\\anaconda\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:939: ConvergenceWarning: lbfgs failed to converge (status=1):\n", 629 | "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", 630 | "\n", 631 | "Increase the number of iterations (max_iter) or scale the data as shown in:\n", 632 | " https://scikit-learn.org/stable/modules/preprocessing.html.\n", 633 | "Please also refer to the documentation for alternative solver options:\n", 634 | " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", 635 | " extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n" 636 | ] 637 | }, 638 | { 639 | "name": "stdout", 640 | "output_type": "stream", 641 | "text": [ 642 | "======================================================================================================================================================\n", 643 | "当前模型是: 逻辑回归 当前文本向量化是 词袋 当前准确率是: 0.66933\n" 644 | ] 645 | }, 646 | { 647 | "name": "stderr", 648 | "output_type": "stream", 649 | "text": [ 650 | "C:\\anaconda\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:939: ConvergenceWarning: lbfgs failed to converge (status=1):\n", 651 | "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", 652 | "\n", 653 | "Increase the number of iterations (max_iter) or scale the data as shown in:\n", 654 | " https://scikit-learn.org/stable/modules/preprocessing.html.\n", 655 | "Please also refer to the documentation for alternative solver options:\n", 656 | " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", 657 | " extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n" 658 | ] 659 | }, 660 | { 661 | "name": "stdout", 662 | "output_type": "stream", 663 | "text": [ 664 | "======================================================================================================================================================\n", 665 | "当前模型是: 逻辑回归 当前文本向量化是 TF-IDF 当前准确率是: 0.71406\n", 666 | "======================================================================================================================================================\n", 667 | "当前模型是: 多项式贝叶斯 当前文本向量化是 词袋 当前准确率是: 0.68275\n", 668 | "======================================================================================================================================================\n", 669 | "当前模型是: 多项式贝叶斯 当前文本向量化是 TF-IDF 当前准确率是: 0.71022\n", 670 | "======================================================================================================================================================\n", 671 | "当前模型是: 伯努利贝叶斯 当前文本向量化是 词袋 当前准确率是: 0.64249\n", 672 | "======================================================================================================================================================\n", 673 | "当前模型是: 伯努利贝叶斯 当前文本向量化是 TF-IDF 当前准确率是: 0.62492\n", 674 | "======================================================================================================================================================\n", 675 | "当前模型是: RBF核SVM 当前文本向量化是 词袋 当前准确率是: 0.66773\n", 676 | "======================================================================================================================================================\n", 677 | "当前模型是: RBF核SVM 当前文本向量化是 TF-IDF 当前准确率是: 0.71821\n", 678 | "======================================================================================================================================================\n", 679 | "当前模型是: 线性核SVM 当前文本向量化是 词袋 当前准确率是: 0.65847\n", 680 | "======================================================================================================================================================\n", 681 | "当前模型是: 线性核SVM 当前文本向量化是 TF-IDF 当前准确率是: 0.71374\n", 682 | "======================================================================================================================================================\n", 683 | "当前模型是: 多项式核SVM 当前文本向量化是 词袋 当前准确率是: 0.46102\n", 684 | "======================================================================================================================================================\n", 685 | "当前模型是: 多项式核SVM 当前文本向量化是 TF-IDF 当前准确率是: 0.68179\n", 686 | "======================================================================================================================================================\n", 687 | "当前模型是: sigmoid核SVM 当前文本向量化是 词袋 当前准确率是: 0.65176\n", 688 | "======================================================================================================================================================\n", 689 | "当前模型是: sigmoid核SVM 当前文本向量化是 TF-IDF 当前准确率是: 0.70192\n" 690 | ] 691 | }, 692 | { 693 | "name": "stderr", 694 | "output_type": "stream", 695 | "text": [ 696 | "C:\\anaconda\\lib\\site-packages\\sklearn\\svm\\_base.py:947: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n", 697 | " \"the number of iterations.\", ConvergenceWarning)\n" 698 | ] 699 | }, 700 | { 701 | "name": "stdout", 702 | "output_type": "stream", 703 | "text": [ 704 | "======================================================================================================================================================\n", 705 | "当前模型是: 线性分类SVM 当前文本向量化是 词袋 当前准确率是: 0.64505\n", 706 | "======================================================================================================================================================\n", 707 | "当前模型是: 线性分类SVM 当前文本向量化是 TF-IDF 当前准确率是: 0.69904\n", 708 | "======================================================================================================================================================\n", 709 | "当前模型是: 决策树 当前文本向量化是 词袋 当前准确率是: 0.57923\n", 710 | "======================================================================================================================================================\n", 711 | "当前模型是: 决策树 当前文本向量化是 TF-IDF 当前准确率是: 0.59585\n", 712 | "======================================================================================================================================================\n", 713 | "当前模型是: 随机森林 当前文本向量化是 词袋 当前准确率是: 0.64409\n" 714 | ] 715 | } 716 | ], 717 | "source": [ 718 | "accuracy_score_list=[]\n", 719 | "# 莫名其妙搞不出来\n", 720 | "for i in range(m_len):\n", 721 | " for j in range(textv_len):\n", 722 | "# pipeline =make_pipeline(textVectoriser[j], modelList[i]) \n", 723 | " train_vec=textVectoriser[j].fit_transform(x_train)\n", 724 | " test_vec=textVectoriser[j].transform(x_test)\n", 725 | "# train_vec_dense=train_vec.todense()\n", 726 | "# test_vec_dense=test_vec.todense()\n", 727 | " modelList[i].fit(train_vec,y_train)\n", 728 | "# print(pipeline)\n", 729 | "# pred=pipeline.predict(x_test)\n", 730 | " pred=modelList[i].predict(test_vec)\n", 731 | "# modelList[i].fit(x_train,y_train) \n", 732 | "# pred=modelList[i].predict(x_test)\n", 733 | "# pred=pipeline.predict(np.array(X_test).reshape(-1,1))\n", 734 | " print('='*150)\n", 735 | " if(j==0):\n", 736 | " print('当前模型是:',modelNamelist[i],'当前文本向量化是','词袋',\"当前准确率是:\",round(accuracy_score(y_test,pred),5))\n", 737 | " if(j==1):\n", 738 | " print('当前模型是:',modelNamelist[i],'当前文本向量化是','TF-IDF',\"当前准确率是:\",round(accuracy_score(y_test,pred),5))\n", 739 | "# fpr[i], tpr[i], _ = roc_curve(y_test, y_pred)\n", 740 | "# roc_auc[i] = auc(fpr[i], tpr[i])\n", 741 | " accuracy_score_list.append(round(accuracy_score(y_test,pred),5))\n", 742 | " \n", 743 | "#准确率这些是不支持二分类以上的分类的\n", 744 | "# precision_score_list.append(precision_score(y_test,pred))\n", 745 | "# f1_score_list.append(f1_score(y_test,pred))\n", 746 | " \n", 747 | "# recall_score_list.append(f1_score(y_test,pred))\n", 748 | " \n", 749 | "# #获取标签与最后结果\n", 750 | "# fpr[i], tpr[i], _ = roc_curve(y_test, pred)\n", 751 | " \n", 752 | "# roc_auc[i] = auc(fpr[i], tpr[i])\n", 753 | " \n", 754 | "# fpr, tpr, thresholds = roc_curve(y_test, pred, pos_label=2)\n", 755 | "# # fpr,tpr,thresholds=roc_curve(y_test,y_0) #计算fpr,tpr,thresholds\n", 756 | "# # auc=roc_auc_score(y_test,y_0) #计算auc\n", 757 | "# #画曲线图\n", 758 | "# plt.figure()\n", 759 | "# plt.plot(fpr,tpr)\n", 760 | "# plt.title('$ROC curve$')\n", 761 | "# plt.show()\n", 762 | "\n", 763 | "# classification_report_list.append(classification_report(y_test,pred))\n", 764 | "# modelClass.append(pipeline) " 765 | ] 766 | }, 767 | { 768 | "cell_type": "code", 769 | "execution_count": 23, 770 | "metadata": {}, 771 | "outputs": [ 772 | { 773 | "name": "stderr", 774 | "output_type": "stream", 775 | "text": [ 776 | "C:\\anaconda\\lib\\site-packages\\sklearn\\feature_extraction\\text.py:385: UserWarning: Your stop_words may be inconsistent with your preprocessing. Tokenizing the stop words generated tokens ['ain', 'aren', 'couldn', 'didn', 'doesn', 'don', 'hadn', 'hasn', 'haven', 'isn', 'll', 'mon', 'shouldn', 've', 'wasn', 'weren', 'won', 'wouldn'] not in stop_words.\n", 777 | " 'stop_words.' % sorted(inconsistent))\n" 778 | ] 779 | }, 780 | { 781 | "name": "stdout", 782 | "output_type": "stream", 783 | "text": [ 784 | "======================================================================================================================================================\n" 785 | ] 786 | }, 787 | { 788 | "ename": "NameError", 789 | "evalue": "name 'pred' is not defined", 790 | "output_type": "error", 791 | "traceback": [ 792 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 793 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", 794 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 44\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'='\u001b[0m\u001b[1;33m*\u001b[0m\u001b[1;36m150\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 45\u001b[0m \u001b[1;32mif\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mj\u001b[0m\u001b[1;33m==\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 46\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'当前模型是:xgboost'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'当前文本向量化是'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'词袋'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"当前准确率是:\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mround\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mpred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 47\u001b[0m \u001b[1;32mif\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mj\u001b[0m\u001b[1;33m==\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 48\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'当前模型是:xgboost'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'当前文本向量化是'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'TF-IDF'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"当前准确率是:\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mround\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mpred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 795 | "\u001b[1;31mNameError\u001b[0m: name 'pred' is not defined" 796 | ] 797 | } 798 | ], 799 | "source": [ 800 | "import xgboost as xgb\n", 801 | "# 算法参数\n", 802 | "# 应该是用于分类\n", 803 | "params = {\n", 804 | " 'booster': 'gbtree',\n", 805 | " 'objective': 'multi:softmax',\n", 806 | " 'num_class': 3,\n", 807 | " 'gamma': 0.1,\n", 808 | " 'max_depth': 6,\n", 809 | " 'lambda': 2,\n", 810 | " 'subsample': 0.7,\n", 811 | " 'colsample_bytree': 0.75,\n", 812 | " 'min_child_weight': 3,\n", 813 | " 'silent': 0,\n", 814 | " 'eta': 0.1,\n", 815 | " 'seed': 1,\n", 816 | " 'nthread': 4,\n", 817 | "}\n", 818 | "\n", 819 | "\n", 820 | "for i in range(m_len):\n", 821 | " for j in range(textv_len):\n", 822 | "# pipeline =make_pipeline(textVectoriser[j], modelList[i]) \n", 823 | " train_vec=textVectoriser[j].fit_transform(x_train)\n", 824 | " test_vec=textVectoriser[j].transform(x_test)\n", 825 | " plst = params.items()\n", 826 | "\n", 827 | " dtrain = xgb.DMatrix(train_vec, y_train) # 生成数据集格式\n", 828 | "\n", 829 | " num_rounds = 500\n", 830 | "\n", 831 | " model = xgb.train(plst, dtrain, num_rounds) # xgboost模型训练\n", 832 | "\n", 833 | "\n", 834 | " # 对测试集进行预测\n", 835 | " dtest = xgb.DMatrix(test_vec)\n", 836 | "\n", 837 | " pred = model.predict(dtest)\n", 838 | "\n", 839 | "\n", 840 | " # 计算准确率\n", 841 | " accuracy = accuracy_score(y_test,y_pred)\n", 842 | "# print('当前是xgboost')\n", 843 | " print('='*150)\n", 844 | " if(j==0):\n", 845 | " print('当前模型是:xgboost','当前文本向量化是','词袋',\"当前准确率是:\",round(accuracy_score(y_test,pred),5))\n", 846 | " if(j==1):\n", 847 | " print('当前模型是:xgboost','当前文本向量化是','TF-IDF',\"当前准确率是:\",round(accuracy_score(y_test,pred),5))\n", 848 | "# fpr[i], tpr[i], _ = roc_curve(y_test, y_pred)\n", 849 | "# roc_auc[i] = auc(fpr[i], tpr[i])\n", 850 | " modelNamelist.append('xgboost')\n", 851 | " accuracy_score_list.append(round(accuracy,5))\n", 852 | " print(\"accuarcy: %.2f%%\" % (accuracy*100.0))" 853 | ] 854 | }, 855 | { 856 | "cell_type": "code", 857 | "execution_count": null, 858 | "metadata": { 859 | "collapsed": true 860 | }, 861 | "outputs": [], 862 | "source": [ 863 | "# result[\"模型名称\"]=modelNamelist\n", 864 | "# result[\"准确率\"]=accuracy_score_list" 865 | ] 866 | }, 867 | { 868 | "cell_type": "code", 869 | "execution_count": null, 870 | "metadata": { 871 | "collapsed": true 872 | }, 873 | "outputs": [], 874 | "source": [ 875 | "# result.to_csv('机器学习不同模型准确率.csv')" 876 | ] 877 | }, 878 | { 879 | "cell_type": "code", 880 | "execution_count": null, 881 | "metadata": { 882 | "collapsed": true 883 | }, 884 | "outputs": [], 885 | "source": [ 886 | "import matplotlib.pyplot as plt\n", 887 | "from pylab import *\n", 888 | "mpl.rcParams['font.sans-serif'] = ['SimHei']\n", 889 | "#plot根据列表绘制出有意义的图形,linewidth是图形线宽,可省略\n", 890 | "# plt.plot(input_values,squares,linewidth=5)\n", 891 | "plt.figure(figsize=(12,5),dpi=80)\n", 892 | "plt.bar(range(len(accuracy_score_list)),accuracy_score_list,linewidth=5)\n", 893 | "#设置图标标题\n", 894 | "plt.title(\"不同管道模型准确率\",fontsize = 24)\n", 895 | "#设置坐标轴标签\n", 896 | "plt.xlabel(\"模型类型\",fontsize = 0.2)\n", 897 | "plt.ylabel(\"准确率\",fontsize = 0.5)\n", 898 | "#设置刻度标记的大小\n", 899 | "plt.tick_params(axis='both',labelsize = 14)\n", 900 | "#打开matplotlib查看器,并显示绘制图形\n", 901 | "#这是一半\n", 902 | "plt.xticks(range(new_ticks),new_ticks)\n", 903 | "plt.show()" 904 | ] 905 | }, 906 | { 907 | "cell_type": "markdown", 908 | "metadata": {}, 909 | "source": [ 910 | "## 深度学习方案" 911 | ] 912 | }, 913 | { 914 | "cell_type": "code", 915 | "execution_count": 33, 916 | "metadata": { 917 | "collapsed": true 918 | }, 919 | "outputs": [], 920 | "source": [ 921 | "# 保证映射后结构一样\n", 922 | "from keras.preprocessing.sequence import pad_sequences\n", 923 | "# 文本预处理\n", 924 | "from keras.preprocessing.text import Tokenizer\n", 925 | "# 将类别映射成需要的格式\n", 926 | "from keras.utils.np_utils import to_categorical\n", 927 | "\n", 928 | "# 这个是连接层\n", 929 | "from keras.layers.merge import concatenate\n", 930 | "\n", 931 | "# 搭建模型\n", 932 | "from keras.models import Sequential, Model\n", 933 | "\n", 934 | "# 这个是层的搭建\n", 935 | "from keras.layers import Dense, Embedding, Activation, Input\n", 936 | "\n", 937 | "from keras.layers import Convolution1D, Flatten, Dropout, MaxPool1D\n", 938 | "\n", 939 | "from keras.layers import BatchNormalization\n", 940 | "from keras.layers import Conv1D,MaxPooling1D\n", 941 | "\n", 942 | "\n", 943 | "# 导入使用到的库\n", 944 | "from keras.preprocessing.sequence import pad_sequences\n", 945 | "from keras.preprocessing.text import Tokenizer\n", 946 | "from keras.layers.merge import concatenate\n", 947 | "from keras.models import Sequential, Model\n", 948 | "from keras.layers import Dense, Embedding, Activation, merge, Input, Lambda, Reshape\n", 949 | "from keras.layers import Convolution1D, Flatten, Dropout, MaxPool1D, GlobalAveragePooling1D\n", 950 | "from keras.layers import LSTM, GRU, TimeDistributed, Bidirectional\n", 951 | "from keras.utils.np_utils import to_categorical\n", 952 | "from keras import initializers\n", 953 | "from keras import backend as K\n", 954 | "from keras.engine.topology import Layer\n", 955 | "# from sklearn.naive_bayes import MultinomialNB\n", 956 | "# from sklearn.linear_model import SGDClassifier\n", 957 | "# from sklearn.feature_extraction.text import TfidfVectorizer\n", 958 | "# import pandas as pd\n", 959 | "# import numpy as np\n", 960 | "\n", 961 | "\n", 962 | "# 数据处理\n", 963 | "# from data_helper_ml import load_data_and_labels\n", 964 | "\n", 965 | "# 数据可视化\n", 966 | "import matplotlib.pyplot as plt" 967 | ] 968 | }, 969 | { 970 | "cell_type": "code", 971 | "execution_count": 25, 972 | "metadata": { 973 | "collapsed": true 974 | }, 975 | "outputs": [], 976 | "source": [ 977 | "# 文本标签分类数量\n", 978 | "NUM_CLASS=3\n", 979 | "# 输入维度\n", 980 | "INPUT_SIZE=64\n", 981 | "# # 序列对齐文本数据\n", 982 | "# LENTH=100" 983 | ] 984 | }, 985 | { 986 | "cell_type": "code", 987 | "execution_count": 26, 988 | "metadata": { 989 | "collapsed": true 990 | }, 991 | "outputs": [], 992 | "source": [ 993 | "# Tokenizer是一个用于向量化文本,或将文本转换为序列\n", 994 | "tokenizer = Tokenizer(filters='!\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~\\t\\n',lower=True,split=\" \")\n", 995 | "tokenizer.fit_on_texts(x_text)\n", 996 | "vocab = tokenizer.word_index\n", 997 | "\n", 998 | "#映射成数字\n", 999 | "x_train_word_ids = tokenizer.texts_to_sequences(x_train)\n", 1000 | "x_test_word_ids = tokenizer.texts_to_sequences(x_test)\n", 1001 | "#让他共同化\n", 1002 | "x_train_padded_seqs = pad_sequences(x_train_word_ids, maxlen=INPUT_SIZE)\n", 1003 | "x_test_padded_seqs = pad_sequences(x_test_word_ids, maxlen=INPUT_SIZE)" 1004 | ] 1005 | }, 1006 | { 1007 | "cell_type": "code", 1008 | "execution_count": 27, 1009 | "metadata": { 1010 | "collapsed": true 1011 | }, 1012 | "outputs": [], 1013 | "source": [ 1014 | "# CNN模型" 1015 | ] 1016 | }, 1017 | { 1018 | "cell_type": "code", 1019 | "execution_count": 28, 1020 | "metadata": { 1021 | "collapsed": true 1022 | }, 1023 | "outputs": [], 1024 | "source": [ 1025 | "def cnn():\n", 1026 | " model = Sequential()\n", 1027 | " model.add(Embedding(len(vocab) + 1, 300, input_length=INPUT_SIZE)) #使用Embeeding层将每个词编码转换为词向量\n", 1028 | " model.add(Conv1D(256, 5, padding='same'))\n", 1029 | " model.add(MaxPooling1D(3, 3, padding='same'))\n", 1030 | " model.add(Conv1D(128, 5, padding='same'))\n", 1031 | " model.add(MaxPooling1D(3, 3, padding='same'))\n", 1032 | " model.add(Conv1D(64, 3, padding='same'))\n", 1033 | " model.add(Flatten())\n", 1034 | " model.add(Dropout(0.1))\n", 1035 | " model.add(BatchNormalization()) # (批)规范化层\n", 1036 | " model.add(Dense(256, activation='relu'))\n", 1037 | " model.add(Dropout(0.1))\n", 1038 | " model.add(Dense(NUM_CLASS, activation='softmax'))\n", 1039 | " model.summary()" 1040 | ] 1041 | }, 1042 | { 1043 | "cell_type": "code", 1044 | "execution_count": 29, 1045 | "metadata": { 1046 | "collapsed": true 1047 | }, 1048 | "outputs": [], 1049 | "source": [ 1050 | "# textCNN" 1051 | ] 1052 | }, 1053 | { 1054 | "cell_type": "code", 1055 | "execution_count": 30, 1056 | "metadata": { 1057 | "collapsed": true 1058 | }, 1059 | "outputs": [], 1060 | "source": [ 1061 | "def textCNN():\n", 1062 | " main_input = Input(shape=(64,), dtype='float64')\n", 1063 | " # 词嵌入(使用预训练的词向量)\n", 1064 | " embedder = Embedding(len(vocab) + 1, 300, input_length=INPUT_SIZE, trainable=False)\n", 1065 | "\n", 1066 | " embed = embedder(main_input)\n", 1067 | "\n", 1068 | " # 词窗大小分别为3,4,5\n", 1069 | " cnn1 = Conv1D(256, 3, padding='same', strides=1, activation='relu')(embed)\n", 1070 | "\n", 1071 | " cnn1 = MaxPooling1D(pool_size=48)(cnn1)\n", 1072 | "\n", 1073 | " cnn2 = Conv1D(256, 4, padding='same', strides=1, activation='relu')(embed)\n", 1074 | "\n", 1075 | " cnn2 = MaxPooling1D(pool_size=47)(cnn2)\n", 1076 | "\n", 1077 | " cnn3 = Conv1D(256, 5, padding='same', strides=1, activation='relu')(embed)\n", 1078 | "\n", 1079 | " cnn3 = MaxPooling1D(pool_size=46)(cnn3)\n", 1080 | "\n", 1081 | " # 合并三个模型的输出向量\n", 1082 | " cnn = concatenate([cnn1, cnn2, cnn3], axis=-1)\n", 1083 | "\n", 1084 | " flat = Flatten()(cnn)\n", 1085 | "\n", 1086 | " drop = Dropout(0.2)(flat)\n", 1087 | "\n", 1088 | " main_output = Dense(NUM_CLASS, activation='softmax')(drop)\n", 1089 | "\n", 1090 | " model = Model(inputs=main_input, outputs=main_output)\n", 1091 | "\n", 1092 | " model.summary()" 1093 | ] 1094 | }, 1095 | { 1096 | "cell_type": "code", 1097 | "execution_count": null, 1098 | "metadata": { 1099 | "collapsed": true 1100 | }, 1101 | "outputs": [], 1102 | "source": [ 1103 | "# 使用Word2Vec词向量的TextCNN" 1104 | ] 1105 | }, 1106 | { 1107 | "cell_type": "code", 1108 | "execution_count": 32, 1109 | "metadata": { 1110 | "collapsed": true 1111 | }, 1112 | "outputs": [], 1113 | "source": [ 1114 | "# w2v_model=Word2Vec.load('sentiment_analysis/w2v_model.pkl')\n", 1115 | "# # 预训练的词向量中没有出现的词用0向量表示\n", 1116 | "# embedding_matrix = np.zeros((len(vocab) + 1, 300))\n", 1117 | "# for word, i in vocab.items():\n", 1118 | "# try:\n", 1119 | "# embedding_vector = w2v_model[str(word)]\n", 1120 | "# embedding_matrix[i] = embedding_vector\n", 1121 | "# except KeyError:\n", 1122 | "# continue\n", 1123 | " \n", 1124 | "# #构建TextCNN模型\n", 1125 | "# def TextCNN_model_2():\n", 1126 | "# # 模型结构:词嵌入-卷积池化*3-拼接-全连接-dropout-全连接\n", 1127 | "# main_input = Input(shape=(INPUT_SIZE,), dtype='float64')\n", 1128 | "# # 词嵌入(使用预训练的词向量)\n", 1129 | "# embedder = Embedding(len(vocab) + 1, 300, input_length=INPUT_SIZE, weights=[embedding_matrix], trainable=False)\n", 1130 | "# #embedder = Embedding(len(vocab) + 1, 300, input_length=50, trainable=False)\n", 1131 | "# embed = embedder(main_input)\n", 1132 | "# # 词窗大小分别为3,4,5\n", 1133 | "# cnn1 = Conv1D(256, 3, padding='same', strides=1, activation='relu')(embed)\n", 1134 | "# cnn1 = MaxPooling1D(pool_size=38)(cnn1)\n", 1135 | "# cnn2 = Conv1D(256, 4, padding='same', strides=1, activation='relu')(embed)\n", 1136 | "# cnn2 = MaxPooling1D(pool_size=37)(cnn2)\n", 1137 | "# cnn3 = Conv1D(256, 5, padding='same', strides=1, activation='relu')(embed)\n", 1138 | "# cnn3 = MaxPooling1D(pool_size=36)(cnn3)\n", 1139 | "# # 合并三个模型的输出向量\n", 1140 | "# cnn = concatenate([cnn1, cnn2, cnn3], axis=-1)\n", 1141 | "# flat = Flatten()(cnn)\n", 1142 | "# drop = Dropout(0.2)(flat)\n", 1143 | "# main_output = Dense(3, activation='softmax')(drop)\n", 1144 | "# model = Model(inputs=main_input, outputs=main_output)\n", 1145 | "# model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 1146 | " \n", 1147 | "# one_hot_labels = keras.utils.to_categorical(y_train, num_classes=NUM_CLASS) # 将标签转换为one-hot编码\n", 1148 | "# # model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=20)\n", 1149 | "# # #y_test_onehot = keras.utils.to_categorical(y_test, num_classes=3) # 将标签转换为one-hot编码\n", 1150 | "# # result = model.predict(x_test_padded_seqs) # 预测样本属于每个类别的概率\n", 1151 | "# # result_labels = np.argmax(result, axis=1) # 获得最大概率对应的标签\n", 1152 | "# # y_predict = list(map(str, result_labels))\n", 1153 | "# # print('准确率', metrics.accuracy_score(y_test, y_predict))\n", 1154 | "# # print('平均f1-score:', metrics.f1_score(y_test, y_predict, average='weighted'))" 1155 | ] 1156 | }, 1157 | { 1158 | "cell_type": "markdown", 1159 | "metadata": {}, 1160 | "source": [ 1161 | "# RNN" 1162 | ] 1163 | }, 1164 | { 1165 | "cell_type": "code", 1166 | "execution_count": 34, 1167 | "metadata": { 1168 | "collapsed": true 1169 | }, 1170 | "outputs": [], 1171 | "source": [ 1172 | "def rnn():\n", 1173 | " # 模型结构:词嵌入-LSTM-全连接\n", 1174 | " model = Sequential()\n", 1175 | " model.add(Embedding(len(vocab)+1, 300, input_length=INPUT_SIZE))\n", 1176 | " model.add(LSTM(256, dropout=0.2, recurrent_dropout=0.1))\n", 1177 | " model.add(Dense(NUM_CLASSM, activation='softmax'))\n", 1178 | " model.summary()" 1179 | ] 1180 | }, 1181 | { 1182 | "cell_type": "code", 1183 | "execution_count": 35, 1184 | "metadata": { 1185 | "collapsed": true 1186 | }, 1187 | "outputs": [], 1188 | "source": [ 1189 | "# Bi-GRU" 1190 | ] 1191 | }, 1192 | { 1193 | "cell_type": "code", 1194 | "execution_count": 36, 1195 | "metadata": { 1196 | "collapsed": true 1197 | }, 1198 | "outputs": [], 1199 | "source": [ 1200 | "def digru():\n", 1201 | " # 模型结构:词嵌入-双向GRU*2-全连接\n", 1202 | " model = Sequential()\n", 1203 | " # 64是序列号\n", 1204 | " model.add(Embedding(len(vocab)+1, 300, input_length=INPUT_SIZE))\n", 1205 | " model.add(Bidirectional(GRU(256, dropout=0.2, recurrent_dropout=0.1, return_sequences=True)))\n", 1206 | " model.add(Bidirectional(GRU(256, dropout=0.2, recurrent_dropout=0.1)))\n", 1207 | " model.add(Dense(NUM_CLASSM_C, activation='softmax'))\n", 1208 | " model.summary()" 1209 | ] 1210 | }, 1211 | { 1212 | "cell_type": "code", 1213 | "execution_count": null, 1214 | "metadata": { 1215 | "collapsed": true 1216 | }, 1217 | "outputs": [], 1218 | "source": [ 1219 | "# CNN+RNN" 1220 | ] 1221 | }, 1222 | { 1223 | "cell_type": "code", 1224 | "execution_count": null, 1225 | "metadata": { 1226 | "collapsed": true 1227 | }, 1228 | "outputs": [], 1229 | "source": [ 1230 | "##串联" 1231 | ] 1232 | }, 1233 | { 1234 | "cell_type": "code", 1235 | "execution_count": 37, 1236 | "metadata": { 1237 | "collapsed": true 1238 | }, 1239 | "outputs": [], 1240 | "source": [ 1241 | "def clstm():\n", 1242 | " # 模型结构:词嵌入-卷积池化-GRU*2-全连接\n", 1243 | " model = Sequential()\n", 1244 | " model.add(Embedding(len(vocab)+1, 300, input_length=INPUT_SIZE))\n", 1245 | " model.add(Convolution1D(256, 3, padding='same', strides = 1))\n", 1246 | " model.add(Activation('relu'))\n", 1247 | " model.add(MaxPool1D(pool_size=2))\n", 1248 | " model.add(GRU(256, dropout=0.2, recurrent_dropout=0.1, return_sequences = True))\n", 1249 | " model.add(GRU(256, dropout=0.2, recurrent_dropout=0.1))\n", 1250 | " model.add(Dense(NUM_CLASS, activation='softmax'))\n", 1251 | " model.summary()" 1252 | ] 1253 | }, 1254 | { 1255 | "cell_type": "code", 1256 | "execution_count": null, 1257 | "metadata": { 1258 | "collapsed": true 1259 | }, 1260 | "outputs": [], 1261 | "source": [ 1262 | "# 并联" 1263 | ] 1264 | }, 1265 | { 1266 | "cell_type": "code", 1267 | "execution_count": null, 1268 | "metadata": { 1269 | "collapsed": true 1270 | }, 1271 | "outputs": [], 1272 | "source": [ 1273 | "def blstm():\n", 1274 | " # 模型结构:词嵌入-卷积池化-全连接 ---拼接-全连接\n", 1275 | " # -双向GRU-全连接\n", 1276 | " main_input = Input(shape=(INPUT_SIZE,), dtype='float64')\n", 1277 | " embed = Embedding(len(vocab)+1, 300, input_length=INPUT_SIZE)(main_input)\n", 1278 | " cnn = Convolution1D(256, 3, padding='same', strides = 1, activation='relu')(embed)\n", 1279 | " cnn = MaxPool1D(pool_size=4)(cnn)\n", 1280 | " cnn = Flatten()(cnn)\n", 1281 | " cnn = Dense(256)(cnn)\n", 1282 | " rnn = Bidirectional(GRU(256, dropout=0.2, recurrent_dropout=0.1))(embed)\n", 1283 | " rnn = Dense(256)(rnn)\n", 1284 | " con = concatenate([cnn,rnn], axis=-1)\n", 1285 | " main_output = Dense(NUM_CLASS, activation='softmax')(con)\n", 1286 | " model = Model(inputs = main_input, outputs = main_output)" 1287 | ] 1288 | }, 1289 | { 1290 | "cell_type": "code", 1291 | "execution_count": 38, 1292 | "metadata": { 1293 | "collapsed": true 1294 | }, 1295 | "outputs": [], 1296 | "source": [ 1297 | "# fasttext" 1298 | ] 1299 | }, 1300 | { 1301 | "cell_type": "code", 1302 | "execution_count": null, 1303 | "metadata": { 1304 | "collapsed": true 1305 | }, 1306 | "outputs": [], 1307 | "source": [ 1308 | "# 模型结构:词嵌入(n-gram)-最大化池化-全连接\n", 1309 | "# 生成n-gram组合的词(以3为例)\n", 1310 | "ngram = 3\n", 1311 | "# 将n-gram词加入到词表\n", 1312 | "def create_ngram(sent, ngram_value):\n", 1313 | " return set(zip(*[sent[i:] for i in range(ngram_value)]))\n", 1314 | "ngram_set = set()\n", 1315 | "for sentence in x_train_padded_seqs:\n", 1316 | " for i in range(2, ngram+1):\n", 1317 | " set_of_ngram = create_ngram(sentence, i)\n", 1318 | " ngram_set.update(set_of_ngram)\n", 1319 | " \n", 1320 | "# 给n-gram词汇编码\n", 1321 | "start_index = len(vocab) + 2\n", 1322 | "token_indice = {v: k + start_index for k, v in enumerate(ngram_set)} # 给n-gram词汇编码\n", 1323 | "indice_token = {token_indice[k]: k for k in token_indice}\n", 1324 | "max_features = np.max(list(indice_token.keys())) + 1\n", 1325 | "# 将n-gram词加入到输入文本的末端\n", 1326 | "def add_ngram(sequences, token_indice, ngram_range):\n", 1327 | " new_sequences = []\n", 1328 | " for sent in sequences:\n", 1329 | " new_list = sent[:]\n", 1330 | " for i in range(len(new_list) - ngram_range + 1):\n", 1331 | " for ngram_value in range(2, ngram_range + 1):\n", 1332 | " ngram = tuple(new_list[i:i + ngram_value])\n", 1333 | " if ngram in token_indice:\n", 1334 | " new_list.append(token_indice[ngram])\n", 1335 | " new_sequences.append(new_list)\n", 1336 | " return new_sequences\n", 1337 | "\n", 1338 | "\n", 1339 | "x_train = add_ngram(x_train_word_ids, token_indice, ngram)\n", 1340 | "x_test = add_ngram(x_test_word_ids, token_indice, ngram)\n", 1341 | "# x_train = pad_sequences(x_train, maxlen=25)\n", 1342 | "# x_test = pad_sequences(x_test, maxlen=25)\n", 1343 | "x_train_padded_seqs = pad_sequences(x_train_word_ids, maxlen=INPUT_SIZE)\n", 1344 | "x_test_padded_seqs = pad_sequences(x_test_word_ids, maxlen=INPUT_SIZE)\n", 1345 | "def fasttext():\n", 1346 | " model = Sequential()\n", 1347 | " model.add(Embedding(max_features, 300, input_length=INPUT_SIZE))\n", 1348 | " model.add(GlobalAveragePooling1D())\n", 1349 | " model.add(Dense(NUM_CLASS, activation='softmax'))\n", 1350 | " model.summary()" 1351 | ] 1352 | }, 1353 | { 1354 | "cell_type": "code", 1355 | "execution_count": null, 1356 | "metadata": { 1357 | "collapsed": true 1358 | }, 1359 | "outputs": [], 1360 | "source": [ 1361 | "# keras_bert" 1362 | ] 1363 | }, 1364 | { 1365 | "cell_type": "code", 1366 | "execution_count": 91, 1367 | "metadata": { 1368 | "collapsed": true 1369 | }, 1370 | "outputs": [], 1371 | "source": [ 1372 | "import pandas as pd\n", 1373 | "import codecs, gc\n", 1374 | "import numpy as np\n", 1375 | "from sklearn.model_selection import KFold\n", 1376 | "from keras_bert import load_trained_model_from_checkpoint, Tokenizer\n", 1377 | "from keras.metrics import top_k_categorical_accuracy\n", 1378 | "from keras.layers import *\n", 1379 | "from keras.callbacks import *\n", 1380 | "from keras.models import Model\n", 1381 | "import keras.backend as K\n", 1382 | "from keras.optimizers import Adam\n", 1383 | "from keras.utils import to_categorical" 1384 | ] 1385 | }, 1386 | { 1387 | "cell_type": "code", 1388 | "execution_count": null, 1389 | "metadata": { 1390 | "collapsed": true 1391 | }, 1392 | "outputs": [], 1393 | "source": [ 1394 | "maxlen = INPUT_SIZE #设置序列长度为120,要保证序列长度不超过512\n", 1395 | " \n", 1396 | "#预训练好的模型\n", 1397 | "# 还是放在原有样本中\n", 1398 | "# path=os.path.join(dirpath,config_path)\n", 1399 | "# os.path.join()\n", 1400 | "config_path = 'bert_config.json'\n", 1401 | "# config_path=os.path.join(dirpath,config_path)\n", 1402 | "checkpoint_path = 'bert_model.ckpt'\n", 1403 | "# checkpoint_path=os.path.join(dirpath,checkpoint_path)\n", 1404 | "dict_path = 'vocab.txt'\n", 1405 | "# dict_path=os.path.join(dirpath,checkpoint_path)\n", 1406 | "#将词表中的词编号转换为字典\n", 1407 | "token_dict = {}\n", 1408 | "with codecs.open(dict_path, 'r', 'utf8') as reader:\n", 1409 | " for line in reader:\n", 1410 | " token = line.strip()\n", 1411 | " token_dict[token] = len(token_dict)\n", 1412 | "#重写tokenizer \n", 1413 | "class OurTokenizer(Tokenizer):\n", 1414 | " def _tokenize(self, text):\n", 1415 | " R = []\n", 1416 | " for c in text:\n", 1417 | " if c in self._token_dict:\n", 1418 | " R.append(c)\n", 1419 | " elif self._is_space(c):\n", 1420 | " R.append('[unused1]') # 用[unused1]来表示空格类字符\n", 1421 | " else:\n", 1422 | " R.append('[UNK]') # 不在列表的字符用[UNK]表示\n", 1423 | " return R\n", 1424 | "tokenizer = OurTokenizer(token_dict)\n", 1425 | "#让每条文本的长度相同,用0填充\n", 1426 | "def seq_padding(X, padding=0):\n", 1427 | " L = [len(x) for x in X]\n", 1428 | " ML = max(L)\n", 1429 | " return np.array([\n", 1430 | " np.concatenate([x, [padding] * (ML - len(x))]) if len(x) < ML else x for x in X\n", 1431 | " ])\n", 1432 | "#data_generator只是一种为了节约内存的数据方式\n", 1433 | "class data_generator:\n", 1434 | " def __init__(self, data, batch_size=32, shuffle=True):\n", 1435 | " self.data = data\n", 1436 | " self.batch_size = batch_size\n", 1437 | " self.shuffle = shuffle\n", 1438 | " self.steps = len(self.data) // self.batch_size\n", 1439 | " if len(self.data) % self.batch_size != 0:\n", 1440 | " self.steps += 1\n", 1441 | " \n", 1442 | " def __len__(self):\n", 1443 | " return self.steps\n", 1444 | " \n", 1445 | " def __iter__(self):\n", 1446 | " while True:\n", 1447 | " idxs = list(range(len(self.data)))\n", 1448 | " \n", 1449 | " if self.shuffle:\n", 1450 | " np.random.shuffle(idxs)\n", 1451 | " \n", 1452 | " X1, X2, Y = [], [], []\n", 1453 | " for i in idxs:\n", 1454 | " d = self.data[i]\n", 1455 | " text = d[0][:maxlen]\n", 1456 | " x1, x2 = tokenizer.encode(first=text)\n", 1457 | " y = d[1]\n", 1458 | " X1.append(x1)\n", 1459 | " X2.append(x2)\n", 1460 | " Y.append([y])\n", 1461 | " if len(X1) == self.batch_size or i == idxs[-1]:\n", 1462 | " X1 = seq_padding(X1)\n", 1463 | " X2 = seq_padding(X2)\n", 1464 | " Y = seq_padding(Y)\n", 1465 | " yield [X1, X2], Y[:, 0, :]\n", 1466 | " [X1, X2, Y] = [], [], []\n", 1467 | "#bert模型设置\n", 1468 | "def build_bert(nclass):\n", 1469 | " bert_model = load_trained_model_from_checkpoint(config_path, checkpoint_path, seq_len=None) #加载预训练模型\n", 1470 | " \n", 1471 | " for l in bert_model.layers:\n", 1472 | " l.trainable = True\n", 1473 | " \n", 1474 | " x1_in = Input(shape=(None,))\n", 1475 | " x2_in = Input(shape=(None,))\n", 1476 | " \n", 1477 | " x = bert_model([x1_in, x2_in])\n", 1478 | " x = Lambda(lambda x: x[:, 0])(x) # 取出[CLS]对应的向量用来做分类\n", 1479 | " p = Dense(nclass, activation='softmax')(x)\n", 1480 | " \n", 1481 | " model = Model([x1_in, x2_in], p)\n", 1482 | " model.compile(loss='categorical_crossentropy',\n", 1483 | " optimizer=Adam(1e-5), #用足够小的学习率\n", 1484 | " metrics=['accuracy', acc_top2])\n", 1485 | " print(model.summary())\n", 1486 | " return model\n", 1487 | "#计算top-k正确率,当预测值的前k个值中存在目标类别即认为预测正确 \n", 1488 | "def acc_top2(y_true, y_pred):\n", 1489 | " return top_k_categorical_accuracy(y_true, y_pred, k=2)\n", 1490 | "#训练数据、测试数据和标签转化为模型输入格式\n", 1491 | "DATA_LIST = []\n", 1492 | "for data_row in train_df1.iloc[:].itertuples():\n", 1493 | " DATA_LIST.append((xtrain, to_categorical(ytraim, NUM_CLASS)))\n", 1494 | "DATA_LIST = np.array(DATA_LIST)\n", 1495 | " \n", 1496 | "DATA_LIST_TEST = []\n", 1497 | "for data_row in test_df1.iloc[:].itertuples():\n", 1498 | " DATA_LIST_TEST.append((xtest, to_categorical(0, NUM_CLASS)))\n", 1499 | "DATA_LIST_TEST = np.array(DATA_LIST_TEST)\n", 1500 | "#交叉验证训练和测试模型\n", 1501 | "def run_cv(nfold, data, data_labels, data_test):\n", 1502 | " kf = KFold(n_splits=nfold, shuffle=True, random_state=520).split(data)\n", 1503 | " train_model_pred = np.zeros((len(data), 3))\n", 1504 | " test_model_pred = np.zeros((len(data_test), 3))\n", 1505 | " \n", 1506 | " for i, (train_fold, test_fold) in enumerate(kf):\n", 1507 | " X_train, X_valid, = data[train_fold, :], data[test_fold, :]\n", 1508 | " \n", 1509 | " model = build_bert(NUM_CLASS)\n", 1510 | " early_stopping = EarlyStopping(monitor='val_acc', patience=3) #早停法,防止过拟合\n", 1511 | " plateau = ReduceLROnPlateau(monitor=\"val_acc\", verbose=1, mode='max', factor=0.5, patience=2) #当评价指标不在提升时,减少学习率\n", 1512 | " checkpoint = ModelCheckpoint('./bert_dump/' + str(i) + '.hdf5', monitor='val_acc',verbose=2, save_best_only=True, mode='max', save_weights_only=True) #保存最好的模型\n", 1513 | " \n", 1514 | " train_D = data_generator(X_train, shuffle=True)\n", 1515 | " valid_D = data_generator(X_valid, shuffle=True)\n", 1516 | " test_D = data_generator(data_test, shuffle=False)\n", 1517 | " #模型训练\n", 1518 | " model.fit_generator(\n", 1519 | " train_D.__iter__(),\n", 1520 | " steps_per_epoch=len(train_D),\n", 1521 | " epochs=2,\n", 1522 | " validation_data=valid_D.__iter__(),\n", 1523 | " validation_steps=len(valid_D),\n", 1524 | " callbacks=[early_stopping, plateau, checkpoint],\n", 1525 | " )\n", 1526 | " \n", 1527 | " # model.load_weights('./bert_dump/' + str(i) + '.hdf5')\n", 1528 | " \n", 1529 | " # return model\n", 1530 | " train_model_pred[test_fold, :] = model.predict_generator(valid_D.__iter__(), steps=len(valid_D), verbose=1)\n", 1531 | " test_model_pred += model.predict_generator(test_D.__iter__(), steps=len(test_D), verbose=1)\n", 1532 | " \n", 1533 | " del model\n", 1534 | " gc.collect() #清理内存\n", 1535 | " K.clear_session() #clear_session就是清除一个session\n", 1536 | " # break\n", 1537 | " \n", 1538 | " return train_model_pred, test_model_pred" 1539 | ] 1540 | }, 1541 | { 1542 | "cell_type": "code", 1543 | "execution_count": null, 1544 | "metadata": { 1545 | "collapsed": true 1546 | }, 1547 | "outputs": [], 1548 | "source": [ 1549 | "# import os\n", 1550 | "\n", 1551 | "# print(os.getcwd()) #打印出当前工作路径\n", 1552 | "\n", 1553 | "# 很容易就崩溃了\n", 1554 | "#n折交叉验证\n", 1555 | "train_model_pred, test_model_pred = run_cv(2, DATA_LIST, None, DATA_LIST_TEST)" 1556 | ] 1557 | }, 1558 | { 1559 | "cell_type": "code", 1560 | "execution_count": 40, 1561 | "metadata": {}, 1562 | "outputs": [ 1563 | { 1564 | "name": "stdout", 1565 | "output_type": "stream", 1566 | "text": [ 1567 | "Model: \"sequential_1\"\n", 1568 | "_________________________________________________________________\n", 1569 | "Layer (type) Output Shape Param # \n", 1570 | "=================================================================\n", 1571 | "embedding_1 (Embedding) (None, 64, 300) 4594500 \n", 1572 | "_________________________________________________________________\n", 1573 | "conv1d_1 (Conv1D) (None, 64, 256) 384256 \n", 1574 | "_________________________________________________________________\n", 1575 | "max_pooling1d_1 (MaxPooling1 (None, 22, 256) 0 \n", 1576 | "_________________________________________________________________\n", 1577 | "conv1d_2 (Conv1D) (None, 22, 128) 163968 \n", 1578 | "_________________________________________________________________\n", 1579 | "max_pooling1d_2 (MaxPooling1 (None, 8, 128) 0 \n", 1580 | "_________________________________________________________________\n", 1581 | "conv1d_3 (Conv1D) (None, 8, 64) 24640 \n", 1582 | "_________________________________________________________________\n", 1583 | "flatten_1 (Flatten) (None, 512) 0 \n", 1584 | "_________________________________________________________________\n", 1585 | "dropout_1 (Dropout) (None, 512) 0 \n", 1586 | "_________________________________________________________________\n", 1587 | "batch_normalization_1 (Batch (None, 512) 2048 \n", 1588 | "_________________________________________________________________\n", 1589 | "dense_1 (Dense) (None, 256) 131328 \n", 1590 | "_________________________________________________________________\n", 1591 | "dropout_2 (Dropout) (None, 256) 0 \n", 1592 | "_________________________________________________________________\n", 1593 | "dense_2 (Dense) (None, 3) 771 \n", 1594 | "=================================================================\n", 1595 | "Total params: 5,301,511\n", 1596 | "Trainable params: 5,300,487\n", 1597 | "Non-trainable params: 1,024\n", 1598 | "_________________________________________________________________\n" 1599 | ] 1600 | } 1601 | ], 1602 | "source": [ 1603 | "model=cnn() #rnn" 1604 | ] 1605 | }, 1606 | { 1607 | "cell_type": "code", 1608 | "execution_count": 44, 1609 | "metadata": { 1610 | "collapsed": true 1611 | }, 1612 | "outputs": [], 1613 | "source": [ 1614 | "model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n", 1615 | "one_hot_labels = to_categorical(y_train, num_classes=NUM_CLASS) # 将标签转换为one-hot编码\n", 1616 | "# one_hot_labels=y_train\n", 1617 | "model.fit(x_train_padded_seqs, one_hot_labels,epochs=5, batch_size=800)\n", 1618 | "y_predict = model.predict_classes(x_test_padded_seqs) # 预测的是类别,结果就是类别号\n", 1619 | "y_predict = list(map(str, y_predict))" 1620 | ] 1621 | }, 1622 | { 1623 | "cell_type": "markdown", 1624 | "metadata": {}, 1625 | "source": [ 1626 | "# 外挂神器FastNlp方案" 1627 | ] 1628 | }, 1629 | { 1630 | "cell_type": "code", 1631 | "execution_count": 72, 1632 | "metadata": { 1633 | "collapsed": true 1634 | }, 1635 | "outputs": [], 1636 | "source": [ 1637 | "#导入Pytorch包\n", 1638 | "\n", 1639 | "import torch\n", 1640 | "\n", 1641 | "import torch.nn as nn\n", 1642 | "\n", 1643 | "from fastNLP.io.loader import CSVLoader\n", 1644 | "\n", 1645 | "dataset_loader = CSVLoader(headers=('raw_words','target'), sep='\\t')\n", 1646 | "testset_loader = CSVLoader( headers=['raw_words'],sep='\\t')" 1647 | ] 1648 | }, 1649 | { 1650 | "cell_type": "code", 1651 | "execution_count": 73, 1652 | "metadata": { 1653 | "collapsed": true 1654 | }, 1655 | "outputs": [], 1656 | "source": [ 1657 | "# 表示将CSV文件中每一行的第一项将填入'raw_words' field,第二项填入'target' field。\n", 1658 | "\n", 1659 | "# 其中项之间由'\\t'分割开来\n", 1660 | "\n", 1661 | "train_path=r'train.txt'\n", 1662 | "\n", 1663 | "test_path=r'test.txt'\n", 1664 | "\n", 1665 | "dataset = dataset_loader._load(train_path)\n", 1666 | "\n", 1667 | "testset = testset_loader._load(test_path)" 1668 | ] 1669 | }, 1670 | { 1671 | "cell_type": "code", 1672 | "execution_count": 74, 1673 | "metadata": {}, 1674 | "outputs": [ 1675 | { 1676 | "name": "stdout", 1677 | "output_type": "stream", 1678 | "text": [ 1679 | "0.39\n" 1680 | ] 1681 | } 1682 | ], 1683 | "source": [ 1684 | "# 将句子分成单词形式, 详见DataSet.apply()方法\n", 1685 | "\n", 1686 | "import jieba\n", 1687 | "\n", 1688 | "from itertools import chain\n", 1689 | "\n", 1690 | "print(jieba.__version__)\n", 1691 | "# from itertools import chain\n", 1692 | "\n", 1693 | "#     '''\n", 1694 | "\n", 1695 | "#     @params:\n", 1696 | "\n", 1697 | "#         data: 数据的列表,列表中的每个元素为 [文本字符串,0/1标签] 二元组\n", 1698 | "\n", 1699 | "#     @return: 切分词后的文本的列表,列表中的每个元素为切分后的词序列\n", 1700 | "\n", 1701 | "#     '''\n", 1702 | "\n", 1703 | "def get_tokenized(data,words=True):\n", 1704 | " def tokenizer(text):\n", 1705 | " return [tok for tok in jieba.cut(text, cut_all=False)]\n", 1706 | " if words:\n", 1707 | "\n", 1708 | " #按词语进行编码\n", 1709 | "\n", 1710 | " return tokenizer(data)\n", 1711 | "\n", 1712 | " else:\n", 1713 | "\n", 1714 | " #按字进行编码\n", 1715 | "\n", 1716 | " return [tokenizer(review) for review in data]\n" 1717 | ] 1718 | }, 1719 | { 1720 | "cell_type": "code", 1721 | "execution_count": 75, 1722 | "metadata": {}, 1723 | "outputs": [ 1724 | { 1725 | "name": "stdout", 1726 | "output_type": "stream", 1727 | "text": [ 1728 | "+-------------------------------------+--------+\n", 1729 | "| raw_words | target |\n", 1730 | "+-------------------------------------+--------+\n", 1731 | "| 这个 系统 很 好 用 , 用 不 习惯... | 0 |\n", 1732 | "| 我 说 你 信 吗 。 | 2 |\n", 1733 | "| 快递 特变 慢 , 价钱 比 别的 网... | 2 |\n", 1734 | "| 用 了 一个 来 月 , 发现 很多 问... | 1 |\n", 1735 | "| 早上 买 的 4888 草 下午 4500 。... | 1 |\n", 1736 | "| 一 被 蹂躏 了 N 次千苍百孔 的 破... | 1 |\n", 1737 | "| 我 很 满意 手机 很 好 | 0 |\n", 1738 | "| 没有 想象 中 的 那么 好 , 总是... | 2 |\n", 1739 | "| 昨天 买 的 , 今天 就 便宜 100 ... | 1 |\n", 1740 | "| 为什么 我 手机 今天 到 了 没有 ... | 2 |\n", 1741 | "| 特意 用 了 一段时间 才 来 评价 ... | 0 |\n", 1742 | "| 早就 想 买 了 , 送人 的 ! 物流... | 0 |\n", 1743 | "| 缺点 就是 手机 送来 的 时候 没电... | 2 |\n", 1744 | "| 送货 速度 快 , 手机 漂亮 , 大... | 0 |\n", 1745 | "| 晚上 下单 第二天 上午 就 到 , ... | 0 |\n", 1746 | "| 不错 打白条 来 的 为什么 凭 我 ... | 0 |\n", 1747 | "| 物流 这些 还 可以 , 专门 使用 ... | 2 |\n", 1748 | "| 检查 了 是 正品 挺 好 的 , 在 ... | 0 |\n", 1749 | "| 手机 是 用 过 的 打 客服 电话 一... | 1 |\n", 1750 | "| 收到 手机 使用 了 有 几天 了 ,... | 0 |\n", 1751 | "| 快递 很 给力 配送员 态度 也好 可... | 1 |\n", 1752 | "| 还好 吧 , 就是 信号 很差 , 在... | 2 |\n", 1753 | "| 手机 是 没 问题 , 可是 插头 不... | 1 |\n", 1754 | "| 挺 好 的 , 就是 太贵 了 , 苹果... | 2 |\n", 1755 | "| 完美 的 一次 购物 , 第二天 到 ... | 0 |\n", 1756 | "| 信号 不太好 , 心塞 。 | 2 |\n", 1757 | "| 先不说 手机 刚回来 第一天 就 黑... | 1 |\n", 1758 | "| 手机 还 行 , 就是 手机 网络 老... | 1 |\n", 1759 | "| 买 了 之后 没过几天 就 降价 , ... | 1 |\n", 1760 | "| 刚 买回来 , 很 好 用 | 0 |\n", 1761 | "| 屏幕 有 一个点 , 小 瑕疵 , 但... | 2 |\n", 1762 | "| ... | ... |\n", 1763 | "+-------------------------------------+--------+\n" 1764 | ] 1765 | } 1766 | ], 1767 | "source": [ 1768 | "print(dataset)" 1769 | ] 1770 | }, 1771 | { 1772 | "cell_type": "code", 1773 | "execution_count": 76, 1774 | "metadata": {}, 1775 | "outputs": [ 1776 | { 1777 | "name": "stderr", 1778 | "output_type": "stream", 1779 | "text": [ 1780 | "Building prefix dict from the default dictionary ...\n", 1781 | "WARNING: Logging before flag parsing goes to stderr.\n", 1782 | "I0702 18:13:51.150580 13512 __init__.py:114] Building prefix dict from the default dictionary ...\n", 1783 | "Dumping model to file cache C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\jieba.cache\n", 1784 | "I0702 18:13:52.657735 13512 __init__.py:148] Dumping model to file cache C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\jieba.cache\n", 1785 | "Loading model cost 1.706 seconds.\n", 1786 | "I0702 18:13:52.862597 13512 __init__.py:166] Loading model cost 1.706 seconds.\n", 1787 | "Prefix dict has been built successfully.\n", 1788 | "I0702 18:13:52.866595 13512 __init__.py:167] Prefix dict has been built successfully.\n" 1789 | ] 1790 | }, 1791 | { 1792 | "name": "stdout", 1793 | "output_type": "stream", 1794 | "text": [ 1795 | "+---------------------------+--------+--------------------------+\n", 1796 | "| raw_words | target | words |\n", 1797 | "+---------------------------+--------+--------------------------+\n", 1798 | "| 这个 系统 很 好 用 ,... | 0 | ['这个', ' ', '系统',... |\n", 1799 | "| 我 说 你 信 吗 。 | 2 | ['我', ' ', '说', ' '... |\n", 1800 | "| 快递 特变 慢 , 价钱 ... | 2 | ['快递', ' ', '特变',... |\n", 1801 | "| 用 了 一个 来 月 , 发... | 1 | ['用', ' ', '了', ' '... |\n", 1802 | "| 早上 买 的 4888 草 下... | 1 | ['早上', ' ', '买', '... |\n", 1803 | "| 一 被 蹂躏 了 N 次千苍... | 1 | ['一', ' ', '被', ' '... |\n", 1804 | "| 我 很 满意 手机 很 好... | 0 | ['我', ' ', '很', ' '... |\n", 1805 | "| 没有 想象 中 的 那么 ... | 2 | ['没有', ' ', '想象',... |\n", 1806 | "| 昨天 买 的 , 今天 就... | 1 | ['昨天', ' ', '买', '... |\n", 1807 | "| 为什么 我 手机 今天 到... | 2 | ['为什么', ' ', '我',... |\n", 1808 | "| 特意 用 了 一段时间 才... | 0 | ['特意', ' ', '用', '... |\n", 1809 | "| 早就 想 买 了 , 送人... | 0 | ['早就', ' ', '想', '... |\n", 1810 | "| 缺点 就是 手机 送来 的... | 2 | ['缺点', ' ', '就是',... |\n", 1811 | "| 送货 速度 快 , 手机 ... | 0 | ['送货', ' ', '速度',... |\n", 1812 | "| 晚上 下单 第二天 上午... | 0 | ['晚上', ' ', '下单',... |\n", 1813 | "| 不错 打白条 来 的 为什... | 0 | ['不错', ' ', '打白条... |\n", 1814 | "| 物流 这些 还 可以 , ... | 2 | ['物流', ' ', '这些',... |\n", 1815 | "| 检查 了 是 正品 挺 好... | 0 | ['检查', ' ', '了', '... |\n", 1816 | "| 手机 是 用 过 的 打 客... | 1 | ['手机', ' ', '是', '... |\n", 1817 | "| 收到 手机 使用 了 有 ... | 0 | ['收到', ' ', '手机',... |\n", 1818 | "| 快递 很 给力 配送员 态... | 1 | ['快递', ' ', '很', '... |\n", 1819 | "| 还好 吧 , 就是 信号 ... | 2 | ['还好', ' ', '吧', '... |\n", 1820 | "| 手机 是 没 问题 , 可... | 1 | ['手机', ' ', '是', '... |\n", 1821 | "| 挺 好 的 , 就是 太贵... | 2 | ['挺', ' ', '好', ' '... |\n", 1822 | "| 完美 的 一次 购物 , ... | 0 | ['完美', ' ', '的', '... |\n", 1823 | "| 信号 不太好 , 心塞 。... | 2 | ['信号', ' ', '不太好... |\n", 1824 | "| 先不说 手机 刚回来 第... | 1 | ['先不说', ' ', '手机... |\n", 1825 | "| 手机 还 行 , 就是 手... | 1 | ['手机', ' ', '还', '... |\n", 1826 | "| 买 了 之后 没过几天 就... | 1 | ['买', ' ', '了', ' '... |\n", 1827 | "| 刚 买回来 , 很 好 用... | 0 | ['刚', ' ', '买回来',... |\n", 1828 | "| 屏幕 有 一个点 , 小 ... | 2 | ['屏幕', ' ', '有', '... |\n", 1829 | "| ... | ... | ... |\n", 1830 | "+---------------------------+--------+--------------------------+\n" 1831 | ] 1832 | } 1833 | ], 1834 | "source": [ 1835 | "dataset.apply(lambda ins:get_tokenized(ins['raw_words']), new_field_name='words', is_input=True)\n", 1836 | "print(dataset)" 1837 | ] 1838 | }, 1839 | { 1840 | "cell_type": "code", 1841 | "execution_count": 77, 1842 | "metadata": {}, 1843 | "outputs": [ 1844 | { 1845 | "name": "stdout", 1846 | "output_type": "stream", 1847 | "text": [ 1848 | "+----------------------+--------+----------------------+---------+\n", 1849 | "| raw_words | target | words | seq_len |\n", 1850 | "+----------------------+--------+----------------------+---------+\n", 1851 | "| 这个 系统 很 好 ... | 0 | ['这个', ' ', '系... | 21 |\n", 1852 | "| 我 说 你 信 吗 。... | 2 | ['我', ' ', '说'... | 11 |\n", 1853 | "| 快递 特变 慢 , ... | 2 | ['快递', ' ', '特... | 33 |\n", 1854 | "| 用 了 一个 来 月... | 1 | ['用', ' ', '了'... | 124 |\n", 1855 | "| 早上 买 的 4888 ... | 1 | ['早上', ' ', '买... | 15 |\n", 1856 | "| 一 被 蹂躏 了 N ... | 1 | ['一', ' ', '被'... | 35 |\n", 1857 | "| 我 很 满意 手机 ... | 0 | ['我', ' ', '很'... | 11 |\n", 1858 | "| 没有 想象 中 的 ... | 2 | ['没有', ' ', '想... | 27 |\n", 1859 | "| 昨天 买 的 , 今... | 1 | ['昨天', ' ', '买... | 25 |\n", 1860 | "| 为什么 我 手机 今... | 2 | ['为什么', ' ', ... | 15 |\n", 1861 | "| 特意 用 了 一段时... | 0 | ['特意', ' ', '用... | 45 |\n", 1862 | "| 早就 想 买 了 ,... | 0 | ['早就', ' ', '想... | 29 |\n", 1863 | "| 缺点 就是 手机 送... | 2 | ['缺点', ' ', '就... | 18 |\n", 1864 | "| 送货 速度 快 , ... | 0 | ['送货', ' ', '速... | 27 |\n", 1865 | "| 晚上 下单 第二天... | 0 | ['晚上', ' ', '下... | 19 |\n", 1866 | "| 不错 打白条 来 的... | 0 | ['不错', ' ', '打... | 27 |\n", 1867 | "| 物流 这些 还 可以... | 2 | ['物流', ' ', '这... | 69 |\n", 1868 | "| 检查 了 是 正品 ... | 0 | ['检查', ' ', '了... | 35 |\n", 1869 | "| 手机 是 用 过 的... | 1 | ['手机', ' ', '是... | 31 |\n", 1870 | "| 收到 手机 使用 了... | 0 | ['收到', ' ', '手... | 96 |\n", 1871 | "| 快递 很 给力 配送... | 1 | ['快递', ' ', '很... | 40 |\n", 1872 | "| 还好 吧 , 就是 ... | 2 | ['还好', ' ', '吧... | 35 |\n", 1873 | "| 手机 是 没 问题 ... | 1 | ['手机', ' ', '是... | 35 |\n", 1874 | "| 挺 好 的 , 就是... | 2 | ['挺', ' ', '好'... | 25 |\n", 1875 | "| 完美 的 一次 购物... | 0 | ['完美', ' ', '的... | 25 |\n", 1876 | "| 信号 不太好 , 心... | 2 | ['信号', ' ', '不... | 9 |\n", 1877 | "| 先不说 手机 刚回... | 1 | ['先不说', ' ', ... | 86 |\n", 1878 | "| 手机 还 行 , 就... | 1 | ['手机', ' ', '还... | 41 |\n", 1879 | "| 买 了 之后 没过几... | 1 | ['买', ' ', '了'... | 44 |\n", 1880 | "| 刚 买回来 , 很 ... | 0 | ['刚', ' ', '买回... | 11 |\n", 1881 | "| 屏幕 有 一个点 ,... | 2 | ['屏幕', ' ', '有... | 17 |\n", 1882 | "| ... | ... | ... | ... |\n", 1883 | "+----------------------+--------+----------------------+---------+\n" 1884 | ] 1885 | } 1886 | ], 1887 | "source": [ 1888 | "dataset.apply(lambda ins: len(ins['words']) ,new_field_name='seq_len', is_input=True)\n", 1889 | "\n", 1890 | "print(dataset)" 1891 | ] 1892 | }, 1893 | { 1894 | "cell_type": "code", 1895 | "execution_count": 78, 1896 | "metadata": {}, 1897 | "outputs": [ 1898 | { 1899 | "name": "stdout", 1900 | "output_type": "stream", 1901 | "text": [ 1902 | "+----------------------+--------+----------------------+---------+\n", 1903 | "| raw_words | target | words | seq_len |\n", 1904 | "+----------------------+--------+----------------------+---------+\n", 1905 | "| 这个 系统 很 好 ... | 0 | ['这个', ' ', '系... | 21 |\n", 1906 | "| 我 说 你 信 吗 。... | 2 | ['我', ' ', '说'... | 11 |\n", 1907 | "| 快递 特变 慢 , ... | 2 | ['快递', ' ', '特... | 33 |\n", 1908 | "| 用 了 一个 来 月... | 1 | ['用', ' ', '了'... | 124 |\n", 1909 | "| 早上 买 的 4888 ... | 1 | ['早上', ' ', '买... | 15 |\n", 1910 | "| 一 被 蹂躏 了 N ... | 1 | ['一', ' ', '被'... | 35 |\n", 1911 | "| 我 很 满意 手机 ... | 0 | ['我', ' ', '很'... | 11 |\n", 1912 | "| 没有 想象 中 的 ... | 2 | ['没有', ' ', '想... | 27 |\n", 1913 | "| 昨天 买 的 , 今... | 1 | ['昨天', ' ', '买... | 25 |\n", 1914 | "| 为什么 我 手机 今... | 2 | ['为什么', ' ', ... | 15 |\n", 1915 | "| 特意 用 了 一段时... | 0 | ['特意', ' ', '用... | 45 |\n", 1916 | "| 早就 想 买 了 ,... | 0 | ['早就', ' ', '想... | 29 |\n", 1917 | "| 缺点 就是 手机 送... | 2 | ['缺点', ' ', '就... | 18 |\n", 1918 | "| 送货 速度 快 , ... | 0 | ['送货', ' ', '速... | 27 |\n", 1919 | "| 晚上 下单 第二天... | 0 | ['晚上', ' ', '下... | 19 |\n", 1920 | "| 不错 打白条 来 的... | 0 | ['不错', ' ', '打... | 27 |\n", 1921 | "| 物流 这些 还 可以... | 2 | ['物流', ' ', '这... | 69 |\n", 1922 | "| 检查 了 是 正品 ... | 0 | ['检查', ' ', '了... | 35 |\n", 1923 | "| 手机 是 用 过 的... | 1 | ['手机', ' ', '是... | 31 |\n", 1924 | "| 收到 手机 使用 了... | 0 | ['收到', ' ', '手... | 96 |\n", 1925 | "| 快递 很 给力 配送... | 1 | ['快递', ' ', '很... | 40 |\n", 1926 | "| 还好 吧 , 就是 ... | 2 | ['还好', ' ', '吧... | 35 |\n", 1927 | "| 手机 是 没 问题 ... | 1 | ['手机', ' ', '是... | 35 |\n", 1928 | "| 挺 好 的 , 就是... | 2 | ['挺', ' ', '好'... | 25 |\n", 1929 | "| 完美 的 一次 购物... | 0 | ['完美', ' ', '的... | 25 |\n", 1930 | "| 信号 不太好 , 心... | 2 | ['信号', ' ', '不... | 9 |\n", 1931 | "| 先不说 手机 刚回... | 1 | ['先不说', ' ', ... | 86 |\n", 1932 | "| 手机 还 行 , 就... | 1 | ['手机', ' ', '还... | 41 |\n", 1933 | "| 买 了 之后 没过几... | 1 | ['买', ' ', '了'... | 44 |\n", 1934 | "| 刚 买回来 , 很 ... | 0 | ['刚', ' ', '买回... | 11 |\n", 1935 | "| 屏幕 有 一个点 ,... | 2 | ['屏幕', ' ', '有... | 17 |\n", 1936 | "| ... | ... | ... | ... |\n", 1937 | "+----------------------+--------+----------------------+---------+\n" 1938 | ] 1939 | } 1940 | ], 1941 | "source": [ 1942 | "dataset.apply(lambda x: int(x['target']), new_field_name='target', is_target=True)\n", 1943 | "print(dataset)" 1944 | ] 1945 | }, 1946 | { 1947 | "cell_type": "code", 1948 | "execution_count": 79, 1949 | "metadata": {}, 1950 | "outputs": [ 1951 | { 1952 | "name": "stdout", 1953 | "output_type": "stream", 1954 | "text": [ 1955 | "+---------------------------+--------------------------+---------+\n", 1956 | "| raw_words | words | seq_len |\n", 1957 | "+---------------------------+--------------------------+---------+\n", 1958 | "| 有 三百 的 优惠卷 买 ... | ['有', ' ', '三百', '... | 25 |\n", 1959 | "| 充电 那么 慢 , 比 正... | ['充电', ' ', '那么',... | 49 |\n", 1960 | "| 很 不错 。 特地 用 了... | ['很', ' ', '不错', '... | 27 |\n", 1961 | "| 用 了 一段时间 还 可以... | ['用', ' ', '了', ' '... | 25 |\n", 1962 | "| 说 实在 的 手机 不如 ... | ['说', ' ', '实在', '... | 23 |\n", 1963 | "| 最 差劲 的 一次 购物 ... | ['最', ' ', '差劲', '... | 209 |\n", 1964 | "| 刚刚 收到 手机 , 12 ... | ['刚刚', ' ', '收到',... | 104 |\n", 1965 | "| 还 可以 快递 也 给力 | ['还', ' ', '可以', '... | 9 |\n", 1966 | "| 好 , 售后服务 到位 ,... | ['好', ' ', ',', ' '... | 25 |\n", 1967 | "| 速度 很快 , 第二天 早... | ['速度', ' ', '很快',... | 77 |\n", 1968 | "| 手机 有 多处 刮伤 | ['手机', ' ', '有', '... | 7 |\n", 1969 | "| 今天 刚到 , 感觉 也 ... | ['今天', ' ', '刚到',... | 42 |\n", 1970 | "| 手机 阴阳屏 , 退货 了... | ['手机', ' ', '阴阳',... | 28 |\n", 1971 | "| 送人 的 应该 还 可以 ... | ['送人', ' ', '的', '... | 11 |\n", 1972 | "| 拆箱 防盗 标签 是 错位... | ['拆箱', ' ', '防盗',... | 71 |\n", 1973 | "| 外 包装盒 里 很大 没有... | ['外', ' ', '包装盒',... | 209 |\n", 1974 | "| 快递 小哥 挺快 就是 手... | ['快递', ' ', '小哥',... | 41 |\n", 1975 | "| 京东 真的 是 打着 618... | ['京东', ' ', '真的',... | 75 |\n", 1976 | "| 在 京东 买 了 不 知道... | ['在', ' ', '京东', '... | 71 |\n", 1977 | "| 耗电量 太快 了 , 电池... | ['耗电量', ' ', '太快... | 15 |\n", 1978 | "| 其他 还好 , 就是 电 ... | ['其他', ' ', '还好',... | 13 |\n", 1979 | "| 反应 慢 , 拍照 不好 ... | ['反应', ' ', '慢', '... | 15 |\n", 1980 | "| 怎么 说 呢 , 可能 也... | ['怎么', ' ', '说', '... | 241 |\n", 1981 | "| 快递 发货 快 一天 到 ... | ['快递', ' ', '发货',... | 19 |\n", 1982 | "| 非常 好用 , 京东 就是... | ['非常', ' ', '好用',... | 23 |\n", 1983 | "| 目前 正在 使用 , 暂时... | ['目前', ' ', '正在',... | 83 |\n", 1984 | "| 耳机 是 坏 的 ! | ['耳机', ' ', '是', '... | 9 |\n", 1985 | "| 买 了 几天 降价 200 差... | ['买', ' ', '了', ' '... | 11 |\n", 1986 | "| 还 不错 , 就是 有 就... | ['还', ' ', '不错', '... | 29 |\n", 1987 | "| 4156 135 4 6515615341... | ['4156', ' ', '135', ... | 15 |\n", 1988 | "| 无语 , 买 到 三星 芯... | ['无', '语', ' ', ',... | 12 |\n", 1989 | "| ... | ... | ... |\n", 1990 | "+---------------------------+--------------------------+---------+\n" 1991 | ] 1992 | } 1993 | ], 1994 | "source": [ 1995 | "#testset.apply(lambda ins: list(chain.from_iterable(get_tokenized(ins['raw_words']))), new_field_name='words', is_input=True)\n", 1996 | "\n", 1997 | "testset.apply(lambda ins: get_tokenized(ins['raw_words']), new_field_name='words', is_input=True)\n", 1998 | "\n", 1999 | "testset.apply(lambda ins: len(ins['words']) ,new_field_name='seq_len',is_input=True)\n", 2000 | "print(testset)" 2001 | ] 2002 | }, 2003 | { 2004 | "cell_type": "code", 2005 | "execution_count": 80, 2006 | "metadata": { 2007 | "collapsed": true 2008 | }, 2009 | "outputs": [], 2010 | "source": [ 2011 | "###\n", 2012 | "\n", 2013 | "from fastNLP import Vocabulary\n", 2014 | "\n", 2015 | "#将DataSet按照ratio的比例拆分,返回两个DataSet\n", 2016 | "\n", 2017 | "#ratio (float) -- 0