热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《nlp入门+实战:第九章:循环神经网络》

文章目录1.文本的tokenization1.1概念和工具的介绍1.2中英文分词的方法2.N-garm表示方法3.向量化3.1one-hot编码3.2wordembedding3.

文章目录

  • 1.文本的tokenization
    • 1.1 概念和工具的介绍
    • 1.2 中英文分词的方法
  • 2.N-garm表示方法
  • 3.向量化
    • 3.1 one-hot编码
    • 3.2 word embedding
    • 3.3 word embedding APl
    • 3.4数据的形状变化



上一篇:
《nlp入门+实战:第八章:使用Pytorch实现手写数字识别》

本章代码链接:

  • https://gitee.com/ninesuntec/nlp-entry-practice/blob/master/code/9.循环神经网络.py

目标:

  • 1.知道token和tokenization
  • 2.知道N-gram的概念和作用
  • 3.知道文本向量化表示的方法

1.文本的tokenization

1.1 概念和工具的介绍

tokenization就是通常所说的分词,分出的每一个词语我们把它称为token。

常见的分词工具很多,比如:

  • jieba分词: https://github.com/fxsjy/jieba
  • 清华大学的分词工具THULAC: https://github.com/thunlp/THULAC-Python

1.2 中英文分词的方法


  • 把句子转化为词语
    • 比如:我爱深度学习可以分为[我,爱,深度学习]
  • 把句子转化为单个字
    • 比如:我爱深度学习的token是[我,爱,深,度,学,习]

2.N-garm表示方法

前面我们说,句子可以用单个字,词来表示,但是有的时候,我们可以用2个、3个或者多个词来表示。

N-gram 一组一组的词语,其中的N表示能够被一起使用的词的数量

例如:

import jiebatext = "深度学习(英语: deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。"
cuted = jieba.lcut(text)
[print(cuted[i:i + 2]) for i in range(len(cuted) - 1)]

在这里插入图片描述

在传统的机器学习中,使用N-gram方法往往能够取得非常好的效果,但是在深度学习比如RNN中会白带N-gram的效果。

3.向量化

因为文本不能够直接被模型计算,所以需要将其转化为向量

把文本转化为向量有两种方法:

  • 1.转化为one-hot编码
  • 2.转化为word embedding

3.1 one-hot编码

在one-hot编码中,每一个token使用一个长度为N的向量表示,N表示词典的数量

即:把待处理的文档进行分词或者是N-gram处理,然后进行去重得到词典,假设我们有一个文档:深度学习,那么进行one-hot处理后的结果如下:
在这里插入图片描述

one-hot使用稀疏的向量表示文本,占用空间比较多

3.2 word embedding

word embedding是深度学习中表示文本常用的一种方法。和one-hot编码不同,word embedding使用了浮点型的稠密矩阵来表示token。

根据词典的大小,我们的向量通常使用不同的维度,例如100,256,300等。其中向量中的每一个值是一个超参数,其初始值是随机生成的,之后会在训练的过程中进行学习而获得

如果我们文本中有20000个词语,如果使用one-hot编码,那么我们会有20000*20000的矩阵,其中大多数的位置都为0,但是如果我们使用word embedding来表示的话,只需要20000*维度,比如20000*300
形象的表示就是:
在这里插入图片描述

我们会把所有的文本转化为向量,把句子用向量来表示。

但是在这中间,我们会先把token使用数字来表示。再把数字使用向量来表示。
即: token—> num ---->-vector
在这里插入图片描述

在这里插入图片描述

上图的过程就是:我们输入一个形状为:[batch_size,N]的数据,经过word embedding向量化之后就会转化为一个三阶的[batch_size,N,4]的形状

3.3 word embedding APl

torch.nn.Embedding(num_embeddings, embedding_dim)参数介绍:

  • 1.num_embeddings :词典的大小(指不重复词语的个数)
  • 2.embedding_din : embedding的维度

使用方法:

embedding = nn. Embedding(vocab_size,300) #实例化
input_embeded = embedding(input) #进行embedding的操作

3.4数据的形状变化

思考:每个batch中的每个句子有10个词语,经过形状为[20,4]的Word emebedding之后,原来的句子会变成什么形状?

每个词语用长度为4的向量表示,所以,最终句子会变为[batch_size, 10,4]的形状。

增加了一个维度,这个维度是embedding的dim。


推荐阅读
author-avatar
米粒尖尖果儿_445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有