fasttext工具介绍

news2024/10/6 3:04:03

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.coloradmin.cn/o/1904096.html

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

相关文章

Git中两个开发分支merge的原理

一 分支合并 1.1 原理 分支合并:就是将A分支修改后且commit的内容,合并到B分支,这些修改且提交的内容和B分支对应的内容和位置进行比较: 1.不一样的话,提示冲突,需要人工干预。 2.一样的话,…

【深入理解JVM】关于Object o = new Object()

1. 解释一下对象的创建过程 “半初始化”状态通常指的是对象在内存分配后、但在完全初始化之前的一种状态。在Java中,虽然JVM的规范和设计努力避免对象处于这种不稳定的状态,但在多线程环境下,由于指令重排序等并发问题,仍有可能…

Arduino ESP8266 开发环境搭建

Arduino ESP8266 开发环境搭建 很久之前学嵌入式时,用过Arduino8266进行开发,开发成本低、难度小,体验很不错。 近期,又突然要用,遂再次搭建环境,但变动挺多,有些小波折,开贴记录。…

【YOLOv9教程】如何使用YOLOv9进行图像与视频检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

强化学习中的Double DQN、Dueling DQN和PER DQN算法详解及实战

1. 深度Q网络(DQN)回顾 DQN通过神经网络近似状态-动作值函数(Q函数),在训练过程中使用经验回放(Experience Replay)和固定目标网络(Fixed Target Network)来稳定训练过程…

【踩坑】修复pyinstaller报错 No module named pkg_resources.extern

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 报错如下: 修复方法: pip install --upgrade setuptools pippyinstaller -F -w main.py --hidden-importpkg_resources.py2_wa…

VMware安装centos9详细教程(保姆级)

前言 centos9最新的centos版本,在近期的使用中发现它的操作界面与以往的centos7/8更加舒适,界面优化更加精细 项目终止日期(EOL) 从公告可知,CentOS 项目重心从 CentOS Linux 转移到了 CentOS Stream。下面是各个项…

Spring的核心概念理解案列

IDEA开发的简单“登陆成功”小项目 IDEA项目结构: 每一部分代码和相应的解读: com.itTony文件下有dao(实体)层,service(服务)层,编写的2个类(HelloSpring和TestSpring&…

ORA-12170: TNS:连接超时

今天在oracle数据库搭建连接远程数据库的dbink时,发现搭建失败报错:ORA-12170: TNS:连接超时 但是是能够ping的通远程数据库地址的。 telnet 172.18.6.104 1522要求查看下创建dblink语句,也确认创建语句无误。 (DESCRIPTION (ADDRESS_LIST…

使用labelme中的AI多边形(AI-polygon)标注 win版exe Create AI-Polygon闪退

这里写目录标题 虚拟环境创建labelme虚拟环境下载AI标注模型win Labelme.exe Create AI-Polygon闪退问题也用如下方法解决 win Labelme.exe Create AI-Polygon闪退问题也用如下方法解决愉快地使用labelme的AI标注工具 虚拟环境 创建labelme虚拟环境 创建基础环境并激活 cond…

顺序表的介绍

前言 大家好,作者菌又来了,今天我们开始顺序表的学习,今天的内容十分的简单,就是带领大家简单了解顺序表,那好话不多说,直接开始我们今天的正题!! 1.顺序表的概念和结构 线性表…

驾校管理系统的全面革新与升级

智慧驾校系统是一款专为现代驾校量身定制的综合性管理平台,它深度融合了云计算、大数据、物联网及人工智能等前沿技术,旨在为驾校打造一个高效、智能、便捷的运营生态系统。该系统通过数字化、信息化的手段,彻底革新了传统驾校的管理模式,不仅极大地提升了驾校的运营效率,…

智慧校园-基础平台功能总体概述

智慧校园基础平台是现代教育信息化的核心,它集成了系统管理、基础数据、系统监控、系统工具、流程管理等关键功能,构建了一个全面、智能、安全的校园生态系统。系统管理部分,通过权限管理和用户管理,实现了对用户访问权限的精细化…

【Qt】Qt开发环境搭建

目录 一. Qt SDK的下载&安装 二. Qt相关工具介绍 Qt的常用开发工具有: Qt CreatorVisual StudioEclipse 一. Qt SDK的下载&安装 Qt 下载官网: http://download.qt.io/archive/qt/ 国内清华源: https://mirrors.tuna.tsinghua.edu.cn/qt/arc…

freemarker生成pdf,同时pdf插入页脚,以及数据量大时批量处理

最近公司有个需求&#xff0c;就是想根据一个模板生成一个pdf文档&#xff0c;当即我就想到了freemarker这个远古老东西&#xff0c;毕竟freemarker在模板渲染方面还是非常有优势的。 准备依赖&#xff1a; <dependency><groupId>org.springframework.boot</gr…

【讲解下iOS语言基础】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【论文阅读】-- Visual Traffic Jam Analysis Based on Trajectory Data

基于轨迹数据的可视化交通拥堵分析 摘要1 引言2 相关工作2.1 交通事件检测2.2 交通可视化2.3 传播图可视化 3 概述3.1 设计要求3.2 输入数据说明3.3 交通拥堵数据模型3.4 工作流程 4 预处理4.1 路网处理4.2 GPS数据清理4.3 地图匹配4.4 道路速度计算4.5 交通拥堵检测4.6 传播图…

Halcon 产品周围缺口检测

*读取一张图像read_image (Image, 原图.jpg)*获取图像大小get_image_size(Image, Width, Height)*关闭已经打开的窗口dev_close_window ()*打开新窗口dev_open_window(0, 0, Width, Height, black, WindowHandle) //打开指定大小的窗口*对图像进行阈值操作threshold (Image, R…

C语言 指针和数组—指针数组及其在字符串处理中的应用

目录 问题的提出 问题的解决 回头看——指针、数组及其他类型的混合 指针数组与指向数组的指针 字符串的排序 问题的提出 问题的解决 回头看——指针、数组及其他类型的混合  基本数据类型  int 、 long 、 char 、 short 、 float 、 double……  数组是一种从…

001,函数指针是一种特殊的指针,它指向的是一个函数地址,可以存储函数并作为参数传递,也可以用于动态绑定和回调函数

函数指针是一种特殊的指针 001&#xff0c;函数指针是一种特殊的指针&#xff0c;它指向的是一个函数地址&#xff0c;可以存储函数并作为参数传递&#xff0c;也可以用于动态绑定和回调函数 文章目录 函数指针是一种特殊的指针前言总结 前言 这是ai回答的标准答案 下面我们…