IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 基于tensorflow2.x的nlp任务(一) -> 正文阅读

[人工智能]基于tensorflow2.x的nlp任务(一)

????????作为一个一直使用tf1.x版本的人,为了继续使用google强大的开源技术,同时也为了适配高级的3090系列显卡,还是学习了一下tf2.x版本,并重构了一些nlp相关任务的代码,将其全部用tf2.0版本替换。

????????为了记录详细的nlp任务过程,本篇博文主要先记录一下从文本数据读取到处理成为batch数据输入到模型训练的一系列过程;这个过程可以主要分为tokenizer,embedding和data_generator这几个步骤。

一、Tokenizer

????????这个单词顾名思义就是将文本转换成token的表现形式,一个完整的句子是由很多个字词组成的,我们首先要将句子转成向量的形式,最简单的方法就是给每个字或者词对应唯一的id编号,这个id也就是token。

句子转换成tokens表示需要进行一下几个简单的步骤:

1.分词或分字

通常用jieba分词器就可以分词

2.词频和词性过滤

通过词频和词性过滤一些不需要的词或字

3.句子补齐padding

对于训练的数据需要输入定长序列,因此需要进行补齐和裁剪的操作

4.词/字索引表和标签索引表的构建

在处理完成所有的句子后,需要构建字/词和id对应的索引表并保存,方便模型训练玩后的预测过程的使用。

5.保存所有训练数据的tokens,方便后续更换模型的时候不需要再重新进行之前的处理步骤。

    def word_to_index(self, all_words):
        '''
        生成词汇-索引字典
        :param texts:
        :return:
        '''

        #是否过滤低频词
        if self.config['freq_filter']:
            vocab = self.word_freq_filter(self.config['freq_filter'], all_words)
        else:
            vocab = self.get_vocab(all_words)
        #设置词典大小
        vocab = ["<PAD>", "<UNK>"] + vocab
        self.vocab_size = self.config['vocab_size']
        if len(vocab) < self.vocab_size:
            self.vocab_size = len(vocab)
        self.vocab = vocab[:self.vocab_size]
        #构建词典索引
        word_to_index = dict(zip(vocab, list(range(len(vocab)))))

        return word_to_index

二、embedding

????????在完成每个字/词的tokenizer的步骤之后,需要将句子进行embedding的嵌入,也就是进行浅层语义特征的提取。比较常见的几种方法有,词频表示,tf-idf表示,one-hot词向量表示,word2vec词向量表示。下面的代码是gensim加载训练好的词向量的代码:

    def load_word2vec_model(self):
        '''
        加载word2vec模型
        :return:
        '''
        model_path = self.config.get('word2vec_path')
        if not os.path.exists(model_path):
            raise Exception("model_path did not exit, please check path")
        model = gensim.models.KeyedVectors.load_word2vec_format(model_path, binary=False)
        return model

三、data_generator

????????这一部分主要是生成训练数据,需要将数据划分成训练集和测试集,并以batch_size的形式输入到模型中进行训练,一般batch_size可设置成8,16,32,64等2的次方数,每次模型学习batch的数据,然后进行梯度下降更新模型参数,完成一次所有的batch数据的学习后称一个epoch。

    def gen_data(self, inputs_idx, labels_idx):
        '''
        生成批次数据
        :return:
        '''
        batch_token_ids, batch_output_ids = [], []

        for i in range(len(inputs_idx)):
            token_ids = inputs_idx[i]
            target_ids = labels_idx[i]
            batch_token_ids.append(token_ids)
            batch_output_ids.extend(target_ids)

            if len(batch_token_ids) == self.batch_size:
                yield dict(
                    input_word_ids = np.array(batch_token_ids, dtype="int64"),
                    input_target_ids = np.array(batch_output_ids, dtype="float32")
                )
                batch_token_ids, batch_output_ids = [], []

????????文本数据的预处理是文本任务的第一步也是非常重要的一步,以上讲的都是比较常规的处理步骤,还有很多实际其他的预处理的方法也非常重要,例如样本数据不均衡,数据增强等提高数据质量的预处理手段。当然不是本系列博客的重点,如果有机会可以把这些内容也补全。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:28:52  更:2021-12-24 18:31:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 23:39:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码