精华内容
下载资源
问答
  • gensim生成词向量并获取词向量矩阵

    千次阅读 2020-07-07 17:16:55
    gensim生成词向量并获取词向量矩阵 word2vec是目前比较通用的训练词向量的工具,使用Gensim模块,可以使词向量的训练变的简单,但是调用gensim.models的word2vec模块使用skip-gram或CBOW完成词向量训练之后,如何...

    gensim生成词向量并获取词向量矩阵

    word2vec是目前比较通用的训练词向量的工具,使用Gensim模块,可以使词向量的训练变的简单,但是调用gensim.models的word2vec模块使用skip-gram或CBOW完成词向量训练之后,如何获取词向量中的词汇表以及对应的词向量矩阵呢。本文以一个小例子进行演示。

    1. 导入相关包

    主要用到了jieba和gensim包,可以使用命令行pip3 install gensim或下载gensim包的方式,具体不述。

    import jieba
    from gensim.models import Word2Vec
    

    1. 加载语料并清洗

    为了方便演示,本文直接定义了一个语料,并使用jieba进行分词操作。

    #  停用词
    stopword_list = []
    with open('./stopwords.txt', 'r+', encoding='utf8') as f:
        for word in f.readlines():
            if len(word)>0 and word != '\n\t':
                stopword_list.append(word)
                
    # 语料
    content = [
    "长江是中国第一大河,干流全长6397公里(以沱沱河为源),一般称6300公里。流域总面积一百八十余万平方公里,年平均入海水量约九千六百余亿立方米。以干流长度和入海水量论,长江均居世界第三位。",
    "黄河,中国古代也称河,发源于中华人民共和国青海省巴颜喀拉山脉,流经青海、四川、甘肃、宁夏、内蒙古、陕西、山西、河南、山东9个省区,最后于山东省东营垦利县注入渤海。干流河道全长5464千米,仅次于长江,为中国第二长河。黄河还是世界第五长河。",
    "黄河,是中华民族的母亲河。作为中华文明的发祥地,维系炎黄子孙的血脉.是中华民族民族精神与民族情感的象征。",
    "黄河被称为中华文明的母亲河。公元前2000多年华夏族在黄河领域的中原地区形成、繁衍。",
    "在兰州的“黄河第一桥”内蒙古托克托县河口镇以上的黄河河段为黄河上游。",
    "黄河上游根据河道特性的不同,又可分为河源段、峡谷段和冲积平原三部分。 ",
    "黄河,是中华民族的母亲河。"
    ]
    
    # 分词
    seg = [jieba.lcut(text) for text in content]
    
    # 清洗
    content_clean = []
    for t in seg:
        text_clean = []
        for i in t:
            if len(i)>1 and i != '\t\n': 
                if not i.isdigit():
                    if i.strip() not in stopword_list:
                        text_clean.append(i.strip())
        content_clean.append(text_clean)
    

    最后的content_clean为一个list,具体为:

    在这里插入图片描述

    3. 使用gensim训练词向量

    ## 用gensim训练词向量模型
    
    model = Word2Vec(content_clean, sg=1, size=100, window=5, min_count=2, negative=1, 
                     sample=0.001, workers=4)
    '''
    sg=1 是 skip-gram 算法,对低频词敏感;默认 sg=0 为 CBOW 算法。
    size 是输出词向量的维数,值太小会导致词映射因为冲突而影响结果,值太大则会耗内存并使算法计算变慢,一般值取为100到200之间。
    window 是句子中当前词与目标词之间的最大距离,3表示在目标词前看3-b 个词,后面看 b 个词(b 在0-3之间随机)。
    min_count 是对词进行过滤,频率小于 min-count 的单词则会被忽视,默认值为5。
    negative 和 sample 可根据训练结果进行微调,sample 表示更高频率的词被随机下采样到所设置的阈值,默认值为 1e-3。
    hs=1 表示层级 softmax 将会被使用,默认 hs=0 且 negative 不为0,则负采样将会被选择使用。
    '''
    
    
    # 训练后的模型model可以保存,备用
    model.save('./word2vec')   #保存
    model = Word2Vec.load('word2vec')   #加载model
    

    代码中model是一个训练好的词向量模型,里面包含许多内容,可以获取词汇表和对应的词向量。

    ## 获取词汇
    words = model.wv.index2word
    print(words)                 # 长度18
    
    # ['黄河', '长江', '中国', '干流', '中华民族', '母亲河', '第一', '全长',
    #    '公里', '入海', '水量', '世界', '内蒙古', '河道', '长河', '中华文明', '民族', '上游']
    
    
    ## 获取对应词向量
    vectors = model.wv.vectors
    print(vectors)    # 18*100   100为设置的size,即词向量维度
    
    #[[ 1.2898202e-03 -3.4580764e-03  3.4779524e-03 ... -3.6768757e-03
    #   2.6582647e-03 -3.7408734e-03]
    # [ 2.9404070e-03  3.9611240e-03 -2.1796243e-03 ...  2.3843886e-03
    #  -4.3357350e-03 -3.3540600e-03]
    # [ 4.9255025e-03  1.4151304e-03 -8.7503344e-04 ...  4.2551141e-03
    #  -2.9053804e-03  3.6766860e-03]
    # ...
    # [ 1.9452259e-03  4.8658932e-03 -2.3852135e-03 ... -2.7566685e-03
    #   4.9943980e-03 -3.9313175e-03]
    # [ 5.2972522e-04  4.8273476e-03 -3.0694890e-03 ...  4.2261067e-03
    #   9.7657423e-05  4.4411011e-03]
    # [-2.2659900e-03  1.5058877e-03 -4.7887382e-03 ...  2.4552434e-03
    #   4.4189487e-04  5.9008709e-04]]
    
    
    ## 根据指定词获取该词的向量
    vec = model.wv['长江']
    print(vec)
    
    #[ 2.9404070e-03  3.9611240e-03 -2.1796243e-03  3.5846021e-03
    # -8.5443829e-04 -1.5641276e-03 -1.6966875e-03 -4.6902820e-03
    # -4.3645203e-03 -1.8363699e-03 -3.9727231e-03  4.7817207e-03
    # -1.3380363e-03 -2.6813489e-03  4.1867769e-03  3.4822649e-03
    # -3.9391480e-03 -2.3266519e-03  1.4906399e-03 -7.4510416e-04
    # ...
    
    
    ## 判断词之间的相似度
    print(model.similarity('黄河','黄河'))   #1.0
    print(model.similarity('黄河','长江'))   #-0.08
    print(model.similarity('黄河','中国'))   #0.14
    
    
    ## 预测与'黄河'和'母亲河'最相似,而与长江不接近的词
    print(model.most_similar(positive=['黄河','母亲河'], negative=['长江']))
    
    #[('长河', 0.10036612302064896), ('世界', 0.065335713326931), 
    # ('民族', 0.05369586870074272), ('中华民族', 0.03456304967403412), 
    # ('入海', 0.00084715336561203), ('公里', -0.007249757647514343), 
    # ('第一', -0.0175853930413723), ('内蒙古', -0.0281079038977623), 
    # ('干流', -0.02939787693321705), ('上游', -0.029546111822128296)]
    #__main__:1: DeprecationWarning: Call to deprecated `most_similar` 
    #(Method will be removed in 4.0.0, use self.wv.most_similar() instead).
    
    
    展开全文
  • 概述 在深度学习中,Embedding技术对于深度学习非常重要,甚至可以说是深度学习的“基本核心操作”。深度学习网络中作为Embedding层,...常用的获取词向量的方法 利用网络embedding层训练词向量, FastText工具快速生
    概述
    • Embedding,中文直译为“嵌入”,常被翻译为“向量化”或者“向量映射”,在深度学习中,Embedding技术对于深度学习非常重要,甚至可以说是深度学习的“基本核心操作”。深度学习网络中作为Embedding层,完成从高维稀疏特征向量到低维稠密特征向量的转换。 使用One-hot编码对类别、Id型特征进行编码,导致样本特征向量极度稀疏,而深度学习的结构特点使其不利于稀疏特征向量的处理,因此几乎所有的深度学习都会由Embedding层负责将高维稀疏特征向量转换成稠密低维特征向量
    常用的获取词向量的方法
    • 利用网络embedding层训练词向量,
    • FastText工具快速生成词向量,
    • 使用预训练模型获取词向量。
    如何训练词向量
    1. 网络embedding层训练词向量:embedding层训练词向量时,需要设置两个参数,分别是词汇总数和词嵌入维度,首先需要将一个句子(选择合适的句子的序列长度,因为截断或补齐也会给最终效果带来影响)中的每一个词完成word2id的过程,获取每一个词的id方法有(1.通过keras下的tokenizer方法获取总次数数以及词 索引的对应关系 2.编程代码完成一一映射)。词嵌入维度一般的设置大些,参考值为300到500,
    模型中加入embedding层
    nn.Embedding(vocab_size,embedding_dim)
    
    1. FastText训练词向量过程
    过程:获取数据,训练词向量,模型超参数设置,模型效果检验,模型保存与加载
    
    1.获取数据(英语维基百科的部分网页信息, 它的大小在300M左右
    )
    [root@bhs fastte]# wget -c http://mattmahoney.net/dc/enwik9.zip -P data
    
    [root@bhs data]# unzip enwik9.zip 
    [root@bhs data]# ll
    total 1291608
    -rw-r--r-- 1 root root 1000000000 Jun  1  2011 enwik9
    -rw-r--r-- 1 root root  322592222 Sep  2  2011 enwik9.zip
    -rw-r--r-- 1 root root       1995 May 24 00:17 wikifil.pl
    查看下载的数据
    [root@bhs data]# more enwik9
    <mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch
    emaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang
    ="en">
      <siteinfo>
        <sitename>Wikipedia</sitename>
        <base>http://en.wikipedia.org/wiki/Main_Page</base>
        <generator>MediaWiki 1.6alpha</generator>
        <case>first-letter</case>
          <namespaces>
          <namespace key="-2">Media</namespace>
          <namespace key="-1">Special</namespace>
          <namespace key="0" />
          <namespace key="1">Talk</namespace>
          <namespace key="2">User</namespace>
          <namespace key="3">User talk</namespace>
          <namespace key="4">Wikipedia</namespace>
          <namespace key="5">Wikipedia talk</namespace>
    
    数据处理
    使用wikifil.pl文件处理脚本来清除XML/HTML格式的内容
    [root@bhs data]# perl wikifil.pl enwik9 > fil
    输出结果为由空格分割的单词
    [root@bhs data]# more fil 
     anarchism originated as a term of abuse first used against early working class radicals including the diggers of the eng
    lish revolution and the sans culottes of the french revolution whilst the term is still used in a pejorative way to descr
    
    2.训练词向量
    
    # 在训练词向量过程中, 我们可以设定很多常用超参数来调节我们的模型效果,
    # 无监督训练模式: 'skipgram' 或者 'cbow', 默认为'skipgram', 在实践中,skipgram模式在利用子词方面比cbow更好.
    # 词嵌入维度dim: 默认为100, 但随着语料库的增大, 词嵌入的维度往往也要更大.
    # 数据循环次数epoch: 默认为5, 但当你的数据集足够大, 可能不需要那么多次.
    # 学习率lr: 默认为0.05, 根据经验, 建议选择[0.01,1]范围内.
    # 使用的线程数thread: 默认为12个线程, 一般建议和你的cpu核数相同
    
    
    model=fasttext.train_unsupervised('./fil','cbow',dim=300,epoch=1,lr=0.1,thread=2)
    Read 124M words
    Number of words:  218316
    Number of labels: 0
    Progress: 100.0% words/sec/thread:   26829 lr:  0.000000 avg.loss:  1.507921 ETA:   0h 0m 0s
    
    3.模型效果检验
    # 检查单词向量质量的一种简单方法就是查看其邻近单词, 通过我们主观来判断这些邻近单词是否与目标单词相关来粗略评定模型效果好坏.
    查找"小狗"的邻近单词, 我们可以发现与小狗有关的词汇.
    >>> model.get_nearest_neighbors('dog')
    [(0.8416129350662231, 'catdog'), (0.7638700604438782, 'sleddog'), (0.7467442154884338, 'dogcow'), (0.7335803508758545, 'h
    otdog'), (0.7319445610046387, 'bodog'), (0.715396523475647, 'dogs'), (0.711815595626831, 'dogo'), (0.6796260476112366, 'maddog'), (0.6774388551712036, 'madog'), (0.6770561933517456, 'spurdog')]
    
    
    4.模型保存与加载
    >>> model.save_model("file_save_model.bin")
    
    模型加载
    >>> model2=fasttext.load_model("./file_save_model.bin")
    报错:内存不足
    Warning : `load_model` does not return WordVectorModel or SupervisedModel any more, but a `FastText` object which is very
     similar.Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/root/anaconda3/lib/python3.6/site-packages/fasttext/FastText.py", line 441, in load_model
        return _FastText(model_path=path)
      File "/root/anaconda3/lib/python3.6/site-packages/fasttext/FastText.py", line 98, in __init__
        self.f.loadModel(model_path)
    MemoryError: std::bad_alloc
    
    
    >>> model22=fasttext.load_model("file_save_model.bin")
    Warning : `load_model` does not return WordVectorModel or SupervisedModel any more, but a `FastText` object which is very
     similar.
    
    使用模型获取词向量
    >>> model22.get_word_vector("baihaisheng")
    array([-6.14714921e-01,  1.77509800e-01, -6.72733843e-01,  3.89141440e-01,
            2.49527186e-01,  2.41667092e-01, -4.54738081e-01, -3.32535744e-01,
            1.00533022e-02,  1.30211804e-02,  2.25752905e-01, -4.17809784e-01,
            5.90570807e-01,  1.59802660e-02, -9.37078178e-01, -6.96638942e-01,
           -3.15337270e-01,  6.20727122e-01, -1.84069797e-01,  4.22761917e-01,
           -2.37838719e-02, -3.68257344e-01,  3.16621125e-01, -4.70072150e-01,
            5.71745373e-02,  1.40439391e-01,  2.90389121e-01,  6.27156734e-01,
           -6.00902587e-02, -4.65739310e-01,  1.03777409e-01, -7.87911355e-01,
            5.73584926e-04,  8.69789273e-02, -8.45102191e-01, -4.41818327e-01,
            4.94885862e-01,  1.21109761e-01, -5.81156723e-02, -1.74028978e-01,
            1.29382350e-02,  2.84348875e-01,  2.40987480e-01, -3.50105286e-01,
            1.39359280e-01,  2.79060900e-01,  3.65334660e-01, -7.01365650e-01,
            4.64738943e-02, -3.80195081e-01,  7.52594024e-02, -1.32626042e-01,
            1.48186862e-01, -2.03920603e-01, -6.26981258e-02,  7.05849111e-01,
           -2.42000282e-01, -3.99949878e-01,  4.65390146e-01,  3.47595781e-01,
           -5.09850979e-01,  3.79405737e-01,  1.32703856e-01, -3.32746685e-01,
            1.37809172e-01, -9.51760769e-01, -2.99254984e-01,  8.42892751e-02,
           -1.92956835e-01, -4.32410508e-01, -7.08973587e-01,  2.11728901e-01,
            2.65689790e-01, -3.82561058e-01, -8.77650008e-02,  1.32813957e-02,
           -2.99640179e-01, -6.89251542e-01, -1.98683292e-01, -5.35973869e-02,
            1.95847973e-01, -3.16322207e-01,  4.64514673e-01, -1.90718532e-01,
           -1.98006675e-01,  8.36191952e-01, -5.83671510e-01,  6.64617598e-01,
           -5.36399782e-01, -7.70042911e-02, -3.57951492e-01,  1.40873818e-02,
           -5.04313648e-01,  1.17317331e+00, -2.78562754e-01,  5.37931621e-01,
            5.22421971e-02,  1.48041770e-01,  2.70346880e-01, -4.47012603e-01,
            1.49396583e-01,  2.54133046e-02, -6.32022172e-02,  3.11216176e-01,
            2.93466628e-01, -1.37522845e-02, -3.14217508e-01, -3.88895601e-01,
            5.53332902e-02,  2.66070604e-01, -3.26904833e-01, -9.38113868e-01,
           -8.01377296e-01, -2.76655018e-01,  2.95357853e-01,  4.95326258e-02,
            2.05409884e-01, -3.83659571e-01, -4.69358861e-01,  2.59294689e-01,
           -1.05863720e-01,  4.35056478e-01,  7.52935410e-02,  6.90222085e-02,
           -3.44821930e-01, -1.56436771e-01, -3.90448183e-01, -6.76123917e-01,
            4.41117547e-02,  5.24668634e-01,  7.67726973e-02, -8.08430910e-01,
            6.40433729e-02, -1.24917634e-01,  3.02044123e-01,  5.49890995e-01,
           -3.41330796e-01,  3.41020733e-01,  1.05423173e-02, -6.75539821e-02,
           -5.05231798e-01,  1.95493981e-01, -3.91332120e-01,  4.88728613e-01,
            2.03944132e-01,  4.21409816e-01, -3.52494448e-01, -1.23629794e-02,
           -7.36190379e-01,  1.44726455e-01,  5.02763927e-01, -9.17422120e-03,
           -1.90208256e-01, -6.94231153e-01,  1.79565459e-01, -5.44371307e-01,
           -3.39159757e-01, -9.69230756e-02, -7.34013379e-01,  3.57983142e-01,
            2.98592541e-02, -2.76991367e-01,  3.22349370e-01,  2.38273293e-01,
           -3.85621935e-01, -1.94796294e-01,  1.58925857e-02, -2.22999975e-01,
            1.27562350e-02, -7.30409741e-01,  5.42377949e-01,  7.75462449e-01,
            3.11984658e-01, -5.94272137e-01, -3.89411390e-01,  1.38909906e-01,
            5.38288914e-02, -5.86420894e-01, -4.59898055e-01, -3.51294905e-01,
           -2.52639234e-01,  1.29526585e-01,  3.99453491e-01,  2.58776903e-01,
            3.78979892e-01,  6.12262607e-01, -7.90281519e-02,  4.35486697e-02,
            1.21814705e-01, -5.93060851e-01, -7.41831660e-01, -6.45337030e-02,
            5.67307353e-01, -4.14864808e-01,  1.40781909e-01, -2.57910490e-01,
            1.89982623e-01,  2.95685351e-01, -1.78639546e-01,  3.70555967e-01,
           -4.44893450e-01,  2.67164707e-02, -3.89021710e-02,  2.65334040e-01,
            8.63097981e-02, -4.62214381e-01,  3.63194972e-01,  3.84918898e-02,
            7.76365325e-02,  2.10744530e-01, -3.56715173e-01,  1.48300081e-01,
            1.40594691e-01, -2.77864009e-01, -6.63379729e-01,  1.26957715e-01,
           -3.18865716e-01, -2.73206711e-01, -2.60140210e-01, -5.20998001e-01,
            4.53805625e-01,  2.08097503e-01, -3.63694400e-01,  1.70241684e-01,
           -5.37926853e-02, -5.26781738e-01,  2.18923092e-02, -1.52257919e-01,
            8.82064030e-02,  7.43691530e-03, -5.51458150e-02, -7.28050232e-01,
            2.06179187e-01, -2.48517796e-01,  1.51464373e-01, -6.21425450e-01,
           -2.79860973e-01,  8.12949777e-01, -1.09000459e-01, -3.33450288e-01,
           -8.25750351e-01, -3.35024595e-02, -3.75130437e-02, -1.14543743e-01,
            4.48227674e-01, -1.47293851e-01, -9.86459404e-02,  2.73444474e-01,
           -9.43316996e-01,  7.02648342e-01, -1.67992368e-01,  1.68559060e-01,
            1.28673196e-01, -6.19408727e-01,  3.94033939e-01, -2.62163162e-01,
           -3.09747308e-01,  4.15634245e-01,  1.26757383e-01,  8.73117819e-02,
            3.82494479e-01, -9.45309281e-01,  3.05107027e-01,  7.09154487e-01,
           -9.11318585e-02,  4.16147500e-01,  2.27030009e-01,  4.02536601e-01,
           -1.11048624e-01, -3.55361104e-01, -2.01794848e-01,  6.78207994e-01,
            3.93777005e-02,  5.43783069e-01, -1.07726261e-01, -2.64577866e-01,
           -3.15008730e-01,  4.13194895e-02, -4.69589233e-02,  7.28278533e-02,
            1.15777445e+00, -1.91089004e-01, -2.61729993e-02,  1.33131459e-01,
           -8.68672356e-02,  5.32459021e-01, -5.59820943e-02,  7.47064352e-01,
           -1.07573256e-01, -2.86723137e-01,  2.86289006e-01, -2.12187365e-01,
           -5.78209001e-04,  1.68665841e-01,  1.28051564e-01, -8.86839405e-02,
            1.27122542e-02,  5.84771216e-01,  2.32165232e-01, -2.18837187e-01],
          dtype=float32)
    
    
    
    
    1. 使用预训练模型获取词向量
      以BERT中文预训练模型获取词向量为例
      在实际的文本任务处理中, 有些训练语料很难获得, 他们的总体数量和包含的词汇总数都非常少, 不适合用于训练带有Embedding层的模型, 但这些数据中却又蕴含这一些有价值的规律可以被模型挖掘, 在这种情况下,使用预训练模型对原始文本进行编码是非常不错的选择, 因为预训练模型来自大型语料, 能够使得当前文本具有意义, 虽然这些意义可能并不针对某个特定领域, 但是这种缺陷可以使用微调模型来进行弥补

    使用BERT中文预训练模型对句子编码

    import torch
    import torch.nn as nn
    
    
    # 通过torch.hub(pytorch中专注于迁移学的工具)获得已经训练好的bert-base-chinese模型
    model =  torch.hub.load('huggingface/pytorch-transformers', 'model', 'bert-base-chinese')
    
    
    # 获得对应的字符映射器, 它将把中文的每个字映射成一个数字
    tokenizer = torch.hub.load('huggingface/pytorch-transformers', 'tokenizer', 'bert-base-chinese')
    
    
    def get_bert_encode_for_single(text):
        """
        description: 使用bert-chinese编码中文文本
        :param text: 要进行编码的文本
        :return: 使用bert编码后的文本张量表示
        """
        # 首先使用字符映射器对每个汉字进行映射
        # 这里需要注意, bert的tokenizer映射后会为结果前后添加开始和结束标记即101和102 
        # 这对于多段文本的编码是有意义的, 但在我们这里没有意义, 因此使用[1:-1]对头和尾进行切片
        indexed_tokens = tokenizer.encode(text)[1:-1]
        # 之后将列表结构转化为tensor
        tokens_tensor = torch.tensor([indexed_tokens])
        print(tokens_tensor)
        # 使模型不自动计算梯度
        with torch.no_grad():
            # 调用模型获得隐层输出
            encoded_layers, _ = model(tokens_tensor)
        # 输出的隐层是一个三维张量, 最外层一维是1, 我们使用[0]降去它.
        print(encoded_layers.shape)
        encoded_layers = encoded_layers[0]
        return encoded_layers
    
    if __name__=='__main__':
    	text='鸟语花香,好美'
    	encoded_layers=get_bert_encode_for_single(text)
    	print(encoded_layers)
    
    
    
    输出结果
    tensor([[7881, 6427, 5709, 7676, 8024, 1962, 5401]])
    torch.Size([1, 7, 768])
    tensor([[-0.0471, -0.1492, -0.8097,  ..., -0.3070,  0.2260,  0.4534],
            [ 0.8415, -0.2064,  0.1300,  ...,  0.9771,  0.8106,  0.4841],
            [ 0.9327, -0.2953,  0.0101,  ...,  0.4636,  0.5196,  0.0178],
            ...,
            [ 0.3189,  0.2888, -0.2720,  ...,  1.2119,  0.2128,  0.3653],
            [ 0.5846,  0.2318,  0.4427,  ...,  0.6561,  0.5574,  0.3100],
            [ 0.7143, -0.3749, -0.3590,  ...,  0.6304,  0.0795,  0.3684]])
    
    
    

    词向量好坏评价

    语义相关性任务
    这个任务用来评价词向量模型在两个词之间的语义相关性,如:学生与作业,中国与北京等。
    具体方法由监督模式实现,首先需要一份如下的标记文件,一般可以由人工标注:
    学生 上课 0.78
    教师 备课 0.8
    ...
    上述文件代表了词语之间的语义相关性,我们利用标注文件与训练出来的词向量相似度进行比较,如:词向量之间的cos距离等,确定损失函数,便可以得到一个评价指标。
    但这种方法首先需要人力标注,且标注的准确性对评价指标影响非常大
    
    
    语义类比任务
    这个任务词向量来考察不同单词间的语义关系能力,一般给定三个词,如a、b、c,要求寻找a+b = c + ?任务中最相似的词
    
    文本分类任务
    这个任务利用词向量构成文本向量,一般采用求和平均的方式,之后利用构成的文本向量进行文本分类,根据分类的准备率等指标衡量词向量的质量
    
    展开全文
  • bert获取词向量做textcnn文本分类

    千次阅读 热门讨论 2019-08-13 15:06:59
    下面介绍获取词向量的方法 获取BERT词向量的时候用到了肖涵博士的bert-as-service,具体使用方式如下。 环境要求:python版本>=3.5,tensorflow版本>=1.10 相关包的安装: pip installbert-serving-server ...

    BERT其中的一个重要作用是可以生成词向量

    下面介绍获取词向量的方法

    获取BERT词向量的时候用到了肖涵博士的bert-as-service,具体使用方式如下。

    环境要求:python版本>=3.5,tensorflow版本>=1.10

    相关包的安装:

    pip install  bert-serving-server

    pip install bert-serving-client

    下载训练好的BERT中文模型:https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip

    启动bert-as-service :

    在cmd窗口进入bert-serving-start.exe所在的文件夹(一般这个文件在python安装路径下的Scripts文件夹下),

    在该文件路径下输入 bert-serving-start  -model_dir C:\Users\admin\Desktop\text_cf\chinese_L-12_H-768_A-12

    测试一下

    from bert_serving.client import BertClient
    
    bc = BertClient()
    
    d=bc.encode(['你好','我','朋友'])
    
    >>>array([[ 0.28940195, -0.13572705,  0.07591176, ..., -0.14091267,
             0.5463005 , -0.30118063],
           [-0.17258267,  0.05145651,  0.3027011 , ...,  0.06416287,
             0.11442862, -0.33527803],
           [-0.16574037,  0.29926932,  0.00558878, ..., -0.14497901,
             0.64227146, -0.3119482 ]], dtype=float32)

    接下来正式工作

    # 读取数据
    df = pd.read_csv(...)
    
    # 把https://github.com/google-research/bert的tokenization.py下载该文件路径下
    from tokenization import BasicTokenizer
    
    tokenizer = BasicTokenizer()
    # 进行分词处理
    df['cutted'] = df['text'].apply(lambda x: tokenizer.tokenize(x))
    
    def padding_sentences(input_sentences, padding_token, padding_sentence_length = 200):
        sentences = [sentence for sentence in input_sentences]
        max_sentence_length = padding_sentence_length
        l=[]
        for sentence in sentences:
            if len(sentence) > max_sentence_length:
                sentence = sentence[:max_sentence_length]
                l.append(sentence)
            else:
                sentence.extend([padding_token] * (max_sentence_length - len(sentence)))
                l.append(sentence)
        return (l, max_sentence_length)
    
    # 截取文本固定长度
    sentences, max_document_length = padding_sentences(df['cutted'], '[UNK]')
    
    from bert_serving.client import BertClient
    
    bc = BertClient()
    vec=[]
    for i in range(len(sentences)):
        bert_vec=bc.encode(sentences[i])
        print(i,bert_vec.shape)
        vec.append(bert_vec)
    
    bert_vec=np.array(vec)  #这里注意时间复杂度会很大,慎用
    
    # 向量获取成功,接下来可参照https://blog.csdn.net/hufei_neo/article/details/98732734
    # 做接下来的textcnn文本分类工作

     

    展开全文
  • 从Bert预训练数据集中获取词向量

    千次阅读 2019-08-14 21:10:00
    在一些操作过程中,经常要获取词向量,BERT做为一个在各项评测指标中都比较出色的,且提供了许多预训练模型的,从其中获取词向量是一些任务中必备的操作。 现将其获取过程界面截图如下: (代码可见图中操作) ...

    在一些操作过程中,经常要获取词向量,BERT做为一个在各项评测指标中都比较出色的,且提供了许多预训练模型的,从其中获取词向量是一些任务中必备的操作。

    现将其获取过程界面截图如下:

    (代码可见图中操作)

    下面这个图,可以按照指定的词汇进行获取其词向量。

    展开全文
  • word2vec获取词向量,查找相似词

    千次阅读 2019-07-14 20:58:45
    word2vec获取词向量,查找相似词 首先安装gensim, 训练或者下载别人训练好的word2vec模型 # coding=utf-8 from gensim.models import Word2Vec from gensim.models import KeyedVectors #model = Word2Vec.load('...
  • 从xlnet预训练数据集中获取词向量

    千次阅读 2019-08-14 21:55:33
    如下展示了从XLNET预训练数据集中提取词向量的方法。 利用pytorch-transformers中的方法进行预训练模型加载,然后进行词向量获取和提取。
  • 自然语言处理的第一步就是获取词向量获取词向量的方法总体可以分为两种两种,一个是基于统计方法的,一种是基于语言模型的 基于统计的方法 基于统计的方法就是:用一个词语周边其他词语出现的次数来表示每一个词语...
  • pytorch 中加载 bert 模型, 获取 词向量

    千次阅读 2020-08-01 08:08:10
    bert-wwm RBT3 hfl/rbt3 RBTL3 hfl/rbtl3 下面为获取 词向量的完整代码 import torch #from pytorch_transformers import BertTokenizer,BertModel from transformers import BertTokenizer, BertModel #MODELNAME='...
  • 搜狗语料库word2vec获取词向量

    千次阅读 2019-09-19 10:04:14
    word2vec模型的原理这里不再讲解,网上随便一搜,可以找到很多教程,这里是给个实例,基于上面处理好的语料训练词向量,使用的工具是gensim中自带的word2vec模型。 import logging import gensim.models as ...
  • 使用BERT获取中文词向量

    千次阅读 热门讨论 2019-03-04 17:15:41
    BERT其中的一个重要作用是可以...然而BERT获取词向量的门槛要比word2vec要高得多。笔者在这里介绍一下如何获取BERT的词向量。 笔者在获取BERT词向量的时候用到了肖涵博士的bert-as-service,具体使用方式如下。 环境...
  • 主要介绍了python获取txt文件词向量过程详解,如何读取完整的大文件,而不会出现内存不足memery error等问题,将读取出来的文件,保存为npy文件,根据词找到对应的向量,需要的朋友可以参考下
  • 使用pytorch获取bert词向量

    千次阅读 2020-07-19 22:48:46
    本文主要为如何使用pytorch来获取bert词向量。 首先安装pytorch-pretrained-bert包: pip install pytorch-pretrained-bert 然后加载预训练模型 from pytorch_pretrained_bert import BertTokenizer, BertModel, ...
  • 使用gensim框架及Word2Vec词向量模型获取相似词预备知识Word2Vec模型下载加载词向量模型 预备知识 gensim框架 gensim是基于Python的一个框架,它不但将Python与Word2Vec做了整合,还提供了基于LSA、LDA、HDP的主体...
  • 最简单的方式获取ELMo得到的词向量

    千次阅读 热门讨论 2018-10-18 15:49:48
    本文的目的就是用最简单的方式获取 elmo 得到的word representation,看了一些其他人的介绍,其实最后对我有用的就这么多了,我只想要他生成的词向量。 简单介绍一下 elmo:Allen NLP在NAACL2018上的Best paper - ...
  • pytorch_transformers使用之获取bert词向量

    千次阅读 热门讨论 2019-08-21 12:33:47
    pytorch_transformers使用之获取 pytorch_transformers 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新...
  • 使用预训练的词向量 1. 加载词向量 # 加载训练好的词向量模型 import gensim Word2VecModel = gensim.models.Word2Vec.load(词向量模型所在路径) # 读取词向量 2. 构造包含所有词语的 list,以及初始化 “词语-...
  • 在Keras的Embedding层中使用预训练的word2vec词向量

    万次阅读 多人点赞 2019-05-15 15:54:32
    1.2 获取词向量2 转化词向量为keras所需格式2.1 获取所有词语word和词向量2.2 构造“词语-词向量”字典2.3 填充字典和矩阵2.4 在 keras的Embedding层中使用 预训练词向量*2.5 不使用“预训练”而直接生成词向量3 ...
  • 获取Word2vec训练得到的所有词与词向量

    万次阅读 多人点赞 2019-05-28 13:47:10
    5、最后就是写一个主函数,用于调用cut_txt函数实现分词,调用model_train函数产生词向量,并将获得的词及其对应的词向量按字典的格式写入文本文件中,另外还可以实现计算一些词之间的相似度以及获取其近义词功能。...
  • 3.如下Getw2v()代码块获取词向量 4. 使用词向量进行其他后续操作,如进行句子相似性判断,做命名实体识别等。以下代码是进行句子相似性判断的示例。 from pytorch_transformers import XLNetModel,XLNetCo...
  • Tensorflow—词向量

    2018-09-21 20:37:00
    一、Tensorflow构建流程 ...1.1 Tensorflow的基本总结 ...1.2 Tensorflow构建流程运行—保存模型—加载模型 ...二、语言模型和词向量 ...2 直接使用预先训练好的词向量如word2vec, glove 2.1 train文件中 2.2 m...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,935
精华内容 11,574
关键字:

获取词向量