word2vec简单入门使用、总结
·
'''
word2vec最大的缺陷:由于它是静态词向量表示导致不能表示一词多义的情况,举个例子“苹果”一词,在果蔬的句子中表示的就是水果的含义,
要是在高科技产品句子中表示的就是“苹果”公司。
但是word2vec的静态词向量表示只能表示同一种形式,不能很好的表示上下文语义,
这也是为什么ELMO,GPT,bert问世之后word2vec就不再有以前的光环了,因为ELMO,GPT,bert都是用的动态词向量表示,可以很好的表示上下文语义
'''
'''
word2vec算法要想数据更加准确,需要扩大语料库、调整合适的模型训练参数
'''
'''
Text2vec 通常用于处理整个文本序列的任务,如文本分类、文本相似度计算、文本聚类等。
Word2vec 主要用于处理单个词汇的任务,如词汇相似度计算、词汇嵌入空间分析等。
'''
if __name__ == '__main__':
import jieba
import re
from gensim.models import Word2Vec
lines = []
with open('C:\job\AI数据集平台工具\数据\word2vec_data.txt', mode='r', encoding='utf-8') as f:
sentence = f.readline()
while sentence:
lines.append(sentence)
sentence = f.readline()
# 分词
lines_cut = []
for line in lines:
line_cut = []
tmp = jieba.lcut(line)
# 过滤标点符号,空格,换行符
for i in tmp:
i = re.sub(r'[^\w]', "", i)
if len(i) > 0:
line_cut.append(i)
if len(line_cut) > 0:
lines_cut.append(line_cut)
print(lines_cut)
'''
以上为对文本进行分词处理
以下为Word2vec的使用
'''
'''
(1) sentences:可为一个list,对大语料集,建议使用BrownCorpus/Text8Corpus/LineSentence构建;
(2) size:指特征向量的维度,默认为100;
(3) window:窗口大小,表示当前词与预测词在一个句子中的最大距离是多少;
(4) min_count:对字典做截断,词频少于min_count的单词会drop掉,默认值为5;
(5) workers:用于控制训练的并行数;
(6) sg:用于设置训练算法,默认为0,对应于CBOW算法;sg=1为skip-gram算法;
CBOW:根据一个词的上下文词汇预测该词本身,强调词汇的聚合语义。
Skip-Gram:给定一个词,预测其周围的上下文词汇,侧重于词汇的扩散语义
(7) iter:迭代次数,默认为5;
(8) negative:如果>0,则会采用negativesampling,用于设置多少个noise words(一般是5-20),为每次采多少个负样本
(8) epochs:训练模型迭代次数
'''
model = Word2Vec(lines_cut, vector_size=50, window=200, min_count=1, epochs=10, negative=10, sg=0)
# 词向量保存
model.wv.save_word2vec_format('data.vector', binary=False)
# 模型保存
model.save('word2vec.model')
# 加载已保存的模型
word2vec_model = Word2Vec.load('word2vec.model')
# 查询单个词的词向量
flink = word2vec_model.wv['flink']
print(f"flink:{flink}")
# 计算两个词之间的余弦相似度
similarity = word2vec_model.wv.similarity('spark', 'hive')
print(similarity)
# 最相似的词
most_sim = word2vec_model.wv.most_similar('mysql', topn=5)
print(f"最相似:{most_sim}")
更多推荐


所有评论(0)