文本深度学习向量化——Word2Vec、Doc2Vec

1 数据预处理

首先,需要引入jieba库,并定义get_stopwords和preprocess两个函数。get_stopwords函数用于读取停用词表,preprocess函数用于分词并去除停用词。其中jieba库是中文分词的工具库,stopwords是指需要过滤掉的无意义词汇,如“的”、“了”等。分词后,只有长度大于1的单词才会被保留,其余都被过滤掉。

import jieba
# 读取停用词
def get_stopwords(path='./stopwords.txt'):
    with open(path, encoding='utf-8') as f:
        stopwords = f.read().split('\n')
    return stopwords
# 分词并去除停用词
def preprocess(text, stopwords):
    words = jieba.lcut(text)
    words = [word for word in words if word not in stopwords and len(word) > 1]
    return ' '.join(words)

接下来,从home_work.txt文件中读取文本,并对每个文本进行预处理。使用for循环读取文件中的每一行,然后使用preprocess函数将每行文本进行分词和去除停用词等预处理操作,并添加到preprodocs列表中。

# 停用词
stopwords = get_stopwords()

with open('home_work.txt','r',encoding="utf-8") as f:
    docs = f.readlines()
preprodocs = []
for text in docs:
    doc = preprocess(text, stopwords)
    preprodocs.append(doc)

2 生成词库并用序号标记

构建词汇表时,通过jieba.cut_for_search分词后,统计每个单词在vocab字典中出现的次数,如果不在vocab中,就将其添加进去。vocab字典中的每个单词作为词汇表中的一项。

# 构建词汇表
vocab = {}
for doc in preprodocs:
    words = jieba.cut_for_search(doc)
    for word in words:
        if word not in vocab:
            vocab[word] = len(vocab)

3 word2Vec 算法

使用gensim库的Word2Vec类对预处理后的文本进行词向量训练。Word2Vec是一种基于神经网络的词嵌入模型,可以将每个单词映射到一个向量空间中。训练过程使用了sentences变量,它是一个由列表组成的列表,每个列表表示一个文本的分词结果。vector_size参数指定了词向量的维度,window参数指定了训练过程中用于预测当前单词的上下文单词的范围,min_count参数指定了在语料库中出现次数小于该值的单词将被忽略。训练完成后,可以将词向量保存到word_vectors.txt文件中。

from gensim.models import Word2Vec


# 训练word2vec模型
sentences = [text.split() for text in preprodocs]
model = Word2Vec(sentences, vector_size=100, window=5, min_count=5, workers=4)
model
# 保存词向量
with open('word_vectors.txt', 'w', encoding='utf-8') as f:
    for word in model.wv.key_to_index:
        vector = ' '.join(map(str, model.wv[word]))
        f.write(f'{word} {vector}\n')

4 Doc2Vec 算法

接下来,使用gensim库的Doc2Vec类对文档进行向量化处理。Doc2Vec是一种基于Word2Vec的文档向量化模型,可以将每个文档映射到一个向量空间中。将文档向量化需要先为每个文档生成标签,标签可以是任何字符串,但最好是唯一的。在这里,我们使用的是每个文档的索引号作为标签。然后将标签和分词后的文本一起传入TaggedDocument类的构造函数,生成一个由标签和分词后的文本组成的对象,这个对象就是Doc2Vec模型中的输入。训练过程与Word2Vec类似,只需将Word2Vec类换成Doc2Vec类即可。训练完成后,可以将文档向量保存到doc_vectors.txt文件中。

from gensim.models.doc2vec import Doc2Vec, TaggedDocument
documents = []

for i, line in enumerate(preprodocs):
    # 分词并生成标签
    documents.append(TaggedDocument(words=words, tags=[i]))

model = Doc2Vec(documents, vector_size=100, window=5, min_count=5, workers=4)
with open('doc_vectors.txt', 'w', encoding='utf-8') as f:
    for i, docvec in enumerate(model.dv):
        f.write(f'{i} {" ".join(map(str, docvec))}\n')

