第17章 潜在语义分析:奇异值分解、非负矩阵分解及课后习题

news2025/1/18 3:24:33

1.单词向量空间模型通过单词的向量表示文本的语义内容。以单词-文本矩阵 X X X为输入,其中每一行对应一个单词,每一列对应一个文本,每一个元素表示单词在文本中的频数或权值(如TF-IDF)
X = [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] X = \left[ \begin{array} { c c c c } { x _ { 11 } } & { x _ { 12 } } & { \cdots } & { x _ { 1 n } } \\ { x _ { 21 } } & { x _ { 22 } } & { \cdots } & { x _ { 2 n } } \\ { \vdots } & { \vdots } & { } & { \vdots } \\ { x _ { m 1 } } & { x _ { m 2 } } & { \cdots } & { x _ { m n } } \end{array} \right] X= x11x21xm1x12x22xm2x1nx2nxmn
单词向量空间模型认为,这个矩阵的每一列向量是单词向量,表示一个文本,两个单词向量的内积或标准化内积表示文本之间的语义相似度。

TF-IDF 是词频-逆文档频率(Term Frequency-Inverse Document Frequency),这个值越大,表示词语 t i t_i ti 在文档 d j d_j dj 中越重要。它结合了词语在单个文档中的频率和词语在整个文档集中出现的稀有程度,能够有效地衡量词语的重要性。公式如下:

TF-IDF i j = t f i j t f j × log ⁡ ( d f d f i ) \text{TF-IDF}_{ij} = \frac{tf_{ij}}{tf_{j}} \times \log \left( \frac{df}{df_i} \right) TF-IDFij=tfjtfij×log(dfidf)

  1. 词频部分
    t f i j t f j \frac{tf_{ij}}{tf_{j}} tfjtfij

    • t f i j tf_{ij} tfij:词语 t i t_i ti 在文档 d j d_j dj 中出现的次数。
    • t f j tf_{j} tfj:文档 d j d_j dj 中所有词语出现的总次数。

    这个部分计算的是词语 t i t_i ti 在文档 d j d_j dj 中的相对词频(Term Frequency, TF),即词语在文档中出现的频率。

  2. 逆文档频率部分
    log ⁡ ( d f d f i ) \log \left( \frac{df}{df_i} \right) log(dfidf)

    • d f df df:文档集中所有文档的总数。
    • d f i df_i dfi:包含词语 t i t_i ti 的文档数。

    这个部分计算的是词语 t i t_i ti 的逆文档频率(Inverse Document Frequency, IDF)。当词语 t i t_i ti 出现在较少的文档中时,IDF值较高,表示该词语对区分文档的重要性较大。反之,如果词语 t i t_i ti 出现在许多文档中,IDF值较低,表示该词语对区分文档的重要性较小。

2.话题向量空间模型通过话题的向量表示文本的语义内容。假设有话题文本矩阵 Y = [ y 11 y 12 ⋯ y 1 n y 21 y 22 ⋯ y 2 n ⋮ ⋮ ⋮ y k 1 y k 2 ⋯ y k n ] Y = \left[ \begin{array} { c c c c } { y _ { 11 } } & { y _ { 12 } } & { \cdots } & { y _ { 1 n } } \\ { y _ { 21 } } & { y _ { 22 } } & { \cdots } & { y _ { 2 n } } \\ { \vdots } & { \vdots } & { } & { \vdots } \\ { y _ { k 1 } } & { y _ { k 2 } } & { \cdots } & { y _ { k n } } \end{array} \right] Y= y11y21yk1y12y22yk2y1ny2nykn
其中每一行对应一个话题,每一列对应一个文本,每一个元素表示话题在文本中的权值。话题向量空间模型认为,这个矩阵的每一列向量是话题向量,表示一个文本,两个话题向量的内积或标准化内积表示文本之间的语义相似度。假设有单词话题矩阵 T T T
T = [ t 11 t 12 ⋯ t 1 k t 21 t 22 ⋯ t 2 k ⋮ ⋮ ⋮ t m 1 t m 2 ⋯ t m k ] T = \left[ \begin{array} { c c c c } { t _ { 11 } } & { t _ { 12 } } & { \cdots } & { t _ { 1 k } } \\ { t _ { 21 } } & { t _ { 22 } } & { \cdots } & { t _ { 2 k } } \\ { \vdots } & { \vdots } & { } & { \vdots } \\ { t _ { m 1 } } & { t _ { m 2 } } & { \cdots } & { t _ { m k } } \end{array} \right] T= t11t21tm1t12t22tm2t1kt2ktmk
其中每一行对应一个单词,每一列对应一个话题,每一个元素表示单词在话题中的权值。

