fasttext工具介绍

fastText是由Facebook Research团队于2016年开源的一个词向量计算和文本分类工具。尽管在学术上并未带来巨大创新,但其在实际应用中的表现却非常出色,特别是在文本分类任务中,fastText往往能以浅层网络结构取得与深度网络相媲美的精度,同时在训练时间上远快于深度网络。 

​​​​​​​ 

fasttext工具包

作为NLP工程领域常用的工具包, fasttext有两大作用💥

  • 进行文本分类
  • 训练词向量

fasttext工具包的优势

快速的进行训练和预测是fasttext的最大优势,fasttext工具包中内含的fasttext模型具有十分简单的网络结构,使用fasttext模型训练词向量时使用层次softmax结构, 来提升超多类别下的模型性能,由于fasttext模型过于简单无法捕捉词序特征, 因此会进行n-gram特征提取以弥补模型缺陷提升精度。

fasttext的安装

pip install fasttext

💯验证:

import fasttext
  • 如果执行上述命令后没有报错,且Python解释器没有提示“ModuleNotFoundError: No module named 'fasttext'”等错误信息,则说明fasttext已经成功安装。

fasttext文本分类 

文本分类的是将文档分配给一个或多个类别,当今文本分类的实现多是使用机器学习方法从训练数据中提取分类规则以进行分类, 因此构建文本分类器需要带标签的数据。

文本分类种类 :

  • 二分类:
    • 文本被分类两个类别中, 往往这两个类别是对立面, 比如: 判断一句评论是好评还是差评.
  • 单标签多分类:
    • 文本被分入到多个类别中, 且每条文本只能属于某一个类别(即被打上某一个标签)
  • 多标签多分类:
    • 文本被分人到多个类别中, 但每条文本可以属于多个类别(即被打上多个标签)

fastText 库常用方法 :

训练词向量模型

使用fastText可以训练词向量模型,这些词向量能够捕捉单词之间的语义关系。训练词向量的基本命令格式如下:

./fasttext skipgram -input input.txt -output model

这里,-input参数指定输入文件,-output参数指定输出模型文件的名称。skipgram是训练词向量时使用的算法,类似于word2vec中的skip-gram算法。

2. 训练文本分类模型

fastText的主要用途之一是文本分类。它支持监督学习模式下的文本分类,训练命令的基本格式如下:

./fasttext supervised -input train.txt -output model

或者,在Python中,可以使用train_supervised方法:

import fasttext  model = fasttext.train_supervised('train.csv', lr=1.0, wordNgrams=2, epoch=25, ...)

其中,train.txttrain.csv是包含训练数据的文件,每行文本前通常带有标签(例如__label__类别)。lr是学习率,wordNgrams是n-gram的最大长度,epoch是训练的轮数等。这些参数可以根据具体任务进行调整以优化模型性能。

3. 模型预测

训练完成后,可以使用fastText模型对新的文本数据进行分类预测。在命令行中,可以使用predict命令:
在Python中,可以使用predict方法:

predictions = model.predict(x)  # x是待预测的文本

4. 模型评估

为了评估模型的性能,可以使用测试集数据,并计算准确率、召回率等指标。在Python中,虽然fastText库本身不直接提供评估函数,但你可以自己编写代码来计算这些指标,或者将预测结果与测试集的标签进行比较。

5. 模型保存与加载

训练好的模型可以保存为二进制文件,以便将来使用。在Python中,可以使用save_model方法保存模型:

model.save_model("model_cooking.bin")

加载模型时,使用load_model函数:

model = fasttext.load_model("model_cooking.bin")

文本分类实现

数据集介绍,本案例烹饪相关的数据集, 它是由facebook AI实验室提供的演示数据集

# 查看数据的前10条
$ head cooking.stackexchange.txt#
__label__sauce __label__cheese How much does potato starch affect a cheese sauce recipe?
__label__food-safety __label__acidity Dangerous pathogens capable of growing in acidic environments
__label__cast-iron __label__stove How do I cover up the white spots on my cast iron stove?
__label__restaurant Michelin Three Star Restaurant; but if the chef is not there
__label__knife-skills __label__dicing Without knife skills, how can I quickly and accurately dice vegetables?
__label__storage-method __label__equipment __label__bread What's the purpose of a bread box?
__label__baking __label__food-safety __label__substitutions __label__peanuts how to seperate peanut oil from roasted peanuts at home?
__label__chocolate American equivalent for British chocolate terms
__label__baking __label__oven __label__convection Fan bake vs bake
__label__sauce __label__storage-lifetime __label__acidity __label__mayonnaise Regulation and balancing of readymade packed mayonnaise and other sauces
  • fasttext工具支持多种格式的输入数据,包括这种以__label__前缀标记类别的格式。在这种格式中,每个样本的类别被前缀__label__所标记,后跟实际的类别名称,然后是文本内容。这种格式使得fasttext能够轻松地识别每个样本的类别和对应的文本,从而进行文本分类任务。

训练集与验证集的划分

# 查看数据总数
$ wc cooking.stackexchange.txt 15404  169582 1401900 cooking.stackexchange.txt 