5 结果截图

image.png
image.png

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 在 Keras 中实现 word2vec 可以使用 Embedding 层。Embedding 层可以将离散的符号映射为连续的向量,其中每个符号对应一个向量。在 word2vec 中,这个符号就是单词,而向量就是单词的词向量。你可以训练一个从输入单词到输出词向量的模型,或者加载预训练的词向量权重。 实现 doc2vec 也可以使用 Embedding 层,但这次符号是文档,向量是文档向量。你可以训练一个从输入文档到输出文档向量的模型,或者加载预训练的文档向量权重。 为了更好地实现 doc2vec,你可能需要使用其他层,比如 LSTM 层或者 GRU 层,来处理变长的文档序列。你也可以考虑使用不同的损失函数和优化器,来更好地拟合文档向量。 ### 回答2: Keras是一个流行的深度学习框架,提供了方便快捷的工具来构建和训练神经网络模型。在Keras中实现word2vecdoc2vec模型可以通过嵌入层以及序列化模型来实现。 Word2Vec是一种使用神经网络进行单词的嵌入表示的模型。在Keras中,可以使用Embedding层来实现简单的word2vec模型。Embedding层将单词映射为密集向量,并将其作为输入传递给下一个层进行训练。我们可以使用Keras的Sequential模型来定义并训练这个模型。首先,我们需要定义模型的结构,其中包含Embedding层和一个输出层,例如全连接层。然后,我们可以使用模型编译方法来配置模型的优化器、损失函数以及性能指标。最后,我们可以使用模型的fit方法将训练数据集拟合到模型中。 Doc2Vec是一种扩展的word2vec模型,用于将整个文档映射到向量空间。在Keras中实现doc2vec可以采用类似的方法。我们可以使用一个包含两个或更多输入的模型,其中一个输入用于表示整个文档,另一个输入用于表示每个单词。我们可以使用Embedding层分别为单词和文档建立嵌入层,并将它们与合适的层(如全连接层)连接起来。这样,我们可以通过训练这个模型,使得单词和文档在向量空间中的表示能够根据它们的语义关系进行调整。 总之,在机器学习领域,Keras是一个强大的工具,可以方便地实现word2vecdoc2vec模型。通过使用Keras的嵌入层和序列模型,我们可以构建并训练这些模型,从而得到单词和文档在向量空间中的有意义的表示。 ### 回答3: Keras是一个高级的神经网络库,可以用于实现文本处理相关的任务,其中包括word2vecdoc2vecword2vec是用于将词语转换为向量表示的一种技术。在Keras中实现word2vec可以通过构建一个两层的神经网络来完成。首先,将词语表示为one-hot的编码形式,然后将其输入到神经网络中。神经网络的第一层是一个隐藏层,用于学习词向量的表示,隐藏层的节点数即为词向量的维度。接下来的一层是输出层,其节点数与词汇表的大小相同。通过训练这个神经网络,可以学习到每个词语的词向量表示。 doc2vec是对整个文档进行向量表示的一种技术。在Keras中实现doc2vec可以借助于word2vec的思想,将文档中的每个词语表示为词向量,并对这些词向量进行加权平均,得到整个文档的向量表示。这个加权平均可以通过简单的平均或者根据词语重要性进行加权平均来实现。然后,可以将得到的文档向量作为输入,在Keras中构建一个神经网络,进行训练和预测。 需要注意的是,在实现word2vecdoc2vec时,Keras提供了丰富的层和优化器,可以根据具体任务的需求进行选择和配置。同时,也可以使用Keras提供的预训练模型,例如基于GloVe或FastText的词向量模型,来进行更高效的文本表示学习。在实际应用中,还需要考虑文本数据的预处理、语料库的构建等问题,以及合适的模型评估和调参策略。这些都是进行word2vecdoc2vec实现时需要注意的方面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值