机器学习第六篇----FastText实践

本文介绍了如何在对话机器人项目中应用FastText。由于FastText在保持高精度的同时提高了训练和测试速度,并且能自训练词向量,因此被选中。文章涉及FastText的安装、中文分词、数据标注、模型训练和预测过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做对话机器人,使用了调研之后使用了fasttext,主要考虑对话机器人主要是短文本,而且与基于神经网络的文本分类算法相比它主要由两个优点
(1)首先FastText在保持高精度的同时极大地加快了训练速度和测试速度。
(2)再有就是不需要使用预先训练好的词向量,因为FastText会自己训练词向量

1.fasttext 安装:

pip install fasttext

2.fasttext 使用过程:
(1)中文对话不同于英文,英文的单词之间有空格,天然的分词。但是中文就不同,需要首先分词(这里不展开分词,后面写个专题吧)

# 使用的hanlp分词,去掉停用词(具体参考pyhanlp的用法)
NotionalTokenizer = JClass("com.hankcs.hanlp.tokenizer.NotionalTokenizer")
words = NotionalTokenizer.segment(text)

(2)fasttext 数据标注,fasttext 分类属于有监督学习(word2vec属于无监督学习),有监督学习首先需要进行文本标注

# 前面是__label__ + 标签,然后后面跟tab, 后面是分词之后的文本
__label__1   内容1
__label__2 内容2
__label__3  内容3
__label__4   内容4

(3)有了分类文本之后,开始训练模型,训练过程非常快

# 数据训练好之后,开始预测模型
classifier = fasttext.supervised("fastText_train.txt", 'models/fasttext_train.model',
                                 label_prefix='__label__',
                                 loss='hs',
                                 epoch=30,
                                 word_ngrams=2,
                                 bucket=2000000)
# fasttext        分类可以调参的参数如下         
./fasttext supervised
Empty input or output path.
 
The following arguments are mandatory:
-input        training file path
-output       output file path
 
The following arguments are optional:
-lr           learning rate [0.05]
-lrUpdateRate change the rate of updates for the learning rate [100]
-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]
-neg          number of negatives sampled [5]
-wordNgrams   max length of word ngram [1]
-loss         loss function {ns, hs, softmax} [ns]
-bucket       number of buckets [2000000]
-minn         min length of char ngram [3]
-maxn         max length of char ngram [6]
-thread       number of threads [12]
-t            sampling threshold [0.0001]
-label        labels prefix [__label__]
-pretrainedVectors  pretrained word vectors for supervised learning []

#针对上述参数:
#训练模式下涉及到的主要参数有学习率(-lr),隐层的维数(-dim),最小词频(-minCount),负采样个数(-neg)和n-grams的长度(-wordNgrams)等。
# word_ngrams 大于1时,模型的精度会提交很多,但是模型的大小也是很大不少,不建议设置太大,因为训练的复杂度和模型的大小会指数级增长,我们在训练的时候使用的是2,需要注意的是修改了 word_ngrams,需要相应的调整bucket,bucket设置的小一点,否则预留会预留太多bucket使模型太大
#-lr 设置过大不容易收敛,太小容易过拟合,训练速度也会变慢,我们使用的是默认
# loss 损失函数选用hs(hierarchical softmax)要比ns(negative sampling) 训练速度要快很多倍,并且准确率也更高
# pretrainedVectors  可以使用已经训练好的word2vec模型,训练现有的数据,好久就是训练样本中没有的词,在预测的时候会大概率避免不能转化为向量,不好的地方就是,模型会更大,下载地址https://fasttext.cc/docs/en/crawl-vectors.html

(4)有了模型之后,可以使用模型进行预测

model = fasttext.load_model('chatbot/classify/models/fasttext_train.model.bin', label_prefix='__label__')
labels = model.predict_proba(["重庆 永川 消防 提示 夏季 酷暑 来临 警惕 火灾 隐患 "])
print(labels)
#[[('新闻', 0.560547)]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值