├── 2.神经网络模型初探 ├── correct_toy_output.txt └── toy.py ├── 3.word2vec ├── tfword2vec_basic │ ├── 280.txt │ ├── main.py │ └── stop_words.txt └── word2vec_中的数学原理详解.pdf ├── README.md └── git使用步骤.txt /2.神经网络模型初探/correct_toy_output.txt: -------------------------------------------------------------------------------- 1 | ====================== 2 | Iteration 0 3 | Forward 4 | 5 | h1 6 | [ 0.4 1. ] 7 | h2 8 | [ 0.08 0.98] 9 | h3 10 | [ 0.07982977 0.7530659 ] 11 | h4 12 | [ 0.67323614 0.90846486 0.12666425] 13 | h5 14 | [ 0.35160147 0.44484552 0.20355301] 15 | ce 16 | 0.810028205586 17 | 18 | Backward 19 | 20 | djdh4 21 | [ 0.35160147 -0.55515448 0.20355301] 22 | djdh3, djd_output_embed, djd_output_embed_b 23 | [-0.63472917 0.11473483] 24 | [[ 0.02806826 0.26477908] 25 | [-0.04431785 -0.41806791] 26 | [ 0.01624959 0.15328883]] 27 | [ 0.35160147 -0.55515448 0.20355301] 28 | djdh2 29 | [-0.63068417 0.04966776] 30 | djdh1, djd_linear_w, djd_linear_b 31 | [-0.74688745 0.27214077] 32 | [[-0.25227367 -0.63068417] 33 | [ 0.0198671 0.04966776]] 34 | [-0.63068417 0.04966776] 35 | djd_input_embed 36 | [[-0.74688745 0.27214077] 37 | [ 0. 0. ] 38 | [ 0. 0. ]] 39 | 40 | ====================== 41 | Iteration 1 42 | Forward 43 | 44 | h1 45 | [ 0.47468875 0.97278592] 46 | h2 47 | [ 0.25362305 1.0041916 ] 48 | h3 49 | [ 0.24832134 0.76334891] 50 | h4 51 | [ 0.45895854 1.06953212 0.04571328] 52 | h5 53 | [ 0.28547063 0.52569054 0.18883883] 54 | ce 55 | 0.643042557813 56 | 57 | Backward 58 | 59 | djdh4 60 | [ 0.28547063 -0.47430946 0.18883883] 61 | djdh3, djd_output_embed, djd_output_embed_b 62 | [-0.53505622 0.05580096] 63 | [[ 0.07088845 0.21791369] 64 | [-0.11778116 -0.36206361] 65 | [ 0.04689271 0.14414991]] 66 | [ 0.28547063 -0.47430946 0.18883883] 67 | djdh2 68 | [-0.50206278 0.02328565] 69 | djdh1, djd_linear_w, djd_linear_b 70 | [-0.60901534 0.21102117] 71 | [[-0.23832355 -0.48839961] 72 | [ 0.01105344 0.02265195]] 73 | [-0.50206278 0.02328565] 74 | djd_input_embed 75 | [[-0.60901534 0.21102117] 76 | [ 0. 0. ] 77 | [ 0. 0. ]] 78 | 79 | ====================== 80 | Iteration 2 81 | Forward 82 | 83 | h1 84 | [ 0.53559028 0.95168381] 85 | h2 86 | [ 0.39864276 1.03355073] 87 | h3 88 | [ 0.37878706 0.77532851] 89 | h4 90 | [ 0.29166134 1.20875139 -0.02326262] 91 | h5 92 | [ 0.23630364 0.59123149 0.17246488] 93 | ce 94 | 0.525547654366 95 | 96 | Backward 97 | 98 | djdh4 99 | [ 0.23630364 -0.40876851 0.17246488] 100 | djdh3, djd_output_embed, djd_output_embed_b 101 | [-0.46160397 0.01798706] 102 | [[ 0.08950876 0.18321295] 103 | [-0.15483622 -0.31692988] 104 | [ 0.06532746 0.13371694]] 105 | [ 0.23630364 -0.40876851 0.17246488] 106 | djdh2 107 | [-0.3953732 0.00717442] 108 | djdh1, djd_linear_w, djd_linear_b 109 | [-0.49160698 0.16218968] 110 | [[-0.21175804 -0.37627027] 111 | [ 0.00384255 0.00682778]] 112 | [-0.3953732 0.00717442] 113 | djd_input_embed 114 | [[-0.49160698 0.16218968] 115 | [ 0. 0. ] 116 | [ 0. 0. ]] 117 | 118 | ====================== 119 | Iteration 3 120 | Forward 121 | 122 | h1 123 | [ 0.58475098 0.93546484] 124 | h2 125 | [ 0.51814558 1.06316035] 126 | h3 127 | [ 0.4762675 0.78687043] 128 | h4 129 | [ 0.16189121 1.32918457 -0.0820368 ] 130 | h5 131 | [ 0.20012697 0.64306473 0.1568083 ] 132 | ce 133 | 0.441509888985 134 | 135 | Backward 136 | 137 | djdh4 138 | [ 0.20012697 -0.35693527 0.1568083 ] 139 | djdh3, djd_output_embed, djd_output_embed_b 140 | [-0.40704232 -0.00622444] 141 | [[ 0.09531397 0.157474 ] 142 | [-0.16999667 -0.28086181] 143 | [ 0.0746827 0.12338781]] 144 | [ 0.20012697 -0.35693527 0.1568083 ] 145 | djdh2 146 | [-0.31471261 -0.00237048] 147 | djdh1, djd_linear_w, djd_linear_b 148 | [-0.40058771 0.12604965] 149 | [[-0.18402851 -0.29440258] 150 | [-0.00138614 -0.00221751]] 151 | [-0.31471261 -0.00237048] 152 | djd_input_embed 153 | [[-0.40058771 0.12604965] 154 | [ 0. 0. ] 155 | [ 0. 0. ]] 156 | 157 | ====================== 158 | Iteration 4 159 | Forward 160 | 161 | h1 162 | [ 0.62480975 0.92285987] 163 | h2 164 | [ 0.61721292 1.09105634] 165 | h3 166 | [ 0.54918452 0.79726337] 167 | h4 168 | [ 0.0594988 1.43442058 -0.13283772] 169 | h5 170 | [ 0.17301647 0.68423989 0.14274364] 171 | ce 172 | 0.379446701525 173 | 174 | Backward 175 | 176 | djdh4 177 | [ 0.17301647 -0.31576011 0.14274364] 178 | djdh3, djd_output_embed, djd_output_embed_b 179 | [-0.36532869 -0.02198575] 180 | [[ 0.09501797 0.13793969] 181 | [-0.17341056 -0.25174397] 182 | [ 0.0783926 0.11380427]] 183 | [ 0.17301647 -0.31576011 0.14274364] 184 | djdh2 185 | [-0.25514423 -0.00801097] 186 | djdh1, djd_linear_w, djd_linear_b 187 | [-0.33182461 0.09976652] 188 | [[-0.1594166 -0.23546237] 189 | [-0.00500533 -0.00739301]] 190 | [-0.25514423 -0.00801097] 191 | djd_input_embed 192 | [[-0.33182461 0.09976652] 193 | [ 0. 0. ] 194 | [ 0. 0. ]] 195 | 196 | ====================== 197 | Iteration 5 198 | Forward 199 | 200 | h1 201 | [ 0.65799221 0.91288322] 202 | h2 203 | [ 0.70045792 1.11668701] 204 | h3 205 | [ 0.60465835 0.80641346] 206 | h4 207 | [-0.0233232 1.52750957 -0.177476 ] 208 | h5 209 | [ 0.15214826 0.71743922 0.13041252] 210 | ce 211 | 0.332067049882 212 | 213 | Backward 214 | 215 | djdh4 216 | [ 0.15214826 -0.28256078 0.13041252] 217 | djdh3, djd_output_embed, djd_output_embed_b 218 | [-0.33239006 -0.03244003] 219 | [[ 0.09199772 0.12269441] 220 | [-0.17085274 -0.22786082] 221 | [ 0.07885502 0.10516641]] 222 | [ 0.15214826 -0.28256078 0.13041252] 223 | djdh2 224 | [-0.21086436 -0.01134419] 225 | djdh1, djd_linear_w, djd_linear_b 226 | [-0.27965571 0.08048521] 227 | [[-0.1387471 -0.19249453] 228 | [-0.00746439 -0.01035592]] 229 | [-0.21086436 -0.01134419] 230 | djd_input_embed 231 | [[-0.27965571 0.08048521] 232 | [ 0. 0. ] 233 | [ 0. 0. ]] 234 | 235 | ====================== 236 | Iteration 6 237 | Forward 238 | 239 | h1 240 | [ 0.68595778 0.9048347 ] 241 | h2 242 | [ 0.77146279 1.1400561 ] 243 | h3 244 | [ 0.64777923 0.81443298] 245 | h4 246 | [-0.09199579 1.61080335 -0.2172728 ] 247 | h5 248 | [ 0.1356568 0.74465966 0.11968354] 249 | ce 250 | 0.294827998467 251 | 252 | Backward 253 | 254 | djdh4 255 | [ 0.1356568 -0.25534034 0.11968354] 256 | djdh3, djd_output_embed, djd_output_embed_b 257 | [-0.30562182 -0.03946992] 258 | [[ 0.08787566 0.11048337] 259 | [-0.16540417 -0.2079576 ] 260 | [ 0.07752851 0.09747423]] 261 | [ 0.1356568 -0.25534034 0.11968354] 262 | djdh2 263 | [-0.17737742 -0.01328948] 264 | djdh1, djd_linear_w, djd_linear_b 265 | [-0.23946922 0.06608467] 266 | [[-0.12167342 -0.16049725] 267 | [-0.00911602 -0.01202478]] 268 | [-0.17737742 -0.01328948] 269 | djd_input_embed 270 | [[-0.23946922 0.06608467] 271 | [ 0. 0. ] 272 | [ 0. 0. ]] 273 | 274 | ====================== 275 | Iteration 7 276 | Forward 277 | 278 | h1 279 | [ 0.7099047 0.89822623] 280 | h2 281 | [ 0.83288715 1.16135476] 282 | h3 283 | [ 0.68202322 0.8214809 ] 284 | h4 285 | [-0.15020305 1.68607872 -0.25317904] 286 | h5 287 | [ 0.12231939 0.76733033 0.11035028] 288 | ce 289 | 0.26483789187 290 | 291 | Backward 292 | 293 | djdh4 294 | [ 0.12231939 -0.23266967 0.11035028] 295 | djdh3, djd_output_embed, djd_output_embed_b 296 | [-0.28334637 -0.04422537] 297 | [[ 0.08342467 0.10048305] 298 | [-0.15868612 -0.19113369] 299 | [ 0.07526145 0.09065064]] 300 | [ 0.12231939 -0.23266967 0.11035028] 301 | djdh2 302 | [-0.1515462 -0.01438072] 303 | djdh1, djd_linear_w, djd_linear_b 304 | [-0.2079469 0.05511269] 305 | [[-0.10758336 -0.13612277] 306 | [-0.01020894 -0.01291714]] 307 | [-0.1515462 -0.01438072] 308 | djd_input_embed 309 | [[-0.2079469 0.05511269] 310 | [ 0. 0. ] 311 | [ 0. 0. ]] 312 | 313 | ====================== 314 | Iteration 8 315 | Forward 316 | 317 | h1 318 | [ 0.73069939 0.89271496] 319 | h2 320 | [ 0.88669513 1.18081829] 321 | h3 322 | [ 0.70975755 0.82770946] 323 | h4 324 | [-0.2004724 1.75468739 -0.2858907 ] 325 | h5 326 | [ 0.1113192 0.7864755 0.1022053] 327 | ce 328 | 0.240193706682 329 | 330 | Backward 331 | 332 | djdh4 333 | [ 0.1113192 -0.2135245 0.1022053] 334 | djdh3, djd_output_embed, djd_output_embed_b 335 | [-0.2644516 -0.04743041] 336 | [[ 0.07900965 0.09213996] 337 | [-0.15155063 -0.17673625] 338 | [ 0.07254098 0.08459629]] 339 | [ 0.1113192 -0.2135245 0.1022053] 340 | djdh2 341 | [-0.13123258 -0.0149357 ] 342 | djdh1, djd_linear_w, djd_linear_b 343 | [-0.18277528 0.04659065] 344 | [[-0.09589156 -0.11715328] 345 | [-0.0109135 -0.01333332]] 346 | [-0.13123258 -0.0149357 ] 347 | djd_input_embed 348 | [[-0.18277528 0.04659065] 349 | [ 0. 0. ] 350 | [ 0. 0. ]] 351 | 352 | ====================== 353 | Iteration 9 354 | Forward 355 | 356 | h1 357 | [ 0.74897692 0.8880559 ] 358 | h2 359 | [ 0.9343511 1.19867385] 360 | h3 361 | [ 0.73261608 0.83324966] 362 | h4 363 | [-0.24457377 1.81767375 -0.31593004] 364 | h5 365 | [ 0.10209547 0.80284036 0.09506417] 366 | ce 367 | 0.219599386357 368 | 369 | Backward 370 | 371 | djdh4 372 | [ 0.10209547 -0.19715964 0.09506417] 373 | djdh3, djd_output_embed, djd_output_embed_b 374 | [-0.24817447 -0.04955528] 375 | [[ 0.07479678 0.08507102] 376 | [-0.14444232 -0.1642832 ] 377 | [ 0.06964554 0.07921218]] 378 | [ 0.10209547 -0.19715964 0.09506417] 379 | djdh2 380 | [-0.1149727 -0.0151488] 381 | djdh1, djd_linear_w, djd_linear_b 382 | [-0.16234077 0.03985394] 383 | [[-0.0861119 -0.10210218] 384 | [-0.0113461 -0.01345298]] 385 | [-0.1149727 -0.0151488] 386 | djd_input_embed 387 | [[-0.16234077 0.03985394] 388 | [ 0. 0. ] 389 | [ 0. 0. ]] -------------------------------------------------------------------------------- /2.神经网络模型初探/toy.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | import numpy as np 3 | 4 | # #整数向量化 5 | def lookup(w, i): # [[1,2,3],[2,3,4],[3,4,5]] 0 输出 [1,2,3] 6 | return w[i] 7 | 8 | 9 | def d_lookup(djdy, w, i): 10 | djdw = np.zeros_like(w) # 全0矩阵 11 | djdw[i] = djdy # 第i行为djdy 12 | return djdw 13 | 14 | 15 | def linear(w, b, x): 16 | return np.dot(x, w) + b # 线性变换 矩阵相乘加偏置 17 | 18 | 19 | def d_linear(djdy, w, b, x): # 线性变换中的导数 20 | djdb = djdy 21 | djdw = np.dot(x.reshape(-1, 1), djdy.reshape(1, -1)).T #np.dot(x.T,djdy) 为何这个不行 22 | djdx = np.dot(djdy, w.T) 23 | return djdx, djdw, djdb 24 | 25 | 26 | def tanh(x): 27 | return np.tanh(x) 28 | 29 | 30 | def d_tanh(djdy, y): # tanh 导数为 (1-y**2) 错误一 31 | djdx = djdy * (1.0-y*y)#(1 - y) * y 32 | return djdx 33 | 34 | 35 | def softmax(x): # x是一个列表例如[4,-4,3] 36 | ex = np.exp(x) 37 | ex = ex / np.sum(ex) 38 | return ex 39 | 40 | 41 | def cross_entropy(x, i): 42 | # 默认y是one hot 43 | # 即yi为1,其他全0.公式-yi*log(yj) 44 | # 等于-log(yj) 45 | return -np.log(x[i]) 46 | 47 | 48 | # 不断减小 49 | 50 | # ce和softmax放一起 求导 51 | def d_cross_entropy_softmax(softmax_y, i): 52 | djdx = softmax_y 53 | djdx[i] -= 1 # i=j 减1 54 | return djdx 55 | 56 | 57 | # 以上是基本操作定义 58 | # --------------------------------------------------------------------------------------------- 59 | # 以下是forward过程 60 | 61 | def forward(input_embed, linear_w, linear_b, output_embed, output_embed_b, pre_word, current_word): 62 | print "Forward" 63 | print 64 | 65 | # forward 66 | h1 = lookup(input_embed, pre_word) # word embagagine 67 | print "h1" 68 | print h1 69 | 70 | h2 = linear(linear_w, linear_b, h1) # w,b,x 71 | print "h2" 72 | print h2 73 | 74 | h3 = tanh(h2) 75 | print "h3" 76 | print h3 77 | 78 | h4 = linear(output_embed.T, output_embed_b, h3) # output_embed 也是一种线性变换 79 | #变成一个三维向量 80 | print "h4" 81 | print h4 82 | 83 | h5 = softmax(h4) 84 | print "h5" 85 | print h5 86 | 87 | ce = cross_entropy(h5, current_word) 88 | print "ce" 89 | print ce 90 | 91 | return h1, h2, h3, h4, h5, ce 92 | 93 | 94 | def backward(input_embed, linear_w, linear_b, output_embed, output_embed_b, pre_word, current_word, h1, h2, h3, h4, h5): 95 | print "Backward" 96 | print 97 | 98 | # backward 99 | # dj/d_softmax_y 100 | #djdh4 = d_cross_entropy_softmax(h4, current_word)#错误二 应该用h5 101 | djdh4 = d_cross_entropy_softmax(h5, current_word) 102 | print "djdh4" 103 | print djdh4 104 | 105 | djdh3, djd_output_embed, djd_output_embed_b = d_linear(djdh4, output_embed.T, output_embed_b, h3) 106 | print "djdh3, djd_output_embed, djd_output_embed_b" 107 | print djdh3 108 | print djd_output_embed 109 | print djd_output_embed_b 110 | 111 | #djdh2 = d_tanh(djdh3, h2)#错误三 y是h3而非h2 112 | djdh2 = d_tanh(djdh3, h3) 113 | print "djdh2" 114 | print djdh2 115 | 116 | djdh1, djd_linear_w, djd_linear_b = d_linear(djdh2, linear_w, linear_b, h1) 117 | print "djdh1, djd_linear_w, djd_linear_b" 118 | print djdh1 119 | print djd_linear_w 120 | print djd_linear_b 121 | 122 | djd_input_embed = d_lookup(djdh1, input_embed, pre_word) 123 | print "djd_input_embed" 124 | print djd_input_embed 125 | 126 | return djdh4, djdh3, djdh2, djdh1, djd_input_embed, djd_linear_w, djd_linear_b, djd_output_embed, djd_output_embed_b 127 | 128 | 129 | def update_weight(input_embed, linear_w, linear_b, output_embed, output_embed_b, djd_input_embed, djd_linear_w, 130 | djd_linear_b, djd_output_embed, djd_output_embed_b, eta): 131 | input_embed += - eta * djd_input_embed 132 | linear_w += -eta * djd_linear_w 133 | linear_b += -eta * djd_linear_b#问题4 未对b更新 134 | output_embed += -eta * djd_output_embed#问题5 -号 135 | output_embed_b += -eta * djd_output_embed_b 136 | return input_embed, linear_w, linear_b, output_embed, output_embed_b 137 | 138 | 139 | def main(): 140 | # Define the matrix 141 | input_embed = np.array([[0.4, 1], [0.2, 0.4], [-0.3, 2]]) 142 | linear_w = np.array([[1.2, 0.2], [-0.4, 0.4]]) 143 | linear_b = np.array([0, 0.5]) 144 | output_embed = np.array([[-1, 1], [0.4, 0.5], [-0.3, 0.2]]) 145 | output_embed_b = np.array([0, 0.5, 0]) 146 | pre_word = 0 # a 147 | current_word = 1 # b 148 | eta = 0.1 149 | 150 | # forward 151 | for i in xrange(10): 152 | print "======================" 153 | print "Iteration ", i 154 | 155 | h1, h2, h3, h4, h5, ce = forward(input_embed, linear_w, linear_b, output_embed, output_embed_b, pre_word, 156 | current_word) 157 | print 158 | 159 | #backward 160 | djdh4,djdh3,djdh2,djdh1,djd_input_embed,djd_linear_w,djd_linear_b,djd_output_embed, djd_output_embed_b = backward(input_embed,linear_w,linear_b,output_embed, output_embed_b, pre_word, current_word,h1,h2,h3,h4,h5) 161 | print 162 | 163 | #update the parameters 164 | input_embed,linear_w,linear_b,output_embed, output_embed_b = \ 165 | update_weight(input_embed,linear_w,linear_b,output_embed, output_embed_b, 166 | djd_input_embed,djd_linear_w,djd_linear_b,djd_output_embed, djd_output_embed_b,eta) 167 | 168 | 169 | if __name__ == "__main__": 170 | main() -------------------------------------------------------------------------------- /3.word2vec/tfword2vec_basic/280.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renpengcheng-github/nlp/2a34e5eea5b0c7602eca7dd7b7c51cfd65cc72b8/3.word2vec/tfword2vec_basic/280.txt -------------------------------------------------------------------------------- /3.word2vec/tfword2vec_basic/main.py: -------------------------------------------------------------------------------- 1 | import tensorflow as tf 2 | import numpy as np 3 | import math 4 | import collections 5 | import pickle as pkl 6 | from pprint import pprint 7 | from pymongo import MongoClient 8 | import re 9 | import jieba 10 | import os.path as path 11 | import os 12 | 13 | class word2vec(): 14 | def __init__(self, 15 | vocab_list=None, 16 | embedding_size=200, 17 | win_len=3, # 单边窗口长 18 | num_sampled=1000, 19 | learning_rate=1.0, 20 | logdir='/tmp/simple_word2vec', 21 | model_path= None 22 | ): 23 | 24 | # 获得模型的基本参数 25 | self.batch_size = None # 一批中数据个数, 目前是根据情况来的 26 | if model_path!=None: 27 | self.load_model(model_path) 28 | else: 29 | # model parameters 30 | assert type(vocab_list)==list 31 | self.vocab_list = vocab_list 32 | self.vocab_size = vocab_list.__len__() 33 | self.embedding_size = embedding_size 34 | self.win_len = win_len 35 | self.num_sampled = num_sampled 36 | self.learning_rate = learning_rate 37 | self.logdir = logdir 38 | 39 | self.word2id = {} # word => id 的映射 40 | for i in range(self.vocab_size): 41 | self.word2id[self.vocab_list[i]] = i 42 | 43 | # train times 44 | self.train_words_num = 0 # 训练的单词对数 45 | self.train_sents_num = 0 # 训练的句子数 46 | self.train_times_num = 0 # 训练的次数(一次可以有多个句子) 47 | 48 | # train loss records 49 | self.train_loss_records = collections.deque(maxlen=10) # 保存最近10次的误差 50 | self.train_loss_k10 = 0 51 | 52 | self.build_graph() 53 | self.init_op() 54 | if model_path!=None: 55 | tf_model_path = os.path.join(model_path,'tf_vars') 56 | self.saver.restore(self.sess,tf_model_path) 57 | 58 | def init_op(self): 59 | self.sess = tf.Session(graph=self.graph) 60 | self.sess.run(self.init) 61 | self.summary_writer = tf.train.SummaryWriter(self.logdir, self.sess.graph) 62 | 63 | def build_graph(self): 64 | self.graph = tf.Graph() 65 | with self.graph.as_default(): 66 | self.train_inputs = tf.placeholder(tf.int32, shape=[self.batch_size]) 67 | self.train_labels = tf.placeholder(tf.int32, shape=[self.batch_size, 1]) 68 | self.embedding_dict = tf.Variable( 69 | tf.random_uniform([self.vocab_size,self.embedding_size],-1.0,1.0) 70 | ) 71 | self.nce_weight = tf.Variable(tf.truncated_normal([self.vocab_size, self.embedding_size], 72 | stddev=1.0/math.sqrt(self.embedding_size))) 73 | self.nce_biases = tf.Variable(tf.zeros([self.vocab_size])) 74 | 75 | # 将输入序列向量化 76 | embed = tf.nn.embedding_lookup(self.embedding_dict, self.train_inputs) # batch_size 77 | 78 | # 得到NCE损失 79 | self.loss = tf.reduce_mean( 80 | tf.nn.nce_loss( 81 | weights = self.nce_weight, 82 | biases = self.nce_biases, 83 | labels = self.train_labels, 84 | inputs = embed, 85 | num_sampled = self.num_sampled, 86 | num_classes = self.vocab_size 87 | ) 88 | ) 89 | 90 | # tensorboard 相关 91 | tf.scalar_summary('loss',self.loss) # 让tensorflow记录参数 92 | 93 | # 根据 nce loss 来更新梯度和embedding 94 | self.train_op = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(self.loss) # 训练操作 95 | 96 | # 计算与指定若干单词的相似度 97 | self.test_word_id = tf.placeholder(tf.int32,shape=[None]) 98 | vec_l2_model = tf.sqrt( # 求各词向量的L2模 99 | tf.reduce_sum(tf.square(self.embedding_dict),1,keep_dims=True) 100 | ) 101 | 102 | avg_l2_model = tf.reduce_mean(vec_l2_model) 103 | tf.scalar_summary('avg_vec_model',avg_l2_model) 104 | 105 | self.normed_embedding = self.embedding_dict / vec_l2_model 106 | # self.embedding_dict = norm_vec # 对embedding向量正则化 107 | test_embed = tf.nn.embedding_lookup(self.normed_embedding, self.test_word_id) 108 | self.similarity = tf.matmul(test_embed, self.normed_embedding, transpose_b=True) 109 | 110 | # 变量初始化 111 | self.init = tf.global_variables_initializer() 112 | 113 | self.merged_summary_op = tf.merge_all_summaries() 114 | 115 | self.saver = tf.train.Saver() 116 | 117 | def train_by_sentence(self, input_sentence=[]): 118 | # input_sentence: [sub_sent1, sub_sent2, ...] 119 | # 每个sub_sent是一个单词序列,例如['这次','大选','让'] 120 | sent_num = input_sentence.__len__() 121 | batch_inputs = [] 122 | batch_labels = [] 123 | for sent in input_sentence: 124 | for i in range(sent.__len__()): 125 | start = max(0,i-self.win_len) 126 | end = min(sent.__len__(),i+self.win_len+1) 127 | for index in range(start,end): 128 | if index == i: 129 | continue 130 | else: 131 | input_id = self.word2id.get(sent[i]) 132 | label_id = self.word2id.get(sent[index]) 133 | if not (input_id and label_id): 134 | continue 135 | batch_inputs.append(input_id) 136 | batch_labels.append(label_id) 137 | if len(batch_inputs)==0: 138 | return 139 | batch_inputs = np.array(batch_inputs,dtype=np.int32) 140 | batch_labels = np.array(batch_labels,dtype=np.int32) 141 | batch_labels = np.reshape(batch_labels,[batch_labels.__len__(),1]) 142 | 143 | feed_dict = { 144 | self.train_inputs: batch_inputs, 145 | self.train_labels: batch_labels 146 | } 147 | _, loss_val, summary_str = self.sess.run([self.train_op,self.loss,self.merged_summary_op], feed_dict=feed_dict) 148 | 149 | # train loss 150 | self.train_loss_records.append(loss_val) 151 | # self.train_loss_k10 = sum(self.train_loss_records)/self.train_loss_records.__len__() 152 | self.train_loss_k10 = np.mean(self.train_loss_records) 153 | if self.train_sents_num % 1000 == 0 : 154 | self.summary_writer.add_summary(summary_str,self.train_sents_num) 155 | print("{a} sentences dealed, loss: {b}" 156 | .format(a=self.train_sents_num,b=self.train_loss_k10)) 157 | 158 | # train times 159 | self.train_words_num += batch_inputs.__len__() 160 | self.train_sents_num += input_sentence.__len__() 161 | self.train_times_num += 1 162 | 163 | def cal_similarity(self,test_word_id_list,top_k=10): 164 | sim_matrix = self.sess.run(self.similarity, feed_dict={self.test_word_id:test_word_id_list}) 165 | sim_mean = np.mean(sim_matrix) 166 | sim_var = np.mean(np.square(sim_matrix-sim_mean)) 167 | test_words = [] 168 | near_words = [] 169 | for i in range(test_word_id_list.__len__()): 170 | test_words.append(self.vocab_list[test_word_id_list[i]]) 171 | nearst_id = (-sim_matrix[i,:]).argsort()[1:top_k+1] 172 | nearst_word = [self.vocab_list[x] for x in nearst_id] 173 | near_words.append(nearst_word) 174 | return test_words,near_words,sim_mean,sim_var 175 | 176 | def save_model(self, save_path): 177 | 178 | if os.path.isfile(save_path): 179 | raise RuntimeError('the save path should be a dir') 180 | if not os.path.exists(save_path): 181 | os.mkdir(save_path) 182 | 183 | # 记录模型各参数 184 | model = {} 185 | var_names = ['vocab_size', # int model parameters 186 | 'vocab_list', # list 187 | 'learning_rate', # int 188 | 'word2id', # dict 189 | 'embedding_size', # int 190 | 'logdir', # str 191 | 'win_len', # int 192 | 'num_sampled', # int 193 | 'train_words_num', # int train info 194 | 'train_sents_num', # int 195 | 'train_times_num', # int 196 | 'train_loss_records', # int train loss 197 | 'train_loss_k10', # int 198 | ] 199 | for var in var_names: 200 | model[var] = eval('self.'+var) 201 | 202 | param_path = os.path.join(save_path,'params.pkl') 203 | if os.path.exists(param_path): 204 | os.remove(param_path) 205 | with open(param_path,'wb') as f: 206 | pkl.dump(model,f) 207 | 208 | # 记录tf模型 209 | tf_path = os.path.join(save_path,'tf_vars') 210 | if os.path.exists(tf_path): 211 | os.remove(tf_path) 212 | self.saver.save(self.sess,tf_path) 213 | 214 | def load_model(self, model_path): 215 | if not os.path.exists(model_path): 216 | raise RuntimeError('file not exists') 217 | param_path = os.path.join(model_path,'params.pkl') 218 | with open(param_path,'rb') as f: 219 | model = pkl.load(f) 220 | self.vocab_list = model['vocab_list'] 221 | self.vocab_size = model['vocab_size'] 222 | self.logdir = model['logdir'] 223 | self.word2id = model['word2id'] 224 | self.embedding_size = model['embedding_size'] 225 | self.learning_rate = model['learning_rate'] 226 | self.win_len = model['win_len'] 227 | self.num_sampled = model['num_sampled'] 228 | self.train_words_num = model['train_words_num'] 229 | self.train_sents_num = model['train_sents_num'] 230 | self.train_times_num = model['train_times_num'] 231 | self.train_loss_records = model['train_loss_records'] 232 | self.train_loss_k10 = model['train_loss_k10'] 233 | 234 | if __name__=='__main__': 235 | 236 | # step 1 读取停用词 237 | stop_words = [] 238 | with open('stop_words.txt') as f: 239 | line = f.readline() 240 | while line: 241 | stop_words.append(line[:-1]) 242 | line = f.readline() 243 | stop_words = set(stop_words) 244 | print('停用词读取完毕,共{n}个单词'.format(n=len(stop_words))) 245 | 246 | # step2 读取文本,预处理,分词,得到词典 247 | raw_word_list = [] 248 | sentence_list = [] 249 | with open('280.txt',encoding='gbk') as f: 250 | line = f.readline() 251 | while line: 252 | while '\n' in line: 253 | line = line.replace('\n','') 254 | while ' ' in line: 255 | line = line.replace(' ','') 256 | if len(line)>0: # 如果句子非空 257 | raw_words = list(jieba.cut(line,cut_all=False)) 258 | dealed_words = [] 259 | for word in raw_words: 260 | if word not in stop_words and word not in ['qingkan520','www','com','http']: 261 | raw_word_list.append(word) 262 | dealed_words.append(word) 263 | sentence_list.append(dealed_words) 264 | line = f.readline() 265 | word_count = collections.Counter(raw_word_list) 266 | print('文本中总共有{n1}个单词,不重复单词数{n2},选取前30000个单词进入词典' 267 | .format(n1=len(raw_word_list),n2=len(word_count))) 268 | word_count = word_count.most_common(30000) 269 | word_list = [x[0] for x in word_count] 270 | 271 | # 创建模型,训练 272 | w2v = word2vec(vocab_list=word_list, # 词典集 273 | embedding_size=200, 274 | win_len=2, 275 | learning_rate=1, 276 | num_sampled=100, # 负采样个数 277 | logdir='/tmp/280') # tensorboard记录地址 278 | test_word = ['萧炎','灵魂','火焰','长老','尊者','皱眉'] 279 | test_id = [word_list.index(x) for x in test_word] 280 | num_steps = 100000 281 | for i in range(num_steps): 282 | sent = sentence_list[i%len(sentence_list)] 283 | w2v.train_by_sentence([sent]) 284 | 285 | 286 | -------------------------------------------------------------------------------- /3.word2vec/tfword2vec_basic/stop_words.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 | 0 27 | 1 28 | 2 29 | 3 30 | 4 31 | 5 32 | 6 33 | 7 34 | 8 35 | 9 36 | : 37 | :// 38 | :: 39 | ; 40 | < 41 | = 42 | > 43 | >> 44 | ? 45 | @ 46 | A 47 | Lex 48 | [ 49 | \ 50 | ] 51 | ^ 52 | _ 53 | ` 54 | exp 55 | sub 56 | sup 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 | ②c 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 | 具体来说 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 | 分期 556 | 分期分批 557 | 切 558 | 切不可 559 | 切切 560 | 切勿 561 | 切莫 562 | 则 563 | 则甚 564 | 刚 565 | 刚好 566 | 刚巧 567 | 刚才 568 | 初 569 | 别 570 | 别人 571 | 别处 572 | 别是 573 | 别的 574 | 别管 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 | 本 1208 | 本人 1209 | 本地 1210 | 本着 1211 | 本身 1212 | 权时 1213 | 来 1214 | 来不及 1215 | 来得及 1216 | 来看 1217 | 来着 1218 | 来自 1219 | 来讲 1220 | 来说 1221 | 极 1222 | 极为 1223 | 极了 1224 | 极其 1225 | 极力 1226 | 极大 1227 | 极度 1228 | 极端 1229 | 构成 1230 | 果然 1231 | 果真 1232 | 某 1233 | 某个 1234 | 某些 1235 | 某某 1236 | 根据 1237 | 根本 1238 | 格外 1239 | 梆 1240 | 概 1241 | 次第 1242 | 欢迎 1243 | 欤 1244 | 正值 1245 | 正在 1246 | 正如 1247 | 正巧 1248 | 正常 1249 | 正是 1250 | 此 1251 | 此中 1252 | 此后 1253 | 此地 1254 | 此处 1255 | 此外 1256 | 此时 1257 | 此次 1258 | 此间 1259 | 殆 1260 | 毋宁 1261 | 每 1262 | 每个 1263 | 每天 1264 | 每年 1265 | 每当 1266 | 每时每刻 1267 | 每每 1268 | 每逢 1269 | 比 1270 | 比及 1271 | 比如 1272 | 比如说 1273 | 比方 1274 | 比照 1275 | 比起 1276 | 比较 1277 | 毕竟 1278 | 毫不 1279 | 毫无 1280 | 毫无例外 1281 | 毫无保留地 1282 | 汝 1283 | 沙沙 1284 | 没 1285 | 没奈何 1286 | 没有 1287 | 沿 1288 | 沿着 1289 | 注意 1290 | 活 1291 | 深入 1292 | 清楚 1293 | 满 1294 | 满足 1295 | 漫说 1296 | 焉 1297 | 然 1298 | 然则 1299 | 然后 1300 | 然後 1301 | 然而 1302 | 照 1303 | 照着 1304 | 牢牢 1305 | 特别是 1306 | 特殊 1307 | 特点 1308 | 犹且 1309 | 犹自 1310 | 独 1311 | 独自 1312 | 猛然 1313 | 猛然间 1314 | 率尔 1315 | 率然 1316 | 现代 1317 | 现在 1318 | 理应 1319 | 理当 1320 | 理该 1321 | 瑟瑟 1322 | 甚且 1323 | 甚么 1324 | 甚或 1325 | 甚而 1326 | 甚至 1327 | 甚至于 1328 | 用 1329 | 用来 1330 | 甫 1331 | 甭 1332 | 由 1333 | 由于 1334 | 由是 1335 | 由此 1336 | 由此可见 1337 | 略 1338 | 略为 1339 | 略加 1340 | 略微 1341 | 白 1342 | 白白 1343 | 的 1344 | 的确 1345 | 的话 1346 | 皆可 1347 | 目前 1348 | 直到 1349 | 直接 1350 | 相似 1351 | 相信 1352 | 相反 1353 | 相同 1354 | 相对 1355 | 相对而言 1356 | 相应 1357 | 相当 1358 | 相等 1359 | 省得 1360 | 看 1361 | 看上去 1362 | 看出 1363 | 看到 1364 | 看来 1365 | 看样子 1366 | 看看 1367 | 看见 1368 | 看起来 1369 | 真是 1370 | 真正 1371 | 眨眼 1372 | 着 1373 | 着呢 1374 | 矣 1375 | 矣乎 1376 | 矣哉 1377 | 知道 1378 | 砰 1379 | 确定 1380 | 碰巧 1381 | 社会主义 1382 | 离 1383 | 种 1384 | 积极 1385 | 移动 1386 | 究竟 1387 | 穷年累月 1388 | 突出 1389 | 突然 1390 | 窃 1391 | 立 1392 | 立刻 1393 | 立即 1394 | 立地 1395 | 立时 1396 | 立马 1397 | 竟 1398 | 竟然 1399 | 竟而 1400 | 第 1401 | 第二 1402 | 等 1403 | 等到 1404 | 等等 1405 | 策略地 1406 | 简直 1407 | 简而言之 1408 | 简言之 1409 | 管 1410 | 类如 1411 | 粗 1412 | 精光 1413 | 紧接着 1414 | 累年 1415 | 累次 1416 | 纯 1417 | 纯粹 1418 | 纵 1419 | 纵令 1420 | 纵使 1421 | 纵然 1422 | 练习 1423 | 组成 1424 | 经 1425 | 经常 1426 | 经过 1427 | 结合 1428 | 结果 1429 | 给 1430 | 绝 1431 | 绝不 1432 | 绝对 1433 | 绝非 1434 | 绝顶 1435 | 继之 1436 | 继后 1437 | 继续 1438 | 继而 1439 | 维持 1440 | 综上所述 1441 | 缕缕 1442 | 罢了 1443 | 老 1444 | 老大 1445 | 老是 1446 | 老老实实 1447 | 考虑 1448 | 者 1449 | 而 1450 | 而且 1451 | 而况 1452 | 而又 1453 | 而后 1454 | 而外 1455 | 而已 1456 | 而是 1457 | 而言 1458 | 而论 1459 | 联系 1460 | 联袂 1461 | 背地里 1462 | 背靠背 1463 | 能 1464 | 能否 1465 | 能够 1466 | 腾 1467 | 自 1468 | 自个儿 1469 | 自从 1470 | 自各儿 1471 | 自后 1472 | 自家 1473 | 自己 1474 | 自打 1475 | 自身 1476 | 臭 1477 | 至 1478 | 至于 1479 | 至今 1480 | 至若 1481 | 致 1482 | 般的 1483 | 良好 1484 | 若 1485 | 若夫 1486 | 若是 1487 | 若果 1488 | 若非 1489 | 范围 1490 | 莫 1491 | 莫不 1492 | 莫不然 1493 | 莫如 1494 | 莫若 1495 | 莫非 1496 | 获得 1497 | 藉以 1498 | 虽 1499 | 虽则 1500 | 虽然 1501 | 虽说 1502 | 蛮 1503 | 行为 1504 | 行动 1505 | 表明 1506 | 表示 1507 | 被 1508 | 要 1509 | 要不 1510 | 要不是 1511 | 要不然 1512 | 要么 1513 | 要是 1514 | 要求 1515 | 见 1516 | 规定 1517 | 觉得 1518 | 譬喻 1519 | 譬如 1520 | 认为 1521 | 认真 1522 | 认识 1523 | 让 1524 | 许多 1525 | 论 1526 | 论说 1527 | 设使 1528 | 设或 1529 | 设若 1530 | 诚如 1531 | 诚然 1532 | 话说 1533 | 该 1534 | 该当 1535 | 说明 1536 | 说来 1537 | 说说 1538 | 请勿 1539 | 诸 1540 | 诸位 1541 | 诸如 1542 | 谁 1543 | 谁人 1544 | 谁料 1545 | 谁知 1546 | 谨 1547 | 豁然 1548 | 贼死 1549 | 赖以 1550 | 赶 1551 | 赶快 1552 | 赶早不赶晚 1553 | 起 1554 | 起先 1555 | 起初 1556 | 起头 1557 | 起来 1558 | 起见 1559 | 起首 1560 | 趁 1561 | 趁便 1562 | 趁势 1563 | 趁早 1564 | 趁机 1565 | 趁热 1566 | 趁着 1567 | 越是 1568 | 距 1569 | 跟 1570 | 路经 1571 | 转动 1572 | 转变 1573 | 转贴 1574 | 轰然 1575 | 较 1576 | 较为 1577 | 较之 1578 | 较比 1579 | 边 1580 | 达到 1581 | 达旦 1582 | 迄 1583 | 迅速 1584 | 过 1585 | 过于 1586 | 过去 1587 | 过来 1588 | 运用 1589 | 近 1590 | 近几年来 1591 | 近年来 1592 | 近来 1593 | 还 1594 | 还是 1595 | 还有 1596 | 还要 1597 | 这 1598 | 这一来 1599 | 这个 1600 | 这么 1601 | 这么些 1602 | 这么样 1603 | 这么点儿 1604 | 这些 1605 | 这会儿 1606 | 这儿 1607 | 这就是说 1608 | 这时 1609 | 这样 1610 | 这次 1611 | 这点 1612 | 这种 1613 | 这般 1614 | 这边 1615 | 这里 1616 | 这麽 1617 | 进入 1618 | 进去 1619 | 进来 1620 | 进步 1621 | 进而 1622 | 进行 1623 | 连 1624 | 连同 1625 | 连声 1626 | 连日 1627 | 连日来 1628 | 连袂 1629 | 连连 1630 | 迟早 1631 | 迫于 1632 | 适应 1633 | 适当 1634 | 适用 1635 | 逐步 1636 | 逐渐 1637 | 通常 1638 | 通过 1639 | 造成 1640 | 逢 1641 | 遇到 1642 | 遭到 1643 | 遵循 1644 | 遵照 1645 | 避免 1646 | 那 1647 | 那个 1648 | 那么 1649 | 那么些 1650 | 那么样 1651 | 那些 1652 | 那会儿 1653 | 那儿 1654 | 那时 1655 | 那末 1656 | 那样 1657 | 那般 1658 | 那边 1659 | 那里 1660 | 那麽 1661 | 部分 1662 | 都 1663 | 鄙人 1664 | 采取 1665 | 里面 1666 | 重大 1667 | 重新 1668 | 重要 1669 | 鉴于 1670 | 针对 1671 | 长期以来 1672 | 长此下去 1673 | 长线 1674 | 长话短说 1675 | 问题 1676 | 间或 1677 | 防止 1678 | 阿 1679 | 附近 1680 | 陈年 1681 | 限制 1682 | 陡然 1683 | 除 1684 | 除了 1685 | 除却 1686 | 除去 1687 | 除外 1688 | 除开 1689 | 除此 1690 | 除此之外 1691 | 除此以外 1692 | 除此而外 1693 | 除非 1694 | 随 1695 | 随后 1696 | 随时 1697 | 随着 1698 | 随著 1699 | 隔夜 1700 | 隔日 1701 | 难得 1702 | 难怪 1703 | 难说 1704 | 难道 1705 | 难道说 1706 | 集中 1707 | 零 1708 | 需要 1709 | 非但 1710 | 非常 1711 | 非徒 1712 | 非得 1713 | 非特 1714 | 非独 1715 | 靠 1716 | 顶多 1717 | 顷 1718 | 顷刻 1719 | 顷刻之间 1720 | 顷刻间 1721 | 顺 1722 | 顺着 1723 | 顿时 1724 | 颇 1725 | 风雨无阻 1726 | 饱 1727 | 首先 1728 | 马上 1729 | 高低 1730 | 高兴 1731 | 默然 1732 | 默默地 1733 | 齐 1734 | ︿ 1735 | ! 1736 | # 1737 | $ 1738 | % 1739 | & 1740 | ' 1741 | ( 1742 | ) 1743 | )÷(1- 1744 | )、 1745 | * 1746 | + 1747 | +ξ 1748 | ++ 1749 | , 1750 | ,也 1751 | - 1752 | -β 1753 | -- 1754 | -[*]- 1755 | . 1756 | / 1757 | 0 1758 | 0:2 1759 | 1 1760 | 1. 1761 | 12% 1762 | 2 1763 | 2.3% 1764 | 3 1765 | 4 1766 | 5 1767 | 5:0 1768 | 6 1769 | 7 1770 | 8 1771 | 9 1772 | : 1773 | ; 1774 | < 1775 | <± 1776 | <Δ 1777 | <λ 1778 | <φ 1779 | << 1780 | = 1781 | =″ 1782 | =☆ 1783 | =( 1784 | =- 1785 | =[ 1786 | ={ 1787 | > 1788 | >λ 1789 | ? 1790 | @ 1791 | A 1792 | LI 1793 | R.L. 1794 | ZXFITL 1795 | [ 1796 | [①①] 1797 | [①②] 1798 | [①③] 1799 | [①④] 1800 | [①⑤] 1801 | [①⑥] 1802 | [①⑦] 1803 | [①⑧] 1804 | [①⑨] 1805 | [①A] 1806 | [①B] 1807 | [①C] 1808 | [①D] 1809 | [①E] 1810 | [①] 1811 | [①a] 1812 | [①c] 1813 | [①d] 1814 | [①e] 1815 | [①f] 1816 | [①g] 1817 | [①h] 1818 | [①i] 1819 | [①o] 1820 | [② 1821 | [②①] 1822 | [②②] 1823 | [②③] 1824 | [②④ 1825 | [②⑤] 1826 | [②⑥] 1827 | [②⑦] 1828 | [②⑧] 1829 | [②⑩] 1830 | [②B] 1831 | [②G] 1832 | [②] 1833 | [②a] 1834 | [②b] 1835 | [②c] 1836 | [②d] 1837 | [②e] 1838 | [②f] 1839 | [②g] 1840 | [②h] 1841 | [②i] 1842 | [②j] 1843 | [③①] 1844 | [③⑩] 1845 | [③F] 1846 | [③] 1847 | [③a] 1848 | [③b] 1849 | [③c] 1850 | [③d] 1851 | [③e] 1852 | [③g] 1853 | [③h] 1854 | [④] 1855 | [④a] 1856 | [④b] 1857 | [④c] 1858 | [④d] 1859 | [④e] 1860 | [⑤] 1861 | [⑤]] 1862 | [⑤a] 1863 | [⑤b] 1864 | [⑤d] 1865 | [⑤e] 1866 | [⑤f] 1867 | [⑥] 1868 | [⑦] 1869 | [⑧] 1870 | [⑨] 1871 | [⑩] 1872 | [*] 1873 | [- 1874 | [] 1875 | ] 1876 | ]∧′=[ 1877 | ][ 1878 | _ 1879 | a] 1880 | b] 1881 | c] 1882 | e] 1883 | f] 1884 | ng昉 1885 | { 1886 | {- 1887 | | 1888 | } 1889 | }> 1890 | ~ 1891 | ~± 1892 | ~+ 1893 | ¥ 1894 | -------------------------------------------------------------------------------- /3.word2vec/word2vec_中的数学原理详解.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renpengcheng-github/nlp/2a34e5eea5b0c7602eca7dd7b7c51cfd65cc72b8/3.word2vec/word2vec_中的数学原理详解.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nlp 2 | nlp work 3 | -------------------------------------------------------------------------------- /git使用步骤.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renpengcheng-github/nlp/2a34e5eea5b0c7602eca7dd7b7c51cfd65cc72b8/git使用步骤.txt --------------------------------------------------------------------------------