NLP实践六:Fasttext实现文本分类

本文深入探讨了Fasttext的原理,包括模型架构、层次SoftMax和N-gram子词特征,并通过Pytorch展示了如何进行文本分类的代码实践。

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

一 Fasttext原理

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

模型架构

fastText模型架构:
其中 x 1 , x 2 , . . . , x N − 1 , x N x_1,x_2,...,x_{N-1},x_N x1,x2,...,xN1,xN表示一个文本中的n-gram向量,每个特征是词向量的平均值。这和前文中提到的cbow相似,cbow用上下文去预测中心词,而此处用全部的n-gram去预测指定类别。
在这里插入图片描述

层次SoftMax

对于有大量类别的数据集,fastText使用了一个分层分类器(而非扁平式架构)。不同的类别被整合进树形结构中(想象下二叉树而非 list)。在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈弗曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。

fastText 也利用了类别(class)不均衡这个事实(一些类别出现次数比其他的更多),通过使用 Huffman 算法建立用于表征类别的树形结构。因此,频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高.
在这里插入图片描述

N-gram子词特征

fastText 可以用于文本分类和句子分类。不管是文本分类还是句子分类,我们常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。在 fasttext 中,每个词被看做是 n-gram字母串包。为了区分前后缀情况,"<", ">"符号被加到了词的前后端。除了词的子串外,词本身也被包含进了 n-gram字母串包。以 where 为例,n=3 的情况下,其子串分别为
<wh, whe, her, ere, re>,以及其本身。

二 Pytorch代码实践

使用wordembeddings来实现fasttext模型,数据集为ThuCnews
数据预处理部分在我之前的文章有提到分词的基本概念与生成词向量矩阵

模型定义:

import torch
from torch import nn
import numpy as np
import torch.nn.functional as F

class fastText(nn.Module):
    def __init__(self,word_embeddings):
        super(fastText, self).__init__()
        self.hidden_size=100
        self.embed_size=200
        self.classes =10
        # Embedding Layer
        self.embeddings = nn.Embedding(len(word_embeddings),self.embed_size)
        self.embeddings.weight.data.copy_(torch.from_numpy(word_embeddings))
        self.embeddings.weight.requires_grad = False
        # Hidden Layer
        self.fc1 = nn.Linear(self.embed_size, self.hidden_size)
        
        # Output Layer
        self.fc2 = nn.Linear(self.hidden_size, self.classes)
        
        # Softmax non-linearity
        self.softmax = nn.Softmax(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值