关于潜在语义索引模型

LSI(潜在语义索引模型)

定义:

LSI,英文:Latent Semantic Indexing的缩写,中文意译是潜在语义索引,指的是通过海量文献找出词汇之间的关系。当两个词或一组词大量出现在一个文档中时,这些词之间就可以被认为是语义相关的。


来源历史:

潜在语义分析(Latent Semantic Analysis)或者潜在语义索引(Latent Semantic Index),是1988年S.T. Dumais等人提出了一种新的信息检索代数模型,是用于知识获取和展示的计算理论和方法,它使用统计计算的方法对大量的文本集进行分析,从而提取出词与词之间潜在的语义结构,并用这种潜在的语义结构,来表示词和文本,达到消除词之间的相关性和简化文本向量实现降维的目的。

有趣的例子

百度蜘蛛算法一直在模仿用户的习惯,这也是为什么网站建设时要更注重用户体验才能更好的优化网站。而蜘蛛算法虽然一直在模仿,可算法与人同样存在着很不一样的地方,因为人可以直接理解某个关键词的意义、文章的意思。如人看到“果汁”这两个字就知道指的是有果味的好喝的液体饮料,而蜘蛛算法却不能从感性的去理解果汁是什么。
但是蜘蛛算法确实可以掌握词与词之间的关系,因而我们便可从关键词相关性看潜在语义索引。不知道有没朋友了解过潜在语义索引。潜在语义索引也曾有不少人去研究过,而这研究的就是蜘蛛怎么通过海量词库中找出词汇间的关系,也就是说当两个词或一组词大量出现在相同文档之中,这些词间就会被认为是语义相关。 如博客与blog两个词在我们撰写文章可能会被经常混合使用,那么这两个词就在大量文档和网页上同时出现,那么对于蜘蛛而言,它就会认为这两个词是即为语义相关,当然,实际上也确实是同义词,只不过语言不一罢了。而这潜在语义索引,并不依赖或者说限制在语言之上,也正如此,蜘蛛把博客与blog这两个词仅仅地联系在一起,于是乎,惠州SEO博客并未对“seo blog”任何优化,且密度为零的情况下,却神奇的出现了排名。不过对于这个潜在语义索引其实并未得到搜索引擎的承认,当然为进行否认,因此这也仅能说是惠州SEO叶剑辉的个人猜测。

单词相关度计算

LSI 的结果通过简单变换就能得到不同单词之间的相关度( 0 ~ 1 之间的一个实数),相关度非常高的单词往往拥有相同的含义。不过不要被“潜在语义”的名称所迷惑,所谓的潜在语义只不过是统计意义上的相似,如果想得到同义词还是使用同义词词典靠谱。LSI 得到的近义词的特点是它们不一定是同义词(甚至词性都可能不同),但它们往往出现在同类情景下(比如“魔兽” 和 “dota”)。不过事实上直接使用LSI做单词相关度计算的并不多,一方面在于现在有一些灰常好用的同义词词典,另外相对无监督的学习大家还是更信任有监督的学习(分类)得到的结果。

应用的领域

潜在语义索引可以计算出文献间、词语间和词语和文献间的相似度的大小,在很多领域都可以得到运用, 比如文本检索,自动标引文本,摘要,信息过滤,双语交叉过滤,垃圾邮件过滤,文本分类,个性化服务和用户反馈,智能检索等等方面

特征降维

LSI 本质上是把每个特征映射到了一个更低维的子空间(sub space),所以用来做降维可以说是天造地设。在降维这块土地上还有另一位辛勤的耕耘者那就是TFIDF,TFIDF通过一个简单的公式(两个整数相乘)得到不同单词的重要程度,并取前k个最重要的单词,而丢弃其它单词,这里只有信息的丢失,并没有信息的改变。从执行效率上 TFIDF 远远高于 LSI,不过从效果上(至少在学术界)LSI 要优于TFIDF。不过必须提醒的是,无论是上述哪一种降维方法,都会造成信息的偏差,进而影响后续分类/聚类的准确率。 降维是希望以可接受的效果损失下,大大提高运行效率和节省内存空间。然而能不降维的时候还是不要降维(比如你只有几千篇文档要处理,那样真的没有必要降维)。

SVD奇异值分解:
SVD中文称为“奇异值分解”,是一种矩阵分解方法。其公式如下:
定理:设A为m*n阶复矩阵,则存在m阶矩阵U和n阶矩阵V,使得:
   A = U*S*V’ 其中S=diag(σi,σ2,……,σr),σi>0 (i=1,…,r),r=rank(A)。
其中 A 矩阵是我们初始的特征矩阵,在文本挖掘中:A就是 t (term) 行 d (document) 列的矩阵,每列是一篇文章,每行是一个单词,每个单元格的当前单词在当前文章里的出现次数。 U 是一个 t 行 r 列 的矩阵, V 是一个 r 行 d 列 的矩阵, S 是一个 r 行 r 列的对角矩阵。这里 r 的大小是 A的秩。那么U和V中分别是A的奇异向量,而S是A的奇异值。AA’的正交单位特征向量组成U,特征值组成S’S,A’A的正交单位特征向量组成V,特征值(与AA’相同)组成SS’。( 关于秩是什么,特征值是什么,这个分解是怎么得到的,可以暂不去管)
注意,这个公式是等号,也就是等号左边完全等价于等号右边。换句话说我们只是把原来的A换了一种表示形式而已,并没有丢失任何信息。就好像 24 = 2 * 3 * 4 一样。 也正是因此,如果 LSI 直接使用 SVD 的话,不仅 r 是不可控的,而且 r 很可能很大以至于起不到降维效果,事实上这样做不仅没降维而且耗费了大量的运算时间。而 SVD 作为一种矩阵分解方法,也并非仅仅用在 LSI 中。Matlab中有直接的svd函数可以使用:[U,S,V] = svd(A)

LDA (LDA文档主题生成模型)

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。
LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。
举个例子,有两个句子分别如下:

            “乔布斯离我们而去了。”

            “苹果价格会不会降?”

可以看到上面这两个句子没有共同出现的单词,但这两个句子是相似的,如果按传统的方法判断这两个句子肯定不相似,所以在判断文档相关性的时候需要考虑到文档的语义,而语义挖掘的利器是主题模型,LDA就是其中一种比较有效的模型。

LDA模型

应用的场景

你可能感兴趣的:(自然语言处理)