[PyTorch][chapter 44][时间序列表示方法2]

news2024/9/20 18:29:48

 前言

       bag of words 技术里面除了上面我们讲的,还包括

word2Vec TF-IDF,Glove, co-occurrence matrix 等技术

论文总览

1 Abstract: 摘要

2 Introduction: 前人工作,本文目标

3 Model Architectures:  LSA LDA 

4 New Log-Linear model

5 Result

6 Examples of the Learned Relationships

7 Conclusion

8 Follow-up work

9 Conclusion


目录:

  1.       NLP 背景知识
  2.      统计语言模型
  3.      k-gram
  4.     评价指标
  5.     NN-LM
  6.     RNN-LM
  7.     co-occurrence matrix

一  NLP 背景知识

   1.1  语言模型概念:
            语言模型: 计算一组词组是句子的概率
    
    例1: 给定词组[她,狠,漂亮]

句子

概率

她 很 漂亮

0.95

很 她 漂亮

0.01

她 漂亮 很

0.5


1.2 构建语言模型:

   

   
    1: 基于专家语法规则的语言模型

          语言学家总结出一套同样的语法规则:
           缺点: 泛化性差


 
    2: 统计语言模型
        
          P(s)=p(w_1,w_2,..w_n)=P(w_1)P(w_2|p_1)p(w_3|w_1,w_2)...p(w_n|w_1...,w_{n-1})

           词的概率,大数定理,频率来代替概率

         


二  统计语言模型

   2.1 背景知识

      w_i: 单词

                    p(w_i)=\frac{count(w_i)}{N}

                   p(w_{i-1},w_i)=\frac{count(w_{i-1},w_i)}{N}

  根据 贝叶斯公式:

                 P(A|B)=\frac{P(AB)}{P(B)}

                 P(w_i|w_{i-1})=\frac{count(w_{i-1},w_i)}{count(w_{i-1})} 

    sentence=\begin{Bmatrix} w_1, & ... &w_n \end{Bmatrix}

   例:

   

概率

句子概率

P(张三)

P(|张三)

P(|张三,很)

P(张三,,帅)

0.9

0.5

0.001

0.00045

我们发现随着词组的增加,有些词组在语料中没有出现过,或者很少出现。但是不代表不存在

P(帅|张三,很)会出现概率接近为0的现象

解决方案:

    平滑处理

2.2 平滑处理

    每个词原来出现的次数+1

   例: A,B,C 三个词组成的句子,原来在语料中出现的次数

  

   问题1: 参数空间过大

     p(s)=p(w_1,w_2,...w_n)

            =p(w_1)p(w_2|w_1)...p(w_n|w_1,w_2,..w_{n-1})

    假设有3个单词,设v=3 sentence=(我,爱,你) 

    p(w_1) 参数空间为3 v(w1 p(我)p(爱) p(你))

   p(w_2|w_1)=\frac{count(w_2,w_1)}{count(w_1)}  参数空间为v^2

   则 参数空间为

    v+v^2+..v^n

  随着语料库的增加,该参数空间为变得极其庞大。

    

     问题2:  数据稀疏严重

       很少不为0,大部分为0 

   一方面浪费了空间,另一方面增加了计算量

   例如

   p(吃饭|张三,星期天,去了,酒店) 

  这个概率在语料库中可能接近为0

  解决方案 k-gram


三  k-gram

      这个之前讲解过,语言模型

      p(s)=p(w_1,w_2,...w_n)

      利用马尔科夫链的原理:

      

K取值

统计模型

Uni-gram

p(s)=p(w_1)p(w_2)...p(w_n)

Big-gram

p(s)=p(w_1)p(w_2|w_1)...p(w_n|w_{n-1})

Tri-gram

p(s)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_{n-2}w_{n-1})

K-gram

p(s)=p(w_1)p(w_2|w_1)...p(w_n|w_{n-k+1}...w_{n-1})

k 一般取1-3 ,越大计算量越大.

k

P(s)= p(我,今天,打,球)

1

p() *p(今天)* p()*p(球)

