当前位置: 首页 > news >正文

潜在语义分析(Latent Semantic Analysis,LSA)—无监督学习方法、非概率模型、判别模型、线性模型、非参数化模型、批量学习

定义

输入: X = [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] , 文本集合 D = { d 1 , d 2 , ⋯ , d n } , 单词集合 W = { ω 1 , ω 2 , ⋯ , ω m } , x i j : 单词 ω i 在文本 d j 中出现的频数或权值 X=\left[ \begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1n} \\ x_{21} & x_{22} & \cdots & x_{2n}\\ \vdots & \vdots & \vdots & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{mn} \end{array} \right],文本集合D=\{ d_1,d_2,\cdots,d_n \},单词集合W=\{ \omega_1,\omega_2,\cdots,\omega_m \},x_{ij}:单词\omega_i在文本d_j中出现的频数或权值 X= x11x21xm1x12x22xm2x1nx2nxmn ,文本集合D={d1,d2,,dn},单词集合W={ω1,ω2,,ωm},xij:单词ωi在文本dj中出现的频数或权值
输出: U k = [ u 1 u 2 ⋯ u k ] , u i : 一个话题 U_k = \left[ \begin{array}{cccc} u_1 & u_2 & \cdots & u_{k} \end{array} \right],u_i:一个话题 Uk=[u1u2uk],ui:一个话题

对单词-文本矩阵X进行奇异值分解,将其左矩阵作为话题向量空间,将其对角矩阵与右矩阵的乘积作为文本在话题向量空间的表示。

输入空间

X= [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] \left[ \begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1n} \\ x_{21} & x_{22} & \cdots & x_{2n}\\ \vdots & \vdots & \vdots & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{mn} \end{array} \right] x11x21xm1x12x22xm2x1nx2nxmn

import numpy as np
import pandas as pd
import string
# import nltk
# nltk.download('stopwords') #离线下载地址:https://download.csdn.net/download/nanxiaotao/89743735,注需放置对应ENV的/nltk_data/corpora/stopwords目录下
from nltk.corpus import stopwords
import time 
def load_data(file):'''加载数据 下载地址:https://download.csdn.net/download/nanxiaotao/89743739INPUT:file - (str) 数据文件的路径OUTPUT:org_topics - (list) 原始话题标签列表text - (list) 文本列表words - (list) 单词列表'''df = pd.read_csv(file)org_topics = df['category'].unique().tolist()df.drop('category', axis=1, inplace=True)n = df.shape[0]text = []words = []for i in df['text'].values:t = i.translate(str.maketrans('', '', string.punctuation))t = [j for j in t.split() if j not in stopwords.words('english')]t = [j for j in t if len(j) > 3]text.append(t)words.extend(set(t))words = list(set(words))return org_topics, text, words
def frequency_counter(text, words):'''构建单词-文本矩阵XINPUT:text - (list) 文本列表words - (list) 单词列表OUTPUT:X - (array) 单词-文本矩阵'''X = np.zeros((len(words), len(text)))for i in range(len(text)):t = text[i]for w in t:ind = words.index(w)X[ind][i] += 1return X
org_topics, text, words = load_data('bbc_text.csv')  #加载数据
print('Original Topics:')
print(org_topics)  #打印原始的话题标签列表
X = frequency_counter(text, words)  #构建单词-文本矩阵

算法

X ≈ U k ∑ k V k T = [ u 1 u 2 ⋯ u k ] [ σ 1 u 11 σ 1 u 21 ⋯ σ 1 u n 1 σ 2 u 12 σ 2 u 22 ⋯ σ 2 u n 2 ⋮ ⋮ ⋮ ⋮ σ k u 1 k σ k u 2 k ⋯ σ k u n k ] , 其中 u l = [ u 1 l u 2 l ⋮ u m l ] , l = 1 , 2 , ⋯ , k X \approx U_k \sum_k V_k^T=\left[ \begin{array}{cccc} u_{1} & u_{2} & \cdots & u_{k} \end{array} \right]\left[ \begin{array}{cccc} \sigma_{1}u_{11} & \sigma_{1}u_{21} & \cdots & \sigma_{1}u_{n1} \\ \sigma_{2}u_{12} & \sigma_{2}u_{22} & \cdots & \sigma_{2}u_{n2}\\ \vdots & \vdots & \vdots & \vdots \\ \sigma_{k}u_{1k} & \sigma_{k}u_{2k} & \cdots & \sigma_{k}u_{nk} \end{array} \right],其中u_l = \left[ \begin{array}{cccc} u_{1l} \\ u_{2l} \\ \vdots \\ u_{ml} \end{array} \right],l=1,2,\cdots,k XUkkVkT=[u1u2uk] σ1u11σ2u12σku1kσ1u21σ2u22σku2kσ1un1σ2un2σkunk ,其中ul= u1lu2luml ,l=1,2,,k

