Redmine検索のn未来像

: author

須藤功平

: institution

株式会社クリアコード

: content-source

redmine.tokyo第17回

: date

2019-11-02

: start-time

2019-11-02T14:25:00+09:00

: end-time

2019-11-02T14:45:00+09:00

: theme

groonga

Redmine検索の未来

全文検索プラグインn (('note:((<URL:github.com/clear-code/redmine_full_text_search>))'))

従来の検索システム

* SQLの標準機能で実現
  * 比較条件+LIKE
* 例:
  * プロジェクト絞り込み:等価条件
  * コメント検索:LIKE

未来の検索システム

* 全文検索エンジンで実現
  * 全文検索だけでなく比較条件もすべて
* 例:
  * プロジェクト絞り込み:等価条件
  * コメント検索:全文検索

従来の検索システムの課題

速度とソート

速度

* コメント増加→検索時間増加
* 検索への期待
  * ((*すばやく*))必要な情報を見つけたい
* 遅いと期待に応えられない

ソート

* 更新時刻のみ
* 検索への期待
  * すばやく((*必要な*))情報を見つけたい
* 最新の情報≠必要な情報
* 必要な順にソートしないと\n
  期待に応えられない

未来の検索システム

* 速度
  * コメント増加→検索時間超微増
  * ((*すばやく*))必要な情報を見つけられる
* ソート
  * 更新時刻+適合度
  * すばやく((*必要な*))情報を見つけられる

未来の検索システムの改善点

高速さと高精度

未来の検索システムのさらなる改善点

* 検索対象を追加
* クリックで絞り込めるUI
* 表現の揺らぎに対応
* 定量的な検索機能の評価基盤

検索対象を追加

* メタデータ
  * ステータス・トラッカー・ユーザー・…
* 添付ファイル・リポジトリー内のファイル
  * PDF・オフィス文書からもテキスト抽出
  * アーカイブも展開して再帰的にテキスト抽出

メタデータで検索

# img
# src = images/search-by-metadata.png
# relative_height = 100

スライドプロパティー

: enable-title-on-image

false

クリックで絞り込めるUI

* ユーザー:なにを探しているかわからない
  * 検索システムとの対話の中で見つける
* 対話:検索結果+次のクエリーを提案
  * ユーザーと検索システムが一緒に答えを探す
* 提案されたクエリーで絞り込み

表現の揺らぎに対応

* 表現の揺らぎ:
  * 同義語:ネジとビス
  * 異表記:ネジと螺子
* クエリー拡張:
  * 検索前に自動でクエリーを拡張
  * ネジ→ネジ OR ビス OR 螺子

クエリー拡張:Groonga→Groonga OR PGroonga

# img
# src = images/query-expansion.png
# relative_height = 100

スライドプロパティー

: enable-title-on-image

false

表現の揺らぎのメンテナンス

* 手動はツライ。。。
  * 誰がやるの?
  * いつやるの?
* 自動化しないと陳腐化

未来の検索システムでのメンテナンス

自動化中

自動化方法

* 既知の情報を収集
  * 例:Wikipediaのリダイレクト情報
  * 例:NEologdの情報
* Redmine内の情報から学習

既知の情報を収集

* メリット:楽
  * スクリプトを準備する予定
* デメリット:
  * 一般的な言い回ししか集まらない
  * ドメイン固有の言い回しがない

Redmine内の情報から学習

* メリット:
  * ドメイン固有の言い回しに対応可
* デメリット:
  * 難しい

学習:検証中

(1) テキスト情報を抽出
    * 全文検索用に抽出した情報を活用
    * 自然言語っぽいものだけ選別して行に分割
(2) SentencePieceでトークナイズ
    * MeCabだとドメイン固有の未知語に対応できない
(3) BERT/fastTextでベクトル化
(4) 類似単語を揺らぎとして抽出

学習:現状(伸びしろしかない)

# img
# src = images/query-expansion-example.png
# relative_width = 100

スライドプロパティー

: enable-title-on-image

false

定量的な検索機能の評価基盤

* 定性的な評価(例:インタビュー)
  * 体感で速くなった!
  * 体感で見つかりやすくなった!
* 定量的な評価(例:ログ分析)
  * 利用ユーザーが○人
  * ユーザーが必要な情報を取得できた割合が○%

(('tag:center')) ログを追加し定量的な評価が可能に

定量的な評価基盤:現状

* Railsのログに記録
* スクリプトでログを解析してレポート

定量的な評価基盤:未来

* RDBMSに記録
* 管理画面でリアルタイムにレポート

未来の検索システムのn近い未来

さらなる高速化

* 常に1秒未満を目指す
* 検索システムとの対話ストレスをなくす
* インクリメンタル検索も現実的に
  * パカパカしてうるさいかもしれない
  * Googleはこの機能を捨てた
  * 定量的な評価をしながら取捨選択する予定

入力補完

* 入力中にクエリーを提案
  * Googleはこの機能にシフトした
* 課題:良質な補完候補の用意
  * Wikipediaなど一般的なデータを活用
  * Redmine内のデータから機械学習で生成
  * 極秘データの扱いに注意が必要

テキスト抽出可能ファイルの追加

* .msg(Outlookのファイル)
* SVGファイル
* CADファイル
* ...

Redmine検索の未来

全文検索プラグインn (('note:((<URL:github.com/clear-code/redmine_full_text_search>))'))

一緒に未来を作ろう!

* 仕事として一緒に開発
  * あなた:お金と要望とデータを提供
  * クリアコード:開発・コンサルティング
* 成果は自由なソフトウェアとして公開

連絡先n ((<URL:www.clear-code.com/contact/>))