CreateField Blog

オープンソースを使って個人でWebサービスを開発・運営していたブログ

Groongaからword2vecを使って類似文書を取得してみる

Groonga Advent Calendar 2015の13日目の記事です。

全文検索エンジンGroongaからword2vecを簡単に使えるプラグイン - CreateField Blog こちらで作ったプラグインのsentence_vectorsオプションを試してみました。

naoa/groonga-word2vec · GitHub

  • 学習ファイル生成
dump_to_train_file docs companies_[company:],categories_[category:],title/,body/@$ \
  --filter 'year >= 2010' --sentence_vectors 1

130万文書ぐらい

  • 学習
word2vec_train --min_count 1 --window 20 --cbow 0 --threads 12 --iter 10 --sentence_vectors 1
  • 元の文書
> select docs --filter "_id == 10876407" --limit 1 --offset 0
--n_sort 1 --output_columns app_id,title,company,body --output_pretty yes
[
  [0,1449906004.79365,0.00154924392700195],
  [
    [
      [1],
      [
        ["app_id","ShortText"],
        ["title","LongText"],
        ["company","company"],
        ["body","LongText"]
      ],
      [
        "JP20100000014",
        "画像形成装置、印刷データ生成装置、プログラム、及び印刷データ生成方法",
        [
          "コニカミノルタビジネステクノロジーズ株式会社"
        ],
        "複数の演算部を用いてPDLデータから印刷データを生成する際の処理速度を向上させる。
【解決手段】本発明に係る画像形成装置は、PDLデータを受信する受信部と、複数の演算部を有し、
前記複数の演算部のそれぞれがページ単位で処理を行うタスク又はバンド単位で処理を行うタスクを
実行することにより、前記PDLデータに基づいて印刷データを生成する画像処理部と、前記PDL
データを解析して印刷ページ数を取得し、当該取得された印刷ページ数に応じて、前記ページ単位で
処理を行うタスクと前記バンド単位で処理を行うタスクのそれぞれに割り当てる前記演算部の数を
動的に設定する制御部と、前記生成された印刷データに基づき印刷媒体に画像を形成する印刷部と、
を備える。【選択図】図5A"
      ]
    ]
  ]
]
  • 類似文書
> word2vec_distance "doc_id:10876407" --sentence_vectors 1
 --limit 10 --offset 0  --n_sort 10 
 --table ftext --column app_id,title,company,body --output_pretty yes
