pgn model和一些解决oov的方法

本周主要有面对out of vocabulary时的一些方法,以及对应的pgn模型。

1、当我们面对oov问题出现,往往的解决方法有以下:

01 忽略oov 遇到不认识的词,直接忽略,但是这种方法会严重影响文本摘要的意思。

02 用默认的词代替(unk) 但是这种方法会直接造成,摘要内容可读性很差。

03 扩大词表 这种方法,从某种程度上可以缓解。但是也会带来计算量大的问题,以及有一些低频词,是不能很好的学习到其中的意思(因为深度学习是基于统计来学习的)。

04 将token分解为char级别的 这种虽然在某种程度上解决了oov的问题,但是char之间缺乏语义的信息,所以可读性很差。

05 spell check 这种可以改善因为拼写错误而出现的oov问题,但是没有办法解决本身就不在词典中的词。

06 subword的方法 这种利用滑动窗口的方法,可以制造一些词根。但是问题是生成的时候,会产生很多的子词,可读性比较差。

07 Bpe的方法 这种方法是基于词频统计的单个字符进行合并,依次将最高的平吕的字符合并为,对应的词根。这种方法,极大的解决了oov的问题。现在的robert和gpt就是采用的这种方法。

08 wordpiece 这种方法是基于字符与字符之间的最大概率计算得到的词根,在一定程度上也缓解了oov问题,但是其主要基于贪心的方法,这种方法会造成局部最优。不是很好的解决方法。现在的bert就是用的这种方法。

09 unigram的方法,这种方法是基于字符之间的损失性计算的,方法很好,但是用起来还很麻烦,目前这个方向上还在努力。

2、pgn模型

pgn模型是基于seq-seq而进行改造,使得遇到oov问题时,可以从原文中抽取内容。也基于coverage的方法,减少重复使用前面token的概率。也可以基于seq-seq的方法生成新的不在原文中的内容。

02 在attention部分 做了一些许的改动。将coverage的部分,也引入计算attention。coverage表示的是当前状态之前的累积输入信息权重状态。

而且引入了p-gen,它是衡量当前文字是用原文中抽取还是要选择生成。是用context_vector,dec_code输入,decode_hidden三者通过加权计算,经过sigmoid得到的数值。

然后将输入encode_output和decode_hidden,coerage作用,得到了每个时态下的attention分布。

03 decode部分。通过target的输入token,经过embeding 层,经过gru得到当前序列时态的decode_output和隐层时态decode_hidden。将当前序列的输出与encode阶段得到的context_vector合并,最终得到的向量,经过vocab_size层的作用,得到词频的分布。

04 p-gen作用于attention分布和生成分布,在原文抽取和生成中选择,摘要中文字。

Original: https://blog.csdn.net/weixin_41710583/article/details/117172609
Author: weixin_41710583
Title: pgn model和一些解决oov的方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/514292/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球