如何使用“预训练的词向量”,做文本分类

不多比比了,看代码!!!

def train_W2V(w2vCorpus, size=100):
    w2vModel = Word2Vec(sentences=w2vCorpus, hs=0, negative=5, min_count=5, window=8, iter=1, size=size)
    w2vModel.save(inPath+‘w2vModel.model‘)
    return w2vModel

def load_W2V(W2V_path, loader_mySelf=1):
    if loader_mySelf:
        print(‘use my w2vModel‘)
        w2vModel = Word2Vec.load(W2V_path+‘w2vModel.model‘)  #使用自己训练的词向量
    else:  #加载腾讯训练的词向量
        print(‘use other w2vModel‘)
        w2vModel = gensim.models.KeyedVectors.load_word2vec_format(W2V_path+‘w2v_embedding_tengxun‘, binary=False)
    return w2vModel

def make_word2idx_embedMatrix(w2vModel):
    word2idx = {"_PAD": 0}
    vocab_list = [(w, w2vModel.wv[w]) for w, v in w2vModel.wv.vocab.items()]
    embeddings_matrix = np.zeros((len(w2vModel.wv.vocab.items()) + 1, w2vModel.vector_size))

    for i in range(0, len(vocab_list)):
        word = vocab_list[i][0]
        word2idx[word] = i + 1
        embeddings_matrix[i + 1] = vocab_list[i][1]

    return word2idx, embeddings_matrix

def make_deepLearn_data(w2vCorpus, word2idx):
    X_train = []
    for sen in w2vCorpus:
        wordList = []
        for w in sen:
            if w in word2idx.keys():
                wordList.append(word2idx[w])
            else:
                wordList.append(0)
        X_train.append(np.array(wordList))

    X_train = np.array(sequence.pad_sequences(X_train, maxlen=TEXT_MAXLEN))  #必须是np.array()类型

    return X_train

def Lstm_model():    #注意命名不能和库函数同名,之前命名为LSTM()就出很大的错误!!
    model = Sequential()
    model.add(Embedding(input_dim=len(embeddings_matrix),  ##参数要注意
                        output_dim=len(embeddings_matrix[0]),
                        input_length=TEXT_MAXLEN,
                        weights=[embeddings_matrix], #表示直接使用预训练的词向量
                        trainable=False  #不对词向量微调
                       ))
    model.add(LSTM(units=20, return_sequences=False)) #units:输出的维度
    model.add(Dropout(0.5))
    model.add(Dense(units=1, activation="sigmoid")) #全连接层
    model.compile(loss=‘binary_crossentropy‘, optimizer=‘adam‘, metrics=[‘accuracy‘])
    return model

if __name__ == ‘__main__‘:
    df_data_ = df_data[0: 10000]  #原始数据加载

    w2vCorpus = [sen.split(‘ ‘) for sen in df_data_.分析字段]  #制作W2V语料集
    w2vModel = train_W2V(w2vCorpus, size=100)  #训练W2V模型

    w2vModel = load_W2V(inPath, loader_mySelf=0)  #加载w2vModel
    word2idx, embeddings_matrix = make_word2idx_embedMatrix(w2vModel)  #制作word2idx和embedMatrix

    X_train = make_deepLearn_data(w2vCorpus, word2idx)  #制作符合要求的深度学习数据
    y_train = np.array(df_data_.特征类型)  #必须是np.array()类型

    model = Lstm_model()
    model.fit(X_train[0: -2000], y_train[0: -2000], epochs=2, batch_size=10, verbose=1)
    score = model.evaluate(X_train[-2000: ], y_train[-2000: ])
    print(score)

原文地址:https://www.cnblogs.com/liguangchuang/p/10074075.html

时间: 2024-10-08 22:14:08

如何使用“预训练的词向量”,做文本分类的相关文章

文本情感分析(二):基于word2vec和glove词向量的文本表示

上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用word2vec词向量和glove词向量进行文本表示,训练随机森林分类器. 一.训练word2vec词向量 Kaggle情感分析题给出了三个数据集,一个是带标签的训练集,共25000条评论,一个是测试集,无标签的,用来做预测并提交结果,这两个数据集是上一篇文章里我们用过的. 此外还有一个无标签的数据

《机器学习系统设计》之应用scikit-learn做文本分类(下)

