特許データで自然言語処理(4)

前回のキーワードの頻度分析に引き続いてword2vecです。word2vecはある程度のボリュームのテキストから、ある単語の近辺に存在する他の単語の分布確率を低次元の特徴量のベクトルで表すことができるように学習するツールです。周囲に出現する他の単語の分布確率が似た単語は同じような意味合いを有する言葉と言うこともできますので、特許的に言うと、特許検索の際の類義語探索に用いることが期待されます。また、意味的な足し算・引き算が有効に機能するように見える場合もあるようです。例えば、東京から日本を引いてフランスを足した特徴量ベクトルに近い単語はパリになるというような事例があります。

word2vecの説明はこれくらいで、前回のZITの1件の特許データをword2vecで処理してみましょう。本来はこのような少量のテキストよりもある程度のボリュームで処理するものではありますが、操作のお試しとしてはこれくらいから始めるのがよいでしょう。また、国内ではまとまった量の特許のテキストデータを無料でスムーズに入手することは難しいという事情もあります。

まず、最初にword2vecで処理が可能なテキストデータを準備します。Jupyter上で処理してもよいのですが、楽なのでコマンドライン上でMecabのコマンドで処理を行います。

mecab -Owakati samplepatent.txt -o sampledata.txt

まず、最初にword2vecで処理が可能なテキストデータを準備します。Jupyter上で処理してもよいのですが、楽なのでコマンドライン上でMecabのコマンドで処理を行います。

samplepaten.txtは前回の1件の特許の詳細な説明のテキストデータで、上記のMecabのコマンドで処理した結果は、形態素解析で切り出したキーワードをスペースで区切った以下のようなデータになります。前回は品詞等の情報が付いていましたが、このコマンドでの処理ではこのような形態素解析処理になります。

【 発明 の 詳細 な 説明 】
【 技術 分野 】
【 0 0 0 1 】
本 発明 は 、 例えば 、 スマートフォン や 携帯電話 や タブレット 等 の 主 に 無線 により ネットワーク に 接続 可能 な 携帯 クライアント ( 携帯端末 ) に 、 肌 測定機 装置 を 接続 し 、 ネットワーク を 介し て データ を 送受 する こと により 、 肌 の 状態 の 測定 と 測定 結果 の 分析 と を 行う とともに 、 測定 結果 や 分析 結果 の データ ( 測定 データ 、 分析 結果 データ ) を 管理 する 肌 状態 測定 分析 情報管理 システム および 肌 状態 測定 分析 情報管理 方法 に関する 。

作成したこのテキストデータをword2vecで処理していきます。まずはgensimからword2vecをimport。

from gensim.models import word2vec
word2vecの処理用のテキストデータとして先ほど作成したsampledata.txtを設定します。
data = word2vec.Text8Corpus('sampledata.txt')
設定したdataに対してword2vecのモデル作成を実行させます。
model = word2vec.Word2Vec(data, size=200)
1件の特許データ全文程度なら、モデル作成は一瞬で終わります。モデル作成が終われば、特定のキーワードに対して、そのキーワードとよく似たワードベクトルを有するキーワード、すなわち周辺に出現するキーワードに分布が類似したキーワードを探索できます。
out=model.most_similar(positive=[u'データ'])
out
これらのコマンドで、「データ」に類似したキーワードは以下のようになります。
[('前記', 0.9969677925109863),
 ('た', 0.991806149482727),
 ('れ', 0.9905794858932495),
 ('結果', 0.9895579218864441),
 ('さ', 0.9857822060585022),
 ('特定', 0.9777529239654541),
 ('化粧品', 0.9774397611618042),
 ('分析', 0.9741998314857483),
 ('測定', 0.9731069803237915),
 ('ID', 0.9713792204856873)]
同様に「登録」に類似したキーワードは以下のようになります。
out=model.most_similar(positive=[u'登録'])
out
[('p', 0.9984594583511353),
 ('関連付け', 0.9982966780662537),
 ('とともに', 0.9981814622879028),
 ('手段', 0.9980460405349731),
 ('項目', 0.9977996349334717),
 ('ユーザー', 0.9976646900177002),
 ('認証', 0.9976398944854736),
 ('使用', 0.9972869157791138),
 ('られ', 0.9969701766967773),
 ('検索', 0.9967353343963623)]
同様に「化粧品」に類似したキーワードは以下のようになります。
out=model.most_similar(positive=[u'化粧品'])
out
[('特定', 0.999102771282196),
 ('情報', 0.9974192976951599),
 ('入力', 0.9970183968544006),
 ('記憶', 0.9962270259857178),
 ('さ', 0.9947283864021301),
 ('ID', 0.9940637350082397),
 ('使用', 0.9934926629066467),
 ('た', 0.992370069026947),
 ('顧客', 0.9923679232597351),
 ('当該', 0.9917648434638977)]
同様に「肌」に類似したキーワードは以下のようになります。
out=model.most_similar(positive=[u'肌'])
out
[('状態', 0.9966976642608643),
 ('情報管理', 0.9924602508544922),
 ('システム', 0.9908404350280762),
 ('装置', 0.989385724067688),
 ('診断', 0.9883158206939697),
 ('簡易', 0.9857101440429688),
 ('や', 0.9848286509513855),
 ('詳細', 0.9844359159469604),
 ('および', 0.9841267466545105),
 ('による', 0.9835302233695984)]
同様に「表示」に類似したキーワードは以下のようになります。
out=model.most_similar(positive=[u'表示'])
out
[('すなわち', 0.9993413090705872),
 ('コンバージョンレンズ', 0.9993192553520203),
 ('メニュー', 0.9993120431900024),
 ('機能', 0.9992128014564514),
 ('ユーザー登録', 0.9992063641548157),
 ('高く', 0.9989919662475586),
 ('行わ', 0.9989498853683472),
 ('行う', 0.9989293813705444),
 ('特', 0.9988886117935181),
 (',', 0.9988185167312622)]
単一の特許公報のテキストデータでword2vecの分析を行ったため、類似するキーワードというよりは、単に特許公報中で近くに登場することが多いキーワードを摘出したような結果になりました。
次回はもう少しボリュームのあるデータでword2vecの分析を行っていきたいと思います。
かなりのボリュームのあるデータで作成済みのword2vecのモデルというのも公開されているものがあります。例えば、こちらのサイト「word2vecの学習済み日本語モデルを公開します」には日本語wikipediaのデータから作成済みのword2vecモデルが公開されています。このような作成済みモデルを試してみることで、ある程度のボリュームがあるデータでのword2vecの挙動を実感できると思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

%d人のブロガーが「いいね」をつけました。