2

p() * p(今天|)*p(|今天)*p(|打)

3

p()*p(今天|)*p(|,今天)*p(|今天,打)


四  评价指标

   

      相对图像处理常用的评价指标: 准确率(Accuracy) 精确率(Precision) 召回率(Recall) 

     NLP 常用的评价指标为perplexity 困惑度

     p(s)=p(w_1,w_2,..w_n)^{-\frac{1}{n}}=\sqrt[n]{\frac{1}{p(s)}}

    比如两个模型

    

模型1

模型2

参数个数

3

10

概率

𝑝𝑠=0.7p(s)=0.7

𝑝𝑠=0.6p(s)=0.6

困惑度

Pps =1.1262

Pps =1.0524

   看起来模型1比模型2 概率更高一点,但是s_1 由3个单词组成,s_2由10个单词组成

 但是通过困惑度的计算方法p(s_2) 困惑度更低,性能更好


五  NN-LM

      Bengio大神在2003年发表的《A Neural Probabilistic Language Model》

      利用n-1 词预测 第 n 个词的概率,这是一种无监督学习,不需要自己打标签

      效果比较好。

    5.1  模型

5.2  模型原理

       输入层

        1  输入 n个单词,单词用one-hot 编码,是一个[1,v]列的向量

       2   随机生存一个权重系数矩阵W ,是一个[v,d]的矩阵

           C_{t-n+1}=A_{1,v}W_{v,d} 则 映射成了一个[1,d]的向量

       3  然后把n个单词进行 concat,得到一个x=【1,n*d】的向量

        隐藏层:

        a= tanh(Ux^T+b)

        U 是一个[v,n*d]的矩阵,

         a 是一个[v,1]的向量

         输出层

         p(w_{t}|w_{t-n+1},..w_{t-1})=y=softmax(a)

          是一个 【v,1】的向量

    5.2 损失函数

   L = -\frac{1}{T}\sum_{i=1}^{T}log P(W_i|w_{i-n+1},..,W_{i-1})

     一共有T个词,跟前面的困惑度pps 有什么关系呢?

   pps=p(w_1,..w_T)^{-\frac{1}{T}}

log pps = -\frac{1}{T}log p(w_1,w_2,..w_T)

    =-\frac{1}{T}[log p(w_1)+logp(w_2|w_1)+...logp(w_{T-1|w_{T-n+1},..t_{T-1}})]                      =-\frac{1}{T}\sum_i log p(w_i|w_{i-n+1},..w_{i-1})

  发现损失函数 L = log (pps)

 5.3  Bengio在论文的Feature Work部分提出了神经网络语言模型的可能改进方向:


a、将神经网络分解成为小的子网络,比如利用词的聚类等。
b、加速SoftMax中的正则项Z的快速求导
c、仅对一部分输出进行梯度传播。
d、引入先验知识,比如语义信息(WordNet),语法信息(low-level: POS, high level:句法结构)等。
e、词向量可解释性。
f、解决一词多义问题(Polysemous)。
-----------------------------------
Large Language Models 与神经网络 神经网络语言模型详解
https://blog.51cto.com/u_14276/6295646


六  RNN-LM

     循环神经网络模型(RNN-LM)下面以一个例子:

     输入

      x=[x^1,x^2,x^3,x^4]

      x^1: the 

     x^2: students

    x^3: opened

     x^4: their

   step1 : word Embedding  

              e^t=Ex^t( E 需要训练)

  

 step2  hiddent state

              a^t=W_h h^{t-1}+W_ee^t+b_t

             h^t=\sigma(a^t)

   step3: output

          \hat{y^t}=softmax(Uh^t+b_t)

    

   损失函数:

    J(\theta)=\frac{1}{T}\sum_tJ^t(\theta)

  

       【Pytorch深度学习实战】(9)神经语言模型(RNN-LM)_Sonhhxg_柒的博客-CSDN博客


七 co-occurrence matrix

     比较简单,这里面我们以一个例子直接介绍

     bag of words

  我们认为某个词的意思跟它临近的单词是紧密相关的。这是我们可以设定一个window(大小一般是5~10)

