静态的词向量word2vec glove
动态的词向量bert elmo
文本表示的方法
词向量的训练
使用glove
使用bert句子向量
文本表示的方法
基于one hot 、tf-idf的bag-of-words
主题模型:LSA(SVD)、pLSA、LDA 就是词并不是文档的最基本组成单位 还有一层主题意思
LSA:把之前得到的词和文档的矩阵 进行svd操作 svd:奇异值分解 就是降维
分成三个矩阵 词到主题的矩阵 对角线矩阵 主题到文档的矩阵 可以适当去掉文档的噪音
词向量训练
word2vec cbow 和 skip-gram
1.获得一个语料库
2.预处理 (中英文预处理有差别 中文一定要先分词)
3. 转为one-hot之后分别乘以共享的输入权重矩阵w 权重矩阵对于每一个one-hot向量都是一样的
4.所得的向量相加求平均作为隐层向量,size为1*N
5.得到向量{1*V}激活函数处理得到V-dim概率分布,概率最大的index所指示的单词为预测出的中间词
6.与true label的onehot作比较,误差越小越好
word2vec就是一个浅层的神经网络
glove的使用
静态词向量没办法解决一词多义问题
GPT只能做生成 不能做文本分类 结构只能看到当前时刻以前的部分
而BERT可以看到完整句子
使用BERT生成句子向量
传统都是通过word embedding 加权取平均获得句向量
没办法理解上下文的语义
bert的优点在于 可以理解语义且排除词向量加权引起的误差
bert两种 12层的transformer官方只提供了12层和24层的transformer
默认取倒数第二层的输出值作为句向量(前面几层还没有学到充分的语义信息,最后一层太接近于实际目标)
gpu_memory_fraction = 0.8
layer_indexes = [-2]
model_dir = os.path.join(file_path,'chinese_L-12_H-768_A-12/')
下载官方预训练好的中文的bert模型
config_name = os.path.join(model_dir, 'bert_config.json')
原生bert的config参数 config参数有什么用?
ckpt_name = os.path.join(model_dir, 'bert_model.ckpt')
checkpoints 训练中间的结果
output_dir = os.path.join(model_dir,'../tmp/result/')
把我们下载训练好的模型和结果保存在这个路径
vocab_file = os.path.join(model_dir,'vocab.txt')
把语料信息来源于
data_dir = os.path.join(model_dir, '../data/')
需要生成句向量的数据来源
gpu使用率 gpu_memory_fraction = 0.8
讲的好垃圾 绝望了 看后面bert还会不会讲吧