给定一个单词文本矩阵 X X 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 ] X = \left[ \begin{array} { c c c c } { x _ { 11 } } & { x _ { 12 } } & { \cdots } & { x _ { 1 n } } \\ { x _ { 21 } } & { x _ { 22 } } & { \cdots } & { x _ { 2 n } } \\ { \vdots } & { \vdots } & { } & { \vdots } \\ { x _ { m 1 } } & { x _ { m 2 } } & { \cdots } & { x _ { m n } } \end{array} \right] X= x11x21xm1x12x22xm2x1nx2nxmn

潜在语义分析的目标是,找到合适的单词-话题矩阵 T T T与话题-文本矩阵 Y Y Y,将单词-文本矩阵 X X X近似的表示为 T T T Y Y Y的乘积形式。
X ≈ T Y X \approx T Y XTY

等价地,潜在语义分析将文本在单词向量空间的表示X通过线性变换 T T T转换为话题向量空间中的表示 Y Y Y

潜在语义分析的关键是对单词-文本矩阵进行以上的矩阵因子分解(话题分析)

3.潜在语义分析的算法是奇异值分解。通过对单词文本矩阵进行截断奇异值分解,得到
X ≈ U k Σ k V k T = U k ( Σ k V k T ) X \approx U _ { k } \Sigma _ { k } V _ { k } ^ { T } = U _ { k } ( \Sigma _ { k } V _ { k } ^ { T } ) XUkΣkVkT=Uk(ΣkVkT)

矩阵 U k U_k Uk表示话题空间,矩阵 ( Σ k V k T ) ( \Sigma _ { k } V _ { k } ^ { T } ) (ΣkVkT)是文本在话题空间的表示。

4.非负矩阵分解也可以用于话题分析。非负矩阵分解将非负的单词文本矩阵近似分解成两个非负矩阵 W W W H H H的乘积,得到
X ≈ W H X \approx W H XWH

矩阵 W W W表示话题空间,矩阵 H H H是文本在话题空间的表示。

非负矩阵分解可以表为以下的最优化问题:
min ⁡ W , H ∥ X − W H ∥ 2  s.t.  W , H ≥ 0 \left. \begin{array} { l } { \operatorname { min } _ { W , H } \| X - W H \| ^ { 2 } } \\ { \text { s.t. } W , H \geq 0 } \end{array} \right. minW,HXWH2 s.t. W,H0
非负矩阵分解的算法是迭代算法。乘法更新规则的迭代算法,交替地对 W W W H H H进行更新。本质是梯度下降法,通过定义特殊的步长和非负的初始值,保证迭代过程及结果的矩阵 W W W H H H均为非负。

非负矩阵分解(NMF)

NMF 是一种矩阵分解技术,用于将一个非负矩阵 X X X分解为两个非负矩阵 W W W H H H的乘积,即:

X ≈ W ⋅ H X \approx W \cdot H XWH

其中:

  • X X X是原始的非负矩阵,维度为 m × n m \times n m×n
  • W W W是左因子矩阵,维度为 m × k m \times k m×k
  • H H H是右因子矩阵,维度为 k × n k \times n k×n
  • k k k是分解的潜在特征的数量,也就是我们选择的维度。

这种分解方法在文本挖掘、图像处理和推荐系统中广泛应用。

import numpy as np

# 保留两位小数,不使用科学计数法
np.set_printoptions(precision=2, suppress=True)


def inverse_transform(W, H):
    # 重构
    return W.dot(H)


def loss(X, X_):
    #计算重构误差
    return ((X - X_) * (X - X_)).sum()