toy corpus(微信语料库)

I  love china

I  love dataScience

 如上

      windows=1,与I 共现的单词 :love。

      windows=2.  与I 共现的单词: love, china, dataSience。

       然后我们就利用这种共现关系来生成词向量。

优点:

   一定程度上可以反应出词的相似度。

   例如 like,enjoy 都跟I 共现,二者有一定的相似度

缺点:

   维度灾难,可以通过SVD 分解降维,但是可解释性降低

 参考代码:

    occurrence_matrix 一般在数据预处理的时候已经处理好了,

不会影响train时间,这里面只取窗口大小为1,做了一个简答的参考代码

# -*- coding: utf-8 -*-
"""
Created on Wed Jun 21 15:33:55 2023

@author: chengxf2
"""

# -*- coding: utf-8 -*-
"""
Created on Tue Jun 20 13:44:52 2023

@author: chengxf2
"""

from sklearn.feature_extraction.text import  CountVectorizer, TfidfTransformer
import numpy as np

def gram(N=1):
    
    '''
     ngram_range=(2, 2)表明适应2-gram,
     decode_error="ignore"忽略异常字符,
     token_pattern按照单词切割
    '''
    
    toy_corpus =["The girl bought a chocolate",
                 "The  boy ate  the chocolate",
                 "The  girl bought a toy",
                 "The girl played with a toy"]
    
    vectorizer  = CountVectorizer(ngram_range=(N, N), decode_error="ignore",min_df=0)
    x_trans = vectorizer .fit_transform(toy_corpus)
    
    print("\n get_feature_names ",vectorizer .get_feature_names())
    print("\n vocabulary 词典 ",vectorizer.vocabulary_)
    print("\n 每个句子中 单词出现的次数  \n",x_trans)
    print("\n  是将结果转化为稀疏矩阵矩阵的表示方式 \n ",x_trans.toarray())
    
    print(np.shape(x_trans.toarray()))
    
    
    print("\n toarray \n",x_trans.toarray()) #.toarray() 是将结果转化为稀疏矩阵矩阵的表示方式;
    print("\n sum \n",x_trans.toarray().sum(axis=0))  #每个词在所有文档中的词频
    
    return vectorizer.vocabulary_,  x_trans.toarray(),vectorizer .get_feature_names()
    
# 根据字典的值value获得该值对应的key
def get_dict_key(dic, value):
    key = list(dic.keys())[list(dic.values()).index(value)]
    return key



    
    

if __name__:
    
    N =1 
    vocabulary,word_array,feature_names=gram(N)
    
    input_word = 'the girl'
    
    feature_names = vocabulary.keys()
    
    print("\n feature_names",feature_names)
    
    
    N = len(feature_names)
    
    occurrence_matrix = np.zeros((N,N))
    
    m,n = np.shape(word_array)
    print(m,n)
    
    windows = N
    
    for i in range(m): #每一行的句子
        for j in range(n): #代表单词的索引
            if 1 == word_array[i,j]:
                
                left = max(j-N,0)
                right = min(j+N,n)
                
                for k in range(left, right):
                    
                    if k == j:
                        continue
                    if 1 == word_array[i,k]:
                        name = get_dict_key(vocabulary,j)
                        nearname = get_dict_key(vocabulary,k)
                        print(" i: %d j: %d  %d : %s --  :%s "%(i,j,k, name,nearname))
                        occurrence_matrix[j,k]= occurrence_matrix[j,k]+1
    print(occurrence_matrix)

问题:

1  虽然Cocurrence matrix考虑了单词间相对位置的关系,但是它仍然面对维度灾难问题,也就是说一个单词的向量表示维度太大。这时,会很自然地想到SVD或者PCA等一些常用的降维方法。然而,SVD算法运算量也很大,若文本集非常多,则不具有可操作性。

2:窗口大小的选择跟N-gram中确定N也是一样的,窗口放大则矩阵的维度也会增加,所以本质上还是带有很大的计算量。

    神经语言模型