[
  [0,1449906234.40363,1.26499772071838],
  [
    [10],
    [
      ["app_id","ShortText"],
      ["title","LongText"],
      ["company","company"],
      ["body","LongText"]
    ],
    [
      "JP20100000012",
      "画像形成装置、印刷データ生成装置、プログラム、及び印刷データ生成方法",
      [
        "コニカミノルタビジネステクノロジーズ株式会社"
      ],
      "(57)【要約】【課題】複数の演算部を用いてPDLデータから印刷データを生成する場合に、
印刷対象となる個々のPDLデータに応じて最適な演算部の割り当てを行うことを可能とする。
【解決手段】本発明に係る画像形成装置は、PDLデータを受信する受信部と、複数の演算部を有し、
前記複数の演算部のそれぞれが前記PDLデータの言語解析処理又は前記言語解析処理後のラスタライズ
処理を実行することにより、前記PDLデータに基づいて印刷データを生成する画像処理部と、前記
PDLデータに基づいて前記ラスタライズ処理の重み値を算出し、当該算出された重み値に応じて、
前記言語解析処理と前記ラスタライズ処理のそれぞれに割り当てる前記演算部の数を動的に設定する
制御部と、前記生成された印刷データに基づき印刷媒体に画像を形成する印刷部と、を備える。
【選択図】図5A"
    ],
    [
      "JP20110129405",
      "画像形成装置、画像形成方法、及びコンピュータプログラム",
      [
        "キヤノン株式会社"
      ],
      "【要約】【課題】 1ページを複数のブロックに分割するための処理の負荷を分散させる。
【解決手段】 PDLデータから中間データを生成する処理と、中間データを画像データに変換する
処理とを、別々のハードウェア(CPU106、描画処理H/W109)で実現する。CPU106は、
複数のバンドに分割された中間データを生成する。描画処理H/W109は、1つのバンドを複数の
ブロックに分割し、各ブロックの画像データを生成する。【選択図】 図1"
    ],
    [
      "JP20100228837",
      "画像形成装置、画像処理方法、プログラム",
      [
        "株式会社リコー"
      ],
      "【要約】【課題】描画部の監視を必要としないで描画部への描画範囲の割り当てを動的に行う
ことができる画像形成装置及び画像処理方法を提供すること。【解決手段】外部から取得した印刷データ
の画像を転写媒体に印刷する画像形成装置150であって、印刷データを解析し、描画対象とされる
オブジェクトの描画命令をページ毎に記述した描画命令データを生成する描画命令生成手段12と、
描画命令データを記憶する描画命令データ記憶手段15と、描画命令データを読み出して、予め分割
されている描画範囲に対応づけられた描画命令を実行して描画処理する複数の描画処理手段302と、
第一の描画範囲の描画処理が終了した第一の描画処理手段から描画終了の通知を受けた第二の描画
処理手段が第二の描画範囲を分割して、第一の描画処理手段に第二の描画範囲の一部の描画を要求する
描画範囲制御手段303を有する。【選択図】図1"
    ],
    [
      "JP20120013853",
      "画像処理装置,画像形成装置及び画像処理方法",
      [
        "セイコーエプソン株式会社"
      ],
      "【要約】【課題】複数種類のフォーマットの画像データを所定形式の変換データに変換
する画像処理装置において、処理を効率的に行う。【解決手段】画像データの印刷要求を入力し、
入力された印刷要求で要求された印刷対象の画像データのフォーマットを判定し、判定された
フォーマットに応じて、変換処理に用いられるリソースを確保する処理でありフォーマット毎に
異なる所定のリソース確保処理としてのフォーマットA用リソース確保処理又はフォーマットB用
リソース確保処理を実行する(ステップS100〜S240)。続いて、判定されたフォーマット
に応じて、確保されたリソースを用いて印刷対象の画像データから変換データを作成する変換処理
を実行する(ステップS250)。そして、判定されたフォーマットに応じたリソースが既に確保
されているときには(ステップS130,S190でYES)、変換処理前のリソース確保処理を
省略する。【選択図】図2"
    ],
    [
      "JP20130191649",
      "画像形成装置、画像形成装置における画像処理方法及びプログラム",
      [
        "株式会社リコー"
      ],
      "【要約】【課題】  プリンタ描画の初期化処理を高速に行うことで、画像形成効率を向上
させる。【解決手段】画像形成装置であって、フレームメモリ211aに記憶したビットマップ
イメージを、当該ビットマップイメージを生成した印刷データに基づき消去する、それぞれクリア
処理部206の第1の消去手段及び前記フレームメモリ211aに記憶したビットマップイメージ
を全面消去する第2の消去手段と、第1または第2の消去手段によりフレームメモリ211aに
記憶されたビットマップイメージの消去に掛かる時間と、次に記憶するビットマップイメージの
生成に掛かる時間を比較する比較手段204aと、前記比較手段204aの比較結果に基づき、
当該生成されたビットマップイメージの消去手段として、第1または第2の消去手段のいずれかを
選択する選択手段204bを有する。【選択図】図2"
    ],
    [
      "JP20130192449",
      "印刷システム、印刷方法および印刷プログラム",
      [
        "コニカミノルタ株式会社"
      ],
      "【要約】【課題】印刷の全体処理時間を短縮できる印刷装置を提供する。【解決手段】
複数の描画用オブジェクトの画像データおよび印刷設定を含む印刷ジョブから、印刷ジョブに
属する各ページにおける前記描画用オブジェクト毎の配置位置情報および描画用オブジェクト
毎に必要な画像生成機能を解析して、解析結果情報を生成する解析部と、異なる画像生成機能
を有し、描画用オブジェクトの画像データから印刷用画像データを生成可能な複数の画像生成部と、
解析結果情報に基づいて、描画用オブジェクトの画像データおよび配置位置情報を、それぞれ
必要な画像生成機能を有する画像生成部に振り分ける振分部と、複数の画像生成部において
生成された複数の印刷用画像データおよび対応する配置位置情報を収集して、解析結果情報に
基づいて、ページ単位に印刷用画像データを合成して、ページ画像を生成する合成部と、ページ
画像を印刷する印刷部と、を有する。【選択図】図13"
    ],
    [
      "JP20120024523",
      "画像形成装置、その制御方法、及びプログラム",
      [
        "キヤノン株式会社"
      ],
      "【要約】【課題】複数ページの画像出力を行う際に、当該複数ページ間の出力形態に
応じた関連性をプレビュー表示する画像形成装置、その制御方法、及びプログラムを提供する。
【解決手段】本画像形成装置は、印刷データの設定情報から、ページ間における出力形態に
応じた所定の関連性を解析し、所定の関連性が特定されたページについては、当該所定の関連性
を有する複数のページをグループとしたプレビュー画像を生成し、所定の関連性が特定され
なかったページについては、当該ページのみのプレビュー画像を生成し、プレビュー画像を
ページ順に表示部に表示する。【選択図】図3"
    ],
    [
      "JP20110015400",
      "画像形成装置、画像形成装置の制御方法、プログラム",
      [
        "キヤノン株式会社"
      ],
      "【要約】【課題】 複数のレコードを含むVDPジョブにおいて有効な試し印刷が可能
な画像形成装置を提供する。【解決手段】 VDPジョブを処理するプリンタ103であって、
試し印刷ジョブであると判定されたVDPジョブに含まれる複数のレコードのうち一部の
レコードを試し印刷をプリンタ部407に行わせ、一部のレコードの印刷が行われた後に、
印刷されていないレコードの印刷指示を受け付け、受け付けた印刷指示に応じて、試し印刷
により印刷されていないレコードの印刷をプリンタ部407に行わせる制御部403と有する。
【選択図】 図5"
    ],
    [
      "JP20140008836",
      "印刷制御装置の制御方法、印刷制御装置の制御プログラム、および印刷制御装置の制御プログラムを記録したコンピューター読み取り可能な記録媒体",
      [
        "コニカミノルタ株式会社"
      ],
      "【要約】【課題】クライアントPCのユーザーが、編集対象のジョブを簡単に見つける
ことを可能にする印刷制御装置の制御方法を提供する。【解決手段】本発明の印刷制御装置の
制御方法は、印刷制御装置の記憶部に記憶されている一のジョブについて、ラスタライズ処理
を実行してジョブ識別用の画像データを生成するステップS107と、ジョブ識別用の画像
データが生成された後、記憶部に記憶されているジョブの中に、ジョブ識別用の画像データが
未生成のジョブがあるか否かを判断するステップS108と、ジョブ識別用の画像データが
未生成のジョブがあると判断される場合、ステップS107およびステップS108を繰り返す
一方で、ジョブ識別用の画像データが未生成のジョブがないと判断される場合、ジョブ識別用の
画像データが生成済みのジョブについて、ラスタライズ処理を実行してジョブ編集用の画像
データを生成するステップS111を有する。【選択図】図8"
    ],
    [
      "JP20110137220",
      "画像形成装置、画像形成装置の制御方法、及びプログラム",
      [
        "キヤノン株式会社"
      ],
      "【要約】【課題】PDLデータの複数ページを並列で処理する画像形成装置における
PDLデータの処理状況を適切にユーザに提示すること。【解決手段】PDLデータの複数
ページを並列で処理する画像形成装置101は、出力モードとして、印刷データの処理と
印刷出力を並行して実行する第1出力モード(RIP while Print)、又は、全ページについて
印刷データの処理が完了してから印刷出力を実行する第2出力モード(RIP then Print)の
設定入力をユーザから受け付けて、不揮発性メモリに保持しておく。そして、画像形成装置
101は、出力モードが第1出力モードの場合、PDLデータの処理が完了したページの中で、
連続出力可能ページ数として1ページ目から連続したページ番号の最大値を特定できる情報を
ユーザに提示する。また、出力モードが第2出力モードの場合、展開済ページ数としてPDL
データの処理が完了しているページの数を特定できる情報をユーザに提示する。【選択図】図1"
    ]
  ]
]