def do_lsa(X, k, words):'''潜在语义分析INPUT:X - (array) 单词-文本矩阵k - (int) 设定的话题数words - (list) 单词列表OUTPUT:topics - (list) 生成的话题列表'''w, v = np.linalg.eig(np.matmul(X.T, X)) sort_inds = np.argsort(w)[::-1]w = np.sort(w)[::-1]V_T = []for ind in sort_inds:V_T.append(v[ind]/np.linalg.norm(v[ind]))V_T = np.array(V_T)Sigma = np.diag(np.sqrt(w))U = np.zeros((len(words), k))for i in range(k):ui = np.matmul(X, V_T.T[:, i]) / Sigma[i][i]U[:, i] = uitopics = []for i in range(k):inds = np.argsort(U[:, i])[::-1]topic = []for j in range(10):topic.append(words[inds[j]])topics.append(' '.join(topic))return topics
k = 5  #设定话题数为5
topics = do_lsa(X, k, words)  #进行潜在语义分析
print('Generated Topics:')
for i in range(k):print('Topic {}: {}'.format(i+1, topics[i]))  #打印分析后得到的每个话题

相关文章:

潜在语义分析(Latent Semantic Analysis,LSA)—无监督学习方法、非概率模型、判别模型、线性模型、非参数化模型、批量学习

