1.2-自然语言的分布式表示-基于计数的方法

  • 本篇笔记对应的视频链接为:
    • 3-基于计数的方法表示单词-将文字转换成编号的预处理工作_哔哩哔哩_bilibili;
    • 4-基于计数的方法表示单词-使用共现矩阵进行单词的分布式表示_哔哩哔哩_bilibili;
    • 5-基于计数的方法表示单词-单词之间相似度计算_哔哩哔哩_bilibili;
    • 6-基于计数的方法表示单词-计算点互信息_哔哩哔哩_bilibili;
    • 7-基于计数的方法表示单词-降维_哔哩哔哩_bilibili;
    • 8-基于计数的方法表示单词-在PTB数据集上对单词进行评价_哔哩哔哩_bilibili;

0比较

同义词词典是人为构建了一个词典,然后我们基于这个词典进行一些查询,相似度的计算等操作

这里基于计数的方法开始,纯粹是使用语料库,即一些自然语言,无需手动构建词典, 采用统计的方法,对语料库中的单词进行相关统计。

1语料库的预处理

  • 自然语言的分布式表示之前说到它是要将单词进行向量化,在实际进行向量化之前,需要对自然语言的语料库进行一些处理,主要包括:

    • 分词
    • 构建单词与单词索引的映射
  • 这里就和书上保持一致, 仅仅使用一条句子作为语料库:

    • text="you say goodbye and I say hello."
      

1.1分词

  1. 单词的大小写不影响单词本身的含义,因此这里首先将语料库中的单词全部小写化。
  2. 在真实的语料库中肯定不只有一个句子,因此每一个句子的句号不能省略。为了将句号也进行分割,这里首先在句号和最后一个单词中间插入一个空格,以保证句号能够被分词。
  3. 然后使用非常直接的方式,即直接以空格进行划分。将一个句子拆分成一个一个单词。
text = text.lower()
print('text.lower():', text)
text = text.replace('.', ' .')
print('text.replace.:', text)
words = text.split()  # 直接按照空格进行分隔
print('words:', words)

1.2构建单词及其编号之间的映射

  1. 用字典来完成

  2. # 构建单词及其编号之间的映射
    word_to_id = {}  # word是关键字
    id_to_word = {}  # id是关键字
    for word in words:
        if word not in word_to_id.keys():
            new_id = len(word_to_id.keys())
            word_to_id[word] = new_id
            id_to_word[new_id] = word
    
    print('word_to_id:', word_to_id)
    print('id_to_word:', id_to_word)
    
  3. 封装成预处理函数

2分布式表示的概念

  1. 将单词转换成一个向量,这个向量是固定长度的,这个向量能够一定程度上反映单词的含义
  2. 一个例子就是颜色的例子,使用RGB三种颜色来表示各种各样的颜色组合,因此在向量化之后,只需要一个三维的向量,通过改变每一个维度的元素值来反映不同的颜色

3分布式假设

  1. 一个单词的含义,由他周围的单词形成;即 如果一个单词是孤零零的,他就不存在有含义这么一说

  2. 上下文: 表示单词周围的一些单词

  3. 上下文的大小称为窗口大小,如果上下文的大小为1,说明,我们只需要去关注这个单词前面和后面的一个单词,以此类推【本书中是左右两边相同数量的单词作为上下文】

    1. 例如如果只看单词之后的一个单词,I drink milk和we drink water,milk和water都是日常喝的东西,那么如果将drink替换成一个我们不认识的单词,那么我们也能够大致猜出来这个单词是什么意思; 因此,我们进行单词的分布式表示也是想要计算机理解这样一个过程

    2. 下图是书上关于上下文的例子

      在这里插入图片描述

4使用共现矩阵对单词进行分布式表示

