当前位置:   article > 正文

NLP-project-01-Word2Vec-Tensorflow实现_nlp sqlflow

nlp sqlflow

1.Word2Vec理论基础

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.readme

• 基于Word2Vec的思想,基于TensorFlow相关API实现CBOW+负采样以及
skip-gram+负采样的训练及应用代码(获取对应单词的向量)。
• 要求:
• 代码结构清晰、条理要清晰。
• 训练数据:使用《人民的名义》这部小说。
• 提示:
• 负采样API:tf.nn.sampled_softmax_loss




---代码的执行流程---

    创建新项目Word2VecProject -->创建data文件夹放入split_input_file(人民的名义.txt)-->创建数据处理包utils
    
1. 文本数据分词
    1.data_utis.py       #jieba,定义split_sentence,convert_sentence_to_words
    2.convert_data.py    #数据转换运行主程序,os,tf.logging,tf.app.run()
    运行命令:
        python convert_data.py --opt=split --split_input_file=./data/in_the_name_of_people.txt --split_output_file=./data/words_sentence.txt

2. 词典的构建
    运行命令:
        python convert_data.py --opt=dictionary --dictionary_input_file=./data/words_sentence.txt --dictionary_output_file=./data/dictionary.json --dictionary_min_count=5

3. 训练数据转换
    运行命令:
        python convert_data.py --opt=record --record_input_file=./data/words_sentence.txt --record_output_file=./data/train.cbow.data --record_window=4 --record_structure=cbow --record_allow_padding=False
        python convert_data.py --opt=record --record_input_file=./data/words_sentence.txt --record_output_file=./data/train.skipgram.data --record_window=4 --record_structure=skip-gram --record_allow_padding=False

4. 训练数据批次加载
    详细代码见:utils.data_utils.DataManager

5. 模型训练代码撰写
    a. 大的框架搭建
    b. 将各个部分的代码完善
        B:batch_size, 也就是一个批次中的样本序列数目
        T:times, 窗口大小
        V:vocab_size, 词汇数目
        E:Embedding size, 词向量转换的向量维度大小

6. Word2Vec的负采样的执行过程(以CBOW结构为例)
    运行命令:
        python train.py --data_path=./data/train.cbow.data --dictionary_path=./data/dictionary.json --network_name=w2v --embedding_size=128 --structure=cbow --window=4 --cbow_mean=True --max_epoch=10 --batch_size=1000 --num_sampled=100 --optimizer_name=adam --learning_rate=0.001 --regularization=0.00001 --checkpoint_dir=./running/model/cbow2 --checkpoint_per_batch=100 --summary_dir=./running/graph/cbow2

    NOTE:
        训练数据格式:
            X:[batch_size,window], eg:[1000,4],表示现在有1000个训练数据/样本,每个样本是4个单词id
            Y:[batch_size,1],eg:[1000,1],表示现在有1000个训练数据/样本,每个样本预测对应的某个单词id
        网络的执行:
            1). 针对每个单词获取其对应的词向量,也就是将id转换为向量
                vectors: [batch_size,window] ---> [batch_size,window,embedding_size]
                vectors: eg:[1000,4,128],表示现在有1000个训练数据/样本,每个样本是4个单词,每个单词对应128维的一个向量
            2). 将上下文单词的向量合并成一个整体向量
                features: [batch_size,window,embedding_size] ---> [batch_size,embedding_size]
                features: eg:[1000,128],表示现在有1000个训练数据/样本,每个样本有一个高阶特征向量,这个向量的维度为128维,可以基于这个向量判断实际单词id是哪一个。
            3). 判断对应的单词是哪一个
                NOTE: 模型的目的实际上仅仅只需要获取单词的词向量,而不是要这个预测单词,所以判断对应单词是哪一个的这个过程属于损失函数构建的过程。
    a. 普通全连接的执行过程(普通损失函数的构建过程)-1). 前向过程之后后,得到的高阶特征向量features,需要基于该值得到预测属于各个类别的概率值以及对应的损失函数
        -2). 得到属于所有类别的置信度:
            logits: [batch_size,vocab_size],eg: [1000,3365], 表示现在有1000个训练数据/样本,预测每个训练数据对应属于各个单词的置信度(总共有3365个单词)-3). 思考:
            基于logits置信度来构建这个损失函数,步骤如下:
                -a). 计算属于各个类别的概率
                    p = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis=1, keep_dims=True) # [batch_size,vocab_size] / [batch_size,1] --> [batch_size,vocab_size]
                -b). 获取实际类别对应的类别预测概率值
                    pred_p = p[:,labels] # 类似获取对应列的值,当然实际API应该不是这个,形状应该为:[batch_size,]
                -c). 计算损失函数
                    loss = sum(-log(pred_p)) # 先对概率求对数,然后求相反数,最后求和,最终形状为[],是一个数字

    b. 负采样的执行过程:
        -1). 前向过程之后后,得到的高阶特征向量features,需要基于该值得到对应的损失函数
        -2). 首先抽取对应类别的模型参数w(计算得到各个类别置信度的模型参数w)
            获取实际类别(正例)对应的模型参数w以及负例对应的模型参数w
            -a. 先获取num_sampled个类别对应的参数id(是作为负例的)
            -b. 将正例id和负例id合并到一起,获取w,然后w分割开为true_w和sampled_w
            -c. 对于高阶特征向量features,分别判断属于正例以及负例的置信度
            -d. 对于属于负例的置信度中,如果存在负例id和正例id一致的情况,那么将负例对应的置信度修改为0
            -c. 将负例和正例的置信度合并到一起,作为最终的置信度。
        -3). 基于抽取的参数计算预测属于各个类别的置信度
        -4). 数据结构转换
        -5). 计算损失函数(和普通的方式一样)

=====================================================================
7.模型应用代码及模型部署代码完善
    deploy.py  部署
    eval.py 可视化构建
    当模型训练好后,我们需要进行模型的评估、应用等操作,但是在应用的时候要根据业务模型特点,采用不同的方式来进行应用:
    也就是说在企业中,一般我们常用的一种用法是:
        1. 算法工程师使用Python语言结合业务需求训练好这个模型,并且模型持久化;
        2. 模型的应用(一般结合模型特点来做),常规方式如下:
            a. 基于训练模型的语言以及框架,将训练好的模型持久化为二进制磁盘文件,然后再需要的地方进行模型的恢复加载(这种方式有一个缺陷,要求模型恢复语言和模型的训练语言必须是一致的), eg:Tensorlow中的ckpt格式模型、sklearn中的joblib保存方式等等。
            b. 基于某种特定的框架、API将模型转换为支持跨语言调用的格式文件,然后在需要的地方进行模型的恢复加载(这种方式比较常用,一般企业中就是使用python训练模型,然后使用c++或者java进行模型的恢复)
            c. 将模型参数(根据业务来定)保存,然后再需要的地方加载模型参数,进行数据的预测应用


  • 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

3.代码图片

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/783515
推荐阅读
相关标签
  

闽ICP备14008679号