Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

文本摘要生成的评估指标

发表于 2022-09-11 | 分类于 自然语言处理

文本摘要生成的评估指标

ROUGE-N

这里的N就是指的n-gram,n=1时叫ROUGE-1(也叫Unigrams);n=2时,叫ROUGE-2(也叫Bigrams);n=3时,叫ROUGE-3(Trigrams)。

阅读全文 »

Python RSA加解密

发表于 2022-09-06 | 分类于 python编程

Python RSA加解密

RSA是一种非对称加密技术,在软件、网页中已得到广泛应用,特别对于爬虫来说,会经常遇到使用RSA加密的网站,掌握RSA加密和解密的流程,在遇到相关网站时,可以第一时间辨别出网站的加密逻辑,从而快速破解。

利用python实现RSA加密,需要安装模块
pip install pycryptodome

阅读全文 »

NLG 采样策略

发表于 2022-09-03 | 分类于 自然语言处理

NLG 采样策略

上篇文章中学习了NLG的解码策略,主要包括greedy search、beam search,如果不太记得了可以再去温习一下,然后接下来我们来看看这些解码策略会存在哪些问题,是否还可以从其他角度来提高文本的生成效果。

这幅图展示了每个时间步,生成某个单词的可能性,我们发现beam search在每一步的概率值都是比较大的,但是如果是真实人类的话,其实是比较随机的(人说话的内容比较随机,富有多样性)。这主要是因为beam search本身就是在根据最大概率去生成句子,但是最大概率不等于最好,上篇文章中我们有提到

  • 当k比较小时,生成的句子可能会不符合语法规则,不自然,无意义,不正确(比较死板);
  • 当k比较大时,计算量会增大,虽然生成的句子更通顺,但是也存在偏离主题的可能性。

此外因为模型生成时,一定程度上依赖于已经生成的句子,所以一味的选取概率最大的,可能会使句子的生成陷入不断地重复循环中,所以针对beam search这些特点,为了可以生成更多样化的句子(引入一定的随机性)又不偏离主题,以下几种采样策略被研究者提出。

阅读全文 »

NLG解码策略

发表于 2022-08-28 | 分类于 自然语言处理

NLG解码策略

自然语言生成(Natural Language Generation,简称NLG),是自然语言处理领域的一个重要分支,在文本摘要生成任务中,另一个重要的分支是自然语言理解(Natural Language Understanding,简称NLU)。前面我们已经学习了seq2seq模型结构,其主要分为Encoder和Decoder两大组件,其实正是对应了NLU和NLG两大分支,seq2seq模型最后经过一个softmax层,在每个时间步均得到一个词表大小的概率分布,如何利用这些概率分布得到最终的预测句子就是本节学习的解码策略。

上篇构建文本摘要baseline时,我们就有提到过解码方法,当时采用的Teacher forcing的技巧,使用了真实标签,避免前面的步骤预测出错被无限放大的问题,但是在实际预测时因为没有真实标签,往往实际预测效果不一定好,所以寻找可行的解码策略是一项重点工作。

阅读全文 »

构建文本摘要Baseline并且开始训练

发表于 2022-08-27 | 分类于 自然语言处理

构建文本摘要Baseline并且开始训练

基于前面word2vec的原理与训练实践、seq2seq模型的原理与实践以及attention机制,已经分别写了相关的文章来记录,此篇文章就是基于前面所学,开始着手训练文本摘要模型,当然仅是一个比较普通的baseline,后面还会不断优化模型。

构建seq2seq模型

首先利用上一节seq2seq实践中,封装的encoder、decoder和attention,集成到此模型中来,另外就是增加了一个训练技巧–teacher forcing。那么teacher forcing是啥意思呢?

阅读全文 »

使用tensorflow实现seq2seq

发表于 2022-08-21 | 分类于 自然语言处理

使用tensorflow实现seq2seq

上篇文章记录了seq2seq和attention机制的基本原理,这篇文章趁热打铁看看如何自己写代码实现。

tf2的一些API操作

推荐一个学习tensorflow的教程:https://github.com/lyhue1991/eat_tensorflow2_in_30_days

1
import tensorflow as tf

连接操作(tf.concat)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
t1 = [[1, 2, 3], [4, 5, 6]] # 2, 3
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], axis=0)

<tf.Tensor: shape=(4, 3), dtype=int32, numpy=
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])>


tf.concat([t1, t2], axis=1)

<tf.Tensor: shape=(2, 6), dtype=int32, numpy=
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 10, 11, 12]])>
阅读全文 »

Seq2Seq

发表于 2022-08-06 | 分类于 自然语言处理

Seq2Seq

encoder & decoder

Seq2Seq结构用于多个输入和多个输出的模型,但是输入和输出的大小可能并不一致,其本质上也是RNN网络的一个扩展,常见的应用场景包括:机器翻译、语音识别、文本摘要等。

常见的seq2seq的输出的计算方法包括以下两种:

注意这里C到y1、y2、y3的计算,虽然有两种方式,但是C本质上是前半部分的最终输出状态,并非每个时间步的输出,这里搞清楚对于后续的注意力机制的理解也有帮助。

在seq2seq结构中,通常将整个模型分为encoder和decoder两个核心组件,连接两个组件的就是context vector,即Encoder组件生成的上下文向量。

阅读全文 »

LSTM和GRU

发表于 2022-07-18 | 分类于 自然语言处理

LSTM和GRU

RNN的优缺点

优点:

  1. 可以捕获序列之间的关系;
  2. 共享参数。

缺点:

  1. 存在梯度消失和梯度爆炸问题;
  2. RNN的训练是一个比较困难的任务;
  3. 无法处理长序列问题。

LSTM

LSTM可以处理长序列问题,同样在之前这篇文章中,关于LSTM网络的核心思想介绍的比较明白,而且传送带的比喻比较形象,结合上篇和当前这篇可以对LSTM有更深入的理解。

阅读全文 »

理解循环神经网络

发表于 2022-07-06 | 分类于 自然语言处理

理解循环神经网络

之前有一篇文章已经初步介绍过RNN的原理,里面其实已经介绍的比较清晰易懂了,这篇文章再来回顾和拓展一下:https://forchenxi.github.io/2021/04/23/nlp-rnn/

首先要知道RNN是一个带有内部环的神经网络,上面的这篇文章中的图描述的更形象,这里再来简单回顾下,使用tensorflow来实现(实际也是用keras来实现的)。

阅读全文 »

Word2Vec 实践

发表于 2022-06-22 | 分类于 自然语言处理

Word2Vec 实践

gensim库使用

这里的Word2Vec借助 gensim 库实现,首先安装pip install gensim==3.8.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from gensim.models.word2vec import Word2Vec


model = Word2Vec(
sentences=None,
size=100,
alpha=0.025,
window=5,
min_count=5,
max_vocab_size=None,
sample=1e-3,
seed=1,
workers=3,
min_alpha=0.0001,
sg=0, hs=0,
negative=5,
cbow_mean=1,
hashfxn=hash,
iter=5,
null_word=0,
trim_rule=None,
sorted_vocab=1,
batch_words=MAX_WORDS_IN_BATCH
)

参数说明:

阅读全文 »
1…345…12
chenxi

chenxi

116 日志
11 分类
213 标签
Links
  • Docle
  • Swift
© 2025 chenxi
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4