分类算法(二)—— FastText

分类算法(二)—— FastText(原理介绍)

文本表示(三)—— fasttext 词向量调用代码

原理介绍

    fasttext是facebook开源的一个词向量与文本分类工具,在2016年开源,典型应用场景是“带监督的文本分类问题”。提供简单而高效的文本分类和表征学习的方法,性能比肩深度学习而且速度更快。

    fastText的架构和word2vec中的CBOW的架构类似,因为它们的作者都是Facebook的科学家Tomas Mikolov,而且确实fastText也算是words2vec所衍生出来的。

    具体原理不细讲了,可以参考后面的链接。(建议直接翻到最后看后续,有彩蛋)

 

安装   

重点说问题,上代码。

    fasttext适用于linux环境下,pip install fasttext生成的model.bin文件在调用时,结果会是nan    

解决方法    

   1. 下载source code(zip)文件:https://github.com/xiamx/fastText/releases

  2. 到下载的路径下,pip install XXXX.zip

------------------

另外有发现一种解决办法: `但是这种方法导致我原来的模型加载不了了。。。。`

git clone https://github.com/facebookresearch/fastText.git 
cd fastText 
pip install .

 

代码示例

训练数据和测试数据来自网盘:

https://pan.baidu.com/s/1jH7wyOY

https://pan.baidu.com/s/1slGlPgx

import fastText.FastText as ff
classifier = ff.train_supervised(r"news_fasttext_train.txt")
model = classifier.save_model(r'fasttext1.model') # 保存模型
classifier = ff.load_model(r'fasttext1.model') # 加载保存的模型
test = classifier.test(r"news_fasttext_test.txt") # 输出测试结果
classifier.get_labels() # 输出标签
pre = classifier.predict('快讯 : 美国 4 月 营建 开支 环比 增 0.4 % 好于 预期   欢迎 发表 评论     我要 评论  ') #输出改文本的预测结果
print(pre)

这里不得不说还有一个坑,训练数据和测试数据的路径不能有中文。。。不知道什么鬼,几年前也曾经遇到过这种问题,但是近来没发现中文报啥错,可能是sklearn TensorFlow什么的有专门的处理,总之,这里中文路径很痛苦。。

参考链接:

https://blog.youkuaiyun.com/john_bh/article/details/79268850

https://blog.youkuaiyun.com/grafx/article/details/78697881

https://blog.youkuaiyun.com/yick_liao/article/details/62222153

https://blog.youkuaiyun.com/sinat_26917383/article/details/54850933

https://blog.youkuaiyun.com/lxg0807/article/details/52960072

 

 

------------------------我是分割线----------------------------------

 

后续

然鹅经历了几个月之后,重新安装按上面操作遇到了问题,于是有发现了新的安装方法

Pip install fasttext-0.8.3-cp36-cp36m-win_amd64.whl
https://www.lfd.uci.edu/~gohlke/pythonlibs/#fasttext

fastText实现方法
import fastText.FastText as ff
from gensim.models import FastText
https://www.cnblogs.com/gaofighting/p/9552821.html

-------------------------------

Linux 安装方法(参考:https://blog.youkuaiyun.com/weixin_44177568/article/details/102511480) 亲测可行~

git clone https://github.com/facebookresearch/fastText.git
cd fastText
pip install .

简单说下这个fasttext包安装的坑, 有的python版本是没有对应包的,更没有wheel文件, 只能下载源码,去pip install、

 

 

其它相关链接:

https://blog.youkuaiyun.com/weixin_44388679/article/details/88937700

https://blog.youkuaiyun.com/qq_17814041/article/details/80041189

 

### 使用 FastText 进行单词分类 FastText 是一种强大的文本分类工具,不仅能够处理完整的文档分类任务,还能用于更细粒度的任务如单词级别的分析。通过学习单词及其子词(n-grams)的向量表示,FastText 可以有效地捕捉词汇间的语义关系并应用于多种自然语言处理场景[^1]。 对于单词分类的具体应用而言,虽然 FastText 主要被设计用来做整个文档或者句子层面的分类工作,但其核心机制同样适用于单个单词的类别归属判断。当目标转向单词级别时,可以考虑如下方法: #### 准备数据集 构建专门针对单词的数据集非常重要。每条记录应仅包含单一的目标单词作为输入特征,并附带相应的标签来指示该单词所属的特定类别。例如,在情感分析背景下,“好”的标签可能是正面情绪;而在医学术语识别中,“病原体”则会被标记为生物学术语一类。 #### 预处理阶段 由于 FastText 支持直接读取纯文本文件格式作为训练源材料,因此需确保准备好的单词列表保存成适合的形式——即每一行代表一个独立样本,由待分类单词加上对应的类别标识组成。此外,如果希望利用 fastText 的 subword 特征提取能力,则无需额外分词操作即可让算法自动解析字符 n-gram 组合[^2]。 ```bash __label__positive 好 __label__negative 差 ... ``` #### 构建与训练模型 一旦准备好适当结构化的数据集合之后,就可以调用 FastText 库创建一个新的监督型分类器实例,并指定超参数配置来进行迭代优化过程直至收敛获得最终版本的预测函数。下面给出一段 Python 实现的例子说明如何加载自定义的小规模字典并通过 fit 方法启动本地计算资源完成整个流程: ```python import fasttext # 定义路径到已整理完毕的训练&验证集 train_data_path = 'path/to/train_words.txt' valid_data_path = 'path/to/validation_words.txt' # 初始化fastText分类器对象 classifier = fasttext.train_supervised(input=train_data_path, epoch=25, lr=1.0) # 测试模型性能指标(可选) print(classifier.test(valid_data_path)) ``` #### 执行推理任务 经过充分训练后的 FastText 模型可以直接接收新的未知单词字符串作为输入参数传递给 `predict` 接口从而得到最有可能匹配上的几个候选类别连同置信水平分数一起返回给用户端展示出来供进一步决策参考之用。 ```python predictions = classifier.predict(['新', '旧'], k=3) # 对两个测试单词分别做出前三个可能类别的推测 for word, (labels, probs) in zip(['新', '旧'], predictions): print(f'Word "{word}" is predicted to belong to categories {", ".join(labels)} with probabilities {probs}') ``` 值得注意的是上述代码片段假设读者已经安装好了官方发布的 PyPi 包形式发布的 fastText API 并熟悉基本编程概念以便于灵活调整各项设置满足实际项目需求变化的要求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微知girl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值