定义 输入: X [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] , 文本集合 D { d 1 , d 2 , ⋯ , d n } , 单词集合 W { ω 1 , ω 2 , ⋯ , ω m } , x i j : 单词 ω i 在文本 d j 中出现的频数或权值 X\left[ \begin{array}{cccc} x_{11} …...

【安全漏洞】MySQL 8.0.33 、CVE-2023-22102

mysql-connector-java:jar:8.0.33已经重新定位到mysql-connector-j:jar:8.0.33 安全漏洞描述 在SBOM扫描过程中,检测到mysql-connector-j:8.0.33存在如下高危安全漏洞: CVE-2023-22102:Oracle MySQL Connectors 8.1.0 版本之前存在安全漏洞&…...

Flutter 响应式框架

一、简介 响应式框架会自动使用户界面适应不同的屏幕大小。创建你的用户界面一次,让它显示完美的像素在移动,平板电脑和桌面! 1.1 问题 支持多种显示尺寸通常意味着要多次重新创建同一布局。在传统的Bootstrap方法下,构建响应式…...

电脑AE特效软件 After Effects软件2017中文版下载安装指南 (Win/Mac)

电脑ae特效软件 After Effects软件2017中文版下载安装win/... 电脑AE特效软件 After Effects软件2017中文版下载安装指南 (Win/Mac) Adobe After Effects 2017 是一款功能强大的视频后期处理软件,广泛应用于影视特效制作、动态图形设计、视觉效果合成等领域。其丰…...

C#中的装箱和拆箱是什么

在 C# 中,装箱(Boxing)和拆箱(Unboxing)是与值类型和引用类型相关的概念,涉及到值类型的数据在托管堆(Heap)上的存储方式。 装箱(Boxing) 装箱是指将值类型…...

在 Debian 12 上安装中文五笔输入法

在 Debian 12 上安装中文五笔输入法,你可以通过以下步骤进行: 更新系统包列表: 打开终端,首先更新你的系统包列表: sudo apt update安装输入法框架: 安装 fcitx5 输入法框架: sudo apt install …...

整流器制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

整流器制造行业作为制造业的重要组成部分,也在积极探索数字化转型的新路径。整流器,作为电力电子领域的关键元件,广泛应用于通信、工业控制、新能源等多个领域,其制造过程的智能化升级不仅关乎产品性能的提升,更是推动…...

算法知识点——常用输入输出数据的方式

如果输入的每组数据的结果不相互干扰的话,就可以在本次操作的时候将该组数据的相关结果进行输出。 1、n组输入输出(n确定) scanf("%d",&n); while(n--) {scanf("%d %d",&a,&b); printf("%d %d\n",a,b);}cin…...

如何构建大数据治理平台,助力企业数据决策

建设背景 (1)什么是数据资产 资产由企业及组织拥有和控制,能够提供增值服务、带来经济利益的重要资源。 资产不但需要管理, 更需要运营。 (2)数据资产运营中的问题 数据资产运营中存在的问题主要包括以下…...

Playwright与Selenium的对比:谁是更适合你的自动化测试工具?

在自动化测试领域,Selenium 一直是行业的标杆工具。它功能强大、支持多浏览器、广泛应用于各类项目中。然而,随着技术的发展,新的工具不断涌现,Playwright 作为其中的佼佼者,以其现代化的设计和强大的特性吸引了越来越…...

Netty 相关问题

传统网络编程存在的问题 传统网络编程存在以下问题: 线程创建开销:在Java中,创建线程需要调用操作系统API,这会消耗资源和时间。内存占用高:线程本身占用内存,创建过多线程会导致内存资源紧张。CPU使用率…...

JAVA中线程池的详解

1.概念 顾名思义,线程池就是管理一系列线程的资源池,其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。 这里借用《Java 并发编程的艺术》书中的部分内容来总结一下使用线程池的好处&#x…...

【PyTorch单点知识】深入了解 nn.ModuleList和 nn.ParameterList模块:灵活构建动态网络结构

文章目录 0. 前言1. 为什么需要 nn.ModuleList 和 nn.ParameterList?2. nn.ModuleList:管理模块的列表2.1 什么是 nn.ModuleList?2.2 创建 nn.ModuleList2.3 动态添加或删除层 3. nn.ParameterList:管理参数列表3.1 什么是 nn.Par…...

vscode创建Python虚拟环境无法激活问题处理

系统环境 win7环境,Python3.7,VScode1.70.3 问题报错: PS C:\Users\Administrator\PycharmProjects\websites> .\venv\Scripts\activate 无法加载文件 C:\Users\Administrator\PycharmProjects\websites\venv\Scripts\Activate.ps1,因为在此系统中禁止执行脚本。有关…...

【Go】Go语言中的基本数据类型与类型转换

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

【Python中导入Tkinter模块创建计算器界面】

使用Tkinter库创建计算器界面涉及布局多个控件(如按钮、输入框和标签)以形成一个用户友好的界面。以下是一个基本的步骤和示例代码,展示了如何使用Tkinter创建一个简单的计算器界面。 步骤 导入Tkinter库:首先,你需要…...

中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速

鸿蒙生态大势所趋,各种应用适配加速 近日,华为纯血鸿蒙系统(HarmonyOS NEXT)再度引发市场高度关注。据媒体消息,鸿蒙NEXT Beta版将在9月24日对Mate 60系列、X5系列、Pura70系列等16款旗舰机型进行推送,这已…...

如何实现视频数据的PES打包和传输?

实现视频的PES(Packetized Elementary Stream)打包和传输涉及多个步骤,主要包括视频数据的编码、PES打包、以及通过网络协议的传输。以下是大概的实现思路: 一、视频数据编码 原始视频数据获取: 获取需要传输的原始视…...

【软考】程序设计语言基础

【软考】程序设计语言基础 一.程序设计语言基础概念 计算机要通过程序或指令来控制才能完成各种任务。程序设计语言(计算机语言):人与机器交换信息的语言。 1.程序设计语言 计算机语言大致分为机器语言、汇编语言和高级语言三种。机器语言…...

野指针与空指针的异同

1、什么是野指针 在了解什么是野指针之前我们要知道什么是指针即指针的定义是什么。 指针:是一种特殊的变量类型,它存储的是一个内存地址,该地址指向另一个变量的位置。可以通过指针来间接访问和修改该地址所指向的变量的值。 PS&#xff…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...