# 基于平方损失的算法 17.1
class MyNMF:
    def fit(self, X, k, t):
        m, n = X.shape

        W = np.random.rand(m, k)
        W = W / W.sum(axis=0)

        H = np.random.rand(k, n)

        i = 1
        while i < t:

            W = W * X.dot(H.T) / W.dot(H).dot(H.T)

            H = H * (W.T).dot(X) / (W.T).dot(W).dot(H)

            i += 1

        return W, H
X = [[2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 1, 0], [0, 0, 2, 3], [0, 0, 0, 1],
     [1, 2, 2, 1]]
X = np.asarray(X)
model = MyNMF()
W, H = model.fit(X, 3, 200)
print('W:\n', W)
print('H:\n', H)

# 重构
X_ = inverse_transform(W, H)
print('X:\n', X)
print('X_:\n', X_)
print('重构损失:', loss(X, X_))
W:
 [[0.   0.39 0.  ]
 [0.   0.78 0.  ]
 [0.   0.   0.4 ]
 [1.44 0.   0.75]
 [0.49 0.   0.  ]
 [0.46 0.97 0.78]]
H:
 [[0.   0.   0.08 2.05]
 [1.03 2.06 0.01 0.01]
 [0.01 0.01 2.5  0.07]]
X:
 [[2 0 0 0]
 [0 2 0 0]
 [0 0 1 0]
 [0 0 2 3]
 [0 0 0 1]
 [1 2 2 1]]
X_:
 [[0.4  0.8  0.01 0.  ]
 [0.8  1.6  0.01 0.01]
 [0.   0.   1.   0.03]
 [0.   0.01 2.   3.  ]
 [0.   0.   0.04 1.  ]
 [1.   2.   2.   1.  ]]
重构损失: 4.002696167437877
# 使用sklearn
from sklearn.decomposition import NMF

model = NMF(n_components=3, init='random', random_state=0)
W = model.fit_transform(X)
H = model.components_
print('W:\n', W)
print('H:\n', H)

# 重构
X_ = inverse_transform(W, H)
print('X:\n', X)
print('X_:\n', X_)
print('重构损失:', loss(X, X_))
W:
 [[0.   0.54 0.  ]
 [0.   1.08 0.  ]
 [0.7  0.   0.  ]
 [1.4  0.   1.97]
 [0.   0.   0.66]
 [1.4  1.35 0.66]]
H:
 [[0.   0.   1.43 0.  ]
 [0.74 1.49 0.   0.  ]
 [0.   0.   0.   1.52]]
X:
 [[2 0 0 0]
 [0 2 0 0]
 [0 0 1 0]
 [0 0 2 3]
 [0 0 0 1]
 [1 2 2 1]]
X_:
 [[0.4 0.8 0.  0. ]
 [0.8 1.6 0.  0. ]
 [0.  0.  1.  0. ]
 [0.  0.  2.  3. ]
 [0.  0.  0.  1. ]
 [1.  2.  2.  1. ]]
重构损失: 4.000001672582457

习题17.1

试将图17.1的例子进行潜在语义分析,并对结果进行观察。
在这里插入图片描述

# X=U*(Sigma*Vt)=T*Y
import numpy as np

# 保留两位小数,不使用科学计数法
np.set_printoptions(precision = 2, suppress = True)

def lsa_svd(X, k):
    """
    潜在语义分析的矩阵奇异值分解
    :param X: 单词-文本矩阵
    :param k: 话题数
    :return: 话题向量空间、文本集合在话题向量空间的表示
    """
    # 单词-文本矩阵X的奇异值分解
    U, S, Vt = np.linalg.svd(X)
    # 矩阵的截断奇异值分解,取前k个
    U = U[:, :k]
    S = np.diag(S[:k])
    Vt = Vt[:k, :] # 取V的前k列即为取V^T的前k行

    return U, np.dot(S, Vt)
X = [[2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 1, 0], [0, 0, 2, 3], [0, 0, 0, 1], [1, 2, 2, 1]]
X = np.asarray(X)
T, Y = lsa_svd(X, 3)

print("单词话题矩阵T(话题空间):\n", T)
print("话题文本矩阵Y(文本在话题空间的表示):\n", Y)
单词话题矩阵T(话题空间):
 [[-0.08 -0.28  0.89]
 [-0.16 -0.57 -0.45]
 [-0.14  0.01 -0.  ]
 [-0.73  0.55  0.  ]
 [-0.15  0.18  0.  ]
 [-0.63 -0.51 -0.  ]]
