用Mittens实现Glove的方法

本文介绍了如何运用Mittens库实现Glove的词嵌入算法,包括数据预处理(去除空行、特殊字符、停用词、切分)、共现矩阵生成以及词向量的训练和保存。利用GPU资源,处理了4860个词汇,每个词汇的维度为100。训练得到的词向量可以方便地在gensim中使用。
摘要由CSDN通过智能技术生成

大致上弄清楚了Glove的算法。此程序可以生成Vector矩阵。我的笔记本支持4860个词汇,维度是100的(用GPU,内存比较小)。注释里面写了算法。主要是数据的预处理:

  • 去除空行
  • 去除特殊字符(包括标点)
  • 去除停用词
  • 切分
  • 再次去除停用词(因为切分后可能也有停用词产生)
  • 生成字典
  • 使用滑动窗口,生成共现矩阵
  • 使用Mittens生成Glove Vector
  • 保存
"""本文件包含中文NLP预处理常用的一些代码"""
import re
from mittens import GloVe
import numpy as np
import jieba
from gensim import corpora

class Preprocess(object):
    """中文NLP预处理类"""

    # 用来处理数据的正则表达式
    SPECIAL_SYMBOL_RE = re.compile(r'[^\u4e00-\u9fa5]+')  # 用以删除一些特殊符号

    def __init__(self, stopwords=None):
        self.stopwords = stopwords

    @staticmethod
    def del_blank_lines(sentences):
        """删除句子列表中的空行,返回没有空行的句子列表

        Args:
            sentences: 字符串列表
        """
        data = []
        for s in sentences:
            s = s.strip()
            if s:
                data.append(s)
        return data


    @staticmethod
    def del_stopwords(classsstr, stopwords):
        """删除句子中的停用词

        Args:
            seg_sents: 嵌套列表,分好词的句子(列表)的列表
            stopwords: 停用词列表

        Returns: 去除了停用词的句子的列表
        """

        stopwords = [line.strip() for line in open(stopwords, encoding='UTF-8').readlines()]  # 注意停用词文本名称和所在位置

        data = []
        for s in classsstr:
            s = s.split(" ")
            outstr = ""
            for word in s:
                if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值