FastText 算法原理及使用方法

news2024/12/27 7:01:27

文章目录

  • 1. 前言
  • 2. 模型架构
    • 2.1 Hierarchical Softmax
    • 2.2 n-gram 特征
  • 3. 训练及评估
  • 4. 使用
  • 5. 参考


1. 前言

FastText 是一个由 Facebook AI Research 在2016年开源的文本分类器,它的设计旨在保持高分类准确度的同时,显著提升训练和预测的速度。

论文:《Enriching Word Vectors with Subword Information》

github 源码:FastText

常见的文本分类算法:《常用的文本分类算法概览》

2. 模型架构

FastText 的模型架构与 word2vec 中的连续词袋模型(CBOW)相似,但其任务是分类而不是生成词向量。它包括以下组成部分:

(1)输入层:接收文本数据,通常是将文本转化为词序列或者词袋表示。
(2)隐藏层:对输入数据进行变换,通常涉及词向量的查找或计算。
(3)输出层:使用层次 softmax 或其他技术来预测文本所属的类别

如下图:
在这里插入图片描述
其中,上图仅仅表示有1个隐藏层的情况, w 1 , . . . , w n w_1,...,w_n w1,...,wn 表示句子中的每一个词的词嵌入向量。

2.1 Hierarchical Softmax

当目标类别数量很大时,计算线性分类器花费的计算成本高昂。为了提高运行效率,FastText 使用了基于 Huffman 树的层次化 softmax。在训练时,计算复杂度降低到 O(d log2(K)),其中 d 是隐藏层的维度,K 是目标类别的数量。

Hierarchical Softmax 讲解参考这里

2.2 n-gram 特征

词袋模型对词序不变,但考虑词序可以提高性能。FastText 使用 n-gram 作为额外特征来捕获局部词序信息,这样做既高效又能达到与显式使用词序的方法相当的性能。

3. 训练及评估

根据论文内容:
训练:FastText 的训练类似于 word2vec,使用随机梯度下降(SGD)和反向传播,学习率线性衰减。模型异步在多个 CPU 上进行训练。

模型性能:FastText 在多个数据集上的性能与基于深度学习的方法相当,同时在训练和评估上快几个数量级。

效率:FastText 能够在标准多核 CPU 上,在不到十分钟的时间内训练超过十亿个单词,并且在不到一分钟内对五十万个句子进行分类。

实验
在这里插入图片描述

4. 使用

python 安装 fasttext

pip install fasttext

python 训练

def train(train_dataset_path: str, test_dataset_path: str, model_path: str):
    model = fasttext.train_supervised(train_dataset_path)
    model.save_model(model_path)
    print(model.test(test_dataset_path))

train_supervised() 是一个用于训练监督学习模型的函数,通常用于文本分类任务,参数:

    input             # training file path (required)
    lr                # learning rate [0.1]
    dim               # size of word vectors [100]
    ws                # size of the context window [5]
    epoch             # number of epochs [5]
    minCount          # minimal number of word occurences [1]
    minCountLabel     # minimal number of label occurences [1]
    minn              # min length of char ngram [0]
    maxn              # max length of char ngram [0]
    neg               # number of negatives sampled [5]
    wordNgrams        # max length of word ngram [1]
    loss              # loss function {ns, hs, softmax, ova} [softmax]
    bucket            # number of buckets [2000000]
    thread            # number of threads [number of cpus]
    lrUpdateRate      # change the rate of updates for the learning rate [100]
    t                 # sampling threshold [0.0001]
    label             # label prefix ['__label__']
    verbose           # verbose [2]
    pretrainedVectors # pretrained word vectors (.vec file) for supervised learning []

下面介绍主要参数:

  1. input: 输入数据文件的路径或者文件对象。输入文件应该是一个包含训练样本的文本文件,每一行代表一个样本,样本由文本内容和标签组成,二者之间用制表符或空格分隔。

  2. lr (float, optional): 学习率(learning rate),用于控制模型参数更新的步长,默认为 0.1。

  3. epoch (int, optional): 迭代次数,即训练过程中整个训练数据集被遍历的次数,默认为 5。

  4. wordNgrams (int, optional): 用于构建 n-gram 特征的窗口大小,通常用于捕捉词序信息,默认为 1,表示只考虑单个词的特征。

  5. dim (int, optional): 词向量的维度,默认为 100。较高的维度可能会导致更丰富的特征表示,但也会增加模型的复杂度和训练时间。

  6. loss (str, optional): 损失函数,用于优化模型参数。可选值包括 “hs”(hierarchical softmax)和 “ns”(negative sampling),默认为 “softmax”。

  7. thread (int, optional): 用于并行训练的线程数,默认为 12。增加线程数可以加快训练速度,但也会增加计算资源的消耗。

  8. label_prefix (str, optional): 标签的前缀,默认为 __label__。用于标识样本的类别。

  9. pretrained_vectors (str, optional): 预训练的词向量文件的路径,用于初始化模型参数。如果提供了预训练的词向量,则模型会在训练开始时加载这些向量,并根据需要微调。

  10. verbose (int, optional): 控制训练过程中的输出信息的详细程度。默认为 2,表示输出训练进度和性能指标。

