【Python机器学习】NLP词频背后的含义——从词频到主题得分

news2024/9/21 9:48:19

目录

TF-IDF向量及词形归并

主题向量

一个思想实验

一个主题评分算法

一个LDA分类器

LDiA


TF-IDF向量(词项频率—逆文档频率向量)可以帮助我们估算词在文本块中的重要度,我们使用TF-IDF向量和矩阵可以表明每个词对于文档集合中的一小段文本总体含义的重要度。这些TF-IDF“重要度”评分不仅适用于词,还适用于多个词构成的短序列(n-gram)。如果知道要查找的确分词或n-gram,这些n-gram的重要度评分对于搜索文本非常有用。

有一种揭示词组合的意义的算法,通过计算向量来表示上述词组合的意义,它被称为隐性语义分析LSA)。当使用该工具时,我们不仅可以把词的意义表示为向量,还可以用向量来表示整篇文档的意义。

TF-IDF向量及词形归并

TF-IDF向量会对文档中词项的准确拼写形式进行计数,因此,如果表达相同含义的文本使用词的不同拼写形式或使用不同的词,将会得到完全不同的TF-IDF向量表示。这会使依赖词条计数的搜索引擎和文档相似性的比较变得乱七八糟。

我们可以对词尾进行归一化处理,使那些仅仅最后几个字符不同的词被归并到同一个词条。我们使用归一化方法(如词干还原和词形归并)来创建拼写相似、含义通常也相似的小型的词集合。我们用这些词集合的词元或词干来标记这些小型的词集合,然后处理这些新的词条而不是原始词。

上述方法中,词形归并的方法将拼写相似的词放在一起,但是这些词的意义不一定相似。显然它无法成功处理大多数同义词对,也无法将大多数同义词配对。同义词的区别通常不仅仅是词形归并和词干还原的词尾不同,更糟糕的是,词形归并和词干还原有时还会错误地将反义词归并在一起。

上述词形归并最终造成的结果是:在我们得到的TF-IDF向量空间模型下,如果两段文本讨论的内容相同,但是使用了不同的词,那么它们在此空间中不会“接近”。而有时,两个词形归并后的TF-IDF向量虽然相互接近,但在意义上根本不相似。即使是TF-IDF相似度评分方法,如Okapi BM25或余弦相似度,也无法连接这些同义词或分开这些反义词。具有不同拼写形式的同义词所产生的TF-IDF向量在向量空间中彼此并不接近。

主题向量

当我们对TF-IDF向量进行数学运算(如加减法)时,这些和与差告诉我们的知识参与运算的向量表示的文档中词的使用频率。上述数学运算并没有告诉我们这些词背后的含义。通过将TF-IDF矩阵与其自身相乘,可以计算词与词的TF-IDF向量(词共现或关联向量)。但是利用这些稀疏的高维向量进行“向量推理”效果并不好。这是因为当我们将这些向量相加或相减时,它们并不能很好地表示一个已有的概念、词或主题。

因此,我们需要一种方法来从词的统计数据中提取一些额外的信息,即意义信息。我们想用一个像TF-IDF一样的向量来表示意义,但是需要这个向量表示更紧凑、更有意义。

我们称这些紧凑的意义向量为“词-主题向量”,称文档的意义向量为“文档-主题向量”。上述两种向量都可以称为“主题向量”。

这些主题向量可以很紧凑,也可以像我们想要的那样高维。LSA主题向量可以少到只有一维,也可以多到有数千维。

我们可以像对其他向量一样对主题向量进行加减运算,只是这里得到的向量和与向量差与TF-IDF向量相比,意味着更多的东西。同时主题向量之间的距离对于文档搜索或语义搜素之类的任务很有用。相比于使用关键词和TF-IDF向量进行聚类和搜索,现在可以使用语义和意义来进行聚类搜索了。

处理完语料库之后,语料库中的每篇文档将会对应一个文档-主题向量。而且更重要的是,对于一个新文档或短语,可以不重新处理整个语料库就可以计算得到其对应的新主题向量。词汇表中的每个词都会有一个主题向量,我们可以使用这些词-主题向量来计算词汇表中部分词构成的任何文档的主题向量。

词库(词汇表)中的每个词都有一个词-主题向量。因此我们可以计算任何新文档的主题向量,只需将其所有词的主题向量相加即可。

