基于向量空间模型的信息检索技术
向量空间算法在信息检索中的使用

向量空间算法在信息检索中的使用向量空间模型(Vector Space Model)是一种常见的信息检索模型。
它将文本数据表示为向量的形式,利用向量运算来比较文本的相似性,从而实现检索。
向量空间模型的基本思想是:将文本集合看作向量空间中的点集,每篇文本可以表示为一个向量,向量的每个维度表示一个特征,例如单词出现的频率。
这样,文本就可以用一个向量来表示了。
在这个模型中,可以用余弦相似度(Cosine Similarity)来计算两个文本向量之间的相似度。
余弦相似度是基于向量的夹角计算的,夹角越小,余弦相似度越大,相似度也就越高。
向量空间模型在信息检索中的应用非常广泛。
这里列举几个常见的应用场景:1. 文本分类向量空间模型可以用来实现文本分类。
每个类别可以看作一个向量,在训练过程中,根据文本特征的权重调整向量的取值,最终建立一个分类模型。
分类时,将待分类文本转换成向量形式,然后通过比较其与各个类别向量的相似度来确定其所属类别。
2. 相似文本查找向量空间模型可以用来寻找相似的文本。
首先将所有的文本转换成向量形式,然后计算待查找文本与数据库中各个文本向量的相似度,最后按照相似度进行排序,选取相似度较高的文本作为结果。
3. 关键词匹配向量空间模型可以用来实现关键词匹配。
将待匹配文本表示为向量形式,然后将关键词也表示为向量形式,最后计算两个向量之间的余弦相似度,根据相似度来决定是否匹配成功。
在以上三个场景中,向量空间算法都可以很好地发挥作用,实现高效的检索和分类。
当然,这只是该算法在信息检索中的一些应用,还存在着许多其他精彩的应用场景,需要不断地探索和实践。
总之,向量空间算法是一种巧妙的算法,它将复杂的文本数据转换为简单的向量形式,从而方便地进行处理。
在信息检索中,向量空间算法已经成为了一种基础工具,可以帮助我们处理各种复杂的问题。
信息检索中的检索模型比较分析

信息检索中的检索模型比较分析信息检索是指用户在面对大量信息时,通过使用一定的检索模型和技术方法,从中找到对自己有用的信息。
在信息爆炸的时代,信息检索变得非常重要和必要。
在进行信息检索时,使用不同的检索模型可以对用户的需求有不同的体现和处理方式。
因此,本文将比较分析信息检索中常见的检索模型,包括布尔模型、向量空间模型和概率模型。
首先,布尔模型是信息检索中最简单和最早的一种模型。
它使用布尔运算符(AND、OR、NOT)来表达检索的需求。
布尔模型的优点是逻辑简单,可以精确地描述用户的需求,使得检索结果更加准确。
然而,布尔模型的缺点也很明显,即无法对文本进行有关键词排名和排序,只能返回文档是否与查询匹配的结果。
由于信息检索系统中文档数量庞大,使用布尔模型检索的结果可能会非常庞杂,给用户带来困扰。
其次,向量空间模型是一种基于向量空间的检索模型。
该模型将文档和查询都表示为向量,并计算它们之间的相似度来判断文档与查询的相关性。
向量空间模型的优点在于可以对检索结果进行排序和排名,使得结果更加合理和有序。
此外,向量空间模型还可以使用权重来表示文档中关键词的重要程度,从而进一步提高检索的准确性。
然而,向量空间模型也存在一些问题,例如需要对文档和查询进行向量表示,需要对文档中的关键词进行权重计算,这些都需要消耗大量的计算资源和时间。
最后,概率模型是一种基于统计学概率的检索模型。
它通过计算文档与查询之间的相关性概率来进行检索。
概率模型的优点在于可以通过统计学方法来估计查询与文档之间的相关性概率,从而更好地处理查询的需求。
此外,概率模型还可以使用反馈机制来进一步提高检索的准确性。
然而,概率模型也存在一些问题,例如需要对文档集合进行训练,需要估计相关性概率,这些都需要大量的计算资源和大规模的文档集合。
综上所述,信息检索中的检索模型比较分析主要包括布尔模型、向量空间模型和概率模型。
布尔模型逻辑简单,可以精确地描述用户的需求,但无法对检索结果进行排序和排名;向量空间模型可以对检索结果进行排序和排名,但需要对文档和查询进行向量表示和权重计算;概率模型可以通过统计学方法估计查询与文档的相关性概率,但需要大量的计算资源和训练集合。
信息检索与搜索引擎技术实验向量空间模型

