当前位置:   article > 正文

word2vec简单入门使用、总结_word2vec-chinese 入门

word2vec-chinese 入门
'''
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}")


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/881828
推荐阅读
  

闽ICP备14008679号