【论文复现代码数据集见评论区】5小时精讲 Paper,BAT大厂导师带你吃透NLP自然语言处理的经典模型Word2vec_哔哩哔哩_bilibili

word2vec 中的数学原理详解(三)背景知识_皮果提的博客-CSDN博客

(全)Word Embedding_wordembedding_薛定谔的炼丹炉!的博客-CSDN博客word2vec 中的数学原理详解(二)预备知识_皮果提的博客-CSDN博客

论文|万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM - 知乎

论文-Recurrent neural network based language model(RNNLM) - 简书

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

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

相关文章

STM32面试知识点总结分析

一、STM32F1和F4的区别? 内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核; 主频不同:F1主频72MHz,F4主频168MHz; 浮点运算:F1无浮点运算单位,F4有; 功能性…

【推荐】win 安装 rust 1.70

目录 一、下载二、安装先决条件MinGW三、安装Rust四、配置国内镜像五、检查是否安装成功五、参考文章 一、下载 官网地址:https://www.rust-lang.org/zh-CN/ 二、安装先决条件MinGW win 安装 C运行环境 - MinGW 三、安装Rust 3.1首先设置安装路径和环境变量 配…

容器常用操作命令概述

容器镜像就可以说是一个“样板间”,把运行进程所需要的文件系统、依赖库、环境变量、启动参数等所有信息打包整合到了一起。之后镜像文件无论放在哪里,操作系统都能根据这个“样板间”快速重建容器,应用程序看到的就会是一致的运行环境了。 …

EMC学习笔记(十四)射频PCB的EMC设计(一)

射频PCB的EMC设计(一) 1.板材1.1 普通板材1.2 射频专用板材 2.隔离与屏蔽2.1 隔离2.2 器件布局2.3 敏感电路和强辐射电路2.4 屏蔽材料和方法2.5 屏蔽腔的尺寸 近十年来,移动通信飞速发展,在移动通信设备的设计、测试、安装和操作维…

你有几种实现点击锁定屏慕,输入密码解锁的效果的思路?

文章目录 点击锁定,密码解锁1 需求解析2 思路2.1输入密码时回显2.1.1 利用prompt的输入值来判断 2.2 输入密码时不回显2.2.1实现思路 点击锁定,密码解锁 1 需求解析 点击指定的按钮,当前的屏幕变为空白, 弹出对话框,当…

ChatGPT付费创作系统V2.0.8独立版 +WEB端+ H5端 + 小程序端+新增PC端绘画

ChatGPT付费创作系统V2.0.8提供单独的升级包,升级前先更新至2.0.7版本,再上传升级包替换,同是导入升级包数据库。ChatGPT2.0.8独立版核心功能增加了PC端绘画功能,绘画功能采用其他绘画接口-意间AI,后台一些小细节的优化…

电脑c盘哪些文件可以删除?这4种文件可以删!

我的电脑使用了快两年了,现在经常很卡顿,不知道是不是因为电脑c盘空间快满了导致的。电脑c盘哪些文件可以删除呢?请大家帮我看看! 电脑的c盘一般会存储很多的临时文件和系统的文件。然而这些文件并不是都有用的。有些文件我们可以…

[golang 微服务] 9.go-micro + gorm实现商品微服务的分页查询

一.引入 上一节讲解 go-micro的负载均衡操作,go Web框(Gin,Beego)调用go-micro微服务等技术,这一节来看看 go-micro gorm实现 商品微服务的 分页查询操作,go-micro微服务中使用GORM和go web框架gin、beego中使用 GORM都是一样的 二.创建goodsinfo服务端…

git学习使用技巧

目录 关于版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 Git 是什么 直接记录快照,而非差异比较 近乎所有操作都是本地执行 Git 保证完整性 Git 一般只添加数据 三种状态 起步 - 初次运行 Git 前的配置 初次运行 Git 前的配置 用户…

2023年7月1日【青书学堂】考试 统计学(高起专)