このプラグインでは元のテーブルとカラムを指定することにより、テーブルの内容を出力することができます。

  • 元の文書2
> select ftext --filter "_id == 10876408" --limit 1 --offset 0
--output_columns app_id,title,company,abstract --output_pretty yes
[
  [0,1449913923.39666,0.000921726226806641],
  [
    [
      [1],
      [
        ["app_id","ShortText"],
        ["title","LongText"],
        ["company","company"],
        ["abstract","LongText"]
      ],
      [
        "JP20100000015",
        "心室の拡張機能を改善するためのインビボ装置",
        [
          "コルアシスト カルジオヴァスキュラー リミテッド"
        ],
        "(57)【要約】【課題】生体の臓器または組織に内科的または外科的装置を
接続するために適した接続要素を提供すること。【解決手段】薄い織物のパッチの
形態のガードルを含み、そのガードルの側方の端部から延びた複数のタブが反対側
のものと対をなすように配置され、各タブはその反対側のものと結合することができ、
それによりループを形成し、該ループ内に、該臓器または組織と接続されることとな
る装置の一部分を挿入する接続要素。【選択図】図11"
      ]
    ]
  ]
]

*類似文書例2

> word2vec_distance "doc_id:10876408" --sentence_vectors 1 --limit 5 --offset 0
 --n_sort 5 --prefix_filter "doc_id:"
 --table ftext --column app_id,title,company,abstract --output_pretty yes
