Python深度学习(处理文本数据)--学习笔记(十二)

第6章 深度学习用于文本和序列

  • 用于处理序列的两种基本的深度学习算法分别是循环神经网络(recurrent neural network)和一维卷积神经网络(1D convnet),这些算法的应用包括:(1)文档分类和时间序列分类,比如识别文字的主题或书的作者;(2)时间序列对比,比如估测两个文档或两支股票行情的相关程度;(3)序列到序列的学习,比如将英语翻译成法语;(4)情感分析,比如将推文或电影评论的情感划分为正面或负面;(5)时间序列预测,比如根据某地最近的天气数据来预测未来天气。

6.1 处理文本数据

  • 文本是最常用的序列数据之一,可以理解为字符序列或单词序列,但最常见的是单词级处理。后面几节介绍的深度学习序列处理模型都可以根据文本生成基本形式的自然语言理解,并可用于文档分类、情感分析、作者识别甚至问答(QA,在有限的语境下)等应用。当然,请记住,本章的这些深度学习模型都没有像人类一样真正地理解文本,而只是映射出书面语言的统计结构,但这足以解决许多简单的文本分类任务。深度学习用于自然语言处理是将模式识别应用于单词、句子和段落,这与计算机视觉将模式识别应用于像素大致相同。
  • 与其他所有神经网络一样,深度学习模型不会接收原始文本作为输入,它只能处理数值张量。文本向量化(vectorize)是指将文本转换为数值张量的过程。它有多种实现方法:(1)将文本分割为单词,并将每个单词转换为一个向量。(2)将文本分割为字符,并将每个字符转换为一个向量。(3)提取单词或字符的n-gram,并将每个n-gram转换为一个向量。n-gram是多个连续单词或字符的集合(n-gram之间可重叠)。
  • 将文本分解而成的单元(单词、字符或n-gram)叫作标记(token),将文本分解成标记的过程叫作分词(tokenization)。所有文本向量化过程都是应用某种分词方案,然后将数值向量与生产的标记相关联。这些向量组合成序列张量,被输入到深度神经网络中。将向量与标记相关联的方法有很多种。本节将介绍两种主要方法:对标记做one-hot编码(one-hot encoding)与标记嵌入(token embedding,通常只用于单词,叫作词嵌入(word embedding))。
理解n-gram和词袋
  • n-gram是从一个句子中提取的N个(或更少)连续单词的集合。这一概念中的“单词”也可以替换为“字符”。
  • 袋(bag)这一术语指的是标记组成的集合,而不是一个列表或序列,即标记没有特定的顺序。
  • 词袋是一种不保存顺序的分词方法(生成的标记组成一个集合,而不是一个序列,舍弃了句子的总体结构),因此它往往被用于浅层的语言处理模型,而不是深度学习模型。提取n-gram是一种特征工程,深度学习不需要这种四班而又不稳定的方法,并将其替换为分层特征学习。本章后面将介绍的一维卷积神经网络和循环神经网络,都能够通过观察连续的单词序列或字符序列来学习单词组合字符组的数据表示,而无须明确知道这些组的存在。在使用轻量级的浅层文本处理模型时(比如logistic回归和随机森林),n-gram是一种功能强大、不可或缺的特征工程工具。
6.1.1 单词和字符的one-hot编码
  • one-hot编码是将标记转换为向量最常用、最基本的方法。它将每个单词与一个唯一的整数索引相关联,然后将这个整数索引 i i i转为为长度为 N N N的二进制向量( N N N是词表大小),这个向量只有第 i i i个元素是1,其余元素都为0。当然,也可以进行字符级的one-hot编码。
# 单词级的one-hot编码
import numpy as np

samples = ['The cat sat on the mat.', 'The dog ate my homework.']

token_index = {
   } # 构建数据中所有标记的索引
# 为每个唯一单词指定一个唯一索引。注意,没有为索引编号0指定单词。
for sample in samples:
    for word in sample.split():
        if word not in token_index:
            token_index[word] = len(token_index) + 1

# 对样本进行分词。只考虑每个样本前max_length个单词
max_length = 10

results = np.zeros(shape=(len(samples), max_length, max(token_index.values()) + 1))

for i, sample in enumerate(samples):
    for j, word in list(enumerate(sample.split()))[:max_length]:
        index = token_index.get(word)
        results[i, j, index] = 1.

print(results)
# 字符级的one-hot编码
import string
import numpy as np

samples = ['The cat sat on the mat.', 'The dog ate my homework.']
characters = string.printable # 所有可打印的ASCII字符
token_index = dict(zip(characters, range(1, len(characters) + 1)))

max_length = 50

results = np.zeros((len(samples), max_length, max(token_index.values()) + 1))

for i, sample in enumerate(samples):
    for j, character in enumerate(sample):
        index = token_index.get(character)
        results[i, j, index] = 1.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Natural Language Processing Recipes: Unlocking Text Data with Machine Learning and Deep Learning using Python(2019) (自然语言处理秘诀:使用Python通过机器学习和深度学习解锁文本数据) Natural Language Processing Recipes - Unlocking Text Data with Machine Learning and Deep Learning using Python[2019].pdf 253页 3.8 MB 使用Python使用问题解决方法实现自然语言处理应用程序。这本书有许多编码练习,将帮助您快速部署自然语言处理技术,如文本分类、部分语音识别、主题建模、文本摘要、文本生成、实体提取和情感分析。 自然语言处理配方首先提供清洗和预处理文本数据的解决方案,以及使用高级算法分析文本数据的方法。您将看到文本语义和句法分析的实际应用,以及涉及文本规范化、高级预处理、pos标记和情感分析的复杂自然语言处理方法。您还将学习机器学习和自然语言处理中的深度学习的各种应用。 通过使用本书中的配方,您将拥有一个解决方案工具箱,可以应用于现实世界中您自己的项目,使您的开发时间更快、更高效。 你将学到什么 •使用python库(如nltk、textblob、spacy、斯坦福corenlp等)应用nlp技术 •实施信息检索、文本总结、情感分析和其他高级自然语言处理技术的概念。 •识别自然语言处理和自然语言生成问题的机器学习和深度学习技术 这本书是给谁的 希望通过编码练习刷新和学习自然语言处理的各种概念的数据科学家。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值