对词和句子的语义(含义)进行数值化表示可能比较棘手。对于像应用这样的“模糊性”语言更是如此,因为它包含多种方言,并且对于同一个词有许多不同的解释:

  • 一词多义:词和短语包含不止一种含义;
  • 同音异义:词的拼写和发音相同,但含义不同;
  • 轭式搭配:在同一句子中同时使用同一词的两种含义;
  • 同形异义:词的拼写相同,但发音不同、含义不同;
  • 同音异形:词的发音相同,但是拼写不同,含义不同(这是语音交互NLP面对的一个挑战)

类似下面的例子,如果没有LSA之类的工具,将非常难处理:

she felt...less.She felt tamped down.Dim.More faint.Feint.Feigned.fain.

我们需要找到属于同一个主题的那些词维度,然后对这些词维度的TF-IDF值求和,以创建一个新的数值来表示文档中该文档的权重。我们甚至可以对词维度进行加权以权衡它们对主题的重要度,以及我们所希望的每个词对这个组合的贡献度。我们也可以用负权重来表示这些词,从而减低文本与该主题相关的可能性。

一个思想实验

假设有一篇特定文档的TF-IDF向量,我们想将其转换为主题向量。我们可以设想一下每个词对文档的主题的贡献度有多大。

以下面这个例子:

cat dog apple lion NYC love.

我们创建3个主题:一个与宠物有关,一个与动物有关,一个则与城市有关。我们可以把主题分别称为“petness”、“animalness”、“cityness”。因此,“petness”主题会给“cat”和“dog”这样的词打高分,但很可能会忽略“NYC”这样的词。而“cityness”则会忽略“cat”和“dog”这样的词。

如果像上面这样“训练”主题模型,不用计算机,而只用常识,可能会得到下面这样的权重结果:

import numpy as np

topic={}
tfidf=dict(list(zip("cat dog apple lion NYC love".split(),np.random.rand(6))))
topic['petness']=(0.3*tfidf['cat']+
                  0.3*tfidf['dog']+
                  0*tfidf['apple']+
                  0*tfidf['lion']+
                  0.2*tfidf['NYC']+
                  0.2*tfidf['love'])
topic['animalness']=(0.1*tfidf['cat']+
                    0.1*tfidf['dog']+
                    0.1*tfidf['apple']+
                    0.5*tfidf['lion']+
                    0.1*tfidf['NYC']+
                    0.1*tfidf['love'])
topic['cityness']=(0*tfidf['cat']+
                  0.1*tfidf['dog']+
                  0.2*tfidf['apple']+
                  0.1*tfidf['lion']+
                  0.5*tfidf['NYC']+
                  0.1*tfidf['love'])
print(topic)

在上述思想实验中,我们把可能表示每个主题的词频加起来,并根据词与主题关联的可能性对词频(TF-IDF值)加权。同样,对于那些可能在某种意义上与主题相反的词,我们也会做类似的事,只不过这次是减而不是加。这并不是真实算法流程或示例的真正实现,而只是一个思想实验而已。我们芝士想弄明白如何教会机器像人类一样思考。这里,我们只是很随意地选择将词和文档分级为3个主题。同时,我们这里的词汇量也极其有限,只有6个词。

一旦确定了3个要建模的主题,就必须确定这些主题中每个词的权重。我们按照比例混合词,使主题也像颜色混合一样。主题建模转换(颜色混合配方)是一个3*6的比例矩阵(权重),代表3个主题与6个词之间的关联。用这个矩阵乘以一个假想的6*1 TF-IDF向量,就得到了该文档的一个3*1的主题向量。

上面我们给出了一个判断,即“cat”和“dog”两个词应该对“petness”主题有相似的贡献度(0.3)。因此,TF-IDF主题转换矩阵左上角的两个值都是0.3。计算机可以读取、切分文档并对切分词条进行计数,还有TF-IDF向量来表示任意多的文档。

我们确定“NYC”这个词项应该对“petness”主题有负向的权重。从某种意义,城市名称、缩写词等与有关宠物的词几乎没有交集。

我们还给“love”这个词赋予了一个对“petness”主题的正向的权重,这可能是因为我们经常把“love”和有关宠物的词放在同一个句子中。需要注意的是,上面我们也将少许比例的词“apple”放入“cityness”主题向量中,这可能是人工设定,因为“NYC”和“Big Apple”是同义词。理想情况下,我们的语义分析算法可以根据“apple”和“NYC”在相同文档中的出现频率来计算“apple”和“NYC”之间的同义性。

