基于wiki中文语料库的gensim模型使用方法以及R语言的调用方式

2 篇文章 0 订阅

基于wiki中文语料库的gensim模型使用方法以及R语言的调用方式

近期想要整理下硬盘里的东西,看到本科毕设做情感倾向分析相关的数据,想起当时使用gensim训练词向量模型训练了超级久,决定将训练好的模型上传到云空间,记录下怎么使用的,以防以后需要用到。

具体训练方式貌似应该不怎么需要用到就不细细理顺了,主要记录下使用方式。训练好的词向量模型已上传,有需要用的朋友可以自行下载:

链接:https://pan.baidu.com/s/1HWY_DtrKLebry3_LyFQKPA
提取码:4u1n

其实训练得到的gensim词向量模型有两种加载方式,这里就上传其中一个.vector文件的形式吧。顺便上传一个停用词表,用的是当时哈工大的一个停用词表,不知道现在有没有更新。

当时训练词向量模型还是2019年四月,因此训练的语料库是当时最新的wiki中文语料库,语料更新至2019年3月2日,包含语料334,014条。接下来介绍怎么使用gensim训练的word2vec词向量模型。当时训练模型是基于python进行训练的,所以用到的都是python代码。最近使用r开发算法愈发频繁,发现了一个可交互使用到r与python的方法,最后将会介绍怎么从r中加载并应用已训练好的词向量模型。

需要安装与加载的库

import numpy as np
import jieba
import gensim

加载模型

加载gensim训练的词向量模型有两种方法,一个是加载.model文件,一个是加载.vector文件。加载.model会要求要有几个.npy的文件。

# 加载wikizh.model
model = gensim.models.word2vec.Word2Vec.load('./model/wikizh.model')

# 或者wikizh.vector:
model = gensim.models.KeyedVectors.load_word2vec_format('wikizh.vector')
model.init_sims(replace=True)

加载后就可以用这个模型对文本进行词向量转化啦~当时训练的词向量是个300维的向量,比如我们可以查询你好的词向量

hi = model['你好']

会得到一个300维的词向量:在这里插入图片描述
其他操作可以看下gensim的相关资料。

文本语句的词向量转化

对于文本语句,首先需要对它进行分词操作,这里直接使用jieba进行分词即可。同时,需要进行停用词的处理,为了方便之后使用,将这些都写成了函数的形式。
首先是加载停用词表:

def getStopwords():
    """
    获取停用词表
    这里使用哈工大停用词表
    """
    stopwords = []
    with open('./dictionary/Hstopwords.txt', 'r', encoding = 'utf-8') as fp:
        stopwords_List = fp.readlines()
    
    for l in stopwords_List:
        stopwords.append(l.strip('\n'))
    return stopwords

stopwords = getStopwords()

在这里插入图片描述
对于文本通常是语句的形式,常用的处理方式是通过jieba进行分词操作。

# 文本分割
def sent2word(sentence):
    """
    通过jieba进行文本分割,去除停用词
    
    input : 
        sentence - 原文
    output :
        newSent - 进行文本分割并去除停用词的文本
        
    """
    
    seg_List = jieba.cut(sentence)
    seg_Result = []
    for w in seg_List:
        seg_Result.append(w)
      
    new_Sent = list(filter(lambda x:x not in stopwords, seg_Result))
    
    return new_Sent

sentence = '疫情快结束吧!'
words = sent2word(sentence)
print('sentence: ', sentence, 'to words: ', words)

输出结果

sentence:  疫情快结束吧! to words:  ['疫情', '快', '结束']

对于一个由词组成的列表,通过model获取它的词向量:

def getWordVecs(word_List):
    """
        获取词向量
        
        input:
            word_List - 输入语句
        output:
            vecs - 语句对应的词向量
    """
    
    vecs = []
    for word in word_List:
        word = word.replace('\n', '')
        try:
            vecs.append(model[word])
        except KeyError:
            continue
    
    return np.array(vecs, dtype = 'float')

senVec = getWordVecs(words)

在这里插入图片描述
当时为了方便直接将文件转为词向量,写了一个函数:

def buildVecs(filename):
    """
    构建文档词向量
    
    input:
        filename - 输入文档名
    output:
        file_Input - 文档对应的词向量
    """
    
    file_Input = []
    with open(filename, 'r', encoding ='utf-8') as f:
        lines = f.readlines()
        for l in lines:
            l = l.strip('\n')
            l = sent2word(l)
            # print(l)
            result_List  = getWordVecs(l)
            # print(result_List)
            # for each sentence, the mean vector of all its vectors is used to represent this sentence
            if len(result_List) != 0:
                result_Array = sum(np.array(result_List)) / len(result_List)
                file_Input.append(result_Array)
                        
    return file_Input

这个对.txt之类的可能会方便写,.csv的话就更方便了,直接读取成DataFrame,对每一行进行转换即可。

R与python的交互

最后,由于最近经常需要用R开发,发现了一个R调用python超级好用的包,顺手写下怎么在R中调用Python。
首先需要安装reticulate以及写好的python代码,只需要将上面的函数放到一个代码里就好。在R中输入:

path <- 'yourFilePath'
setwd(path)

library(reticulate)
source_python('./yourfile.py')

调用后,在python中写的函数与生成的变量都可以直接用。
在这里插入图片描述
使用方式与python中的一致,比如输出你好的词向量:

model['你好']

唯一的缺陷就是不能存储为.Rdata进行使用,存储后貌似都是空的东西。

以上就是关于wiki中文语料库的gensim模型使用方法以及R语言的调用方式的记录啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值