美文网首页
【2020-07-16】Word2Vec

【2020-07-16】Word2Vec

作者: BigBigFlower | 来源:发表于2020-08-13 11:21 被阅读0次

    gensim的 Word2Vec参数

    Word2Vec(sentences=None,# 可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或·ineSentence构建。
             size=100,# 是指特征向量的维度,默认为100。大的size需要更多的训练数据,但是效果会更好. 推荐值为几十到几百。
             alpha=0.025, # 学习速率
             window=5, # 表示当前词与预测词在一个句子中的最大距离是多少
             min_count=5, # 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5
             max_vocab_size=None, # 设置词向量构建期间的RAM限制。如果所有独立单词个数超过这个,则就消除掉其中最不频繁的一个。每一千万个单词需要大约1GB的RAM。设置成None则没有限制
             sample=0.001, # 高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)
             seed=1, # 用于随机数发生器。与初始化词向量有关。
             workers=3, # workers参数控制训练的并行数。
             min_alpha=0.0001, 
             sg=0,#sg: 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。
             hs=0,  #如果为1则会采用hierarchica softmax技巧。如果设置为0(default),则negative sampling会被使用。
             negative=5, # 如果>0,则会采用negativesampling,用于设置多少个noise words
             cbow_mean=1, # 如果为0,则采用上下文词向量的和,如果为1(default)则采用均值。只有使用CBOW的时候才起作用。
             hashfxn=<built-in function hash>, # hash函数来初始化权重。默认使用python的hash函数
             iter=5, # 迭代次数,默认为5
             null_word=0,
             trim_rule=None, # 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受()并返回RU·E_DISCARD,uti·s.RU·E_KEEP或者utils.RUlE_DEFAUlT的函数。
             sorted_vocab=1,  # 如果为1(default),则在分配word index 的时候会先对单词基于频率降序排序。
             batch_words=10000  # 每一批的传递给线程的单词的数量,默认为10000
            )
    

    简单实现

    # 加载文本
    # 加载文本
    with open ("data/data_for_test/tmp_all.txt","r") as f:
        data=f.readlines()
    
    file=[]
    for i in range(1,len(data)):
        file.append(data[i].split('\t'))
    df=pd.DataFrame(file,columns=['number','content'])
    # 数据预处理
    # 略
    
    # 训练模型
    
    with open('corpus_all.txt', 'a', encoding='utf-8') as f:
        for i in range(len(corpus)):
            words = corpus[i].split()
            for word in words:
                f.write(word + ' ')   
            f.write('\n')
    with open('corpus_all.txt', 'a', encoding='utf-8') as f:
        for i in range(len(corpus)):
            words = corpus[i].split()
            for word in words:
                f.write(word + ' ')   
            f.write('\n')
    # 语料
    sentences=LineSentence('corpus_all.txt')
    # 模型
    model = Word2Vec(sentences, min_count=1, iter=1000)
    
    model.save("w2v_all.mod")
    
    # 观察输出
    model=Word2Vec.load(path) # 加载
    model.wv.vocab # 模型内的词
    model.wv.n_similarity(words, candidate) #计算相似度
    y = model.most_similar('XXX', topn=20)# 寻找最相似的topn
    y2=model.similarity(u"XXX", u"YYY") # 两个文本的相似度
    model.wv['XXX']  #查看指定词的向量表示
    model.doesnt_match("XXXX".split())   #选出集合中不同类的词语
    

    语言模型: CBOW【根据上下文的词语,预测当前词语】、Skip-gram【根据当前词语,预测上下文】

    网络结构

    降低复杂度:Hierarchical Softmax【层次softmax】 、Negative Sampling【负采样】

    相关文章

      网友评论

          本文标题:【2020-07-16】Word2Vec

          本文链接:https://www.haomeiwen.com/subject/uvmmhktx.html