首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对现有的基本GloVe模型的改进

对现有的基本GloVe模型的改进
EN

Stack Overflow用户
提问于 2017-04-25 18:15:28
回答 3查看 1.9K关注 0票数 7

我正在使用GloVe作为我研究的一部分。我从这里下载了模型。我一直在使用GloVe进行句子分类。一些STEM主题说,我所分类的句子是特定于特定领域的。然而,由于现有的GloVe模型是针对一个通用的语料库进行训练的,因此对于我的特定任务,它们可能不会产生最佳的结果。

所以我的问题是,我应该如何加载经过再训练的模型,然后再在我自己的语料库上重新训练它,以学习我的语料库的语义呢?如果可能的话,这样做是有好处的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-25 19:35:07

经过一段时间的挖掘,我在git上找到了本期。有人建议如下:

是的,由于优化设置,这不能很好地工作。但是,您可以做的是在您自己的语料库上训练GloVe向量,然后将那些与经过预先训练的GloVe向量连接起来,以便在您的最终应用程序中使用。

这就是答案。

票数 2
EN

Stack Overflow用户

发布于 2019-05-30 18:34:23

我相信GloVe (Global )并不意味着要附加,因为它是基于语料库的单词共现统计数据,这些统计数据只在最初的训练时才知道。

您可以使用gensim.scripts.glove2word2vec api将GloVe向量转换为word2vec,但我认为您不能继续进行培训,因为它加载在KeyedVector中,而不是一个完整的模型

票数 1
EN

Stack Overflow用户

发布于 2020-10-25 14:29:18

丝指库(可通过pip安装)可以这样做,如果您的语料库/声音不是太大,或者您的内存足够大,足以处理整个共生矩阵。

三步-

代码语言:javascript
复制
import csv
import numpy as np
from collections import Counter
from nltk.corpus import brown
from mittens import GloVe, Mittens
from sklearn.feature_extraction import stop_words
from sklearn.feature_extraction.text import CountVectorizer

1-加载预训练模型- Mittens需要一个预训练模型作为字典加载.从https://nlp.stanford.edu/projects/glove获得预训练模型

代码语言:javascript
复制
with open("glove.6B.100d.txt", encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=' ',quoting=csv.QUOTE_NONE)
    embed = {line[0]: np.array(list(map(float, line[1:])))
            for line in reader}

数据预处理

代码语言:javascript
复制
sw = list(stop_words.ENGLISH_STOP_WORDS)
brown_data = brown.words()[:200000]
brown_nonstop = [token.lower() for token in brown_data if (token.lower() not in sw)]
oov = [token for token in brown_nonstop if token not in pre_glove.keys()]

这里使用棕色语料库作为样本数据集,new_vocab表示预先训练过的手套中不存在的词汇。共现矩阵是由new_vocab构造的.它是一个稀疏矩阵,需要O(n^2)的空间复杂度。您可以选择筛选出罕见的new_vocab单词以节省空间。

代码语言:javascript
复制
new_vocab_rare = [k for (k,v) in Counter(new_vocab).items() if v<=1]
corp_vocab = list(set(new_vocab) - set(new_vocab_rare))

删除这些罕见的单词并准备数据集

代码语言:javascript
复制
brown_tokens = [token for token in brown_nonstop if token not in new_vocab_rare]
brown_doc = [' '.join(brown_tokens)]
corp_vocab = list(set(new_vocab))

2-构建共现矩阵:sklearn的CountVectorizer将文档转换为word文档矩阵.矩阵乘法Xt*X给出了词-词共生矩阵.

代码语言:javascript
复制
cv = CountVectorizer(ngram_range=(1,1), vocabulary=corp_vocab)
X = cv.fit_transform(brown_doc)
Xc = (X.T * X)
Xc.setdiag(0)
coocc_ar = Xc.toarray()

3-微调手套模型-实例化模型并运行fit函数.

代码语言:javascript
复制
mittens_model = Mittens(n=50, max_iter=1000)
new_embeddings = mittens_model.fit(
    coocc_ar,
    vocab=corp_vocab,
    initial_embedding_dict= pre_glove)

将模型保存为泡菜,以备以后使用。

代码语言:javascript
复制
newglove = dict(zip(corp_vocab, new_embeddings))
f = open("repo_glove.pkl","wb")
pickle.dump(newglove, f)
f.close()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43618145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档