FastText

FastText

标签(空格分隔): 自然语言处理


FastText

FastText 论文链接

综述

FastText不是一种特殊的机构,而是一种思想,就是为了更快的求得结果。

用于文本分类的FastText(pytorch)


class FastText(BasicModule):
    def __init__(self, config, vectors=None):
        super(FastText, self).__init__()
        self.config = config

        self.embedding = nn.Embedding(config.vocab_size, config.embedding_dim)
        if vectors is not None:
            self.embedding.weight.data.copy_(vectors) ## 将词向量嵌入到self.embedding中去

        self.pre = nn.Sequential(
            ## 这里相当于将原来的300维度的向量转化成600维度的
            nn.Linear(config.embedding_dim, config.embedding_dim * 2),
            nn.BatchNorm1d(config.embedding_dim * 2),
            nn.ReLU(True)
        )
        self.fc = nn.Sequential(
            ## 这里会把600维度的向量转化成19维度,也就是通过两个线性层转化成想要的y(目标值)的维度,下面这行是第一个线性层
            nn.Linear(config.embedding_dim * 2, config.linear_hidden_size),
            nn.BatchNorm1d(config.linear_hidden_size),
            nn.ReLU(inplace=True),
            ## 这里是第二个线性层
            nn.Linear(config.linear_hidden_size, config.label_size)
        )

    def forward(self, sentence):
        embed = self.embedding(sentence)  # seq * batch * emb  2000 * 64 * 300 ## 这里每一个句子都是64句,每句2000个词语,所以sentence的维度是2000*64
        embed_size = embed.size() ## 2000 * 64 * 300
        embed.contiguous().view(-1, self.config.embedding_dim) # 128000 * 300 这里相当于把batch中的每一个句子中的每一个词都拼接起来,所以12800就是这么来的
        out = self.pre(embed.contiguous().view(-1, self.config.embedding_dim)).view(embed_size[0], embed_size[1], -1)
        mean_out = torch.mean(out, dim=0).squeeze()  # batch * 2emb 64 * 600 ## 这里相当于对每一个2000长度的句子取平均

        logit = self.fc(mean_out)
        return logit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值