话题文本矩阵Y(文本在话题空间的表示):
 [[-0.79 -1.57 -2.86 -2.96]
 [-1.08 -2.15  0.1   1.33]
 [ 1.79 -0.89 -0.    0.  ]]

在假设话题个数为3的情况下,单词airplane在话题3上的权值最大为0.89,表示单词airplane在话题3中的重要度最高;文本 d 2 d2 d2在话题2中的权值最大为-2.15,表示话题2在文本 d 2 d2 d2中的重要度最高。

# 或者可以直接使用sklearn的截断奇异值分解类
from sklearn.decomposition import TruncatedSVD

# 可惜的是这个类不会显式地计算出左奇异矩阵U
svd = TruncatedSVD(n_components=3, n_iter=7, random_state=42)  
svd.fit(X)
Sigma = np.diag(svd.singular_values_)
# svd.components_返回的是已截断的Vt,形状为(n_components,X的列数)
Y = np.dot(Sigma, svd.components_)
print("话题文本矩阵Y(文本在话题空间的表示):\n", Y)
话题文本矩阵Y(文本在话题空间的表示):
 [[ 0.79  1.57  2.86  2.96]
 [ 1.08  2.15 -0.1  -1.33]
 [ 1.79 -0.89 -0.    0.  ]]

习题17.2

给出损失函数是散度损失时的非负矩阵分解(潜在语义分析)的算法。
在这里插入图片描述
损失函数是散度损失时的非负矩阵分解算法
在这里插入图片描述
在这里插入图片描述

import numpy as np


class DivergenceNmfLsa:
    def __init__(self, max_iter=1000, tol=1e-6, random_state=0):
        """
        损失函数是散度损失时的非负矩阵分解
        :param max_iter: 最大迭代次数
        :param tol: 容差
        :param random_state: 随机种子
        """
        self.max_iter = max_iter
        self.tol = tol
        self.random_state = random_state
        np.random.seed(self.random_state)

    def _init_param(self, X, k):
        self.__m, self.__n = X.shape
        self.__W = np.random.random((self.__m, k))
        self.__H = np.random.random((k, self.__n))

    def _div_loss(self, X, W, H):
        Y = np.dot(W, H)
        loss = 0
        for i in range(self.__m):
            for j in range(self.__n):
                loss += (X[i][j] * np.log(X[i][j] / Y[i][j])
                         if X[i][j] * Y[i][j] > 0 else 0) - X[i][j] + Y[i][j]

        return loss

    def fit(self, X, k):
        """
        :param X: 单词-文本矩阵
        :param k: 话题个数
        :return:
        """
        # (1)初始化
        self._init_param(X, k)
        # (2.c)计算散度损失
        loss = self._div_loss(X, self.__W, self.__H)

        for _ in range(self.max_iter):
            # (2.a)更新W的元素
            WH = np.dot(self.__W, self.__H)
            for i in range(self.__m):
                for l in range(k):
                    s1 = sum(self.__H[l][j] * X[i][j] / WH[i][j]
                             for j in range(self.__n))
                    s2 = sum(self.__H[l][j] for j in range(self.__n))
                    self.__W[i][l] *= s1 / s2

            # (2.b)更新H的元素
            WH = np.dot(self.__W, self.__H)
            for l in range(k):
                for j in range(self.__n):
                    s1 = sum(self.__W[i][l] * X[i][j] / WH[i][j]
                             for i in range(self.__m))
                    s2 = sum(self.__W[i][l] for i in range(self.__m))
                    self.__H[l][j] *= s1 / s2

            new_loss = self._div_loss(X, self.__W, self.__H)
            if abs(new_loss - loss) < self.tol:
                break

            loss = new_loss

        return self.__W, self.__H
X = np.array([[2, 0, 0, 0],
              [0, 2, 0, 0],
              [0, 0, 1, 0],
              [0, 0, 2, 3],
              [0, 0, 0, 1],
              [1, 2, 2, 1]])

