因为工作中需要用到计算词语权重,进而作词与选择,思考了一下tf/idf。
首先还是简单介绍一下tf/idf。
这个概念最开始用于信息检索。tf表示term frequency,通常是指词频;idf表示inversed document frequency,是文档频率的倒数。计算方式如下:通常是对于一篇文档,统计某个词出现的次数,并用文档中的总词数作归一化,计算出的tf在(0,1)之间。同时,统计这个词在整个文档集合中出现在哪些文档当中,记录下这些文档的个数,用总文档数做归一化,作为df。直观上,某个词对于某个类别越重要,则他在这个类别的tf越高;对于df,如果df越大,表明他在各个文档中都有出现,那么他对目标文档的重要性越低。总之,某个词的重要程度与tf成正比,与df成反比,也就是与idf成正比。当然,idf计算之前还要取log值。这一点,在吴军的《数学之美》中解释,tf/idf的物理意义来自于信息论,是在某个特定情况下,是词语分布与文档分布的KL距离。关于这个信息论的解释,我在网上搜了好久,没有见到简洁的推导;自己想了想,也没有太想明白。关于tf/idf的详细介绍请参考维基百科。
tf/idf表征了词语和文档之间的关系,将它用于信息检索是很直观的事情。不过,我遇到的问题不实信息检索。如果是文本分类,用tf/idf选择某个类别的文本的特征词,如何?
与上面的问题相比,文本分类问题更复杂一些,因为除了词语、文档这两个原有的维度,又多了一个文档类别的维度。在文本分类的特征选择过程中,计算tf/idf,首先要面临的问题是,如何定义idf?即如何定义idf中的d,即“文档”这一概念。有不同种选择。我们先老老实实地沿用信息检索中的概念,文档就是一篇文章。那么接下来的问题是,在多大的范围内计算df?对于某个类别,用tf/idf来选择这个类别相关的特征词,tf的计算范围当然是仅限于这个类别中了,即统计这个类别的文章里面,特征词出现的次数。那df呢?可以是全局统计,也可以是在这个类别当中统计。如果是后者,似乎感觉怪怪的——即便是df很低,那只能说这个词在这个类别中出现的也不均匀,也不能说明它的重要啊。如果是全局统计,也存在类似的问题,就是不论df是大是小,都和当前的类别无关。tf/idf本来就是计算词语和文档的关系的,关类别鸟事?!
怎么办呢?
一种方法,很直观,把传统tf/idf中的“文档”的概念替换为“类别”的概念。df就表示当前特征词语在哪些类别中(而不是哪些文档中)出现了。tf自然是特征词在类别中出现的次数了。这样,沿用传统的公式,也就可以计算了。不过这样也不见得就好。通常来讲类别数目不多,特征词很容易就在所有类别中都出现过,这样计算出来的idf值是0,词语没有任何区分能力。而这个词明明是在当前类别中出现了很多次,在其他类别中虽然也出现了,但是出现的次数很少——总之一句话,这个词对当前类别是有区分能力的。还有问题,就是某个词语的df可能很大,不过这些df都是出现在同一个类别当中,这时候这个词语正式表征这个类别的特征词,但是计算出来的tf/idf值可能很小,无法作为特征词被选中。
又怎么办呢?
问题的根源在于,传统tf/idf是定义“词语——文档”两个维度的关系的,并且两个维度中不同词语和不同文档的数据都很多(统计起来也有区分力);而现在,扩展到了“词语——文档——类别”三个维度关系,并且类别的数目远小于其他两个维度的数目。上网上找了一下,这个问题在学术界,尤其是文本分类任务中,也有被发现,解决方法是扩充tf/idf的计算方式。扩充的思路就是加入词语和类别之间的分布信息;扩充的手法就五花八门,有很复杂的。不过个人喜欢一个简单的扩充:
原始idf计算:
idf (term) = log ( N / N_term )
其中N是文档集合中文档的数目,N_term是包含词语term的文档数目。
改进的idf计算:
idf (term) = log (N * M / N_term )
其中M是当前类别中包含词语term的文档数——这个要与最终计算的词语对该类别的权重成正比。
就想到这里了,写下来,备忘;也不知道说明白问题没有?!
分享到:
相关推荐
2. 学习文本建模方法,如词袋模型、TF-IDF、n-gram等,将非结构化的文本转化为可计算的向量形式。 3. 理解并实现朴素贝叶斯分类器,理解其概率理论基础及假设,学习如何利用它进行文本分类。 4. 学习并实现支持向量...
例如,可以使用TF-IDF算法提取关键词,并将文本转化为向量形式,然后通过余弦相似度计算文档的相似性,从而更有效地进行分类和检索。 AI在运维中的结合思考,关键在于如何有效地将AI技术与现有的运维流程和工具相...
大数据分析课程作业任务1使用scala实现wordcount基于Spark RDD任务2README说明在/Assginment2下的README.md使用方法为TF-IDF文本排序字数统计任务3OCR识别图片,提取矩阵PageRank计算思考如果是1万张图片呢任务4SVD ...
3. 关键词提取:应用TF-IDF、TextRank等算法,找出具有高代表性的关键词或短语。 4. 自适应扩充:基于用户行为的反馈,如果某一关键词频繁出现或者与当前热点相关,系统会将其纳入关键词库,并根据其影响力调整权重...
TF-IDF 是一种常用的统计方法,旨在评估词语在文本中的重要性。它通过计算词语的频率和文档中的频率,评估词语的重要性。 5. Lucene 的应用和局限 Lucene 是一种广泛应用的全文检索引擎,但它有一定的局限性,例如...
2. **特征提取**:可能使用TF-IDF(词频-逆文档频率)或BERT等预训练模型进行语义特征提取,以捕捉文本的深层含义。 3. **模型构建**:利用Python的机器学习库,如Scikit-learn或TensorFlow,建立分类模型来预测...
1. **词频-逆文档频率(TF-IDF)**:这是一种常用的文本挖掘技术,用于评估词汇在文档中的重要性。通过计算TF-IDF值,可以筛选出更能代表文档主题的关键词。 2. **共现分析**:研究词汇之间的共现关系,可以揭示词语...
例如,让学生分析社交媒体上的热门话题,通过Jieba进行文本预处理,然后使用TF-IDF算法提取关键词,以此来了解公众关注的焦点。这样的实践项目不仅锻炼学生的编程能力,也培养了他们的问题解决和数据分析能力。 ...
1. 信息检索:学生可能需要了解和应用布尔模型、TF-IDF等信息检索方法,通过构建查询语句和文档的相似度计算,实现信息的有效检索。 2. 数据预处理:包括数据清洗(去除噪声和不完整数据)、数据转换(如标准化、...
5. **NLP与TF-IDF、中文分词**: 自然语言处理技术,TF-IDF用于文本重要性度量,中文分词是理解中文文本的关键步骤。 【大数据处理框架】 6. **Spark**: 高性能的并行计算框架,支持实时和批处理,提供了易用的API...
- 庖丁分词的实现原理,如字典构建、分词算法(如HMM、TF-IDF等)。 通过对这些知识点的理解和实践,你可以掌握网络编程的基本技能,并为开发更复杂的网络应用打下坚实的基础。记得在分析源代码时,不仅要关注具体...
1. 抄袭检测原理:反抄袭软件通过比对大量文献数据库,运用复杂的算法(如TF-IDF、余弦相似度等)来查找文本中的相似片段。它将用户提交的文档与网络资源、学术论文库、期刊文章等进行对比,找出可能的匹配度高、...
这类似于文本挖掘中的tf-idf方法,该方法可以量化文本中词语的重要性。通过计算分析对象的各个属性与舆情资源的关联程度,再进行加权求和,从而得出每个分析对象与整体舆情资源的关联度。 数据抽取是分析的第一步,...
查重系统通常使用先进的文本比对技术,如N-gram、TF-IDF算法等,对提交的文档与庞大的数据库(包括网络资源、学术期刊、学位论文等)进行对比,找出相似或相同的部分。查重报告会列出这些相似度高的段落,并给出...
SMART系统引入了词频-逆文档频率(Term Frequency-Inverse Document Frequency,TF-IDF)的概念,这是一种衡量单词在文档中的重要性的统计方法,至今仍被广泛应用于文本检索和信息挖掘中。此外,这一时期还见证了...
在这样的项目中,学生可能会使用自然语言处理(NLP)技术,如词嵌入(Word Embeddings)、情感词典、TF-IDF或词向量等方法提取文本特征。机器学习模型可能包括朴素贝叶斯、支持向量机(SVM)、随机森林、深度学习的...
而"检索.cpp"则可能包含了实际的检索算法,比如TF-IDF、BM25等,这些算法用于计算查询与数据库中多媒体信息的相关性,从而返回最相关的检索结果。 四、多媒体信息检索技术 多媒体信息检索不同于文本检索,它涉及到...
在这个语料库智能检索系统中,信息检索技术可能包括倒排索引、TF-IDF(词频-逆文档频率)、BM25等经典算法,以及可能的深度学习方法,如词嵌入和Transformer模型,用于理解和匹配用户的查询意图。 语料库是信息检索...
1. **文本相似度检测**:使用如TF-IDF、余弦相似度等算法计算不同文本间的相似度,识别出可能的抄袭片段。 2. **语义分析**:基于词向量模型(如Word2Vec、GloVe)理解词语的语义关系,进行同义词替换。 3. **句法...
2. **内容匹配**:利用复杂的算法,如TF-IDF(词频-逆文档频率)和N-gram(n元语法),搜索与论文内容相似的文献。 3. **相似度计算**:根据匹配度和匹配长度,计算每一段的相似度,通常以百分比表示。 4. **生成...