HR領域向け単語ベクトル Word2Vec

概要

「HR領域のワードベクトル」は、株式会社ビズリーチが提供する求人検索エンジン「スタンバイ」の求人データの一部を用いて学習したワードベクトルです。 word2vecの手法で生成した100次元、200次元のデータセットを提供します。

単語ベクトル

  • 学習求人情報数: 2,769,416
  • 学習単語数: 約9.95億
  • 単語ベクトル数:173,134
  • データフォーマット:Cバイナリフォーマット(gensim)
  • 学習パラメータ

  • 学習モデル: skip-gram
  • 単語分割:MeCab
  • ベクトルサイズ(size): 100
  • 反復回数(-iter): 3
  • 単語最低出現回数(min_count): 10
  • 文脈長(window): 2
  • 負例サンプリング (negative): 5
  • ダウンロード

    単語ベクトルの使い方

    ワードベクターデータを読み込み

    from gensim.models import Word2Vec
    MODEL_FILENAME = "../models/word_mecab_2858000_crawled_jobs.pkl"
    vectors = Word2Vec.load(MODEL_FILENAME)

    ワードのベクターを取得

    vec = vectors['Java']
    
    # ベクトルの空間数
    vec.shape
    
    # ベクトルの値を表示
    print(str(vec)[:98]+'...')
    [-0.32416266 -0.06502125 -0.45745352 -0.0723946  -1.0601064   0.19136839   0.24223328  0.96732855 ...

    もっとも似ているワード(トップ5)を取得

    vectors.most_similar('Java', topn=5)
    [('PHP', 0.9525939226150513),
    ('C#', 0.9413065314292908),
    ('JAVA', 0.932868480682373),
    ('Ruby', 0.9006732106208801),
    ('VB.NET', 0.8999553322792053)]

    Java のようなワードは OS の場合はどんな単語なのか?

    vectors.most_similar(positive=['Java', 'OS'], negative=['プログラミング言語'], topn=5)
    [('Linux', 0.8253071904182434),
    ('Windows', 0.8238546848297119),
    ('UNIX', 0.8097890615463257),
    ('Solaris', 0.7679286003112793),
    ('AIX', 0.767400324344635)]

    類似ワード取得

    # プログラミング言語名: `Java` ともっとも似ているワード
    vectors.most_similar('Java', topn=10)
    [('PHP', 0.9525939226150513),
     ('C#', 0.9413065314292908),
     ('JAVA', 0.932868480682373),
     ('Ruby', 0.9006732106208801),
     ('VB.NET', 0.8999553322792053),
     ('.NET', 0.8913622498512268),
     ('Perl', 0.8901201486587524),
     ('C++', 0.8897616863250732),
     ('VC++', 0.8855403661727905),
     ('Ruby on Rails', 0.8853485584259033)]
    
    # 会社名: `IBM` ともっとも似ているワード
    vectors.most_similar('IBM', topn=10)
    [('Microsoft', 0.7932759523391724),
     ('Citrix', 0.7671216726303101),
     ('CISCO', 0.761292040348053),
     ('富士通', 0.7600328326225281),
     ('サイボウズ', 0.7591862082481384),
     ('MSP', 0.7541582584381104),
     ('F5', 0.7506511211395264),
     ('Cisco', 0.7486007213592529),
     ('VMware', 0.7482091784477234),
     ('NetApp', 0.7415971755981445)]
    
    # OS名: `Windows` ともっとも似ているワード
    vectors.most_similar('Windows', topn=10)
    [('Linux', 0.9224971532821655),
     ('OS', 0.8986502885818481),
     ('UNIX', 0.8592408895492554),
     ('windows', 0.8481988906860352),
     ('Unix', 0.8474408388137817),
     ('WindowsServer', 0.8419466018676758),
     ('LINUX', 0.833821713924408),
     ('Server', 0.8194754123687744),
     ('AIX', 0.8190144300460815),
     ('MacOS', 0.8154371976852417)]
    
    # データベース名: `MySQL` ともっとも似ているワード
    vectors.most_similar('MySQL', topn=10)
    [('PostgreSQL', 0.9167165160179138),
     ('SQLServer', 0.8975719213485718),
     ('Apache', 0.8863031268119812),
     ('SQL Server', 0.879102349281311),
     ('Tomcat', 0.8696032762527466),
     ('Struts', 0.8693956136703491),
     ('MongoDB', 0.8665623664855957),
     ('ASP.NET', 0.8627827763557434),
     ('PHP', 0.8612982630729675),
     ('SQLite', 0.8584004640579224)]

    表示化

     from sklearn.manifold import TSNE
     import matplotlib.pyplot as plt
     import matplotlib.font_manager as font_manager
    
     FONTPATH = 'font/Osaka.ttc'
     def draw_2d_2groups(vectors, target1, target2, topn=100):
     	similars1 = [w[0] for w in vectors.most_similar(target1, topn=topn)]
    	similars1.insert(0, target1)
    
      similars2 = [w[0] for w in vectors.most_similar(target2, topn=topn)]
      similars2.insert(0, target2)
    
      print(similars1)
      print(similars2)
    
      similars = similars1 + similars2
    
      colors = ['b']+['g']*(topn)+ ['r']+['orangered']*(topn+1)
    
      X = [vectors.wv[w] for w in similars]
      tsne = TSNE(n_components=2, random_state=0)
      Y = tsne.fit_transform(X)
    
      prop = font_manager.FontProperties(fname=FONTPATH)
      plt.figure(figsize=(20,20))
      plt.scatter(Y[:, 0], Y[:,1], color=colors)
    
      for w, x, y, c in zip(similars[:], Y[:, 0], Y[:,1], colors):
          plt.annotate(w, xy=(x, y), xytext=(3,3), textcoords='offset points', fontproperties=prop, fontsize=16, color=c)
      plt.show()
    draw_2d_2groups(vectors, 'Java', 'アルバイト', topn=30)
    ['Java', 'PHP', 'C#', 'JAVA', 'Ruby', 'VB.NET', '.NET', 'Perl', 'C++', 'VC++', 'Ruby on Rails', 'PL/SQL', 'java', 'ASP.NET', 'Python', 'Swift', 'VB', 'COBOL', 'JavaScript', 'Linux', 'Objective-C', 'C/C++', 'Scala', 'MySQL', 'C言語', 'SQLServer', 'Struts', 'Oracle', 'Node.js', 'script', 'Rails']
    【①', 'パ・ア']
    draw_2d_2groups(vectors, 'IBM', 'JAVA', topn=30)
    ['IBM', 'Microsoft', 'Citrix', 'CISCO', '富士通', 'サイボウズ', 'MSP', 'F5', 'Cisco', 'VMware', 'NetApp', 'イントラマート', 'NEC', 'Oracle', 'Juniper', 'Dynamics', 'HULFT', 'NTTデータ', 'Hitachi', 'IBM', 'YAMAHA', 'LinuxOS', 'ORACLE', 'Vmware', 'WebSphere', 'ユニシス', 'AIX', 'OpenStack', 'RedHat', 'オラクル', 'VMWare']
    ['JAVA', 'Java', 'C#', 'VB.NET', 'PHP', '.NET', 'java', 'C++', 'VC++', 'PL/SQL', 'Ruby', 'Perl', 'COBOL', 'Objective-C', 'VB', 'ASP.NET', 'VBA', 'C/C++', 'Ruby on Rails', 'Swift', 'C言語', 'Scala', 'Python', 'オブジェクト指向言語', 'Linux', 'ColdFusion', 'スクリプト言語', 'JavaScript', 'Node.js', 'SQLServer', 'script']
    draw_2d_2groups(vectors, '会社', 'コミュニケーション', topn=30)
    ['会社', '企業', 'IT企業', '総合商社', '当社', 'コンサルティング会社', 'グループ会社', '商社', 'メーカー', 'システムインテグレーター', 'ジェイコム', '建設会社', '事業会社', 'パーク24', '制作会社', '物流企業', 'グローバル企業', 'ベンチャー企業', '不動産会社', '地場企業', 'ヒューマングループ', '関連企業', '企業グループ', '豆蔵', '設備会社', '大手企業', '警備会社', '中国新聞', 'ベンチャーバンク', '広告代理店', 'ハウスメーカー']
    ['コミュニケーション', 'コミニュケーション', 'コミュニュケーション', 'コミュケーション', 'コミュニ', 'コミニケーション', 'リレーション', '対話', 'ュニケーション', 'コミュニケー', 'コニュニケーション', 'ニケーション', '連携', '情報共有', 'コミュニケーシ', '密', '触れ合い', 'ケーション', '合意形成', 'ステークホルダ', 'ふれ合い', '交流', '疎通', 'コミュミケーション', '関係性', '接点', 'コミュニケーショ', 'コミュニケ', 'コミュニーケーション', '距離感', 'コンセンサス']
    draw_2d_2groups(vectors, '勤務', 'フルタイム', topn=30)
    ['勤務', '就業', '出勤', 'アルバイト勤務', '在社', '入り日', '4時間半', '不定', 'フルタイム', '時差出勤', '岡山県笠岡市', '岐阜県下呂市', '季節雇用', '①〜③', '時間労働', 'フルパート', 'お勤め', '新幹線通勤', 'or', '横浜西区', '三重県鳥羽市', '掛けもち', '千葉県印西市', '山形県新庄市', 'ホームオフィス', '常雇', '三重県亀山市', '三重県松阪市', '北海道伊達市', 'フルシフト', '兵庫県加東市']
    ['フルタイム', 'パートタイム', 'フルシフト', '時短', '早番', 'レギュラー', '二交代制', '勤務', '派遣さん', 'フルパート', 'フルタイム', '180時間', '遅番', '中抜け', 'アルバイト勤務', '掛けもち', 'チョコっと', '6時間', '4時間半', '長〜く', '!⇒【', '4時間', '36時間', '夜勤', '隔勤', '隔日', '176時間', '一昼夜', '短時間', '年契約', '扶養控除']
    draw_2d_2groups(vectors, 'フルタイム', 'パートタイム', topn=30)
    ['フルタイム', 'パートタイム', 'フルシフト', '時短', '早番', 'レギュラー', '二交代制', '勤務', '派遣さん', 'フルパート', 'フルタイム', '180時間', '遅番', '中抜け', 'アルバイト勤務', '掛けもち', 'チョコっと', '6時間', '4時間半', '長〜く', '!⇒【', '4時間', '36時間', '夜勤', '隔勤', '隔日', '176時間', '一昼夜', '短時間', '年契約', '扶養控除']
    ['パートタイム', 'フルタイム', 'フルシフト', 'フルタイム', 'フルパート', '二交代制', '内応', '時短', '扶養', '掛持ち', '掛けもち', 'パート', '専従', 'アルバイト勤務', '早番', '隔日', '枠内', '金土', '遅出', '①③', '遅番', '短時間', '。▼▽', '一昼夜', '①〜③', '隔勤', '~"。*☆/', '保育ママ', '夜勤', '午後13時', '派遣さん']