美文网首页
词向量构造 - Tf-idf模型

词向量构造 - Tf-idf模型

作者: taon | 来源:发表于2020-08-27 10:17 被阅读0次

    前面我们总结过词袋模型,词袋模型将文本中所有不重复的词看作一个集合,然后对文本中的每句话进行编码。在句子中对于出现的词标记为1,未出现的词标记为0。这样我们就完成了对文本向量的编码,然后就可以调用机器学习模型来对其进行拟合。词袋模型解决了文本编码的问题,但词袋模型本身也存在着巨大的缺点。比如:词袋模型中向量只考虑词的出现频率,不考虑该词的具体含义;词袋模型构造的向量不考虑词出现的先后顺序;词袋模型构造的向量为稀疏矩阵,模型的效果非常有限。基于以上问题,Tf-idf模型出现了。

    1.Tf-idf(词频-逆文档频率)模型

    首先解释Tf-idf模型中的关键词。

    Tf(Term frequency):词频,每个词在文章中出现的频率。

    Tf = \frac {单个词} {该文章的总词数}

    Idf(Inverse document frequency ):逆文档频率,语料库所有的文档/含有该词的文档数目。

    Idf = log(\frac{语料库中所有的文档数目}{含有该词的文档数目})

    Tf-idf = Tf * Idf

    Tf-idf模型相比较于词袋模型的改进点:引入了词的重要性。

    举个例子:假如有《中国陕西特色美食羊肉泡馍》这篇文章,这篇文章中可能“陕西”和“羊肉泡馍”出现的频率都很高,但是这两个词的Idf值是不同的。因为“羊肉泡馍”只出现在特定的文章中,而陕西可以出现在很多文章中,这样“羊肉泡馍”的Idf值就会很大。所以“羊肉泡馍”更能代表该文章的主题,这是Tf-idf的升级之处。

    2.Tf-idf词向量实现

    自己创建一段文本,然后调用sklearn库中的Tf-idf算法。

    #导入工具包
    import numpy as np
    import pandas as pd
    from sklearn.feature_extraction.text import TfidfVectorizer
    
    #创建文本内容
    text = ['The dog runs to a cat', 'the cat finds a fish in the basin', 'the bird is flying freely in the sky ']
    
    #初始化Tf-idf模型并训练文本
    tf_idf = TfidfVectorizer(analyzer = 'word',stop_words = 'english')
    tf_matrix = tf_idf.fit_transform(text)
    
    #查看Tf-idf模型中的关键词
    tf_idf.get_feature_names()
    #['basin', 'bird', 'cat', 'dog', 'finds', 'fish', 'flying', 'freely', 'runs', 'sky']
    
    #展示Tf-idf训练后的文本格式
    pd.DataFrame(data = tf_matrix.toarray(),columns = vocab)
    

    得到的结果如图所示,每一个词都用一个数值表示,数值的大小表示其在文章中的重要程度。
    [图片上传失败...(image-ae059c-1598494610636)]

    3.Tf-idf文档说明

    class sklearn.feature_extraction.text.TfidfVectorizer(*, 
    input='content', encoding='utf-8', decode_error='strict', 
    strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, 
    analyzer='word', stop_words=None, token_pattern='(?u)\b\w\w+\b', 
    ngram_range=(1, 1), max_df=1.0, min_df=1, max_features=None, 
    vocabulary=None, binary=False, dtype=<class 'numpy.float64'>, 
    norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)
    

    关键参数说明

    • encoding:编码方式,默认utf-8
    • lowercase:是否将文本转化为小写,默认为True
    • analyser:编码的对象,默认为word,也可以选择字符char
    • stop_words:停用词,默认为None,英文文本可以指定为'englishi',也可以自己制定停用此表
    • ngram_range:词组的范围,默认为(1,1),即一个词为一个单位。也可以自己指定如(1,2),(2,2)等
    • max_df:可以设置为范围在[0.0 1.0]的float,也可以设置为没有范围限制的int,默认为1.0。这个参数的作用是作为一个阈值,当构造语料库的关键词集的时候,如果某个词的document frequence大于max_df,这个词不会被当作关键词。如果这个参数是float,则表示词出现的次数与语料库文档数的百分比,如果是int,则表示词出现的次数。如果参数中已经给定了vocabulary,则这个参数无效
    • min_df:类似于max_df,不同之处在于如果某个词的document frequence小于min_df,则这个词不会被当作关键词
    • max_features:默认为None,可设为int,对所有关键词的term frequency进行降序排序,只取前max_features个作为关键词集

    4.小结

    • Tf-idf模型,引入了词的重要程度指标,使得构造的文本向量更加准确
    • Tf-idf模型,仍然没有考虑词语的具体含义
    • 下一小结,了解词嵌入模型(word2vec),将上下文语境引入词语的向量构造中

    相关文章

      网友评论

          本文标题:词向量构造 - Tf-idf模型

          本文链接:https://www.haomeiwen.com/subject/dfshjktx.html