Groongaで学ぶ全文検索 2015-11-06 に参加した
cf. https://groonga.doorkeeper.jp/events/33701
2回連続欠席からの、渋谷開催に参加しました。
本日のテーマ
精度
精度 is ... ?
出席者のイメージは以下
- ユーザの満足度
- 思ったものが探せているかの度合い
- もれなくさがせているか
- ゴミがない
再現率と適合率
精度について論じると、再現率と適合率という話がよく出る。
再現率:答えを返せた割合
ハズレがあっても割合には影響しない
キーワードにマッチする文書が3つあったら、答えに3つ含まれていれば 100%.適合率:答えた内容にどれだけ正しい内容を含んでいるか
あてずっぽうで返すと適合率が低くなる
この 2 つはどちらかを上げるとどちらかが下がる関係にある
ex. 全文書返せば再現率 100% だがゴミが多いので適合率は下がる
どちらが重要、重視するかは 何のための検索なのか 、使い方による
ex. 特許検索は適合率より再現率が重要
とは言え ... 結果のすべてを利用者が精査するわけではなく、
結果上位で判断することがほとんどなので、現実的に重視されるべきは スコアづけ である。
スコアづけの考え方
- TF(Term Frequency):単語出現回数
- TFIDF(= TF inverted DF = TF/DF)
- DF(Document Frequency):(単語が含まれる)ドキュメント数
TFIDF は AND 検索、OR 検索におけるスコアづけに用いられる考え方。
TF が同値だった場合、DF が大きい値のキーワードより、DF が小さい値のキーワードのドキュメントが高スコアとして扱われる
教科書的には上記 2 つがよく用いられるが、他にもタグや位置情報といったメタデータを加味することで
(検索対象、用途によっては)より精度の高い結果が得られる
Groongaで学ぶ全文検索 2015-10-02 に参加した
cf. https://groonga.doorkeeper.jp/events/31859
どう使うか見てみよう !
参加者全員から「今の知識」と「どういう知識をつけられたらうれしいか」を聞いて内容を決め
た結果を反映し
今日は使ってみる !
受講者は Rails が身近だということで、講師のチョイスで題材は Mroonga となった。
シンプルに全文検索
Rails + MySQL で、全文検索してみる。LIKE 検索である。
LIKE 検索を全文検索だと捉えたことがなかったので新鮮だった。
MySQL では LIKE 検索を逐次検索として処理する。
このため、検索対象が増えると遅くなる
(検索エンジン考えるとき、検索に 1 秒かかるかどうかがひとつの判断基準)
閑話休題
MySQL との接続でトラブルあったが、以下で解消。
Rails mysql2でrake db:createがエラー問題 - Qiita
では、全文検索 !
Mroonga インストール。Mac OS X なら homebrew でインストールできる。
brew install https://raw.github.com/mroonga/homebrew/master/mroonga.rb --use-homebrew-mysql
インストールが済んだら、MySQL のストレージエンジンを Mroonga へ差し替える。
InnoDB へ Add-On するようなイメージを勝手にもっていたが
Mroonga は ストレージエンジン なので 差し替え になる。
- ALTER TABLE 句を使ってエンジン差し替え
cf. Mroonga コマンドリファレンス(以降もリファレンスより引用箇所あり)
ALTER TABLE table_name ENGINE = mroonga
- インデックス作成
- RDBMS と同じにインデックス張るだけ。
CREATE FULLTEXT INDEX index_name ON table_name(column_name, ...)
SELECT * FROM table_name WHERE MATCH(column_name) AGAINST("..." IN BOOLEAN MODE)
まとめ
Groongaで学ぶ全文検索 2015-09-18 に参加した
cf. https://groonga.doorkeeper.jp/events/31604
全文検索概要説明
input と output
"何かの仕組みを考えるときは input と output で考える"
- input
- クエリ
- キーワード
- output
- マッチした文書
探し方について
"検索対象文書を頭から検索する" のは効率が悪い
"辞書他書籍にあるような、索引 (index) " が効率を上げる手助けをする
検索エンジンはあらかじめ index を作っておくことで検索性能の向上を図っている
groonga は index をリアルタイムにつくる(そこが強み!)
では、index をどうやってつくるか
単純化のため、英語を例に考えると、空白区切りで単語を切り出し、
頭文字をキーとする index を作ればよい。
index 自体の構造も検索しやすいように作らないと、ボトルネックになる。
Groonga では検索対象が増えても遅くなりにくいのでバイナリサーチしている。
バイナリサーチするにはキーが何らかのルールで順序づけられることが前提となる。
性能という点ではハッシュ構造も挙げられるが
隣接するキーをも検索するようなケースには不向きとなる。
完全一致の検索(タグでの検索など)にはハッシュ構造が向いている。
実際のところ、隣接するキーも検索できることが求められるケース(前方一致など)が多い。
講座「アジャイルサムライの見積りと計画づくり」を受講しました
2014年3月7日(金)アジャイルアカデミーの講座「アジャイルサムライの見積りと計画づくり」を受講しました。 アジャイルアカデミーは「現場ですぐに取り入れられること」を重視した一日集中ワークショップ講座で構成されており、過去3回(3期)開催されています。 くわしくはこちら->トップ:アジャイルアカデミー
講座は講師と受講者の自己紹介の後、受講者のアジャイル実践度合いを確認することから始まりました。 今回は「自身の現場は非アジャイル。これから導入していきたい」という受講者が60%くらい。
「ワークショップは参加者同士で話し合うことも大事。黙っていたらダメ! 声出していこー!!」と アジャイル開発について思うことを書き出し、共有しました。 カテゴライズすると、
- 理念
- あるべき姿
- 導入
- チームビルディング
- 育成
受講者それぞれが、会社ではまとめる/ひっぱる立場にあることを感じる内容でした。 午前の部は「使う人に価値のあるものを作ることが大事」というアジャイルの理念を講師が確認して終了です。
午後は受講者がチームとなって
- 計画
- 実施
- ふりかえり
を体験できる「紙ヒコーキを飛ばそう」に取り組みました。 4イテレーション実施しましたが、イテレーションを重ねるごとに 見積り精度も上がり、実績も向上。ふりかえりでも様々なアイデアが出ました。 オトナが真剣に紙ヒコーキ飛ばしに熱中した、貴重な時間にもなりました。
ソフトウェア開発の見積りは、紙ヒコーキほどシンプルではないけれど
- 「相対」見積りなのだから、ポイントは大中小がわかればよい
一方、私も含め、受講者が疑問に思っていた「不確実性のコーン」への対応については アジャイルの文脈からは外れるとのことでしたが、講師の経験談から
- 「わかること」と「わからないこと」の腑分けをし、見積りに幅をもたせること
で一定の対応をしてきた、とのアドバイスをいただきました。
また、「わからないからやってみよう、アジャイルだし」も度が過ぎると問題であり
- 要件が詰まっているか
- 完了条件が明確かつ共有されているか
以上のような、着手可能 (=Ready) であるかが大事であるとし 総括として、チームで取り組み、チームとして終わらせることが大事と締めくくられました。
講座タイトルこそ「見積りと計画」とありますが、 アジャイルに関して興味/疑問があれば、迷わず受講してみるとよいと思います。 受講の際は「現場の困りごと」を持参すると、なおよいでしょう。講師の大好物だそうですよ。