【自然语言处理与文本分析】PCA文本降维。奇异值分解SVD,PU分解法。无监督词嵌入模型Glove。有案例的将文本非结构化数据转化为结构化数据的方法。

本文主要是介绍【自然语言处理与文本分析】PCA文本降维。奇异值分解SVD,PU分解法。无监督词嵌入模型Glove。有案例的将文本非结构化数据转化为结构化数据的方法。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

无监督的词嵌入模型-Glove

背后的理念源头是主成分分析PCA

先变为SVD-Glove

PCA是为了产生比较精简的维度,让原始数据在这个精简的维度也能保持原始的变异(信息)。

方法1就是将x2降维到x1,它从9个点变成6个点,而且牺牲了很大的信息

比较好的方法就是建立一个新的维度u。尽可能保留资料的变异。

PCA也可以做词嵌入的降维。比如

我们将词袋模型进行PCA主成分降维度。经过我们降维之后,就可以变成稠密的矩阵。

我们会发现,社会映射到了同一个点上,

如果我们只选择1个维度,只保留了百分之51,我们可以发现选择2个因素,保留了百分之85的变异,也可以进行可视化。

结果我们发现经过PCA的降维之后的决策树也是2个因素。

然后我们把一个测试集导入

当然我们要按照PCA的公式把数值带入,得到FACTOR1和FACTOR2

结果也刚好得到娱乐的结果,十分准确。

另外我们看因子1,如果希望因子1的数值大,它要求方框里的因素都比较大,也就是方框中的值都比较大,才能被判定为国际新闻

因子二也是,只有日本,可口可乐,广告,都比较大,才能被判入娱乐新闻。也就是说,PCA之后的因子就变成综合考虑。

所以才会导致我们的数值更加正确。

W2d(PCA下)

刚才,我们是对词为输入变量进行PCA降维

选择我们可以把文件作为维度,进行PCA降维

这时我们就会发现,它会把同一个内容(国际,娱乐,社会)的词的数值非常接近,认为二者是同义词,所以w2d会保留同义词。

所以这个词嵌入模型也可以进行寻找同义词

我们再对它进行聚类。我们会发现,刚好会分为3类,并且是国际,社会,娱乐。

Matrix factorization

我们看右边的图,可以发现,医师joe会看3部电影,电影还会被其他的都人看。其他的人也会看其他的电影

我们把人和电影做矩阵就可以得到推荐评分表。上图就是横坐标是人纵坐标是电影。

我们就可以将它进行矩阵分解。Dk*k其实就是特征值

Eigen value和Eigen Vector的求解一般要求是正定矩阵,就是正方形。Use-item rating Matrix一般都不是正定矩阵。

D和V一般求出来的都是复数解,无法解释,在运用上有困难。

所以这个不太可行

为了解决这个问题,我们引进了奇异值分解法,它就算是长方形的矩阵也可以,并且结果一定是实数

SVD相当于类似于主成分,它将原矩阵分成3个矩阵,我们往往取topk个奇异值就可以表示绝大部分信息。

SVD的几何原理,就算通过线性变化,找出

原本1*n维的词向量,可以用1*k维的向量表示关键词。进而实现word embedding(词嵌入)的效果

图示如下:

前者就是物品,在新的两个维度下的数字,我们如果对它进行可视化,就会得到下面这个图,用户对那些物品感兴趣

后者就是用户,在新的维度下的,

如果物品靠的比较近说明喜欢该物品的人都差不多,如果人靠的比较近,说明该人喜欢的物品都差不多。

我们可以发现用户1和用户3是一致的,为什么呢,因为他们都是一起打高分,一起打低分。趋势是一致的。我们看这种图不能看数值的大小,要看打分的趋势。

物品二和物品3也是一样的,都是对用户13的评分高些,对用户二的评分低些,(人会喜欢打高分或者低分,不能决定什么,趋势才是重要的。)

我们如果只取两个因子,就可以达到可视化的目的。

因为不一定每个人都会把所有的电影都看了,所有的项目都看了。所以会出现下图,稀疏矩阵的情况。SVD就不能分解了

此时我们应该用PU进行分解。可以得到下面这个结果

我们可以使用P*U分解,得到上图的情况。分解之后就可以将P*UT再乘回去,得到下图的情况      

我们乘积得到之后,我们就可以完善用户的评分,来对用户还未尝购买的项目进行推荐,得分高的就可以进行针对性的推荐。

案例2:我们要推荐顾客还没买的产品。下图就可以发现我们原本的数值的几乎没有差距,但是新值也会得到。我们对顾客还没买的数值。比如产品3Use3就很感兴趣。

P是把项目作为输入字段,降维。U是针对人物作为输入字段进行降维。

Glove:

这个看起来很新,但是其实是酒品黄小姐就PCA的一种

它通过借鉴Wordvec的Pair-wise的方法,以及一些其他的Trick来进行传统的矩阵分解运算得到wordVector(词嵌入向量)

案例:共线矩阵:

我们会提取全部的关键词,然后得到共线矩阵,我们把行叫做内容维度,、(context)列看成keyword关键词维度。

共线矩阵是怎么来的呢,我们就是看词前后有什么词,有一个就加一,我们会给对于的词进行设置数值。

下面是关键词,上面是关键词附近的文本

案例:

我们用一样的方式得到词共线矩阵。

这个顺序是词原来的顺序,因为它就算看词出现的概率

然后我们对这个进行PCA矩阵。

然后我们取了5个factor,因为这个关键词比较多所以我们就要取多一些主成分,确保有百分之80的变异信息被保留

然后我们计算词两两的距离。如果数值是很小的话就说明的同义词或者相关词。

距离非常远,就说明是完全不一样的大小。

Glove就可以吧同义词提取出来。

我们也可以运用Glove进行决策树:

我们发现只需要用,Factor3和factor1就可以进行决策

然后我们还是一样加入测试集合,来进行测试模型准确与否。显然是正确的。

则是glove决策树对第六个文章数据走的一个路线。

下次我们会针对有监督的词嵌入模型进行一个解说。

这篇关于【自然语言处理与文本分析】PCA文本降维。奇异值分解SVD,PU分解法。无监督词嵌入模型Glove。有案例的将文本非结构化数据转化为结构化数据的方法。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219829

相关文章

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常