前言: 本系列是在作者学习<机器学习系统设计>([美] WilliRichert)过程中的思考与实践,全书通过Python从数据处理,到特征工程,再到模型选择,把机器学习解决问题的过程一一呈现.书中设计的源代码和数据集已上传到我的资源:http://download.csdn.net/detail/solomon1558/8971649 第3章通过词袋模型+K均值聚类实现相关文本的匹配.本文主要讲解K-均值聚类相关知识以及在20newsgroup数据集上使用K-均值聚类进行测试.     相关

《机器学习系统设计》之应用scikit-learn做文本分类(上)

前言: 本系列是在作者学习<机器学习系统设计>([美] WilliRichert)过程中的思考与实践,全书通过Python从数据处理,到特征工程,再到模型选择,把机器学习解决问题的过程一一呈现.书中设计的源代码和数据集已上传到我的资源:http://download.csdn.net/detail/solomon1558/8971649 第3章通过词袋模型+K均值聚类实现相关文本的匹配.本文主要讲解文本预处理部分内容,涉及切分文本.数据清洗.计算TF-IDF值等内容. 1. 统计词语 使用一个

应用scikit-learn做文本分类

http://blog.csdn.net/abcjennifer/article/details/23615947 文本挖掘的paper没找到统一的benchmark,只好自己跑程序,走过路过的前辈如果知道20newsgroups或者其它好用的公共数据集的分类(最好要所有类分类结果,全部或取部分特征无所谓)麻烦留言告知下现在的benchmark,万谢! 嗯,说正文.20newsgroups官网上给出了3个数据集,这里我们用最原始的20news-19997.tar.gz. 分为以下几个过程: 加载

Deep Learning(深度学习)之(九)词向量的内部任务评价和外部任务评价方法

关键词: 内部任务评价(Intrinsic Evaluation)和 外部任务评价(extrinsic evaluations).超参数影响下的类比评价任务.人类决策和词向量距离的相关性.结合上下文处理歧义.窗口分类. 这个课堂笔记我们将会对词向量(也就是词嵌入)的内部任务评价和外部任务评价方法进行讨论.主要的内容是单词类比(word analogies)技术,我们会把它当做内部任务评价的技术并展示其相关示例,它会在词向量的调谐(tune)中发挥重要作用.我们还会讨论如何训练模型的权重/参数,并

如何产生好的词向量

如何产生好的词向量? 词向量.词嵌入(word vector,word embedding)也称分布式表示(distributed representation),想必任何一个做NLP的研究者都不陌生.如今词向量已经被广泛应用于各自NLP任务中,研究者们也提出了不少产生词向量的模型并开发成实用的工具供大家使用.在使用这些工具产生词向量时,不同的训练数据,参数,模型等都会对产生的词向量有所影响,那么如何产生好的词向量对于工程来说很重要.中科院自动化所的来斯惟博士对此进行了详细的研究.本篇博客也是我

文本分类实战(一)—— word2vec预训练词向量

1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 textCNN 模型 charCNN 模型 Bi-LSTM 模型 Bi-LSTM + Attention 模型 RCNN 模型 Adversarial LSTM 模型 Transformer 模型 ELMo 预训练模型 BERT 预训练模型 所有代码均在textClassifier仓库中, 觉得有帮助,

word2vec词向量训练及中文文本相似度计算

本文是讲述如何使用word2vec的基础教程,文章比较基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python下载地址:http://radimrehurek.com/gensim/models/word2vec.html 1.简单介绍 参考:<Word2vec的核心架构及其应用 · 熊富林,邓怡豪,唐晓晟 · 北邮2015年> <Word2vec的工作原理及应用探究 · 周练 · 西安电子科技大学

文本分布式表示(二):用tensorflow和word2vec训练词向量

博客园的markdown用起来太心塞了,现在重新用其他编辑器把这篇博客整理了一下. 目前用word2vec算法训练词向量的工具主要有两种:gensim 和 tensorflow.gensim中已经封装好了word2vec这个包,用起来很方便,只要把文本处理成规范的输入格式,寥寥几行代码就能训练词向量.这样比较适合在做项目时提高效率,但是对理解算法的原理帮助不大.相比之下,用tensorflow来训练word2vec比较麻烦,生成batch.定义神经网络的各种参数,都要自己做,但是对于理解算法原理