精华内容
下载资源
问答
  • 第一次接触RNN很容易被数据处理弄糊涂,这里总结一下,总把每一步的处理结果都打印出来。 数据下载 shakespeare_url = ...

    第一次接触RNN很容易被数据处理弄糊涂,这里总结一下,总把每一步的处理结果都打印出来。

    数据下载

    shakespeare_url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
    filepath = keras.utils.get_file("shakespeare.txt", shakespeare_url)
    with open(filepath) as f:
        shakespeare_text = f.read()
    "".join(sorted(set(shakespeare_text.lower())))
    tokenizer = keras.preprocessing.text.Tokenizer(char_level=True)
    tokenizer.fit_on_texts(shakespeare_text)
    tokenizer.texts_to_sequences(["First"])
    tokenizer.sequences_to_texts([[20, 6, 9, 8, 3]])
    max_id = len(tokenizer.word_index) # number of distinct characters
    dataset_size = tokenizer.document_count # total number of characters
    [encoded] = np.array(tokenizer.texts_to_sequences([shakespeare_text])) - 1
    train_size = dataset_size * 90 // 100
    dataset = tf.data.Dataset.from_tensor_slices(encoded[:train_size])
    

    数据处理

    为了方便理解,每一步处理都把结果打印出来

    for _ in dataset.take(1):
        print(_)
    # tf.Tensor(19, shape=(), dtype=int64)
    
    n_steps = 100
    window_length = n_steps + 1 # target = input shifted 1 character ahead
    dataset = dataset.repeat().window(window_length, shift=1, drop_remainder=True)
    
    for _ in dataset.take(1):
        print(_)
    # <_VariantDataset shapes: (), types: tf.int64>
    
    dataset = dataset.flat_map(lambda window: window.batch(window_length))
    
    for _ in dataset.take(1):
        print(_)
    
    tf.Tensor(
    [19  5  8  7  2  0 18  5  2  5 35  1  9 23 10 21  1 19  3  8  1  0 16  1
      0 22  8  3 18  1  1 12  0  4  9 15  0 19 13  8  2  6  1  8 17  0  6  1
      4  8  0 14  1  0  7 22  1  4 24 26 10 10  4 11 11 23 10  7 22  1  4 24
     17  0  7 22  1  4 24 26 10 10 19  5  8  7  2  0 18  5  2  5 35  1  9 23
     10 15  3 13  0], shape=(101,), dtype=int64)
    
    batch_size = 32
    # dataset = dataset.shuffle(10000).batch(batch_size) 实际使用时取消注释
    dataset = dataset.batch(batch_size)
    dataset = dataset.map(lambda windows: (windows[:, :-1], windows[:, 1:]))
    
    for _ in dataset.take(1):
        print(_[0][0]) # X
    
    tf.Tensor(
    [19  5  8  7  2  0 18  5  2  5 35  1  9 23 10 21  1 19  3  8  1  0 16  1
      0 22  8  3 18  1  1 12  0  4  9 15  0 19 13  8  2  6  1  8 17  0  6  1
      4  8  0 14  1  0  7 22  1  4 24 26 10 10  4 11 11 23 10  7 22  1  4 24
     17  0  7 22  1  4 24 26 10 10 19  5  8  7  2  0 18  5  2  5 35  1  9 23
     10 15  3 13], shape=(100,), dtype=int64)
    
    for _ in dataset.take(1):
       print(_[1][0]) # Y
    
    tf.Tensor(
    [ 5  8  7  2  0 18  5  2  5 35  1  9 23 10 21  1 19  3  8  1  0 16  1  0
     22  8  3 18  1  1 12  0  4  9 15  0 19 13  8  2  6  1  8 17  0  6  1  4
      8  0 14  1  0  7 22  1  4 24 26 10 10  4 11 11 23 10  7 22  1  4 24 17
      0  7 22  1  4 24 26 10 10 19  5  8  7  2  0 18  5  2  5 35  1  9 23 10
     15  3 13  0], shape=(100,), dtype=int64)
    

    总结

    1. 先从数据集中用windows_size=101来分解字母
    2. 0-99(共100个)作为X,1-100(共100个)作为Y
    展开全文
  • 使用RNN处理自然语言

    千人学习 2018-07-06 17:40:57
    本课程主要讲解循环神经网络的前向和反向传播,以及使用循环神经网络处理自然语言的一个简单例子。
  • RNN自然语言处理中的应用

    千次阅读 2016-12-31 14:38:41
    很多简单的自然语言处理任务可以直接由RNN来完成。 这里列出几种RNN自然语言处理领域的应用算法,以供参考。(目前只列出了参考代码,后续会补上相关说明。)正文中文分词算法具体代码参考github命名实体识别算法...

    前言

    跳过废话,直接看正文

    循环神经网络(Recurrent Neural Networks,RNNs)目前在自然语言处理领域中的格外受欢迎。
    很多简单的自然语言处理任务可以直接由RNN来完成。
    这里列出几种RNN在自然语言处理领域的应用算法,以供参考。(目前只列出了参考代码,后续会补上相关说明。)


    正文

    中文分词算法

    具体代码参考github

    命名实体识别算法

    具体代码参考github

    文本生成算法

    这里内容比较多,详见后一篇博客。

    后记

    • 分词算法的关键有两个,算法和词典。缺了其中一个,效果都不会太好,可惜现在互联网上公布的标注语料库太少了,希望将来能做一份贡献吧。

    • 语言处理领域中的很多问题(分词、命名实体识别等)都可以转换为序列标注问题,而序列标注这样的上下文关系较紧密的问题由RNN来处理再适合不过了。

    展开全文
  • 本文来自于csdn,本文从人工智能的介绍入手,了解机器学习和...深度学习的兴起又让人们重新开始研究循环神经网络(RecurrentNeuralNetwork),并在序列问题和自然语言处理等领域取得很大的成功。本文将从循环神经网络的
  • ps:有了多层感知机神经网络,卷积神经网络,但是输入和输出都是互相独立的,不能很好地处理文本数据。 1.RNN介绍 RNN:通过引入记忆的概念,在每个元素上都执行相同的任务但是当前时刻的输出依赖于当前时刻的输入...

    循环(递归)神经网络

    引出:针对文本数据,为了注意到词与词之间的关系,引出循环神经网络RNN。

    ps:有了多层感知机神经网络,卷积神经网络,但是输入和输出都是互相独立的,不能很好地处理文本数据。

    1.RNN介绍

    RNN:通过引入记忆的概念,在每个元素上都执行相同的任务但是当前时刻的输出依赖于当前时刻的输入和前t时刻的记忆!

    目标:RNN就是在知道这个字的前提下,可以预测下一个字!

    2.层级结构

    概述:每一个元素都会有一个输出,t时刻的输出只与t时刻的输入和t时刻之前的记忆有关!(U,V,W)是需要学习的权重参数。

    缺点:实际中,记忆信息保留不完全,记忆有限。

    3.多种RNN

    双向RNN

    ps:对于文本数据,只利用前面的信息或许不够,利用双向结构把前面的信息和后面的信息进行整合,共同来输出。

    深层双向RNN

    对于更复杂的数据,我们要想更好的拟合他,需要加深网络结构!

    ps:利用多层网络结构来进行优化。

    4.BPTT算法

    DNN和CNN都是利用BP算法来进行优化,但是RNN有一个时间和记忆的概念,所以会有少许不同!

    损失函数:交叉熵损失。

    目标:通过BPTT算法不断的对参数(U,V,W)进行优化。

    ps:针对BP进行改进的传播优化算法。

    LSTM

    1.长时的依赖问题

    引出:通过改造记忆细胞,在RNN的基础上加入“门”的思想来进行优化!

    ps:对RNN的短距离记忆问题做出了处理,并且缓解了梯度弥散问题。

    ps:LSTM通过门的思想把求导的连乘变为了加法运算缓解了梯度弥散,并且加深了记忆力。

    2.“记忆细胞”与门思想

    细胞状态:它的控制是通过“门”让信息选择性通过,来去除或者增加信息来改变细胞的状态!

    step 1 忘记门:从细胞状态丢弃多少前t-1时刻的记忆信息

    ps:利用sigmoid函数的值域特性,决定忘记多少信息!

    step 2 输入门:决定放什么信息到“细胞状态”(决定记忆的信息)

    ps:利用sigmoid函数的值域特性,决定记忆多少信息!

    step 3:通过决定忘记的信息剩余量决定记忆的一些信息,更新“细胞状态”

    step 4:输出门:基于“细胞状态”得到输出

    ps:利用tanh函数的对称值域来进行输出最终的信息。

    ps:最终通过门结构这种思路,把链式求导变为加法运算,很大程度减少了梯度弥散现象。

    ps:门结构虽然好,但是参数太多了,模型结构比较复杂。

    3.GRU(LSTM的一个变种)

    概念:对忘记门和输入门进行合成,变为一个更新门。

    ps:对门结构进行优化,进行门的合并,参数合并来形成。

    展开全文
  • 自然语言处理(二 RNN语言模型)

    千次阅读 2017-11-26 18:13:35
    RNN语言模型RNN语言模型 语言模型 RNN语言模型 模型扩展语言模型语言模型就是指语言产生的规律,一般用来预测所使用语言语序的概率,或者是当前上下文使用某个词语的概率。换句话说,就是用来表示语言产生顺序的建模...

    RNN语言模型

    语言模型

    语言模型就是指语言产生的规律,一般用来预测所使用语言语序的概率,或者是当前上下文使用某个词语的概率。换句话说,就是用来表示语言产生顺序的建模,用某个词是否恰当,这样的语序构造句子是否妥当这样的。于是,训练出一个语言模型就需要相当大的样本数据。语言模型可以分为:文法型的语言模型(就是定义相关的文法结构,例如主语+谓语+宾语构成陈述句这样的),统计模型,神经网络语言模型。

    其中统计类的语言模型包括N-gram,N-pos,隐马尔科夫链模型、最大熵模型等。就是给出前边的词,判断后面出现词的概率。p(w3|w1w2)表示w3在词语w1w2之后出现的概率。具体计算公式为p(w3|w1w2)=p(w1w2w3)p(w1w2)=Count(w1w2w3)Count(w1w2), Count(x)表示x在语料库中出现的频率。这种模型能给出后面单词发生的概率。但是会出现Count(x)=0的情况,为避免这种问题出现了很多平滑技术,例如Laplace平滑等。

    但是这种统计模型的计算非常消耗内存。

    RNN语言模型

    RNN语言模型就是利用RNN神经网络对语言建模,用于描述语言序列的产生过程。RNN神经网络就是循环神经网络,能很好地拟合序列数据。
    RNN
    假设当前你有大量文本语料库C,根据这个预料你构建了词典V,然后你做分句,把每句话通过扩展变成等长的句子。句子开始以START标志,结束以EOS结束,使用PAD来进行短句子的填充。现在得到长度为L的sequence序列。每个词使用vector进行表示(1-of-N model)序列为x1,x2,...,xL,假设x1是词典V中的第一个词,V的大小为N,则x1=[1,0,0,...,0].对于RNN输出数据对应的True Value这里选择使用x2,x3,...,xL1,EOS, 使用符号表示为y1,y2,...,yL 对于RNN预测数据表示为y1,y2,...,yL

    ht=f(whhht1+wxhxt)

    yt=g(ht)

    yt是一个N维(词典的大小)向量,表示一个概率分布,即下一个词语出现的概率在词典中的概率分布。yt(n)表示下一个词是词典中第n个词的概率大小。
    损失函数定义维:
    Loss=1Lt=1Lj=1Nyt(j)log(yt(j))

    求导根据BackPropogation+SGD进行训练。最小化损失函数。

    模型扩展

    一般对于RNN的训练采用BPTT的算法。
    当L较大时,模型的训练会出现梯度消失和梯度爆炸的问题。
    对于梯度爆炸可以采取Clipping的方法解决,具体就是设置门限,超过这个门限时,进行该梯度方向上的归一化。
    对于梯度消失,可以采用LSTM或GRU来替代SRNN;或者使用ReLU来替代Sigmoid激励函数。

    展开全文
  • 我们在前两篇【精读】自然语言处理基础中提到了,无论是seq2seq模型,还是注意力(attention)机制,其中语言序列的编码解码都经过了一种名为RNN的神经网络。RNN神经网络到底是何方神圣呢?RNN全名:Recurrent Neural ...
  • RNN 细节方面的看英文课会有点听不懂,但是大体上意思就是当前轮次受上次影响 Whh的意思是:当前层对自身下轮次影响的权重 矩阵串联 损失函数-交叉熵 这里可以看作一个分类任务,即根据前面序列的内容去预测下一...
  • 之前看的论文都是基于CNN在NLP上的应用,但其实深度学习与NLP结合的领域中应用最广的应该是RNN,因为文本可以直观地被表示为输入序列,方便的被RNN处理,捕获其Long-Term依赖等信息,而且实际应用中也取得了很好的...
  • 使用RNN处理自然语言 专注提供优质教学内容 ...
  • 了解rnn自然语言处理中的使用 代码: import numpy as np data = open('data/Hatty_Potter.txt', 'r').read() # data = open('data/希腊神话故事.txt', 'r').read() chars = list(set(data)) data_size, vocab_...
  • 1.语言模型(Language Modeling) 1.1 传统语言模型 定义:基于n-grams的概率模型,通过条件概率链式法则不断找出概率最高的单词,以生成句子 ...1.2 基于RNN语言模型 RNN优点: (1)...
  • 以下内容均来自: https://ptorch.com/news/11.html word embedding也叫做word2vec简单来说就是语料中每一个单词对应的其相应的词向量,目前训练词向量的方式最常使用的应该... Word Embedding 在自然语言处理中词...
  • 自然语言处理 | (15)使用Pytorch实现RNN(LSTM)语言模型-附件资源
  • 自然语言处理 (NLP)问题都是序列化的。 前馈神经网络,在单次前馈中对到来数据处理,假定所有输入独立,模式丢失。 循环神经网络(recurrent neural network,RNN)对时间显式建模神经网络。 RNN神经元可接收其他神经元...
  • 自然语言处理11——RNN与LSTM

    千次阅读 2019-04-27 09:51:54
    文章目录1. 循环神经网络RNN(Recurrent Neural Network)1.1 循环神经网络的提出背景1.2 循环神经网络的... Text-RNN3.1 Text-RNN的原理3.2 利用Text-RNN模型来进行文本分类 1. 循环神经网络RNN(Recurrent Neural ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,297
精华内容 518
关键字:

rnn自然语言处理