[NLP学习笔记-Task3] TF-IDF + 互信息

TF-IDF

  1. TF-IDF是一种统计方法,用来评估一个字词在一个资料库中的重要程度(关键词提取),常用于资讯检索与文本挖掘中。

    其中,TF是表示词频(Term Frequency),IDF表示逆文档频率(Inverse Document Frequency)。分别计算TF和IDF的值,然后将二者相乘即得到TF-IDF的值。

  2. TF词频

    词频即一个词在文本中出现的次数,一个词在文本中大量出现,则它通常比较重要(停用词除外)。

    停用词:这些停用词一般可以使得句子更通顺,它们在文本中必不可少且中大量存在。所以在统计词频时,首先需要将停用词去掉,保留文本中有实际含义的词。

    词频计算公式:
    在这里插入图片描述
    考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化:
    在这里插入图片描述

  3. IDF逆文档频率
    若一个词存在于大量文档中,那么这个词是某篇文章关键词的概率就很低,因为无法展示文章的特点。极端情况是,每篇文档都存在这个词,那么这个词就不具有代表性,IDF就可以用来量化这种概率。

    逆文档频率计算公式:
    在这里插入图片描述
    其中,对数的真数中,分母加1是为了防止所有文档都不包含该词。

  4. TF-IDF
    TF-IDF计算公式:
    在这里插入图片描述
    可以发现,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。一个词的TF-IDF值越高,则它越有可能是关键词。

  5. gensim中的TF-IDF

    安装gensim:pip install gensim

    import gensim
    
    corpus = [
        'this is the first document',
        'this is the second second document',
        'and the third one',
        'is this the first document'
    ]
    
    word_list = []
    for i in range(len(corpus)):
        word_list.append(corpus[i].split(' '))
        
    word_list
    

    运行结果:
    在这里插入图片描述

    # 赋给语料库中每个词(不重复的词)一个整数id
    dictionary = gensim.corpora.Dictionary(word_list)
    new_corpus = [dictionary.doc2bow(text) for text in word_list]
    new_corpus
    

    运行结果:元组中第一个元素是词语在词典中对应的id,第二个元素是词语在本文档(这里是指一行)中出现的次数,且是乱序
    在这里插入图片描述

    #查看语料库中每个词对应的id
    print(dictionary.token2id)
    

    运行结果:
    在这里插入图片描述

    # 训练模型并保存
    tfidf = gensim.models.TfidfModel(new_corpus)
    tfidf.save('gensim_tfidf.tfidf')
    
    # 载入模型
    tfidf = gensim.models.TfidfModel.load('gensim_tfidf.tfidf')
    
    # 使用这个训练好的模型得到单词的tfidf值
    tfidf_vec = []
    for i in range(len(corpus)):
        string = corpus[i]
        string_bow = dictionary.doc2bow(string.lower().split())
        string_tfidf = tfidf[string_bow]
        tfidf_vec.append(string_tfidf)
    
    tfidf_vec
    

    运行结果:我们发现这向量的维数和我们语料单词的个数不一致
    在这里插入图片描述

    # 测试gensim计算方法
    string = 'the i first second name'
    string_bow = dictionary.doc2bow(string.lower().split())
    string_tfidf = tfidf[string_bow]
    print(string_tfidf)
    
    #运行结果:[(1, 0.4472135954999579), (5, 0.8944271909999159)]
    

    gensim的TF-IDF小结:

    • gensim有自动去除停用词的功能,比如the
    • gensim会自动去除单个字母,比如 i
    • gensim会去除没有被训练到的词,比如name => 所以通过gensim并不能计算每个单词的tfidf值
  6. sklearn中的TF-IDF算法

    其中语料使用gensim那个例子的
    在这里插入图片描述

点互信息、互信息

  1. 点互信息PMI(Pointwise Mutual Information)

    点互信息用来衡量两个事物之间的相关性。PMI的定义如下:
    在这里插入图片描述
    在概率论中,如果x跟y不相关,则 P(x,y) = P(x)P(y)。二者相关性越大,则 P(x,y) 就相比于 P(x)P(y) 越大。在y出现的情况下x出现的条件概率 p(x|y) 除以x本身出现的概率 p(x) ,自然就表示x跟y的相关程度。log是单调递增函数,而且 log 1 = 0 ,则表明P(x,y) = P(x)P(y),此时相关性为0。

  2. 互信息MI(Mutual Information)

    互信息是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。公式如下:
    在这里插入图片描述
    互信息其实就是对X和Y的所有可能的取值情况的点互信息PMI的加权和。

  3. NLP中的应用

    互信息值越高, 表明 X 和 Y 相关性越高, 则 X 和 Y 组成短语的可能性越大; 反之, 互信息值越低,X 和Y之间相关性越低, 则X 和Y之间存在短语边界的可能性越大。公式中的X和Y指的是两个相邻的单词,P值是它的出现概率。

参考资料

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tf-idf是自然语言处理中一种常用的文本特征表示方法。tf代表词频(term frequency),idf代表逆文档频率(inverse document frequency)。 tf表示在一篇文档中一个词出现的频率。一般来说,一个词在一个文档中出现得越频繁,它对文档的特征表示的重要性越大。但是tf并没有考虑到词在整个语料库中出现的频率。 idf则通过一种统计方式,计算一个词在所有文档中出现的概率。公式为idf = log(总文档数/包含该词的文档数)。由于取对数,所以当一个词在所有文档中都出现时,它的idf值会很小,对于文档特征表示的重要性也会很小。而当一个词在少数文档中出现时,它的idf值会很大,对于特征表示的重要性也会很大。 tf-idf的计算方法为tf * idf,通过将tf和idf相乘可以得到每个词在文档中的tf-idf值。这个值越大则说明这个词对文档的特征表示的重要性越高。 tf-idf可以用于文本分类、信息检索、文本聚类等任务。在文本分类中,通过计算每个词的tf-idf值可以得到文档的特征表示,然后可以使用机器学习算法对文档进行分类。在信息检索中,可以通过计算查询词的tf-idf值来评估文档和查询之间的相关性。在文本聚类中,可以根据词的tf-idf值来度量文档之间的相似度,从而将相似的文档聚类在一起。 总之,tf-idf是一种常用的文本特征表示方法,可以用于自然语言处理中的各种任务。通过考虑词频和词在整个语料库中出现的频率,tf-idf可以帮助我们更好地理解和分析文本数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值