# 设置精度为2
np.set_printoptions(precision=2, suppress=True)
# 假设话题的个数是3个
k = 3
div_nmf = DivergenceNmfLsa(max_iter=200, random_state=2022)
W, H = div_nmf.fit(X, k)
print("话题空间W:")
print(W)
print("文本在话题空间的表示H:")
print(H)
话题空间W:
[[0.   0.   1.39]
 [0.   1.47 0.  ]
 [0.35 0.   0.  ]
 [1.77 0.   0.  ]
 [0.35 0.   0.  ]
 [1.06 1.47 0.7 ]]
文本在话题空间的表示H:
[[0.   0.   1.41 1.41]
 [0.   1.36 0.   0.  ]
 [1.44 0.   0.   0.  ]]

习题17.3,习题17.4


解答见链接

使用书籍:李航《机器学习方法》
习题解答:https://datawhalechina.github.io/statistical-learning-method-solutions-manual/#/

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

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

相关文章

nodejs 获取客服端ip,以及获取ip一直都是127.0.0.1的问题

一、问题描述 在做登录日志的时候想要获取客户端的ip, 网上查了一下 通过 req.headers[x-forwarded-for] || req.connection.remoteAddress; 获取&#xff0c; 结果获取了之后不管是开发环境&#xff0c;还是生产环境获取到的一直都是 127.0.0.1&#xff0c;这是因为在配置N…

Python基础知识——(002)

文章目录 P8——7. input函数的使用 基本的输入函数input P9——8. Python中的注释 P10——9. Python中的缩进与本章总结 本章总结 P11——10. 章节习题 P8——7. input函数的使用 基本的输入函数input 语法结构&#xff1a; x input(提示文字) 注意事项&#xff1a;无论输…

注册商标为什么要先查询

注册商标为什么要先查询 在知识产权日益受到重视的今天&#xff0c;商标的注册成为了许多企业和个人保护其品牌价值和市场地位的重要手段。然而&#xff0c;商标注册并非一蹴而就的过程&#xff0c;其中一个关键的步骤就是商标查询&#xff0c;也就是我们通常所说的“商标检索…

《梦醒蝶飞:释放Excel函数与公式的力量》10.1.1函数简介

10.1.1函数简介 BIN2DEC函数是Excel中用于将二进制数转换为十进制数的函数。它在处理二进制数时非常有用&#xff0c;尤其是在电子工程、计算机科学等领域。 10.1.2函数语法&#xff1a; BIN2DEC(number) number&#xff1a;这是要转换的二进制数&#xff0c;必须是以字符串…

多文件编程:c/c++分文件写法(入门)

前言 一个 C 项目通常会采取 声明与定义分离 的方式进行编写&#xff0c;其基本遵循&#xff1a;头文件中写声明&#xff0c;源文件中写定义。 此外&#xff0c;为了区分头文件与源文件&#xff0c;会采用不同的文件后缀&#xff1a; .h: 头文件 .cpp: 源文件 (当然还有其他的…

【SQL】做项目时用到的语句整理(去重/多表关联)

1. 对日期去重&#xff08;groupby&#xff09; 需要&#xff1a;新建一张表&#xff0c;对原来表中的某个列(href)进行去重&#xff0c;并按照最新的日期进行排版 适用&#xff1a;如果有一张表&#xff0c;我们重复往里面存入数据&#xff0c;有一些除了日期以外&#xff0…

【大模型LLM面试合集】大语言模型架构_MoE论文

1.MoE论文 参考文章&#xff1a; Mixture of Experts-IntroductionUnderstanding the Mixture-of-Experts Model in Deep Learning 论文相关&#xff1a; 论文名称&#xff1a;Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer论文地址&a…

上传图片,base64改为文件流,并转给后端

需求&#xff1a; html代码&#xff1a; <el-dialog v-model"dialogPicVisible" title"新增图片" width"500"><el-form :model"picForm"><el-form-item label"图片名称&#xff1a;" :label-width"10…

手把手带你本地部署大模型

这篇文章的唯一目的是实现在本地运行大模型&#xff0c;我们使用LMStudio这个工具协助达成这个目标。 文章目录 一&#xff0c;下载安装LM Studio二&#xff0c;本地部署大模型1&#xff0c;搜索模型2&#xff0c;下载大模型3&#xff0c;加载大模型4&#xff0c;测试大模型5&a…

STM32Cubemx配置生成 Keil AC6支持代码