# 12404条数据作为训练数据
$ head -n 12404 cooking.stackexchange.txt > cooking.train
# 3000条数据作为验证数据
$ tail -n 3000 cooking.stackexchange.txt > cooking.valid
  • 使用head命令来获取cooking.stackexchange.txt文件的前12404行,并将这部分内容重定向(>)到cooking.train文件中,作为训练数据。

训练模型 

# 导入fasttext
import fasttext
# 使用train_supervised方法进行文本分类模型的训练
model = fasttext.train_supervised(input="cooking/cooking.train")
  • 其中 input 参数是一个字符串,指定了训练数据文件的路径。

使用模型进行预测并评估

model.predict("Which baking dish is best to bake a banana bread ?")、
# 元组中的第一项代表标签, 第二项代表对应的概率
(('__label__baking',), array([0.06550845]))

通过我们常识可知预测是错误的

model.predict("Why not put knives in the dishwasher?")
(('__label__food-safety',), array([0.07541209]))

模型调优

通过查看数据, 我们发现数据中存在许多标点符号与单词相连以及大小写不统一,这些因素对我们最终的分类目标没有益处, 反是增加了模型提取分类规律的难度,因此我们选择将它们去除或转化。

# 处理前的部分数据
__label__fish Arctic char available in North-America
__label__pasta __label__salt __label__boiling When cooking pasta in salted water how much of the salt is absorbed?
__label__coffee Emergency Coffee via Chocolate Covered Coffee Beans?
__label__cake Non-beet alternatives to standard red food dye
__label__cheese __label__lentils Could cheese "halt" the tenderness of cooking lentils?
__label__asian-cuisine __label__chili-peppers __label__kimchi __label__korean-cuisine What kind of peppers are used in Gochugaru ()?
__label__consistency Pavlova Roll failure
__label__eggs __label__bread What qualities should I be looking for when making the best French Toast?
__label__meat __label__flour __label__stews __label__braising Coating meat in flour before browning, bad idea?
__label__food-safety Raw roast beef on the edge of safe?
__label__pork __label__food-identification How do I determine the cut of a pork steak prior to purchasing it?

cat cooking.stackexchange.txt | sed -e "s/\([.\!?,'/()]\)/ \1 /g" | tr "[:upper:]" "[:lower:]" > cooking.preprocessed.txt

处理后的部分数据:

__label__fish arctic char available in north-america
__label__pasta __label__salt __label__boiling when cooking pasta in salted water how much of the salt is absorbed ?
__label__coffee emergency coffee via chocolate covered coffee beans ?
__label__cake non-beet alternatives to standard red food dye
__label__cheese __label__lentils could cheese "halt" the tenderness of cooking lentils ?
__label__asian-cuisine __label__chili-peppers __label__kimchi __label__korean-cuisine what kind of peppers are used in gochugaru  (  )  ?
__label__consistency pavlova roll failure
__label__eggs __label__bread what qualities should i be looking for when making the best french toast ?
__label__meat __label__flour __label__stews __label__braising coating meat in flour before browning ,  bad idea ?
__label__food-safety raw roast beef on the edge of safe ?
__label__pork __label__food-identification how do i determine the cut of a pork steak prior to purchasing it ?

然后重新训练,再增加训练轮数,增加n-gram特征...

模型保存与重加载

model.save_model("model/model_cooking.bin")

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

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

相关文章

时间处理的未来:Java 8全新日期与时间API完全解析

文章目录 一、改进背景二、本地日期时间三、时区日期时间四、格式化 一、改进背景 Java 8针对时间处理进行了全面的改进,重新设计了所有日期时间、日历及时区相关的 API。并把它们都统一放置在 java.time 包和子包下。 Java5的不足之处: 非线程安全&…

全面解析 TypeScript 泛型的二三事

2024年了相信大家都已经在日常开发的过程中使用上了 TypeScript 了。TypeScript 增强了代码可靠性和可维护性,确保减少运行时错误并提高开发人员的工作效率。 TypeScript 通过类型声明 使得 javascript 拥有了强类型校验。而泛型的是类型声明中最重要的一环&#x…

vue单独部署到宝塔教程

配置反向代理 注意:如果目标网站是https则写https否则写http 2.关于解决部署后无法刷新,直接报错404 location / { try_files $uri $uri/ /index.html; }

【WebRTC实现点对点视频通话】

介绍 WebRTC (Web Real-Time Communications) 是一个实时通讯技术,也是实时音视频技术的标准和框架。简单来说WebRTC是一个集大成的实时音视频技术集,包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。对于开发者来说可以…

建投数据入选“2024年中国最佳信创企业管理软件厂商”

近日,建投数据凭借国产化自主知识产权、完备的信创资质及信创软硬件环境全栈适配能力,入选第一新声联合天眼查发布的“2024年中国最佳信创厂商系列榜单”细分行业榜之“最佳信创企业管理软件厂商”。 本次最佳信创厂商系列榜单评选,包括综合榜…

ffmpeg图片视频编辑器工具的安装与使用

