淘宝u站怎么做网站的,技术支持 深圳网站建设贝尔利,织梦网站建设实训心得,网站二级目录Fasttext#xff1a;是一种轻量化的预训练模型#xff0c;适合文本分类和文本向量化优势#xff1a;结构简单进行训练词向量的时候由于使用层次softmax结构能够提升模型的训练效率使用n-gram特征提取以弥补模型缺陷提高精度由三层组成#xff1a;输入层#xff1a;对文本词…Fasttext是一种轻量化的预训练模型适合文本分类和文本向量化优势结构简单进行训练词向量的时候由于使用层次softmax结构能够提升模型的训练效率使用n-gram特征提取以弥补模型缺陷提高精度由三层组成输入层对文本词嵌入之后的词向量包含n-n-gram特征把文本进行拆分结果n-gram进行拆词并且转化为词向量隐藏层对输入数据的求和平均把所有的n-gram向量求和\平均就得到一个代表文本的特征向量输出层文档对应的预测标签根据特征向量预测标签层次softmax:对于普通的softmax做出优化主要是词表的数据分类特别大的时候底层就会使用哈夫曼树来表示类别将原表的线性计算成本降低到对数级别思想将所有的分类组成一个二叉树每个类别是一个叶子节点预测一个词的概率不是直接算这个词的softmax而是从根节点出发走到这个词的叶子节点每一步都是一个二分类问题最终概率是路径上决策概率的乘积构建一个哈夫曼树这个数由n个子节点每个子节点有对应的权重值构建的过程为1.将所有的权重看成有n颗数的森林每个森林只有一个节点2.选出两个权重值最小的森林组成一个新的树这个树的根节点是这两个权重的和小的在左边大的在右边3.从森林中删除这两个节点并将新树加入到这个森林中4.重复2-3步骤直到森林只有一个树为止那么这个数就是哈夫曼树由图可知权重值越大那么离根节点就越近并且如果这个根节点为n,那么新增的节点就是n-1哈夫曼编码将哈夫曼树的左子树变为0右子树变为1从根节点到叶子节点所经过的分支就变成0/1组成的序列便是这个节点对应的字符编码这个编码就是哈夫曼编码D的哈夫曼编码就是110从根节点到对应的叶子节点层次softmax的优势传统的softmax的时间复杂度为L(labels的数量), 但是使用层次化softmax之后时间复杂度的log(L) (二叉树的高度和宽度的近似), 从而在多分类的场景提高了效率.负采样负采样每次让一个训练样本仅仅更新一小部分的权重, 这样就会降低梯度下降过程中的计算量优点提高训练速度, 选择了部分数据进行计算损失, 损失计算更加简单.改进效果, 增加部分负样本, 能够模拟真实场景下的噪声情况, 能够让模型的稳健性更强.文本分类文本分类的是将文档分配给一个或多个类别. 当今文本分类的实现多是使用机器学习方法从训练数据中提取分类规则以进行分类, 因此构建文本分类器需要带标签的数据.文本分类的种类二分类 单标签多分类 多标签多分类文本分类的过程1获取数据2训练集和验证集的划分3训练模型4使用模型进行预测和评估5模型调优6模型保存于重加载1获取数据fasttext的数据集要求标签是“__label__ 类别名”这种格式如果是多标签“__label__ 类别名1 __label__ 类别名2 ”这种格式2.训练集和验证集划分3.训练模型fasttext.train_supervised是 FastText 中专门用于监督式文本分类训练的函数import fasttext def dm01_train_data(): # 进行训练 # 使用fasttext的train_supervised方法进行文本分类模型的训练 model fasttext.train_supervised(../data/cooking_train.txt) resultmodel.predict(Which baking dish is best to bake a banana bread ?) print(fresult: {result}) result3model.test(../data/cooking_valid.txt) # 测试结果: (3000, 0.138, 0.05967997693527462) # 验证集样本 精度 召回率 print(f测试结果: {result3})数据处理# 对数据进行预处理(统一大小写符号和单词分离) def dm02_preprocess(): # 获取训练模型 model fasttext.train_supervised(../data/cooking.pre.train) result model.test(../data/cooking.pre.valid) # (3000, 0.174, 0.07524866657056364) print(fresult: {result})增加训练轮数# 增加训练轮数 def dm03_epochs(): # 获取有监督模型 model fasttext.train_supervised(../data/cooking.pre.train,epoch25) # 模型的测试 result model.test(../data/cooking.pre.valid) # (3000, 0.5183333333333333, 0.22416029984143002) print(fresult: {result})调整学习率# 调整学习率 def dm04_lr(): # 获取有监督模型 model fasttext.train_supervised(../data/cooking.pre.train,lr1.0,epoch25) # 模型的测试 result model.test(../data/cooking.pre.valid) # result: (3000, 0.581, 0.2512613521695257) print(fresult: {result})增加n-gram特征# 增加n-gram特征相邻 def dm05_ngram(): # 获取有监督模型 model fasttext.train_supervised(../data/cooking.pre.train,lr1.0,epoch50,wordNgrams2) # 模型的测试 result model.test(../data/cooking.pre.valid) # (3000, 0.6316666666666667, 0.27317284128585845) print(fresult: {result})改变损失函数的计算方式# 改变损失的计算方式 def dm06_loss(): # 获取有监督模型 model fasttext.train_supervised(../data/cooking.pre.train,lr1.0,epoch50,wordNgrams2,losshs) # 模型的测试 result model.test(../data/cooking.pre.valid) # result: (3000, 0.6043333333333333, 0.2613521695257316) print(fresult: {result})自动参数调优# 自动超参数调优autotuneValidationFile参数需要指定验证数据集所在路径, 它将在验证集上使用随机搜索方法寻找可能最优的超参数. # 使用autotuneDuration参数可以控制随机搜索的时间, 默认是300s def dm07_auto(): # 获取有监督模型 model fasttext.train_supervised(../data/cooking.pre.train, autotuneValidationFile../data/cooking.pre.valid,autotuneDuration300) # 模型的测试 result model.test(../data/cooking.pre.valid) # result: (3000, 0.5803333333333334, 0.2509730431022056) print(fresult: {result})多标签多分类# 多标签多分类形式 def dm08_ova(): # 获取有监督模型 model fasttext.train_supervised(../data/cooking.pre.train,lr0.5,epoch50,wordNgrams2,lossova) # 模型的测试 result model.test(../data/cooking.pre.valid) # result: (3000, 0.6113333333333333, 0.26437941473259335) print(fresult: {result})模型的保存和重加载# 模型的保存和重加载 def dm09_save(): # 获取有监督模型 model fasttext.train_supervised(../data/cooking.pre.train,lr0.5,epoch50,wordNgrams2) # 模型的保存 model.save_model(../model/fasttext_model.bin) # 模型的重加载 model fasttext.load_model(../model/fasttext_model.bin) # 模型的测试 result model.test(../data/cooking.pre.valid) # result: (3000, 0.6113333333333333, 0.26437941473259335) print(fresult: {result})训练词向量用向量表示文本中的词汇(或字符)是现代机器学习中最流行的做法, 这些向量能够很好的捕捉语言之间的关系, 从而提升基于词向量的各种NLP任务的效果.训练词向量过程第一步: 获取数据第二步: 训练词向量第三步: 模型超参数设定第四步: 模型效果检验第五步: 模型的保存与重加载