赞
踩
''' 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}")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。