• Zeurd
    2022-04-26
    TF-IDF因为各种问题,比如文章长度问题,长的文章一个词出现的次数肯定比短的来的多,又比如都是经济学的文章,一个出现80次,一个出现100次,不能代表100次的那个比80次的有用25%,存在边际效用递减的问题,所以一般会对文章数量做指数化以及归一化处理,尽可能减小误差

    作者回复: 👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻 ^^ 加油~

    
    4
  • John(易筋)
    2022-08-25 来自北京
    tf-idf的理论依据及不足 编辑 tf-idf算法是建立在这样一个假设之上的:对区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合的其他文档中出现频率少的词语,所以如果特征空间坐标系取tf词频作为测度,就可以体现同类文本的特点。另外考虑到单词区别不同类别的能力,tf-idf法认为一个单词出现的文本频数越小,它区别不同类别文本的能力就越大。因此引入了逆文本频度idf的概念,以tf和idf的乘积作为特征空间坐标系的取值测度,并用它完成对权值tf的调整,调整权值的目的在于突出重要单词,抑制次要单词。但是在本质上idf是一种试图抑制雜訊的加权,并且单纯地认为文本頻率小的单词就越重要,文本頻率大的单词就越无用,显然这并不是完全正确的。idf的简单结构并不能有效地反映单词的重要程度和特征词的分布情况,使其无法很好地完成对权值调整的功能,所以tf-idf法的精度并不是很高。 此外,在tf-idf算法中并没有体现出单词的位置信息,对于Web文档而言,权重的计算方法应该体现出HTML的结构特征。特征词在不同的标记符中对文章内容的反映程度不同,其权重的计算方法也应不同。因此应该对于处于网页不同位置的特征词分别赋予不同的系数,然后乘以特征词的词频,以提高文本表示的效果。 -- 维基百科
    展开

    作者回复: 👍🏻👍🏻👍🏻^^

    
    1
  • 林于翔
    2021-12-16
    from nltk import word_tokenize from nltk import TextCollection sents=['i like jike','i want to eat apple','i like lady gaga'] # 首先进行分词 sents=[word_tokenize(sent) for sent in sents] # 构建语料库 corpus=TextCollection(sents) # 计算IDF idf=corpus.idf('like') print(idf)#0.4054651081081644 请问这个idf值应该怎么算呢?如果按照公式,文档总数为3, 包含词条‘like’的文档数为2,分母再加上1,那么idf=ln(3/(2+1)=0?? 为什么会跟结果不符合呢?

    作者回复: hello,林于翔。谢谢留言。 idf的计算,实际上就是“包含该词语的文件的数目除以总文件数目”,本身是没有+1操作的,+1是为了防止出现分母为0的情况而做的平滑。实际情况下,语料的数量很庞大,所以“分母为零”的情况要远多于“分母+1=分子”的情况,所以就成了我们更多的使用普遍形式,即+1。而在文章的代码例子中,我特意选择的就是后面的情况,意在告诉大家,写代码要根据实际情况来进行边缘条件的判断。

    
    1
  • John(易筋)
    2022-09-09 来自北京
    方老师,最后一段代码有误,for少了in, input_content 应该是texts。修正后如下 from gensim import corpora, models import jieba.posseg as jp import jieba texts = [line.strip() for line in open('input.txt', 'r')] # 老规矩,先分词 words_list = [] for text in texts: words = [w.word for w in jp.cut(text)] words_list.append(words) # 构建文本统计信息, 遍历所有的文本,为每个不重复的单词分配序列id,同时收集该单词出现的次数 dictionary = corpora.Dictionary(words_list) # 构建语料,将dictionary转化为一个词袋。 # corpus是一个向量的列表,向量的个数就是文档数。你可以输出看一下它内部的结构是怎样的。 corpus = [dictionary.doc2bow(words) for words in words_list] # 开始训练LDA模型 lda_model = models.ldamodel.LdaModel(corpus=corpus, num_topics=8, id2word=dictionary, passes=10)
    展开

    作者回复: 好的,多谢。我看一下。👍🏻👍🏻👍🏻👍🏻👍🏻👍🏻

    
    
  • 思勇
    2022-06-22
    LDA模型示例无法跑通,从网上找了一个,可以跑: https://zhuanlan.zhihu.com/p/134161509

    作者回复: 你好,感谢留言。 具体是提示什么错误呢?

    
    
  • 亚林
    2022-05-31
    nltk 计算TF-IDF的时候,如果是无限个文档或是很大量的文档,这改怎么玩类

    作者回复: tf-idf本身是基于统计值的一个过程,所以能够处理极大量的文档。但是在另一方面,大量的文档会带来更多的term,但是这个term量在单一语言中也是有一个理论上限的,并不会特别巨大。放到更广泛的情况下,例如你用tf-idf做nlp之外的的任务,那么term的量就会变得非常非常大,这个时候你就需要对数据做采样逼近,或者使用分布式等方法进行统计。

    
    
  • 官
    2021-11-30
    只用TF-IDF的话,在不设置停用词的情况,有很多常见的冠词还有谓语动词出现的次数会非常高,比如 is the ,或者汉语“是”,“我”等。而在研究段落主题或者文章含义的时候,这些词实际含义并不大,所以在使用TF-IDF之前需要对文本进行一些预处理。
    
    5
  • Sam Wang
    2021-12-10
    TFIDF缺少了semantic meaning
    
    2
  • Matthew
    2023-03-07 来自江苏
    离线下载安装NLTK的nltk_data数据包: https://blog.csdn.net/qq_43140627/article/details/103895811 其中,tokenizers/ 下的 punkt.zip 需要解压缩
    
    
  • John(易筋)
    2022-09-09 来自广东
    翻译: 词频逆文档频率TF-IDF算法介绍及实现 手把手用python从零开始实现 https://blog.csdn.net/zgpeace/article/details/126596077
    
    