[
  [0,1449919740.36363,1.23700165748596],
  [
    [5],
    [
      ["app_id","ShortText"],
      ["title","LongText"],
      ["company","company"],
      ["abstract","LongText"]
    ],
    [
      "JP20150021968",
      "心臓病態を治療するための補助及びリコイル機能を備える二相性及び動的調整可能サポートデバイス及び方法",
      [
        "ザ  テキサス  エー  アンド  エム  ユニヴァーシティー  システム",
        "コーイノーヴァ  インコーポレイテッド"
      ],
      "【要約】【課題】心臓の成長及びリモデリングのための、回復及び自然に
潜在的リハビリとなる機械的環境を最適化するように設計された機械的配向デバイス
及び療法を提供する。【解決手段】鬱血性心不全及び関連する心臓病態に罹患している
患者に移植されるように適合した直接心臓接触デバイスであって、心室補助、心室
サポート及び拡張期リコイルを提供する、又は心室サポート及び拡張期リコイル
のみを提供する手段を有する心臓デバイスである。【選択図】図1"
    ],
    [
      "JP20130542174",
      "装着用ガイドルーメン",
      [
        "アビオメド  インコーポレイテッド",
        "タオ  ゼンホン",
        "ボーガン  ステファン",
        "モンゴー  マリー‐イブ"
      ],
      "【要約】心臓内ポンプデバイスの中を第一の開口部から第二の開口部まで
延在しているガイドワイヤ通路を有する該ポンプデバイスと;該ポンプデバイス
の外部に位置する第一の末端を起点に、ポンプデバイスの第一の開口部を通って
該ポンプデバイスの中に入り、ガイドワイヤ通路に沿って延び、第二の開口部を
通って該ポンプデバイスから出て、該ポンプデバイスの外部に位置する第二の
末端まで延在しているルーメンとを含む装置を開示する。ルーメンは、該ルーメン
の中をガイドワイヤが第一の末端から第二の末端まで通るときに該ガイドワイヤが
前記通路に沿って配置されるように、ガイドワイヤを収容すべく構成されている。"
    ],
    [
      "JP20120511994",
      "マルチルーメンカニューレ",
      [
        "ソラテック コーポレーション"
      ],
      "【要約】本出願は、血流を血液ポンプレシピエントに提供するための
方法及び材料に関する。例えば、哺乳動物の循環系に接続し、血液ポンプ(12)
(例えば、補助装置)と共に使用することができる、カニューレ(11)を提供
する。【選択図】図3"
    ],
    [
      "JP20140525200",
      "カウンターパルセーション及び血流導管の結合のための装置、方法、およびシステム",
      [
        "アビオメド  インコーポレイテッド",
        "クン  ボブ",
        "グラッツ  エリック",
        "ザイス  トーステン",
        "シュパニアー  ゲルト",
        "スペンス  ポール",
        "ダウリング  ロブ",
        "ヘイスティー  ケイトリン"
      ],
      "【要約】内腔の第一の部分を画定する第一の導管部分と、内腔の第二の
部分を画定する第二の導管部分とを含む、血流導管を開示する。第一または
第二の導管部分のうち少なくとも一方が先端部分を含み得、第一または第二の
導管部分のうちもう一方が、膨らんだ領域を含み得る。"
    ],
    [
      "JP20110123146",
      "カニューレおよび補助循環装置",
      [
        "国立大学法人 東京大学",
        "ニプロ株式会社"
      ],
      "【要約】【課題】血液の補助循環における循環効率の向上を図ることが
可能なカニューレおよび補助循環装置を提供する。【解決手段】先端31および
基端32,33を有する管状に構成され、先端31側には第1開口部11および
第2開口部21が設けられ、補助循環を行なうために先端31が心臓60に直接
穿刺された状態においては、第1開口部11は大動脈66内に位置し、第2開口部
21は心室64内に位置するカニューレ100は、第1開口部11を含み、
第1開口部31から基端32に向かって延在する第1内腔10と、第1開口部11
よりも基端33側の部分に形成された第2開口部21を含み、第2開口部21から
基端33に向かって第1内腔10と並んで延在する第2内腔20と、を備える。
【選択図】図6"
    ]
  ]
]

Patricia Trieを使ってdoc_id:のベクトルのみを距離演算していますが、130万件ほどの文書に対して1.3secぐらいかかっています。 もし使うなら、もうちょっと高速化したいところだなぁ。

結果はそこそこ分類されていますが、この結果だともうちょっと頑張らないとって感じかなぁ。