基于计数的方法:根据指定的上下文的大小,直接对当前单词周围出现了多少次什么样子的单词进行计数;将结果存放到共现矩阵中

  1. 以上面的text="you say goodbye and I say hello."为例构建共现矩阵

  2. 总共包含7个单词,上下文大小设置为1, 计算每个单词的上下文所包含的单词的频数

  3. 例如you和say的上下文单词的频数可以用一个向量表示:

    在这里插入图片描述

    在这里插入图片描述

  4. 共现矩阵的代码实现

  5. def create_co_matrix(corpus, vocab_size, window_size=1):
        corpus_size = len(corpus)
        co_matrix = np.zeros((vocab_size, vocab_size), dtype=np.int32)
        for idx, word_id in enumerate(corpus):
            # 获取了当前单词
            for i in range(1, window_size + 1):
                left_idx = idx - i
                right_idx = idx + i
                if left_idx >= 0:
                    left_word_id = corpus[left_idx]
                    co_matrix[word_id, left_word_id] += 1
    
                if right_idx < corpus_size:
                    right_word_id = corpus[right_idx]
                    co_matrix[word_id, right_word_id] += 1
        return co_matrix
    

5基于共现矩阵计算单词相似度

  1. 每一个单词现在都可以用共现矩阵中的一个行向量来表示

  2. 计算向量之间的相似度来表示单词之间的相似度现在成为可能;使用常见的余弦相似度

    在这里插入图片描述

  3. 可能存在某一个单词对应的向量全部为0,此时模长为0,无法计算除法,因此还需要在模长上加一个很小的数(如1e-8);

  4. 向量的模长即为向量的2范数, 当向量的2范数不为零时,这个很小的数会被范数给吸收掉,简单理解就是这个微小的数可以忽略不计

  5. 涉及到的函数

    1. np.sum()
      np.dot()
      np.sqrt()
      
  6. 实际在计算相似度时,是先对每个向量进行规范化(即除以它的2范数);无论是按照公式来计算还是使用这个方式来算,结果都是一样的

    1. 向量的规范化是一种将向量缩放到单位长度的过程;因此将上面相似度公式的x和y拆开看,就是先对x和y进行规范化(如下图所示,除以模长之后的向量变成了单位长度),然后再执行向量点积的操作

      在这里插入图片描述

def cos_similarity(x:np.ndarray, y:np.ndarray, eps=1e-8):
    nx = x / (np.sqrt(np.sum(x ** 2)) + eps) # 规范化之后的x
    ny = y / (np.sqrt(np.sum(y ** 2)) + eps)
    return np.dot(nx, ny)

def cos_similarity2(x, y, eps=1e-8):
    ret = np.dot(x, y)
    return ret / ((np.sqrt(np.sum(x ** 2)) + eps) * (np.sqrt(np.sum(y ** 2)) + eps))

6给单词相似度排序

给定一个单词,计算其他单词与这个单词的相似度,然后输出与这个单词最相似的前几个单词及其相似度

  1. 实现思路
    1. 取出查询词的单词向量
    2. 分别求得查询词的单词向量和其他所有单词向量的余弦相似度
    3. 基于余弦相似度的结果,按降序显示它们的值
  2. 取出查询词的单词向量时,需要先判断这个单词是否存在
  3. 排序时书上用到了argsort()函数:对numpy数组升序排序,且返回的是升序排序的索引,不是数组的元素
    1. argsort()函数不改变数组本身的值,只是返回一个排序后的下标的数组

7改进之点互信息

7.1基于计数方法的问题分析

  • 计数方法基于共现矩阵,每个元素表示一个单词出现在了另一个单词的上下文中
  • 对于冠词the,他会经常出现在car前面;而drive car是一个比较固定搭配的短语,但是drive不一定要drive car,所以drive和car共现的次数会比the、car共现的次数低,就造成the和car对应的单词向量更相似,即模型会判断出the和car的相关性更强,这显然是不太符合直觉的