词和主题之间的关系是可以翻转的。3个主题向量组成的3*6矩阵可以转置,从而为词汇表中的每个词生成主题权重。这些权重向量就是6个词的词向量:

word_vector={}
word_vector['cat']=0.3*topic['petness']+0.1*topic['animalness']+0*topic['cityness']
word_vector['dog']=0.3*topic['petness']+0.1*topic['animalness']+0.1*topic['cityness']
word_vector['apple']=0*topic['petness']+0.1*topic['animalness']+0.2*topic['cityness']
word_vector['lion']=0*topic['petness']+0.5*topic['animalness']+0.1*topic['cityness']
word_vector['NYC']=-0.2*topic['petness']+0.1*topic['animalness']+0.5*topic['cityness']
word_vector['love']=0.2*topic['petness']+0.1*topic['animalness']+0.1*topic['cityness']
print(word_vector)

6个主题向量如下图示,每个词对应一个主题向量,以三维向量的形式表示6个词的意义:

之前,每个主题用向量来表示,而每个向量中给出了每个词的权重,我们在3个主题中使用六维向量来表示词的线性组合结果。在上述思想实验中,我们为单篇自然语言文档手工建立了一个三主题模型。如果只是计算这6个词的出现次数,并将它们乘以权重,就会得到任何文档的三维主题向量。三维向量很有意思,因为它们很容易实现可视化。三维向量(或任何低维向量空间)对于机器学习分类问题也很有用。分类算法可以用平面/超平面分割向量空间,从而将向量空间划分为类别。

上面主观的、人力耗费型的语义分析方法依赖人们的直觉和常识来将文档分解为主题。但是常识很难编码到算法中,因此上述方法是不可重现的,我们可能会得到和前面不一样的权重,这并不适合机器学习流水线。另外,上述做法也不能很好地扩展到更多的主题和词。人类无法将足够多的词分配给足够多的主题,从而精确捕获需要机器学习处理的任何不同类型语料库中的文档的含义。

每一个加权和其实都是一个点积,3个点积就是一个矩阵乘法,或者说内积。将一个3*n的权重矩阵与TF-IDF向量相乘(文档中每个词对应一个值),其中n就是词汇中的词项数。这个乘法的输出是表示该文档的一个新的3*1主题向量。我们所做的就是将一个向量从一个向量空间(TF-IDF)转换到另一个低维向量空间(主题向量)。我们的算法应该创建一个n个词项乘以m个主题的矩阵,我们可以将其乘以文档的词频向量,从而得到该文档的新主题向量。

一个主题评分算法

我们仍然需要一种算法来确定上面提到的主题向量,我们也需要将TF-IDF向量转换为主题向量。机器无法分辨哪些词应该属于同一组,或者它们当中的任何一个表示什么含义。

我们可以通过上下文来理解它们,

表达词的上下文,最直接的方法是计算词和上下文在同一文档中的共现次数。词袋(BOW)和TF-IDF向量可以满足这一需求。这种计算共现次数的方法导致了多个算法的出现,这些算法通过创建向量来表示文档或句子中词使用的统计信息。

LSA(隐性语义分析)是一种分析TF-IDF矩阵(TF-IDF向量构成的表格)的算法,它将词分组到主题中。LSA也可以对词袋向量进行处理,但是TF-IDF向量给出的结果稍好一些。

LSA还对这些主题进行了优化,以保持主题维度的多样性。当使用这些新主题而不是原始词时,我们仍然可以捕获文档的大部分含义(语义)。该模型中用于捕获文档含义所需的主题数量远远小于TF-IDF向量词汇表中的词的数量。因此,LSA通常被认为是一种降维技术。LSA减少了捕获文档含义所需的维数。

主成分分析(PCA)也是一种降维技术,它和LSA的数学计算方法是一样的。然而,当减少图像和其他数值表格而不是词袋向量或TF-IDF的维数时,我们就说这是PCA。使用PCA也可以对词进行语义分析。这时给这个特定的应用起了一个它自己的名字LSA。

还有两种算法与LSA相似,它们也有相似的NLP应用,它们分别是:

  • 线性判别分析(LDA)
  • 隐性狄利克雷分布(LDiA)