训练的数据格式:

__label__0 第一种是在上下文中选定多个词汇作为输入,选定一个单词作为输出
__label__1 将每个词的one-hot编码与哈夫曼编码计算出来。

其中 __label__ 为前缀,可以在参数 label_prefix 修改,0、1是所属的类别。

5. 参考

《Enriching Word Vectors with Subword Information》

欢迎关注本人,我是喜欢搞事的程序猿;一起进步,一起学习;

欢迎关注知乎/CSDN:SmallerFL

也欢迎关注我的wx公众号(精选高质量文章):一个比特定乾坤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1653418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day_3

1. HttpClient HttpClient是Apache的一个子项目&#xff0c;是高效的、功能丰富的支持HTTP协议的客户端编程工具包 作用&#xff1a;发送HTTP请求&#xff0c; 接受相应数据 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>…

森林消防—高扬程水泵:守护绿色屏障的专业利器/恒峰智慧科技

在广袤的森林中&#xff0c;火灾无疑是最具破坏性的灾难之一。为了及时应对森林火灾&#xff0c;保护珍贵的自然资源和生态平衡&#xff0c;高效的消防设备显得尤为重要。森林消防高扬程水泵便是其中一款专业设备&#xff0c;以其高效输送水源的能力&#xff0c;成为守护森林绿…

【服务治理中间件】consul介绍和基本原理

目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理&#xff…

hexo 博客插入本地图片时遇到的坑

哈喽大家好&#xff0c;我是咸鱼。 最近一直在折腾博客的事&#xff0c;说是 hexo 极易上手&#xff0c;我觉得只仅限于在安装部署的时候&#xff0c;随着对 hexo 的深入使用&#xff0c;发现遇到的问题还是挺多的。 那今天来讲一下我在把本地图片插入到 hexo 博客文章中遇到…

网络安全之二层局域网封装及广域网封装详解

局域网封装&#xff1a;Ethernet2&#xff08;TCP/IP&#xff09;&#xff0c;IEEE802.3&#xff08;OSI&#xff09;&#xff08;前面文章中讲解了TCP、IP和OSI本文就不继续讲解&#xff1a;可以查看&#xff1a;网络安全之OSI七层模型详解-CSDN博客&#xff09; 广域网封装&…

SD-WAN大型企业异地组网与海外访问案例解析

随着大型企业不断扩张&#xff0c;其分公司遍布各地&#xff0c;但异地网络访问的瓶颈日益凸显。若企业还需依赖外网进行业务交流&#xff0c;那么合规、高效的SD-WAN组网方案便显得尤为重要。 客户概述&#xff1a; 该客户专注于无线通讯技术的研发与推广&#xff0c;拥有位于…

TL062CDR 贴片SOP-8 丝印TLO62C 双路通用运算放大器芯片

TL062CDR是一款非常通用的运算放大器&#xff0c;它可以被广泛应用在各种电子产品和系统中。以下是一些可能使用TL062CDR的具体产品类别和应用示例&#xff1a; 1. 模拟滤波器&#xff1a;在音频设备&#xff0c;如耳机放大器、音响系统和声音处理器中&#xff0c;TL062CDR可以…

对Windows超融合S2D的一些补充

先说一个不知道算不算BUG的例子&#xff0c;下面这个存储池是用两台服务器各2块10G建立的&#xff0c;除去系统保留的部分&#xff0c;显示还有13G可用。 但如果使用其新建虚拟磁盘会显示可用的空间为0 然后我又各增加了一块10G硬盘进池&#xff0c;变成了可用空间为30.5GB …

VM 安装Ubuntu20

1、VM 新建虚拟机 类型配置 - 典型 安装源选择 &#xff08;安装包获取&#xff1a;Ubuntu桌面系统 | Ubuntu&#xff09; 设置计算机名与用户账号密码 为虚拟机命一个名&#xff0c;设置虚拟机文件保存的位置 设置磁盘相关信息 最后一步&#xff0c;确定虚拟机的相关参数 设置…