7.2点互信息

  1. 点互信息:pointwise mutual information,简称PMI,公式如下:

    在这里插入图片描述

    1. 其中, x x x y y y表示随机变量, P ( x ) P(x) P(x) P ( y ) P(y) P(y)表示 x x x y y y单独出现的概率; P ( x , y ) P(x,y) P(x,y)表示 x x x y y y​共现的概率
    2. PMI值越大,说明越相关
  2. 使用共现矩阵来重写点互信息,公式如下图所示:

    在这里插入图片描述

    1. 其中,共现矩阵表示为 C C C,将单词 x x x y y y的共现次数表示为 C ( x , y ) C(x,y) C(x,y),将单词 x x x y y y的出现次数分别表示为 C ( x ) C(x) C(x) C ( y ) C(y) C(y),将语料库的单词数量记为 N N N
    2. 关于 C ( x ) C(x) C(x) C ( y ) C(y) C(y)的计算方法
      1. C ( x ) = ∑ i C ( i , x ) \boldsymbol{C}(x)=\sum_i\boldsymbol{C}(i,x) C(x)=iC(i,x) C ( y ) = ∑ i C ( i , y ) \boldsymbol{C}(y)=\sum_i\boldsymbol{C}(i,y) C(y)=iC(i,y)​;
      2. 即共现矩阵对应的单词所在列的次数和(不是行是因为行表示某个单词上下文中出现的其他单词,不能用来表示这个单词出现的次数,可结合共现矩阵的示例来看)
    3. 关于单词数量记为 N N N:统计时应该是不去重的,毕竟之后要统计 C ( x ) C(x) C(x)​;
      1. 本书中 N = ∑ i ∑ j C ( i , j ) N=\sum_i\sum_j\boldsymbol{C}(i,j) N=ijC(i,j)​;即共现矩阵中所有元素的和;
      2. 因为共现矩阵对应的单词所在列的次数和表示这个单词出现的次数,因此把所有的列的和加在一起就得到总的单词数量
    4. 以上 N N N C ( x ) C(x) C(x) C ( y ) C(y) C(y)的计算方法都是近似
      1. 因为按列来计算单词单独出现的次数,如果c这个单词夹在a和b之间,上下文大小为1,则计算a和b的单词向量时会两次检测到c,则按列计算c出现的次数时会认为是出现了2次,而实际上在句子中c只出现了1次
      2. 本书这么做,是为了仅从共现矩阵求 PPMI 矩阵
  3. 以点互信息为依据,计算下面的示例:

    在这里插入图片描述

    1. 虽然the和car共现的次数大,但是the单独出现的次数也多,这样分母同样会变大
    2. 这样就不会因为the和car共现次数多而导致结果过大,因为分母牵制了结果的大小
  4. 正的点互信息PPMI

    1. 原因:当两个单词的共现次数为 0 时 log ⁡ 2 0 = − ∞ \log_20=-\infty log20=

    2. 因此,当PMI值为负数时,将其视为0:这样一来,避免了负无穷的情况,同时,就可以将单词间 的相关性表示为大于等于 0 的实数,也比较符合直觉;
      P P M I ( x , y ) = max ⁡ ( 0 , P M I ( x , y ) ) \mathrm{PPMI}(x,y)=\max(0,\mathrm{PMI}(x,y)) \nonumber PPMI(x,y)=max(0,PMI(x,y))

  5. 代码实现

    1. np.zeros_like
      
      np.sum(co_matrix)
      np.sum(co_matrix, axis=0)
      
      np.set_printoptions(precision=3) # 设置np数组打印时的有效位数
      

8改进之降维

8.1问题分析

  1. 上述ppmi的改进方法依然是在共现矩阵的基础上进行计算的,能够缓解高频冠词这些看似贡献频率高实则没有意义的问题的出现

  2. 但是既然是在共现矩阵的基础上进一步计算的,那么最终的结果的维度仍然和共现矩阵一样,那么很多单词之间并没有共现,那么在ppmi矩阵中,依然会出现很多0元素,即太稀疏了;如下图所示:

    在这里插入图片描述

  3. 那么随着语料库的增加,这个矩阵的维度会非常大,非常不利于计算机的处理;

  4. 而这矩阵里面很多0元素,表明很多的向量(比如行向量)没有多大意义(因为一行里面含有的非0元素太少了,而且就算有,可能这个非0元素又很小);另外,这样的向量也容易受到噪声影响,稳健性差,具体可以表现为:

    1. 例如,受到噪声的影响,原先 C ( x , y ) = 0 C(x,y)=0 C(x,y)=0的现在大于0了,那么分子 C ( x , y ) ∗ N C(x,y)*N C(x,y)N就不再是0,而且还突然变得挺大的,根据对数函数曲线,对数值会有一定的增长;并且,看上图中ppmi矩阵中的值,如果因为噪声导致原先元素值从0变突然变成2.807355,这个变动还是比较大的;

      在这里插入图片描述

  5. 因此,面对如此多的0元素,就有了接下来的降维

8.2基于奇异值分解对向量进行降维

