分散表現公開
前回作った分散表現のバージョンアップ版(ver1.0)
特許版word2vec学習モデル(.model)214MB注意
特許版word2vec学習モデル(.model.wv.vectors.npy)3160MB注意
特許版word2vec学習モデル(.model.trainables.syn1neg.npy)3160MB注意
- 2013~2015年に日本国特許庁で発行された全公開公報(150万件ほど)の全文を用いて学習
- tokenizeはMeCab+NEologdです。
- 次元数は300次元
-
ただし、データが重すぎてエラーが出てcolaboratoryでは動かない場合があります。動作が確認できたのはGCEの n1-highmem-8 (8 vCPUs, 52 GB memory) です。これくらいのスペックがないと動かないかもしれません。
です。
model.corpus_count #77222
model.vector_size #300
len(model.wv.vocab) #2831509
使い方
使い方は他の公開モデルと大体同じ↓
上記3つのファイルを同じフォルダに入れて、
/path/to/model/patent_w2v_d300_20200208.modelを適宜ファイルの場所に置き換えてもらい、
使ってください。
from gensim.models.word2vec import Word2Vec
model_path = '/path/to/model/patent_w2v_d300_20200208.model'
model = Word2Vec.load(model_path)
読み込みできれば、分散表現を作るなり、
word=""
results = model.wv.most_similar(positive=[word])
for r in results:
print(r)
などで類似語を抽出するなり。
実験
2014年で既にword2vecモデルを作成、実験されたサイト(以下、「2014モデル」)があったので、それとの比較を。
※tokenizeや学習元のデータやパラメータが違うと思うので厳密な比較ではありませんが。
類似語
word = "情報処理装置" #@param {type:"string"}
results = model.wv.most_similar(positive=[word],topn=10)
wds =[]
for r in results:
wds.append(r[0])
print(" ".join(wds))
比較 | 今回モデル(類似度上位10) | 2014モデル |
---|---|---|
筆記具 | ボールペン マーキングペン シャープペンシル 筆記用具 万年筆 ボールペンレフィル 筆記 ペン先 プラスチックチップ レフィル | ボールペン 筆記 万年筆 消しゴム 水性ボールペン 水性インキ 筆記具用インキ 筆記用具 サインペン |
自動車 | 車両 自動車用 輸送機器 内装部品 車両用 自動車部品 内装材 自動車分野 産業機器 車載用 | 乗用車 オートバイ 車両 車輌 車輛 二輪車 乗り物 乗物 |
スマートフォン | 携帯電話 ノート型パソコン タブレット端末 モバイル機器 携帯情報端末 タブレットコンピュータ パソコン ノート型パーソナルコンピュータ ノートPC カーナビゲーションシステム | PDA 携帯情報端末 パソコン pda 携帯型コンピュータ カーナビ |
ラーメン | 激戦区 うどん 中華料理 春雨 稲庭うどん ロングパスタ そうめん ウドン 日本そば きしめん | うどん 味噌汁 スープ 麺類 麺 玉子 |
情報処理装置 | 演算処理装置 携帯型 ハードウェア構成 コンピュータ 制御装置 基板処理システム 処理システム 入力装置 CPU(CentralProcessingUnit) CPU | 情報処理システム データ処理装置 コンピュータ装置 多機能周辺装置 情報処理プログラム |
煩雑 | 面倒 高コスト 煩雑化 複雑 コスト高 煩雑さ 手間 繁雑 不要 非効率 | 繁雑 面倒 煩わしい 煩瑣 手間 |
円滑 | スムーズ 効率的 速やか スムース 確実 迅速 安定的 容易 効果的 定常的 | スムーズ スムース 確実 容易 迅速 速やか |
ラーメン⇒「激戦区」は明らかに類義語ではない・・・w
類推語
positive = "プリンタ,カメラ"
negative = "印刷"results= model.wv.most_similar(positive=positive.split(","), negative=negative.split(","), topn=5)
wds=[]
for r in results:
wds.append(r[0])
print("{}→({})".format(positive.split(",")[0]," ".join(wds)))
比較 | 今回モデル(類似度上位10) | 2014モデル |
---|---|---|
印刷→プリンタ 通信→? | 通信→(コントローラ 通信装置 CPU(CentralProcessingUnit) 外部装置 通信インターフェース) | 通信→(通信制御装置 LAN データ通信 無線通信回線 無線通信網 ゲートウェイ装置 通信機器) |
プリンタ→印刷 カメラ→? | カメラ→(デジタルカメラ 撮像装置 ビデオカメラ プリンター 着脱マウント) | カメラ→(撮影 撮像 被写体 撮像カメラ ステレオ撮影 テレビカメラ) |
今回のモデルを使って出力してみた他の例:
positive = "飛行機"
negative = "翼"
飛行機→(電車 オートバイ 乗り物 電動カート バイク)
positive = "水素自動車,電気自動車"
negative = "電池"
水素自動車→(燃料電池自動車 水素スタンド 天然ガス自動車 圧縮天然ガス ハイブリット自動車)
positive = "信州"
negative = "蕎麦"
信州→(日刊工業新聞 誠文堂新光社 アンダーラボラトリーズ 技報堂 宝島社)
positive = "人間,ロボット"
negative = "心"
人間→(操作者 ロボットアーム ユーザ 作業者 使用者)
人間から「心」を取ると「作業者」や「使用者」になってしまうのですな。心しようと思いました。
その他
そのうちこんな形の実験しないとです。