自然语言处理--训练面向特定领域的 Word2vec 模型

在某些情况下,需要创建面向特定领域的词向量模型。
由于谷歌训练 googlenews-vectors-negative300.bin.gz模型时使用的是 2006 年之前的谷歌新闻,所以如果 NLP 流水线处理的文本中词的用法在当时的谷歌新闻中找不到,那么可以通过定制化词向量来提高模型的精确率。另外,如果有些词在谷歌新闻中很罕见,或者这些词在特定领域有一些特定用法,如医学文本或成绩单等,那么面向特定领域的词向量模型也可以提高模型精确率。现在展示如何训练定制化的Word2vec 模型。

from gensim.models.word2vec import Word2Vec
from gensim.models.word2vec import Word2Vec

# 数据
# gensimword2vec 模型接收的输入是一个句子列表,其中每个句子都已经切分为词条。
# 这样可以确保词向量模型不会学习到相邻句子中出现的无关词。
# 可以使用莫尔斯检测器(Detector Morse)产生这样的数据,在 pypi 和 GitHub 网站上均可获取,是一
# 个性能非常好(98%)的句子分段器,在《华尔街日报》多年的文章上进行的预训练。
token_list = [ ['to', 'provide', 'early', 'intervention/early', 'childhood', 'special',
             'education', 'services', 'to', 'eligible', 'children', 'and', 'their',
             'families'],
             ['essential', 'job', 'functions'],
             ['participate', 'as', 'a', 'transdisciplinary', 'team', 'member', 'to',
             'complete', 'educational', 'assessments', 'for']]

# Word2vec 模型训练参数
# 向量元素的数量(维度)表示词向量
num_features = 300
# Word2vec 模型中词的最低词频,如果语料库较小,可以将最低词频设置得小一点,
# 如果语料库较大,可以适当增大一点
min_word_count = 1
# 训练使用的 CPU 核数,如果要动态设置核数,可以导入 multiprocessing,
# 设置 num_workers = multiprocessing.cpu_count()
num_workers = 2
# 上下文窗口大小
window_size = 6
# 高频词条降采样率
subsampling = 1e-3

# Word2vec 模型实例化
model = Word2Vec(token_list, workers=num_workers, size=num_features, min_count=min_word_count,
                    window=window_size, sample=subsampling)

# 为了减少占用内存,丢弃神经网络中不需要的输出权重
# init_sims 方法将冻结模型,存储隐藏层的权重并丢弃用于预测共现词的输出权重,
# 一旦丢弃输出层的权重,以后将无法进一步训练模型
model.init_sims(replace=True)

# 保存已训练的模型
model_name = "my_domain_specific_word2vec_model"
model.save(model_name)

# 测试模型效果
model_name = "my_domain_specific_word2vec_model"
model = Word2Vec.load(model_name)
print(model.most_similar('early', topn=3))

猜你喜欢

转载自blog.csdn.net/fgg1234567890/article/details/112974769