8.2.1降维的理解

  1. 从字面意思来说,降维就是减少向量维度,但又不是直接减少一些列(因为对于某一列,他不是全为0,他对有的单词有作用,对有些单词没有作用)

  2. 降维的准则是保留重要信息的基础上使维度减少

  3. 以书上二维的数据为例,这些数据可视化之后其实都是分布在一个新的轴上的,因此将这些数据投影到一个新的轴上之后,维度从2变为1,但是仍然可以用一个轴来表示这些数据的分布差异

    在这里插入图片描述

  4. 多维数据也是基于这样的思想,只是随着维度的增加,我们无法像二维三维这样直观的进行展现。

8.2.2奇异值分解的简单理解

  1. 详细的理解需要深入学习奇异值分解;这里只是在书中解释的基础上稍微进一步解释了一下
  1. 对于矩阵A,经过奇异值分解,得到

    在这里插入图片描述

    1. U可以作为词的密集表示;U是正交矩阵,每个列向量都是正交的,即互不相干,可以用作基向量,来表示其他的向量;可以将U理解为词在奇异值分解后的新空间中的坐标,即U的每一行表示一个单词在每个列(轴)上的坐标;
    2. 对角阵的对角元素(奇异值)可以作为不同成分(或者说不同轴、不同列向量)的权重;
    3. 一般用U乘上对角阵来表示词的密集向量表示;而且是选择前k个较大的奇异值以及U中对应的前k个列向量,这样就起到了维度降低的效果;本书上应该是为了简单分析而直接用U来代表词;
  2. 代码实现就很简单了,直接调用对应的奇异值分解函数,然后直接选择U作为词的表示;

    1. # 计算svd
      U,S,V=np.linalg.svd(ppmi)
      
      # 在对应坐标位置上标注单词文本
      plt.annotate(word,(U[word_id,0],U[word_id,1]))
      # 画散点图
      plt.scatter(U[:,0],U[:,1],alpha=0.5) # alpha表示透明度
      
    2. 计算完之后进行可视化,如下图所示;可以看到密集向量表示减少了维度,但同时还是可以反映单词分布的差异:goodbyehello位置较近,youi位置更近;

      在这里插入图片描述

9在PTB数据集中进行上述过程

代码详见:pycharmProject/nlp/3-使用PTB数据集计算单词的密集表示.py

9.1 PTB数据集准备

  1. 主要包括数据集的下载、单词ID列表的构建、词汇表(单词与ID之间的映射字典)的构建
  2. 这里只对训练数据部分进行上述几个内容的构建
  1. 一些值得记录的知识

    dataset_dir = os.path.dirname(os.path.abspath(__file__)) # 获取当前文件所在目录
    if os.path.exists(file_path): # 判断文件是否存在
      
    # 从指定的 URL 下载文件并保存到本地路径;如果文件不存在则创建;
    # 注意这里会自动创建文件,但是文件之前的目录必须都是存在的
    urllib.request.urlretrieve(url_base + file_name, file_path)
    
    # open方法直接读取文本文件全部内容
    words = open(file_path).read().replace('\n', '<eos>').strip().split()  # words就是单词列表
    
    # numpy存储和读取数组
    corpus = np.array([word_to_id[w] for w in words])
    np.save(save_path, corpus)
    corpus = np.load(save_path)
    
    # pickle包进行文件的写和读
    with open(vocab_path, 'rb') as f:
        # 二进制读模式
        word_to_id, id_to_word = pickle.load(f)
    # 以二进制写的方式写入到本地文件
    with open(vocab_path, 'wb') as f:
        # 将数据序列化并保存到文件中
        pickle.dump((word_to_id, id_to_word), f)
    
  2. 关于pickle的一个简单介绍:

    在这里插入图片描述

9.2基于PTB数据集的评价

包括构建共现矩阵、ppmi矩阵、SVD降维得到单词的密集向量表示、基于向量表示计算单词间相似度

  1. 共现矩阵、 ppmi矩阵、相似度计算的代码都来自前面的叙述;

  2. 这里只是将SVD计算方法换成了更快地randomized_svd

    1. 该方法通过使用了随机数的 Truncated SVD,仅对奇异值较大的部分进行 计算,计算速度比常规的 SVD 快;
    2. 需要安装sklearn机器学习包
    3. 关于该函数的参数的简单介绍详见代码中
  3. 计算出单词的密集向量表示后,遵照书上的过程,计算了几个单词最相似的单词列表,如下图所示:

    1. 与书上结果不完全相同,因为SVD分解时random_state=None,所以每次结果不一样
    2. 但是最终的结论还是相似的:
      1. 对于you,i、anybody、we都是与之比较相似的;这符合常理;
      2. 对于year,month、quarter等也比较相似;

    在这里插入图片描述