2023年7月1日【青书学堂】考试 统计学(高起专) 注意:答案仅供参考 成绩:84.34 分 第1题 单选题 下列哪两个变量之间的相关程度高 ( ) A: 商品销售额和商品销售量的相关系数是0.9 B: 商品销售额与商业利润率的相关系数是0.84 C: 平均流通费用率与商业利润率的相关系数是-0…

ACL2023 | Multi-CLS BERT:传统集成的有效替代方案

进NLP群—>加入NLP交流群 在本文中,介绍了 Multi-CLS BERT,这是传统集成方法的有效替代方案。 这种基于 CLS 的预测任务的新颖方法旨在提高准确性,同时最大限度地减少计算和内存需求。 通过利用具有不同参数化和目标的多个 CLS token&…

数据结构-查找

数据结构-查找 1 知识框架2 顺序查找和折半查找2.1 顺序查找2.2折半查找2.3 分块查找 3 树型查找3.1 二叉排序树3.2 平衡二叉树3.3 B树和B树3.3.1 B树3.3.2 B树 4 散列表4.1 构造方法4.2 处理冲突的办法4.3性能分析 1 知识框架 2 顺序查找和折半查找 2.1 顺序查找 1.一般线性…

vue 基础入门

目录 vue 简介 vue 的特性 数据驱动视图 双向数据绑定 MVVM vue 的基本使用 vue 的调试工具 vue 的指令 1、内容渲染指令 2、属性绑定指令 3、事件绑定 4、双向绑定指令 v-model 5、 条件渲染指令 6 、列表渲染指令 vue过滤器 定义过滤器基本使用 私有过滤器和全…

web安全php基础_phpstudy pro安装

phpstudy pro是什么 phpstudy是一个php运行环境的集成包,用户不需要去配置运行环境,就可以使用,phpstudy不仅是一款比较好用的php调试环境工具,并且还包括了开发工具和常用手册,对于新手是有很大帮助的 windows下ph…

基于LLAMA-7B的lora中文指令微调

目录 1. 选用工程2. 中文llama-7b预训练模型下载3. 数据准备4. 开始指令微调5. 模型测试 前言: 系统:ubuntu18.04显卡:GTX3090 - 24G (惨呀,上次还是A100,现在只有3090了~) (本文旨在…

I.MX RT1170之FlexSPI(3):NOR Flash手册分析和参数配置详解

在上一节中,我们分析了FlexSPI的相关参数:LUT表格的组成和FlexSPI结构体配置,这一节就以WINBOND的W25Q256JV NOR Flash为例,看一下如何根据这个NOR Flash的数据手册配置FlexSPI接口。 文章目录 1 SDK代码2 NOR Flash配置流程2.1 时…

java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。

问题 java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。 详细问题 笔者使用ServletJSP技术框架进行项目开发,对于项目进行国际化(即i18n,实现中英文页面转换),需要引入 下…

【C语言初阶(9)】函数2

文章目录 1. 函数的嵌套调用和链式访问1.1 嵌套调用1.2 链式访问 2. 函数的声明和定义2.1 函数定义2.2 函数声明2.3 函数的实际应用 3. 函数递归3.1 什么是递归?3.2 递归使用条件3.3 递归的案例3.4 递归的优缺点 4. 递归练习题 1. 函数的嵌套调用和链式访问 函数和函…

悟道·天鹰 Aquila + 天秤 FlagEval,打造大模型能力与评测标准双标杆

为推动大模型在产业落地和技术创新,智源研究院发布“开源商用许可语言大模型系列开放评测平台” 2 大重磅成果,打造“大模型进化流水线”,持续迭代、持续开源开放。 开源商用许可语言大模型系列 悟道天鹰(Aquila) 语…

教师资格证考试(高中数学)-考什么

目录 考什么 及格线 科一-综合素质 ​编辑 科二-教育知识与能力 科三-学科知识与教学能力(数学) 题型 考什么 及格线 大家要明确3个分数: ✅卷面分数:满分为150分,也就是大家平时拿到的试卷及真题卷面分数。 ✅报告分数:…