文本分类模型处理流程
1.样本整理
2.数据预处理
-
直接按照字符处理可以使用keras的api
Tokenizer(char_level=True) 建立字符数字索引
text_to_sequences() 将句子转成数字
pad_sequences() 将句子填充到相同长度
-
分词 jieba hanlp等(对于项目里特殊的词汇,可以手动加到分词词库里)
- 用其他公司训练的词向量
- 自定义词向量(使用gensim word2vec训练)
- 直接使用keras Embedding训练,指定输出维度,随机初始化后训练
- word2vec
- skipgram 用中心词训练背景词,实际使用的时中心词向量,分母是softmax
- cbow 用背景词训练中心词,实际使用的是背景词
- 这两种方法每一步梯度计算都包含全部词典大小数目,为了降低复杂度:
- 负采样 中心词在窗口大小里的背景词为正样本,再采样未出现窗口里的是噪声词,最大化这个概率
- 层序softmax 建立词频树,损失函数通过根节点到叶节点路径构造
- Glove全局词嵌入 用条件概率比值表达词与词之间的关系。
- fasttext 子词嵌入 例如3元语法处理love 字词 lov ove ,从构词角度分析词语特点,也就是有些词是由词衍生的
3.构建模型 (文本模型很多,此处举一个例子)
- Embedding->Conv1D->Max1D->Lstm->Dropout->Dense
4.predict要使用训练前词和数字映射关键进行处理
5.模型部署可以见https://blog.csdn.net/persistinlife/article/details/103810750
同时可以使用deeplearning4j进行Java工程部署。
6.实例 此处是对英文分类就没有使用中文分词器处理。
如果使用预训练处理的词向量注意此处:
model.add(Embedding(len(embeddings_matrix),
EMBEDDING_DIM,
weights = [embeddings_matrix], #预训练词向量 数字和向量映射 例如 2:[0.23,0.34,0.3,....]
trainable = False))#因为已经是训练后的词向量 不参与训练
import sys
import os
import optparse
os.en