10总结

  • 以上就是对单词进行密集向量表示,然后计算单词间相似度的主要过程,可以概括为:
    • 首先创建单词的共现矩阵,将其转化为 PPMI 矩阵,再基于 SVD 降 维以提高稳健性,最后获得每个单词的分布式表示。另外,我们已经确认 过,这样的分布式表示具有在含义或语法上相似的单词在向量空间上位置相 近的性质,因为从计算与每个单词最相似的单词有哪些的过程可以证实这一点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

都怪我当初没有好好了解你,Java虚拟机(JVM)

初始JVM JVM本质是一个运行在计算机上的程序&#xff0c;作用是运行Java字节码文件。 下面是它的运行流程&#xff1a; 看完上述运行过程&#xff0c;现在提出一个问题&#xff1a;Java是编译型语言还是解释型语言&#xff1f; 这里先补充什么是编译&#xff0c;什么是解释&am…

泛微开发修炼之旅--13通过Ecology拦截器(注解的方式),拦截后端接口,实现接口执行成功后或执行前操作源码示例

文章链接&#xff1a;泛微开发修炼之旅--13通过Ecology拦截器(注解的方式)&#xff0c;拦截后端接口&#xff0c;实现接口执行成功后或执行前操作源码示例

Codeforces Round 949 (Div. 2) A~D

A. Turtle and Piggy Are Playing a Game &#xff08;思维&#xff09; 题意&#xff1a; 给出一个整数 x x x &#xff0c;使得 l ≤ x ≤ r l \le x \le r l≤x≤r &#xff0c;其中 l , r l, r l,r 为给定值。同时保证 2 l ≤ r 2l \le r 2l≤r 。 执行以下操作&…

【C51】C51单片机实现的 抽奖机 设计与编程指南

文章目录 前言&#xff1a;1. 实现效果2. 准备工作3. 编写代码总结&#xff1a; 前言&#xff1a; 在本文中&#xff0c;我们将介绍如何使用C51单片机来实现一个简单的抽奖机。这个项目不仅能够展示C51单片机的基本应用&#xff0c;还能让我们了解如何通过编程来控制硬件&…

Unity协程学习心得

前言 个人总结的一些Unity协程学习心得&#xff0c;如有不对请在评论区指出一起学习&#xff01;感谢。 在Unity编程中谈到异步逻辑&#xff0c;可以考虑使用协程来实现。协程&#xff08;Coroutine&#xff09;在Unity中的主要作用就是把一个任务暂停&#xff08;挂起&#…

Java集合汇总

Java中的集合框架是Java语言的核心部分&#xff0c;提供了强大的数据结构来存储和操作对象集合。集合框架位于java.util包中&#xff0c;主要可以分为两大类&#xff1a;Collection&#xff08;单列集合&#xff09;和Map&#xff08;双列集合&#xff09;。下面是对它们的总结…

NXP i.MX8系列平台开发讲解 - 3.14 Linux 之Power Supply子系统(二)

专栏文章目录传送门&#xff1a;返回专栏目录 Hi, 我是你们的老朋友&#xff0c;主要专注于嵌入式软件开发&#xff0c;有兴趣不要忘记点击关注【码思途远】 目录 1. 前言 2. 芯片简介 2. 系统原理设计 2. 设备树相关 本文实操是基于Android11 系统下i.MX8MQ环境下&#x…

博睿数据应邀出席双态IT用户大会,分享《构建云原生时代的一体化智能可观测性》

5月31日-6月2日&#xff0c;第十二届双态IT用户大会于成都成功举行&#xff0c;此次大会由DCMG和双态IT论坛联合主办&#xff0c;聚焦“信创时代的组织级云原生能力建设”和“组织级云原生运维能力建设”两大会议主题&#xff0c;旨在推动双态IT落地与创新&#xff0c;为企业数…

LabVIEW在高校中的应用

