zoukankan      html  css  js  c++  java
  • fasttext(1) -- 认识 fasttext 和 初步使用

    fastText 的 Python接口:https://github.com/salestock/fastText.py

    (1) fasttext 简介:
    FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,性能比肩深度学习而且速度更快。

    fastText 方法包含三部分:模型架构、层次 Softmax 和 N-gram 特征。

    模型架构:fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。

    层次softmax:在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈夫曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。

    N-gram 特征:fastText 可以用于文本分类和句子分类。不管是文本分类还是句子分类,我们常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。

    (2)分类过程
    fasttext在进行文本分类时,huffmax树叶子节点处是每一个类别标签的词向量。在训练过程中,训练语料的每一个词也会得到响应的词向量。输入为一个window 内的词对应的词向量,隐藏层为这几个词的线性相加。相加的结果作为该文档的向量。再通过softmax层得到预测标签。结合文档真实标签计算 loss,梯度与迭代更新词向量(优化词向量的表达)。

    参数方面的建议:

    1. loss function 选用 hs(hierarchical softmax)要比 ns(negative sampling)训练速度更快,准确率也更高

    2. wordNgram 默认为1,建议设置为 2 或以上更好

    3. 如果词数不是很多,可以把 bucket 设置小一些,否则会预留太多的 bucket 使模型太大

    (3) 初步使用示例
    1.我们先获得一批训练语料,格式是 已经分词的文档 + /t + __label__标签,比如 fasttex_train.txt 文件中,部分数据如下

    驻 阿 北约 部队 打死 两名 阿富汗 平民 中新网 6 月 12 日电   据 美国 媒体报道 , 驻 阿 北约 部队 11 日 在 阿富汗 东部 使用 迫击炮 打击 武装 分子 时 , 打死 两名 平民 。       北约 部队 当天 发表声明 称 , 北约 部队 在 Kunar 省 受到 了 武装 分子 袭击 , 随后 北约 部队 使用 迫击炮 进行 反击 , 但 打死 两名 平民 , 打伤 五人 。       此外 , 同样 在 Kunar 省 , 当天 阿富汗 一辆 卡车 同 北约 部队 车辆 相撞 , 导致 四名 阿富汗 平民 丧生 。 声明 并未 提及 两车 相撞 的 原因 。    <span> </span>__label__affairs
    俄罗斯 发射 飞船 为 国际 空间站 送货       新华网 快讯 : 北京 时间 15 日 9 时 15 分 , 俄罗斯 在 哈萨克斯坦 境内 的 拜科努尔 发射场 发射 了 一艘 货运 飞船 , 它 将 为 国际 空间站 送去 总重 约 2.5 吨 的 货物 。    <span> </span>__label__affairs
    2.训练模型 ,由于代码插入出现混乱,故改用文本格式

    import fasttext
    # 第一个参数是前面得到的 fasttex_train.txt ,第二个参数是将要保存模型的路径,默认会加上 .bin
    # label_prefix 就是标签或类别的起始符号
    classifier = fasttext.supervised("fasttext_train.txt","fasttext.model",label_prefix = "__label__")
    3.测试模型和使用模型分类

    import fasttext
    # 加载模型
    classifier = fasttext.load_model("fasttext.model.bin",label_prefix = "__label__")

    # 测试模型 其中 fasttext_test.txt 就是测试数据,格式和 fasttext_train.txt 一样
    result = classifier.test("fasttext_test.txt")
    print "准确率:",result.precision
    print "回归率:",result.recall

    # 使用模型,以测试集中第一个文档为例
    f = open("fasttext_test.txt")
    line = f.readlines()[0]
    f.close()

    result = classifier.predict([line])
    print result
    输出结果如下:


    ---------------------
    作者:ouprince
    来源:CSDN
    原文:https://blog.csdn.net/qq_32023541/article/details/80839800
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    NOIP2011 D1T1 铺地毯
    NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
    POJ 2513 trie树+并查集判断无向图的欧拉路
    599. Minimum Index Sum of Two Lists
    594. Longest Harmonious Subsequence
    575. Distribute Candies
    554. Brick Wall
    535. Encode and Decode TinyURL(rand and srand)
    525. Contiguous Array
    500. Keyboard Row
  • 原文地址:https://www.cnblogs.com/ExMan/p/10142493.html
Copyright © 2011-2022 走看看