title: ffmpeg图片视频编辑器工具的安装与使用 tags: [ffmpeg, 图片, 音频, 视频, 工具, 流媒体] categories: [工具, ffmpeg] FFmpeg是一个开源的命令行工具,广泛用于处理视频和音频文件,包括转换格式、剪辑、混流、解码、编码等。以下是一些基本的FFmp…

智能充电(新能源电动车,电单车)云管理系统的定制解决方案

一 系统简介 智能充电(新能源电动车,电单车)云管理系统 是一套能够实现对充电站/桩的实时通讯、状态监控、故障检测、运营分析、数据统计、策略设置的智能化多任务管理系统。 二 平台概览 智能充电云管理系统 https://chongdianzhuang.itg…

C# 如何获取属性的displayName的3种方式

文章目录 1. 使用特性直接访问2. 使用GetCustomAttribute()方法通过反射获取3. 使用LINQ查询总结和比较 在C#中,获取属性的displayName可以通过多种方式实现,包括使用特性、反射和LINQ。下面我将分别展示每种方法,并提供具体的示例代码。 1.…

如何让代码兼容 Python 2 和 Python 3?Future 库助你一臂之力

目录 01Future 是什么? 为什么选择 Future? 安装与配置 02Future 的基本用法 1、兼容 print 函数 2、兼容整数除法 3、兼容 Unicode 字符串 03Future 的高级功能 1. 处理字符串与字节 2. 统一异常处理…

Facebook数据仓库的变迁与启示

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…

IntelliJ IDEA教育版在Windows电脑中的下载、安装方法

本文介绍IntelliJ IDEA软件Community&#xff08;社区版&#xff09;在Windows操作系统中的下载、安装、运行与使用方法。 IntelliJ IDEA软件是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java语言的开发&#xff0c;但同时也支持其…

昇思25天学习打卡营第12天|简单的深度学习ResNet50图像分类 - 构建ResNet50网络

ResNet主要解决深度卷积网络在深度加深时候的“退化”问题。在一般的卷积神经网络中&#xff0c;增大网络深度后带来的第一个问题就是梯度消失、爆炸&#xff0c;这个问题Szegedy提出BN层后被顺利解决。BN层能对各层的输出做归一化&#xff0c;这样梯度在反向层层传递后仍能保持…

使用ElementUI组件库

引入ElementUI组件库 1.安装插件 npm i element-ui -S 2.引入组件库 import ElementUI from element-ui; 3.引入全部样式 import element-ui/lib/theme-chalk/index.css; 4.使用 Vue.use(ElementUI); 5.在官网寻找所需样式 饿了么组件官网 我这里以button为例 6.在组件中使用…

STM32-I2C

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. I2C通信1.1 I2C通信简介1.2 硬件电路1.3 I2C时序基本单元1.3.1 起始条件和终止条件1.3.2 发送一个字节1.3.3 接收一个字节1.3.4 发送应答和接收应答 1.4 I2C时序1.4.1 指定地址写1.4.2 当前地址读1.4.3 指定地址读…

Postman使用指南①网页版使用

postman官网地址&#xff1a;Postman API Platform 进入后点击右上角免费注册&#xff0c;注册后登录 登录之后即可在网页使用&#xff0c;无需下载

【网络安全】实验七(ISA防火墙的规则设置)

一、实验目的 二、配置环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟机的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。注&#xff1a;此处的学号本人学号的最后两位数字&…

C++ STL 多线程库用法介绍

目录 一&#xff1a;Atomic&#xff1a; 二&#xff1a;Thread 1. 创建线程 2. 小心移动(std::move)线程 3. 如何创建带参数的线程 4. 线程参数是引用类型时&#xff0c;要小心谨慎。 5. 获取线程ID 6. jthread 7. 如何在线程中使用中断 stop_token 三&#xff1a;如何…

leetcode每日一题-3033. 修改矩阵

题目描述&#xff1a; 解题思路&#xff1a;简单题目&#xff0c;思路非常直接。对列进行遍历&#xff0c;记录下最大值&#xff0c;然后再遍历一遍&#xff0c;把-1替换为最大值。需要注意的是进行列遍历和行遍历是不同的。 官方题解&#xff1a; class Solution { public:v…

图片管理新纪元:高效批量横向拼接图片,一键生成灰色艺术效果,打造专业视觉体验!

在数字时代&#xff0c;图片已成为我们生活和工作中不可或缺的一部分。但面对海量的图片&#xff0c;如何高效地进行批量管理、拼接和调色&#xff0c;成为许多人面临的难题。今天&#xff0c;我们为您带来了一款颠覆性的图片管理工具&#xff0c;让您轻松实现图片批量横向拼接…

STM32快速复习(七)IIC通信

文章目录 前言一、IIC是什么&#xff1f;二、标准库函数二、标准库示例代码总结 前言 IIC通信算是我在大学和面试中用的最多&#xff0c;问的最多的通信协议 工作后也经常用到&#xff0c;只是我负责的工作内容用的少&#xff0c;但是&#xff0c;一般项目中使用也是非常多的一…