LDA将文档分解到单个主题中,而LDiA则更像LSA,因为它可以将文档分解到任意多个主题中。

下面是一个用于主题分析的简单LDA方法的示例:

一个LDA分类器

LDA是最直接也最快速的降维和分类模型之一。在很多应用中,它具有很高的精确率。LDA分类器是一种有监督算法,因此需要对文档的类进行标注。但是LDA所需要的训练样本可以比较少。

下面例子中,是一个LDA的一个简单的实现版本。模型训练只有3个步骤:

  • 计算某个类(如垃圾短消息类)中所有TF-IDF向量的平均位置(质心);
  • 计算不在该类(如非垃圾短消息类)中的所有TF-IDF的平均位置(质心);
  • 计算上述两个质心之间的向量差(即链接这两个向量的直线)。

要“训练”LDA模型,只需找到两个类的质心之间的向量(直线)。LDA是一种有监督算法,因此需要为消息添加标签。要利用该模型进行推理或预测,只需要判断新的TF-IDF是否更接近类内(垃圾类)而不是类外(非垃圾类)的质心。首先,我们来训练一个LDA模型,将短消息分为垃圾类或非垃圾类:

import pandas as pd
from nlpia.data.loaders import get_data

pd.options.display.width=120
sms=get_data('sms-spam')
index=['sms{}{}'.format(i,'!'*j) for (i,j) in zip(range(len(sms)),sms.spam)]
sms=pd.DataFrame(sms.values,columns=sms.columns,index=index)
sms['spam']=sms.spam.astype(int)
print(len(sms))
print(sms.spam.sum())
print(sms.head(6))

因此,上述数据集中有4387条短消息,其中638条被标注为spam(垃圾类)。

下面我们就对所有的这些短消息进行分词,并将它们转换为TF-IDF向量:

from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.tokenize import casual_tokenize
tfidf_model=TfidfVectorizer(tokenizer=casual_tokenize)
tfidf_docs=tfidf_model.fit_transform(raw_documents=sms.text).toarray()
print(tfidf_docs.shape)
print(sms.spam.sum())

nltk.casual_tokenizer处理后的词汇表中包含9232个词。词的数量几乎是短消息数的两倍,是垃圾短消息数的是被。因此,模型不会有很多有关垃圾短消息指示词的信息。通常,当词汇表的规模远远大于数据集中标注的样本数量时,朴素贝叶斯分类器就不是很奏效,而这种情况下语义分析技术就可以提供帮助。

下面是最简单的语义分析技术LDA,我们可以在sklearn.discriminant_analysis.LinearDiscriminantAnalysis中使用LDA模型。但是,为了训练这个模型,只需要计算两个类(垃圾类和非垃圾类)的质心,因此我们可以直接这样做:

mask=sms.spam.astype(bool).values
spam_centroid=tfidf_docs[mask].mean(axis=0)
ham_centroid=tfidf_docs[~mask].mean(axis=0)
print(spam_centroid.round(2))
print(ham_centroid.round(2))

现在可以用一个质心向量减去另一个质心向量从而得到分类线:

spamminess_score=tfidf_docs.dot(spam_centroid-ham_centroid)
print(spamminess_score.round(2))

这个原始的spamminess_score得分是非垃圾类质心到垃圾类质心的直线距离。我们用点积将每个TF-IDF向量投影到质心之间的连线上,从而计算出这个得分。在一个“向量化”的numpy运算中,我们同时完成了4387次点积计算。与Python循环相比,这可以将处理速度提高100倍。

下图是三维TF-IDF向量的视图,同时给出了短消息数据集类的质心所在位置。

图中从非垃圾类质心到垃圾类质心的箭头就是模型训练得到的直线,该直线定义了模型。我们可以看到点的分布情况,当将它们投影到质心的连线上时,我们可能会得到一个负的垃圾信息得分。

在理想情况下,我们希望上述平分就像概率那样取值在0到1之间,sklearnMinMaxScaler可以做到这一点:

from sklearn.preprocessing import MinMaxScaler
sms['lda_score']=MinMaxScaler().fit_transform(spamminess_score.reshape(-1,1))
sms['lda_predict']=(sms.lda_score>0.5).astype(int)
print(sms['spam lda_predict lda_score'.split()].round(2).head(6))

