FastText

FastText

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


FastText

FastText 论文链接

  • https://pan.baidu.com/s/1032UerrzaZbJGjb3-PavoA

综述

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

你可能感兴趣的:(机器学习,自然语言处理)