BC.Wang Welcome

NLP-Embedding及文本分类

2019-07-23
BCWang

阅读:

NLP

embedding训练

requirements

  • ngram2vec,包含ngram以及w2v和glove的c代码(运行前编译): https://github.com/zhezhaoa/ngram2vec
  • 预训练w2v:https://github.com/Embedding/Chinese-Word-Vectors

    embedding训练流程1

    1. 可选:使用ngram分词获得词的pair,用于扩充词库,得到vocab文件 2-1. 如果使用gensim的w2v,glove等进行训练,可以从ngram的vocab文件中提取出所有的词作为jieba分词的userdict,加载自定义词典分词,然后训练,也可不加载自定义词典 2-2. 也可使用ngram2vec中编译好的二进制文件直接训练,需要根据ngram2vec文档准备相应的文件,参考ngram2vec的流程图和运行的.sh文件中记录的流程
    2. 导出w2v字典,使用相似度或类比等方法评估

      使用ngram2vec中的embedding作为模型预训练权重进行文本分类1

    3. 使用ngram2vec提供的方法(例如load_dense)载入https://github.com/Embedding/Chinese-Word-Vectors中的预训练模型,拿到词汇表vocab[“w2i”].keys(),写入文件
    4. 1.中的文件作为jieba分词的userdict,使用jieba进行分词
    5. 使用1.中的vocab[“w2i”]把文章分词过后的全部词变成index的list
    6. 输入大小需要一致,作出文章中词数目的分布直方图,选取一个值作为目标dim
    7. 通过0补和截取的方法将index的list变成同样大小的,最终变成一个矩阵,这个矩阵是NN的输入,shape为(n_sample,dim),可使用keras.preprocessing中sequence的pad_sequence进行
    8. CNN之前添加一个Embedding层,这里我们不优化embedding,而是用现有的embedding直接作为Frozen的权重,以keras的embedding层为例,input dim是词汇表大小,output dim是embedding过后的向量大小,input length是句子最大词的数目(也就是上面的dim) 6.5 CNN会采用3个不同大小的卷积核,以及较多的filter进行卷积,最终在每个filter上得到的feature map中取最大值,将feature map变成一个值,从而得到特征向量,取最大值也可以实现对可变输入的扩展,这个固定的特征向量通过softmax完成分类任务
    9. 这个embedding层使用weights=[embedding_matrix]来添加预训练好的embedding结果
    10. 训练,注意使用keras的EarlyStop功能,训练集,验证集和测试集比例7:1:2,验证集用于验证什么时候停止训练
    11. 完成之后封装模型,封装预处理pipeline,构造函数输入string,输出分类的softmax概率

Similar Posts

Comments

0