上述结果看起来不错,当将阈值设置为50%时,前6条消息都被正确分类。我们接下来看它在训练集其他数据上的表现:

print((1.0-(sms.spam-sms.lda_predict).abs().sum()/len(sms)).round(3))

这个简单的模型对97.7%的消息进行了正确分类。对于这里得到如此高精度结果的原因在于:我们用于测试的问题,分类器实际已经在训练过程中“见过”。但是,LDA是一个非常简单的模型,参数很少,所以它应该可以很好地泛化,只要这里的短消息能够代表将要分类的消息即可。

这就是语义分析方法的威力。与朴素贝叶斯或对率回归模型不同,语义分析并不依赖独立的词。语义分析会聚合语义详细的词并将它们一起使用。但是,这个训练集只包含有限的词汇表和一些非英语词。因此,如果希望正确分类,测试消息也需要使用相似的词。

下面看训练集上的混淆矩阵的样子。它给出了标注为垃圾但是根本不是垃圾的消息(假阳),也给出了标注为非垃圾但是本应该标注为垃圾的消息(假阴):

from pugnlp.stats import Confusion
Confusion(sms['spam lda_predict'.split()])

上面的结果看起来不错。如果假阳和假阴失衡,我们可以调整0.5这个阈值。

LDiA

LDiA代表隐性狄利克雷分布,它还可以用来生成捕捉词或文档语义的向量。LDiA和LSA在数学书并不一样,它使用非线性统计算法将词分组。因此它通常会比线性方法(如LSA)的训练时间长很多。这常常使LDiA在许多实际应用中并不使用,而且它基本不会是我们要尝试的第一种方法。尽管如此,它所创建的主题的统计数据有时更接近于人类对词和主题的直觉,所以LDiA主题通常更易于向上级解释。

此外,LDiA对于一些单文档问题有用,如文档摘要。这时,语料库就是单篇文档,文档的句子就是该“语料库”中的一篇篇“文档”。这就是gensim和其他软件使用LDiA来识别文档中最核心句子的做法。然后这些句子可以穿在一起形成一篇由机器生成的摘要。

对于大多数分类或回归问题,通常最好使用LSA。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【hot100篇-python刷题记录】【跳跃游戏】

R6-贪心算法 符合贪心的原因是: 我们要走到最后可以每次都选择尽可能远的来走,其次,能走到该步意味着该步以前都能到达。因此,局部最优解可以代表全局最优解。 class Solution:def canJump(self, nums: List[int]) -> bool:#最…

全志/RK安卓屏一体机:智能家居中控屏,支持鸿蒙国产化

智能家居中控屏 智能家居中控屏功能 智能中控屏作为全屋智能解决方案中的重要组成部分,融合智能开关面板、智能音箱、万能遥控、可视对讲、智能网关等设备,用一块屏承担起联动控制、人机交互、信息显示、个性化服务等功能。 智能中控屏是智能家居控制管…

cesium 轨迹线