信息检索与搜索引擎技术实验向量空间模型-2--3--4-说明:TF:表:表示该文-6-档的长度(所有词的个数)IDF :表示词项在文档集合中的重要程度。
一个词项出现的文档数越多,说明该词项的区分度越差,其在文档集合中的重要性就越低。
N :表示集合中的文档数; :表示出现词项k 的文档数。
d1中各词项的数字表达式 “北京”的 “安”的 “立”的 “文”的 “高新”的 “技术”的 “公司”的d2中各词项的数字表达式: “新”的 “网络”的 “访问”的 “技术”的1)画出系统的倒排文件示意图。
-7-2) 按照向量夹角的余弦计算公式,给出针对查询“技术的公司”的前3个反馈结果。
该部分由代码实现。
一、 实验方法、步骤 1. 建立Java 项目,2.建立DocumentStruct.java 类文件并编辑3. 建立TextVector.java 类文件并编辑,如图4-1,图4-2所示图4-1-8-图4-24. 建立TF.java 类文件并编辑,如图图4-7所示图4-45. 建立IDF.java 类文件并编辑,如图图4-5所示-9-图4-56. 建立CaculateSim.java 类文件并编辑,如图4-6所示图4-67. 建立MainApp.java 类文件并编辑,图4-7所示-10-图4-78. 完成后的项目文件夹如图4-8所示图4-89. 运行结果如图4-9所示1.DocumentStruct.java代码:packageacm.model;public class DocumentStruct {publicDocumentStruct(){this.documentID = 0;this.documentSimValue = 0;this.documentContent = "None";this.documentName = "None";}publicDocumentStruct(int ID, double sim, String name, String content){this.documentID = ID;this.documentSimValue = sim;this.documentName = name;this.documentContent = content; }public String getDocumentContent() { returndocumentContent;}public void setDocumentContent(String documentContent) {this.documentContent = documentContent;}public String getDocumentName() {returndocumentName;}public void setDocumentName(String documentName) {this.documentName = documentName;}public double getDocumentSimValue() { returndocumentSimValue;} public voidsetDocumentSimValue(double documentSimValue) {this.documentSimValue = documentSimValue;}publicintgetDocumentID() {returndocumentID;}public voidsetDocumentID(intdocumentID) {this.documentID = documentID; }publicDocumentStruct[] sortDocBySim(DocumentStruct[] docList){DocumentStruct temp;for(inti=0; i<docList.length-1; i++){for(int j=i; j<docList.length-1; j++){if(docList[i].getDocumentSimValue()<docList[j].getDocumentSimValue() ){temp = docList[i];docList[i] =docList[j];docList[j] = temp;}}}returndocList;}private String documentName;private String documentContent;private double documentSimValue;privateintdocumentID;}2.TextVector.java代码:packageacm.model;public class TextVector {publicTextVector(int dimension, int[]termCount, intdocumentTermCount,intdocumentCount, int[]documentContainTermCount){vectorWeight = newdouble[dimension];for(inti=0; i<dimension; i++){vectorWeight[i] =caculateWeight(termCount[i],documentTermCount, documentCount,documentContainTermCount[i]);}}public doublecaculateWeight(inttermCount,intdocumentTermCount,intdocumentCount,intdocumentContainTermCount){TF termTF = new TF(termCount, documentTermCount);IDF termIDF = newIDF(documentCount,documentContainTermCount);termTF.caculateTF();termIDF.caculateIDF();return(termTF.getTf()*termIDF.getIdf());}public double[] getVectorWeight() {returnvectorWeight;}public void setVectorWeight(double[]vectorWeight) {this.vectorWeight = vectorWeight;}private double[] vectorWeight;}}3.TF.java代码packageacm.model;public class TF {public TF(){tf = 0.0;termCount = 0;termInDocumentCount = 0;}public TF(inttermCount,intdocumentTermCount){this.tf = 0.0;this.termCount = termCount;this.termInDocumentCount =documentTermCount;}public void caculateTF(){if(termInDocumentCount == 0){System.out.println("请先设置文档总数!");return;}this.tf = (double)termCount /(double)termInDocumentCount;}public double getTf() {returntf;}publicintgetTermCount() {returntermCount;}public void setTermCount(inttermCount){this.termCount = termCount;}publicintgetTermInDocumentCount() {returntermInDocumentCount;}public voidsetTermInDocumentCount(inttermInDocumentCount) {this.termInDocumentCount =termInDocumentCount;}private double tf;privateinttermCount;privateinttermInDocumentCount;}4.IDF.java代码packageacm.model;public class IDF {public IDF() {idf = 0.0;documentContainTermCount = 0;documentCount = 0;}public IDF(intdocumentCount,intdocumentContainTermCount){idf = 0.0;this.documentCount =documentCount;this.documentContainTermCount = documentContainTermCount;}publicintgetDocumentCount() {returndocumentCount;}public voidsetDocumentCount(intdocumentCount) {this.documentCount =documentCount;}publicintgetDocumentContainTermCount() {returndocumentContainTermCount;}public voidsetDocumentContainTermCount(intdocumentContainTermCount) {this.documentContainTermCount = documentContainTermCount;}public double getIdf() {returnidf;}public void caculateIDF(){if(documentContainTermCount ==0){System.out.println("请设置文档的长度(所有词的个数)!");return;}this.idf =Math.log10((double)this.documentCount /(double)this.documentContainTermCount);}private double idf;privateintdocumentCount;privateintdocumentContainTermCount;}5.CaculateSim.java代码packageacm.model;public class CaculateSim {publicCaculateSim(TextVector vector1,TextVector vector2){doublesimDividend=0.0,simDivider=0.0;double tempVector1=0.0,tempVector2=0.0;for(inti=0;i<vector1.getVectorWeight().length; i++){simDividend +=vector1.getVectorWeight()[i] *vector2.getVectorWeight()[i];}for(inti=0;i<vector1.getVectorWeight().length; i++){tempVector1 +=Math.pow(vector1.getVectorWeight()[i],2.0);tempVector2 +=Math.pow(vector2.getVectorWeight()[i],2.0);simDivider =Math.sqrt((tempVector1*tempVector2));}this.sim = simDividend / simDivider;}public double getSim() {returnsim;}private double sim;}6.MainApp.java代码packageacm.model;public class MainApp {public static void main(String[] args) {intTermCount[][] ={ {1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0}, {1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0},{1,0,0,0,0,1,1,1,0,0,1,1,0,0,1,1},{0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}};intdocumentTermCount[] = {7, 7, 5, 6, 11, 3};intdocumentContainTermCount[] = {3,1,1,1,1,4,4,2,2,1,2,2,1,1,1,1};DocumentStruct[] docList = new DocumentStruct[6];String documentContent[] = {"北京安立文高新技术公司","新一代的网络访问技术","北京卫星网络有限公司","是最先进的总线技术。
向量检索技术

向量检索技术向量检索技术是一种基于向量空间模型的文本检索方法,它通过将文本表示为向量,利用向量之间的相似度计算来衡量文本之间的相关性,从而实现高效的信息检索。
本文将从向量空间模型的基本原理、向量表示方法、相似度计算及应用领域等方面进行详细介绍。
一、向量空间模型的基本原理向量空间模型是一种用于表示文本的数学模型,它将每篇文本表示为一个向量,其中每个维度对应一个特征或词项,向量的取值表示该特征在文本中的重要程度。
基于向量空间模型,可以通过计算向量之间的相似度来度量文本之间的相关性。
二、向量表示方法在向量空间模型中,有多种方式来表示文本向量,常见的有词频表示法和TF-IDF表示法。
1. 词频表示法:将每个文本表示为一个向量,向量的每个维度对应一个词项,取值为该词项在文本中的出现频率。
2. TF-IDF表示法:TF-IDF是Term Frequency-Inverse Document Frequency的缩写,它综合考虑了词频和文档频率,能够更好地衡量词项的重要性。
TF-IDF表示法的向量取值为词项的TF-IDF值。
三、相似度计算相似度计算是向量检索技术的核心,常用的相似度计算方法有余弦相似度和欧氏距离。
1. 余弦相似度:余弦相似度是通过计算两个向量的夹角余弦值来衡量它们的相似程度,取值范围为[-1, 1],值越接近1表示两个向量越相似。
2. 欧氏距离:欧氏距离是通过计算两个向量之间的欧氏距离来衡量它们的相似程度,值越小表示两个向量越相似。
四、应用领域向量检索技术在信息检索领域有广泛应用,可以用于文本分类、文本聚类、推荐系统等任务。
1. 文本分类:通过将文本表示为向量,可以利用向量检索技术实现文本的自动分类。
例如,在垃圾邮件过滤中,可以将每封邮件表示为向量,然后计算与已知垃圾邮件向量的相似度,从而判断邮件是否为垃圾邮件。
2. 文本聚类:通过将文本表示为向量,并利用向量之间的相似度计算,可以将相似的文本聚集在一起。
稠密匹配和稀疏匹配

稠密匹配和稀疏匹配在信息检索领域,稠密匹配和稀疏匹配是两种常见的匹配模型。
它们分别适用于不同的场景和需求,具有各自的优势和特点。
稠密匹配是一种基于向量空间模型的检索方法。
在稠密匹配中,文档和查询都被表示为高维向量,其中向量的每个维度对应一个特征或属性。
这些特征可以是词语、词频、文档长度等。
稠密匹配的核心思想是计算文档和查询之间的相似度,通过相似度来确定文档的排序和排名。
常用的相似度度量方法有余弦相似度和欧氏距离等。
稠密匹配模型的优点是简单直观,易于实现和理解。
然而,由于向量维度较高,稠密匹配在处理大规模数据时可能会面临维度灾难和计算复杂度较高的问题。
稀疏匹配是一种基于倒排索引的检索方法。
在稀疏匹配中,文档和查询都被表示为词项的集合,而非向量。
倒排索引是一种数据结构,用于快速查找包含特定词项的文档。
通过构建倒排索引,可以快速定位到包含查询词项的文档,并计算文档和查询之间的相关度。
稀疏匹配模型的优点是可以有效地处理大规模数据和高维度的特征。
然而,稀疏匹配模型对词项的选择和权重计算较为敏感,需要进行合理的文本预处理和特征选择。
稠密匹配和稀疏匹配在应用场景和需求上存在一定的差异。
稠密匹配适用于文档和查询之间存在较为明确的语义关系的情况,例如基于词语相似度的检索和推荐系统。
稠密匹配可以较好地捕捉到语义和语境的相似性,提供更准确的搜索结果。
稀疏匹配适用于文档和查询之间存在较为松散的语义关系的情况,例如基于关键词匹配的文档检索和文本分类。
稀疏匹配可以通过简单的词项匹配来实现快速的检索,适用于大规模的文本数据处理。
总结起来,稠密匹配和稀疏匹配是信息检索领域中常用的两种匹配模型。
稠密匹配基于向量空间模型,适用于语义关系较为明确的场景;稀疏匹配基于倒排索引,适用于语义关系较为松散的场景。
选择合适的匹配模型可以提高检索的准确性和效率,满足用户的需求。
在实际应用中,可以根据具体情况综合考虑使用稠密匹配和稀疏匹配的方法,以提供更好的信息检索服务。
rocchio例题

rocchio例题
Rocchio算法是一种用于文本分类和信息检索的经典算法。
它基于向量空间模型,通过计算文档向量之间的相似度来对文档进行分类或检索。
Rocchio算法主要用于多类别文本分类和相关性反馈的信息检索任务中。
在Rocchio算法中,每个文档都用一个向量表示,向量的每个维度对应一个特征或关键词,而特征的权重则可以使用词频、TF-IDF等方式来表示。
当需要对一个新文档进行分类或者检索时,Rocchio算法会根据已知类别的文档对新文档进行分类或者相关性评分。
具体来说,Rocchio算法会根据已知类别的文档计算出每个类别的中心向量(centroid),然后对于新文档,算法会计算其与每个类别中心向量的相似度,最终将新文档分到与其相似度最高的类别中。
在信息检索中,Rocchio算法还可以用于相关性反馈,即根据用户的反馈信息来调整检索结果的排序,提高用户满意度。
总的来说,Rocchio算法是一种简单而有效的文本分类和信息检索算法,它通过计算文档之间的相似度来进行分类或者检索,并且在相关性反馈中也有着一定的应用。
当然,Rocchio算法也有一些局限性,比如对于高维稀疏的文本数据,其效果可能不如其他算法。
因此,在实际应用中,需要根据具体任务和数据特点来选择合适的算法。
信息检索技术——向量空间模型

信息检索技术——向量空间模型上次介绍了,布尔模型已经可以解决⼀个很重要的问题,就是找到和⽤户需求相关的⽂档(其中还需要很多处理,⽐如分词,归⼀化,去掉停⽤词等等,我们只是介绍主要的框架流程)。
但是这样找到的⽂档会有很多,也许上千个,也许上万个,这远远不是⽤户所要的。
⽤户也不会去从⼏万个⽂档中挑选⾃⼰要找的。
因此我们需要对结果进⾏排序,把最能满⾜⽤户需求的⽂档放在最上⾯显⽰给⽤户,就像google和baidu做的⼀样。
细⼼的朋友就能发现,其实信息检索是⼀个循序渐进的剪枝和筛选过程,最后留下的就是⽤户想要的。
因此,我们需要⼀种评分机制来进⾏排序,通过得分的⾼低排除top N的⽂档返回给⽤户。
这个评分通过什么来确定呢?当然是⽤户查询的query和返回⽂档的相似度了。
计算相似度有很多种⽅法:⽅法1 Jaccard coefficient此⽅法看上去很好理解,就是⽤query和⽂档共同出现的词的个数,除以⼀共的词数。
当然也有很多问题1 没有考虑⽂档中词出现的次数(没有考虑tf因素)2 没有考虑⽂档的频率(没考虑idf因素)3 没有考虑⽂档的长度,长⽂档和短⽂档计算相似度的差别会很⼤下⾯我们⼀起看看⼀个⾮常著名的模型——空间向量模型⽅法2 向量空间模型(VSM)⾸先介绍2个概念,tf和idftf即term frequency, 表⽰⼀个term t出现在document d中的次数,这是⽂档中⼀个很重要的概念。
出现次数更多意味着重要程度越⾼,但是需要注意的是,相关度的提⾼并不是和次数的提⾼成同⽐的。
因此通常tf需要做如下的处理w1= log10(tf+1)这样做就是要弱化次数对于相关度的影响df即document frequency,表⽰⼀个term在整个⽂档集中出现的频率。
与tf相反,⼀个term的重要程度是随着它在语料库中出现的频率成反⽐的。
⽐如and,or等词在⼏乎所有⽂档中都出现,那么这些词的意义就很弱,⽽⼀些专业词汇只在⼏篇⽂档中出现过,显然意义更加重要。
信息检索检索 向量空间模型

信息检索检索向量空间模型一:算法描述在文本挖掘、搜索引擎应用中,文本的特征表示是挖掘工作的基础,它对文本进行预处理,抽取代表其特征的元数据,这些特征可以用结构化的形式保存,作为文档的中间表示形式。
向量空间模型(VectorSpaceModel)是近年来应用较多的文本特征表示方法之一,它是由GerardSlaton等人在1958年提出并发展起来的,是一个关于文献表示的统计模型,具有较强的可计算性和可操作性,已经被广泛地应用于文本检索、自动文摘、关键词自动提取、文本分类和搜索引擎等信息检索领域的各项应用中,并且取得了较好的效果。
文献(document):泛指各种机器可读的记录,可指一篇文章或一个网页,也称为文档。
项(term):亦称索引项,是用来标引被检索内容的关键词等。
项的权重(termweight):对于有n个不同的项的系统,文献D=(t1,t2,,,tn),项tk(1[k[n)常常被赋予一个数值Wk,表示它在文献中的重要程度,称为项tk的权重。
相似度(Similarity):指两个文档内容相关程度的大小。
确定权重的方法是运用TF-IDF公式,即Wik=tfik/dfk=tfik*idfk,其中tf ik 为特征项Tk在文档Di中的出现频率,称为项频率; dfk则是文档集D中出现特征项Tk 的文档的数量,称为文档频率; idfk为dfk的倒数,称为反转文档频率。
相似度是一个函数,它给出两个向量之间的相似程度。
常用的方法有:内积(Inner Product)、余弦(Cosine)。
对于二值向量, 内积是查询式中的词项和文档中的词项相互匹配的数量;对于加权向量, 内积是查询式和文档中相互匹配的词项的权重乘积之和。
余弦相似度计算两个向量的夹角,余弦相似度是利用向量长度对内积进行归一化的结果。
二:数据描述建立10至15个文件,输入文档集,以供检索。
三:算法参数文件、项的权重、tf ik、dfk、idfk、相似度四:实验流程1.输入文档集;2.计算词项的特征权重;3.输入要查询的内容;4.计算余弦相似度;5.根据相似度排序,找出相似的文档。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于向量空间模型的信息检索技术作者:张朝阳摘要:向量空间模型是信息检索技术中使用的最原始、最简单、最成熟、最有效的模型,它以文本的向量表示为基础展开后续的计算工作。
本文讲解了文本的向量表示法和文本相似度的计算方法。
在文本检索之前往往需要对原始文本集进行分类和聚类,以减小查找的范围,提供个性化的信息推荐。
本文介绍了最常用的文本分类和聚类的方法。
关键字:向量空间模型,文本相似度,特征选择和特征抽取,文本分类与聚类1.引言信息检索的一般情形是由用户给出检索项,应用程序从系统文档集中查找与检索项最匹配(亦即最相似)的文档返回给用户。
说起来简单,实际上这之间经历了复杂的过程,如图1.1所示。
图 1.1信息检索基本步骤文本预处理包括去除标记,去除停用词,词根还原。
比如我们收集的原始文档是一些HTML文件,则首先要把HTML标签和脚本代码去除掉。
停用词指像“的”、“吧”这样几乎不包含任何信息含量的词。
词根还原指把同一个词的动词、形容词、副词形式都还原为名词形式。
经过词频统计后我们得到每个文档里包含哪些词以及每个词出现的次数。
如图 1.2所示。
图 1.2文档词频统计D表示文档,Wi,j表示单词i在相应文档中出现了j次。
在实际的根据关键词进行信息检索过程中,为避免在每篇文档中使用冗长的顺序查找关键词,我们往往使用倒排序索引,如图 1.3所示。
图 1.3文档倒排序索引W 表示单词,Di,j 表示相应的单词在文档i 中出现了j 次。
建立倒排序索引后,就可以直接根据关键词来查找相关的文档。
找到相关文档还需要对文档进行排序再返回给用户,即要把用户最希望找到的文档排在最前面。
这里引入文档和查询词之间的相似度(Similarity Coefficient,SC )的概念,相似度越大,表明文档与查询词的相关度越大,与用户的需求越接近。
在信息检索的研究与应用中人们用到了很多常用的模型,包括向量空间模型、概率模型、语言模型、推理网络、布尔检索、隐性语义检索、神经网络、遗传算法和模糊集检索。
向量空间模型是最原始最简单的模型,在实际应用中也十分的成熟,它通过把文档和查询词展示为词项空间的向量,进而计算两个向量之间的相似度。
2.向量空间模型2.1.文档向量表示向量空间空间模型由哈佛大学G Salton 提出,他把文档表示为一个向量:11()((),(),...,())i i i n i v d w d w d w d =n 表示文本特征抽取时所选取的特征项的数目。
w i (d j )表示第i 个特征项在文档d j 中的权重。
特征词频率用tf 表示,指特征词在一个文档中出现的频率。
文档频率用df 表示,指出现某一个特征词的文档数量。
显然tf 越大,特征词在文档中的权重就应该越大,而df 越大,表明特征词越不能表示文档之间的差异性,特征词对于文档的权重就应该越小。
经过综合考虑调整之后特征词权重的计算公式为:()i j w d =tf ij 是第i 个文本特征项在文档d j 中出现的频率。
N 为全部文档的数目。
N i 为出现第i 个文本特征项的文档数目。
上述特征词权重计算公式实际上忽略了几外因素的影响:文档长度的差异,文档越长,其中包含的特征词权重就应该越小,因为单个的特征词越无法表示文档全部的特征;特征项长度的差异,一般来说较长的特征项能够表达更为专业的概念,应该赋予更高的权重,而有些短小的特征词虽然出现的频率较高,但往往包含的信息量较少;特征项在文档中出现的位置,显然出现在标题、摘要中的特征词应该赋予很高的权重。
2.2.文档相似度把用户输入的查询关键词同样当成一个文档来处理,把它表示为一个文档向量。
接下来的问题就是如何计算两个文档之间的相似度。
下面介绍几个常用的公式。
内积法:1(,)()ni j ki kj k SC d d w w ==×∑余弦法:(,)cos(,)n i j i j SC d d d d ==距离法:11(,)||n pp i j ki kj k SC d d w w =⎡⎤=−⎢⎥⎣⎦∑上面公式中wki 表示特征项k 在文档i 中的权值。
还有其他的计算方法如Dice 系统法和Jaccard 系数法,用的最多的是内积法和余弦法。
内积法是计算两个文档向量的内积,内积越大相似度越大。
由内积法引出的余弦法是计算两个文档向量之间的夹角,夹角越小相似度越大。
3.文本分类和聚类文本分类和聚类是一种集机器学习、模式识别、统计分析和信息检索于一体的文本挖掘方法。
它对于用户获取信息的作用表现在:(1)合理组织检索结果;(2)提供可视化多文档摘要;(3)加速检索过程;(4)个性化信息推荐。
3.1.特征选择特征选择(feature selection,FS )和特征抽取(feature extraction,FE )是文本分类和聚类的首要任务,具有降低向量空间维数、简化计算、去除噪声等作用。
文本特征提取与特征选择的区别在于:特征项选择是通过判断特征项的重要性来决定是否保留作为最终的特征项;特征值提取是直接使用线性或非线性的变换将冗余或者无效的信息映射到相对较少的维度上去。
特征项选择的方法有:文档频率(document frequency,DF )、信息增益(informationgain,IG )、互信息(mutual information,MI )、2χ(CHI)统计量、期望交叉熵(expected crossentrop,ECE )。
文档频率是包含了特征项的文档数目,当文档频率低于某个设定的阈值时就把该特征项删除。
在实际中一般不直接使用该方法,因为总体上稀有的单词可能在某一类文本中并不稀有,而且包含着重要的判断信息。
信息增益是一种在机器学习领域较为广泛的特征选择方法,是一个基于熵评估的方法,定义为某特征项在文本中出现前后的信息熵之差,其函数公式为:111()()lg ()()(|)lg (|)()(|)lg (|)mi i i mi i i m i i i IG w P c P c P w P c w P c w P w P c w P c w ====−++∑∑∑P(c i )表示c i 类文档在语料中出现的概率,P(w)表示语料中包含特征项w 的文档概率。
信息增益的优点在于它考虑了特征项未发现的情况,即虽然某个特征项不出现,也可能对判断文本类别有影响。
期望交叉熵与信息增益相似,只是他只计算出现在文档中的的值。
令m 表示文档的类别数,P(c i |w)表示文档中出现特征项w 时,文本属于类别ci 的概率,则期望交叉熵的计算公式为:1(|)()()(|)lg()m i i i i P c w ECE w P w P c w P c ==∑如果特征项w 和类别c i 强相关,也就是P(c i |w)大,同时相应类别出现的概率又比较小,则说分类的影响很大,期望交叉熵就大,很可能被选为特征项。
3.2.特征抽取关于文本特征抽取这里只介绍一种方法--潜在语义索引(latent semantic indexing,LSI )。
传统的向量空间模型中,文档集中的文档被抽选为若干特征项,并表示成文档向量,有两个缺陷:(1)向量空间模型假设所有特征项是独立无关的,但实际并非如此。
比如“计算机”和“电脑”字面上有很大差异,表示的含义却很相近;(2)特征项的数目过多,造成向量空间很大,不利于存储和计算。
潜在语义索引对大量文本进行分析,寻找潜在的语义联系,并以此来表示词和文本,达到消除词之间相关性,简化文档向量的目的。
潜在语义索引通过使用奇异值分解(singular value decomposition ,SVD )对文档集矩阵进行计算,提取K 个最大的奇异值及其对应的奇异矢量构成新矩阵,以近似表示原始文档集。
原始文档集矩阵A m ×n ,其奇异值分解表示为:T m n m r r r r nA U S V ××××=××U m ×r 和V r×n 都是下次矩阵,并且一由是A m ×n 的左奇异向量构成,一个由A m ×n 的右奇异向量构成。
r 是A m ×n 的秩。
取一个数k≤r ,A 的k 值近似A k 是A 除了前k 个最大奇异值外的奇异值都为0,可以证明A k 在F 范数下与A 距离最近。
A k 保持了文档矩阵A 中特征词和文档间的内在结构(潜在语义结构),同时又去除了因用户习惯或者语言的多义性带来的“噪声”。
3.3.文本分类先提醒一下文本分类和文本聚类的差异:文本分类事先有一个训练集,供我们来统计计算特征词与类别之间的相关度;而文本聚类不存在预先确定类的概念。
这里介绍文本分类中的KNN 方法。
其基本思想是:给定一个新文本,由算法搜索模式空间即训练文本集,找出与新文本距离最近(最相似)的K 篇文本,最后根据这K 篇文本所属的类别判断新文本所属的类别。
计算新文本与每篇文本的相似度用2.2节中的余弦法。
根据与新文本最近的K 个邻居的类属关系,计算新文本属于每个类的权重公式:1(,)(,)(,)Kj i i j i P x c SC x d y d c ==∑x 是新文本的特征向量,d i 是x 的第i 个邻居。
y(d i ,c i )是类别属性函数,当d i 属于c i 时函数值为1,否则为0。
KNN 文本分类方法简单、有效,而且重新训练的代价较低,在Web 环境和电子商务应用中是很常见的。
3.4.文本聚类传统的k-means 算法是一种已知聚类类别数目的无监督学习算法。
聚类过程为随机选定K 个聚类中心,对样本按距离最小原则进行划分,并迭代更新聚类中心,以使迭代过程向目标函数值最小的方向靠近,从而达到最优的聚类效果。
目标函数一般选取:1(,)i j Ki j j x c J DIS X Z =∈=∑∑K 为聚类数,X i 为属于C j 的聚类样本,Z j 为聚类中心。
DIS (X i ,Z j )的计算使用2.2节中的距离法,p 取2。
k-means 算法的具体步骤为:1)给定大小为n 的数据集X 。
2)选取K 个聚类中心Z j 。
3)以Z j 为参照点对数据集X 按照最邻近方法进行划分,将各样本划分到不同的簇中。
4)根据下式调整聚类中心:1(1,2,...,;1,2,...,)k j ij kj X C z x i K j n n ∈===∑Z ij 表示第i 号中心的第j 维的值,n i 为类C i 中样本点个数,X k 为属于类C i 的样本点,x kj 为样本点X k 的第j 维的值。
上式实际上是在计算算术平均。
5)计算目标函数J ,当J 在多轮迭代中变化不大时,算法结束,否则转3)。