文章目录 一、前言二、AC 6配置2.1 ARM ComPiler 选择AC62.2 AC6 UTF-8的编译命令会报错 三、STM32Cubemx 配置3.1 找到stm32cubemx的模板位置3.2 替换文件内核文件3.3 修改 cmsis_os.c文件3.4 修改本地 四、编译对比 一、前言 使用keil ARM compiler V5的时候&#xff0c;编译…

解读‘‘不要卷模型,要卷应用‘‘

前言 2024 年 7 月 4 日&#xff0c;世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海世博中心举行。百度创始人李彦宏在产业发展主论坛上发言&#xff0c;呼吁不要卷模型&#xff0c;要卷应用。 目录 四个要点 积极的观点 不合理性 总结 四个要点 李彦宏的呼吁…

PMON的解读和开发

提示&#xff1a;龙芯2K1000PMON相关记录 文章目录 1 PMON的发展和编译环境PMONPMON2000 2 PMON2000的目录结构3 Targets目录的组成4 PMON编译环境的建立5 PMON2000的框架6 异常向量表7 Pmon的空间分配8 PMON的汇编部分(starto.S或sbdreset.S)的解读Start.SC代码部分dbginit 9 …

SpringCloud Alibaba Sentinel网关流量控制实践总结

官网地址&#xff1a;https://sentinelguard.io/zh-cn/docs/api-gateway-flow-control.html GitHub地址&#xff1a;GitHub Sentinel 网关限流 【1】概述 Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 Sentinel 1.6.0 引入了 Sentinel API …

命令执行(RCE)面对各种过滤,骚姿势绕过总结

1、什么是RCE RCE又称远程代码执行漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入操作系统命令或者代码&#xff0c;从而控制后台系统。 2、RCE产生原因 服务器没有对执行命令的函数做严格的过滤&#xff0c;最终导致命令被执行。 3、命令执行函数 PHP代码执行函数…

潜在空间可视化(Latent space visualization)

在“深度学习”系列中&#xff0c;我们不会看到如何使用深度学习来解决端到端的复杂问题&#xff0c;就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术&#xff0c;以及一些示例和应用程序。 1、引言 上次&#xff08;Autoencoders - Deep Learning bits #…

PLC物联网关在工业自动化领域的应用的意义-天拓四方

随着信息技术的飞速发展&#xff0c;物联网技术正逐步渗透到各个行业领域&#xff0c;其中&#xff0c;工业自动化领域的PLC与物联网的结合&#xff0c;为工业自动化的发展开辟了新的道路。PLC物联网关作为连接PLC与物联网的重要桥梁&#xff0c;其重要性日益凸显。 PLC物联网…

STM32 低功耗模式 睡眠、停止和待机 详解

目录 1.睡眠模式&#xff08;Sleep Mode&#xff09; 2.停止模式&#xff08;stop mode&#xff09; 3.待机模式&#xff08;Standby Mode&#xff09; STM32提供了三种低功耗模式&#xff0c;分别是睡眠模式&#xff08;Sleep Mode&#xff09;、停止模式&#xff08;Stop …

Python基于you-get下载网页上的视频

​ 1.python 下载地址 下载 : https://www.python.org/downloads/ 2. 配置环境变量 配置 python_home 地址 配置 python_scripts 地址 在path 中加入对应配置 3. 验证 ​ C:\Users>python --version Python 3.12.4C:\Users>wheel version wheel 0.43.04. 下载 c…

公开课备课思路有哪些?

在准备公开课时&#xff0c;你是否曾感到迷茫&#xff0c;不知从何下手&#xff1f;作为一名教师&#xff0c;我们深知公开课的重要性&#xff0c;它不仅是展示个人教学水平的舞台&#xff0c;也是与同行交流、学习的机会。那么&#xff0c;如何高效地备课&#xff0c;让公开课…

Linux--深入理与解linux文件系统与日志文件分析

一、文件与存储系统的 inode 与 block 1.1 硬盘存储 最小存储单位:扇区( sector )每个扇区存储大小:512 字节1.2 文件存取--block block(块),每个 block 块大小为:4k由连续的八个扇区组成一个 block 块是文件索引最小的单位每个 block 块中包括:文件数据文件数据:就…