LabVIEW 作为一款功能强大的图形化编程工具&#xff0c;在高校中有广泛的应用。它不仅用于教学实验&#xff0c;还广泛应用于科研项目和工程训练。本文将从教学、科研、实验室管理和学生技能培养等多个角度&#xff0c;详细分析LabVIEW在高校中的应用。 教学应用 课程设计 自动…

快来速领限量免费亚马逊云科技助理级架构师(SAA)和云从业者50%半价考试券

前几天在上海5/29的亚马逊云科技Summit峰会里&#xff0c;小李哥在现场分享了AWS 13张认证大满贯的心得&#xff08;图1&#xff09;&#xff0c;并且现场招募了自己的云师兄必过班(图2)。 本次必过班也为成员发放AWS SAA(助理级架构师)和云从业者(Cloud Practitioner)50%考试券…

华为防火墙配置 SSL VPN

前言 哈喽&#xff0c;我是ICT大龙。本期给大家更新一次使用华为防火墙实现SSL VPN的技术文章。 本次实验只需要用到两个软件&#xff0c;分别是ENSP和VMware&#xff0c;本次实验中的所有文件都可以在文章的末尾获取。话不多说&#xff0c;教程开始。 什么是VPN 百度百科解…

未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。.net 读取excel的时候报错(实测有效)

1. 下载AccessDatabaseEngine.exe 下载链接 添加链接描述 2. office excel是64为的需要安装【AccessDatabaseEngine.exe】、32位的【AccessDatabaseEngine_X64.exe】 3. 我的是64为&#xff0c;跳过32位安装检测 1. 找到下载的安装包 2.输入安装包文件全称并在后面加上/pas…

C++之RTTI

1、RTTI&#xff08;runtime type information&#xff09;运行时类型信息 static_cast&#xff1a;用在编译器认可的转型 reinterpret_cast&#xff1a;用在编译器不认可的转型&#xff08;不做任何的对齐操作&#xff09; const_cast&#xff1a;去除常量属性 dynamic_ca…

Java 泛型类,泛型方法,泛型接口和通配符(用来限定类和方法的使用范围)

测试类 package Genericity;import java.util.ArrayList;public class test {public static void main(String[] args) {// 使用泛型方法添加元素ArrayList<String> list new ArrayList<>();MyToolClass.ListAdd(list,"fdsf","dsfa");System…

Triton学习笔记

b站链接&#xff1a;合集Triton 从入门到精通 文章目录 算法名词解释&#xff1a;scheduler 任务调度器model instance、inference和requestbatching 一、Triton Inference Server原理1. Overview of Trition2. Design Basics of Trition3. Auxiliary Features of Trition4. A…

C++笔试强训day42

目录 1.最大差值 2.兑换零钱 3.小红的子串 1.最大差值 链接https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId182&tqId34396&rp1&ru/exam/company&qru/exam/company&sourceUrl%2Fexam%2Fcompany&difficulty2&judgeSta…

6.9总结

Vue生命周期 生命周期&#xff1a;指一个对象从创建到销毁的整个过程生命周期的八个阶段&#xff1a;每触发一个生命周期事件&#xff0c;会自动执行一个生命周期的方法&#xff08;钩子&#xff09; mounted&#xff1a;挂载完成&#xff0c;Vue初始化成功&#xff0c;HTML渲…

JAVA小案例-递归:计算n!

JAVA小案例-递归&#xff1a;计算n! 首先抛出概念&#xff0c;什么是递归&#xff1f; 说白了就是自己调用自己。 递归的结构&#xff1a; &#xff08;1&#xff09;递归头&#xff1a;就是什么时候不调用自身的方法&#xff0c;也就是递归结束的条件 &#xff08;2&#xff…

轴承接触角和受力分析

提示&#xff1a;轴承接触角和受力分析 文章目录 1&#xff0c;接触角2&#xff0c;轴承受力分析 1&#xff0c;接触角 所谓公称接触角就是指轴承在正常状态下&#xff0c; 滚动体和内圈及外圈沟道接触点的法线与轴心线的垂直平面之间的夹角。 按滚动轴承工作时所能承受载荷的…

AI大模型学习(非常详细)零基础入门到精通,收藏这一篇就够了

前言 随着人工智能技术的快速发展&#xff0c;AI大模型学习正成为一项备受关注的研究领域。为了提高模型的准确性和效率&#xff0c;研究者们需要具备深厚的数学基础和编程能力&#xff0c;并对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xff0c;AI大模…