ansible-3

目录 一、Templates 模块 1.1.先准备一个以 .j2 为后缀的 template 模板文件&#xff0c;设置引用的变量 1.2.修改主机清单文件&#xff0c;使用主机变量定义一个变量名相同&#xff0c;而值不同的变量 1.3.编写 playbook 二、tags 模块 三、Roles 模块 四、编写模块 4…

10、算数运算符(以 ‘/’、‘%’、‘++’为主去讲解)(Java超详细版本)

算数运算符 一、算数运算符二、“ / ”的使用三、“ % ”的使用四、“ ”的使用⭐ 一、算数运算符 算数运算符是对数值类型的变量进行运算的&#xff0c;在Java程序中使用的非常多的。 二、“ / ”的使用 1、Java中 “ / ” 的运算结果是省略小数部分的整数&#xff0c;不存…

【人工智能】博弈搜索(极小极大值、α-β剪枝)

1. 极小极大值算法 人工智能中 “博弈” 通常专指博弈论专家们称为有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏&#xff08;如国际象棋)。术语中&#xff0c;这是指在确定的、完全可观察的环境中两个 Agent必须轮流行动&#xff0c;在游戏结束时效用值总是相等并…

MCP3008-I/SL 模数转换器ADC SPI接口 模拟信号采集

MCP3008-I/SL 模数转换器ADC 贴片SOIC16 MCP3008-I/SL 是一款模数转换器&#xff08;ADC&#xff09;&#xff0c;属于 SAR&#xff08;逐次逼近寄存器&#xff09;架构的 ADC。它具有以下特点&#xff1a; 8 通道单 ADC 最大采样率&#xff1a;200ksps&#xff08;千样点每秒…

MySQL-ELK基础

1&#xff1a;什么是 ELK ELK是由一家elastic公司开发的三个开源项目的首字母缩写&#xff0c;这三个项目分别是&#xff1a;Elasticsearch、Logstash 和 Kibana。三个项目各有不同的功能&#xff0c;之后又增加了许多新项目, 于是 从5.X版本后改名为Elastic Stack Elastic S…

STM32CubeMX学习笔记32---FreeRTOS资源管理

一、CPU利用率简介 1 基本概念 CPU 使用率其实就是系统运行的程序占用的 CPU 资源&#xff0c;表示机器在某段时间程序运行的情况&#xff0c;如果这段时间中&#xff0c;程序一直在占用 CPU 的使用权&#xff0c;那么可以人为 CPU 的利用率是 100%。CPU 的利用率越高&#xf…

C语言:__attribute__((packed))

一、简介 在使用结构体的时候&#xff0c;经常要根据结构体的长度来进行相关判断。但是按照C语言的规则&#xff0c;会对不同类型的数据类型进行自动对齐。有时候就会造成一些问题&#xff0c;如果不需要使用自动对齐的功能&#xff0c;就需要使用到本章的关键字。 二、自动对…

CFETS系统介绍

CSTP服务是什么 CSTP&#xff08;CFETS Straight Through Process&#xff09;是交易中心为外汇市场提供的数据直通式处理接口服务。用户通过标准式接口将本方交易数据直接从交易中心的服务器接收下来&#xff0c;根据需要对数据进行处理并导入到中、后台系统。其基本功能包括…

【JUC】并发编程 Synchronized 锁升级原理

Synchronized如何实现同步/互斥的效果&#xff1f; monitorenter&#xff1a; 将锁对象对象头中Mark Word的前30bit替换成指向操作系统中与其关联的monitor对象&#xff0c;将锁记录位状态改为10 monitorexit&#xff1a; 将锁对象对象头中Mark Word进行重置&#xff0c;重新恢…

活动预告 | 5月16日 Streaming Lakehouse Meetup · Online 与你相约!

随着 Apache Flink 技术社区的不断成熟和发展&#xff0c;越来越多企业开始利用 Flink 进行流式数据处理&#xff0c;从而提升数据时效性价值&#xff0c;获取业务实时化效果。与此同时&#xff0c;在大数据领域数据湖架构也日益成为新的技术趋势&#xff0c;越来越多企业开始采…

从谚语:“一手交钱,一手交货来”谈谈什么是数据库事务

事务与交易 一手交钱&#xff0c;一手交货 一手交钱&#xff0c;一手交货&#xff0c;谚语&#xff0c;意思是指钱和货当场相交&#xff0c;互不拖欠。出自明朝施耐庵《水浒传》第二一回。 Transaction 意思 我们先来看一下来自于剑桥英-英词典的解释&#xff1a; transac…