在智慧城市项目中,轨迹线一般用来表现城市道路的流动效果。和cesium动态线篇效果类似,只是这里是通过设置高亮占比,而不是通过传入一张图片。 1. 自定义TrialFlowMaterialProperty类 1.1. 自定义 TrialFlowMaterialProperty 类 /** Descri…

MES管理系统助力印刷企业实现智能化工艺流程

在印刷这一古老而充满活力的行业中,科技的浪潮正以前所未有的速度重塑着每一个生产环节。随着制造业数字化转型的深入,引入MES管理系统,为印刷企业带来了从原材料入库到成品出库的全流程智能化变革,不仅提升了生产效率&#xff0c…

基于SpringBoot+Vue+MySQL的网上商城系统

系统背景 随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对网上商城购物系统方面的要求也在不断提高,购物的人数更是不断增加,使得网上商城购物系统的开发成为必需而且紧迫的事情。网上商…

无人机图传通信模组,抗干扰、稳定传输,8公里图传模组原理

在蔚蓝的天空下,无人机如同自由的精灵,穿梭于云间,为我们捕捉那些令人心动的瞬间。而在这背后,有一项技术正悄然改变着航拍的世界,那就是无人机图传通信模组。今天,就让我们一起揭开它的神秘面纱&#xff0…

在蓝桥云课ROS中快速搭建Arduino开发环境

普通方式 一步步慢悠悠的搭建和讲解需要5-6分钟: 如何在蓝桥云课ROS中搭建Arduino开发环境 视频时间:6分40秒 高效方式 如何高效率在蓝桥云课ROS中搭建Arduino开发环境 视频时间:1分45秒 配置和上传程序到开发板 上传程序又称为下载程序h…

匠心服务·智启新程丨2025华清远见新品发布会在北京隆重举行

2024年8月23日,华清远见教育科技集团的“匠心服务智启新程”2025新品发布会在北京隆重举行。云集多位行业专家学者、知名企业代表,聚焦市场新动向,站在行业技术最前沿,以多元化视角深入解读当前行业面临的新机遇新挑战&#xff0c…

信创环境下怎么做好信创防泄露?

为实现信创环境下的数据防泄露和“一机两用”标准落地,依靠十几年的沙盒技术积累,研发出了支持统信UOS/麒麟等信创OS的沙箱,配合零信任SDP网关,提高数据安全,实现“一机两用”安全解决方案。 信创防泄漏的需求 信创环…

从每 N 行找出需要数据拼成一行

Excel某表格不规范,每两行6列对应规范表格的一行3列,分别是:第1行第1列或第2行第1列(两者重复,取其一即可)、第2行第2列、第1行第3列。 ABC1John DoeCompany A2John Doejohn.doeexample.com3Jane SmithCom…

盘点国内外好用的12款文件加密软件|2024年好用的加密软件有哪些

在当今信息化时代,企业和个人都面临着数据泄露的风险。为了保护敏感信息,文件加密软件已经成为不可或缺的工具。本文将盘点国内外好用的12款文件加密软件,并提供其在2024年的使用推荐,帮助用户更好地保护数据安全。 1. 安秉加密软…

【html+css 绚丽Loading】 000024 八方流转杖

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

储能电池热失控监测系统的关键应用场景与安全防护

​ ​储能电池热失控监测系统主要应用于以下几个关键领域,以确保电池系统的安全、稳定运行,并预防因热失控引发的安全事故: ​ ​1.大型可再生能源发电储能 ​ ​这类应用常见于太阳能光伏电站、风力发电场等场景,其中储…

锂电池的使用真有所谓的小技巧吗

个人体会,真有的。 避免:过充过放 使用时间超过8年的锂电,风险很高。 网络信息繁杂 充斥着大量不明所以的内容。 自己实践才行。 掌握方式不合适,必须换电池了。 换过屏幕和电池,使用过程中损坏了。 2015年使用…

5个适合初学者的机器学习算法:线性回归、逻辑回归、决策树、随机森林和K近邻【源码与示例】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 👍感谢小伙伴们点赞、关注! 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

渠道分销|行业SaaS的三重机会

大家好,我是林叔,今天,我想和大家聊聊我在这个行业里观察到的一个重要趋势——行业SaaS的三重机会。近年来,SaaS(Software-as-a-Service,软件即服务)市场在中国蓬勃发展,尤其是在行业…

MS9123 宏晶微 USB 投屏控制芯片 可提供开发资料

1. 基本介绍 MS9123 是一款单芯片 USB 投屏器,内部集成了 USB2.0 控制器和数据收发模块、视频 DAC 和音视频处理模块,MS9123 可以通过 USB 接口显示或者扩展 PC、智能手机、平板电脑的显示信 息到更大尺寸的显示设备上,支持 CVBS、S-Vi…

k8s1.23 部署Prometheus-Operator集群监控

1. Prometheus-Operator介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 相关监控组件的本地部署和管理方案,该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置,主要包括以下几个功能: kubernetes自定义资源&#…

day15JS-es6的基础语法

1. 严格模式 1.1 严格模式的使用方法 使用方法1&#xff1a;"use strict"; 开启严格模式。 使用方法2&#xff1a;<script type"moaule"></script> 当设置script标签为模块化时&#xff0c;自动启用严格模式。 1.2 严格模式的限制 1. 要求变量…

Android U 多任务启动分屏——整体流程介绍

序 原生的分屏功能是在多任务中&#xff0c;点击应用图标选择分屏&#xff0c;在选择多任务中的其他应用进行分屏 整体流程 层级结构 #1 DefaultTaskDisplayArea typeundefined modefullscreen override-modefullscreen requested-bounds[0,0][0,0] bounds[0,0][1440,2960…