nokunoの日記 このページをアンテナに追加 RSSフィード Twitter

2011-04-16

第2回さくさくテキストマイニング勉強会に参加しました #sakuTextMining

というわけで、第2回さくさくテキストマイニング勉強会にさくさく参加してきました。会場は前回に引き続きオラクルさん、の大会議室。200人入るらしい。節電中にも関わらず変わらずに無償のドリンクをご提供頂きありがとうございます(そこか。

言語処理学会へ遊びに行ったよ! 〜不自然言語処理へのお誘い〜 by @AntiBayesianさん

  • 自己紹介
  • 発表の目的
    • 学会で得た実務に使えそうな内容を紹介
    • 不自然言語処理へのお誘い
  • 学会へ遊びに行こう!
    • 学会に行けば、最新の情報がわんさか手に入る!
    • 仕事してもらったり仕事もらったり
  • 必ずチェックすべき10のブログ(易しい順)
  • 発表論文を7つ紹介
    • 飛ばします(ぇ
  • 総評・雑感
    • Wikipediaを利用してコーパス作成、カテゴライズが流行っている
    • Twitter特有のソーシャル性、即時性を使おう
    • FOBOSやpLSAを学部生が使ってる…
  • 不自然言語処理とは
    • Mecabで分析できる言語=自然言語?
  • 不自然言語処理コンテスト
    • baidu
    • スイカ割り
  • デモ(無線LAN不調につきスキップ)
    • Soramegraph
    • 誤字ェネレータ
    • 感情のこもった返答テンプレ生成君
    • ケンリブッジ大学
  • 論文紹介
    • 文頭固定法による効率的な回文生成
    • 顔文字情報と文の評価表現の関連性についての一考察
    • もっと不自然言語で遊ぼう!
  • 関根先生の言葉
    • 不自然言語処理こそ真の自然言語処理
    • すごい研究をしようとするのではなく、事業に役に立つ研究をしよう

今日から使えるみんなのクラスタリング超入門 by @toilet_lunchさん

  • @toilet_lunch
  • クラスタリングとは
  • クラスタリングの種類
    • 階層型
    • 非階層型
    • ソフトクラスタリング
  • k-means
  • アルゴリズム
  • bayonの紹介
  • k-meansが使えるとドヤ顔ができる!

概観テキストマイニング by @todeskingさん

  • この発表の目的:テキストマイニングのプロセスを定義する
  • 自己紹介:トデス子, id:gnarl
  • 仕事:Web系の受託開発
  • 興味:ソフトウェア設計、開発プロセスのはず
  • 勤務先:teamLab
    • ウルトラテクノロジスト集団
    • Javaエンジニア
    • 推薦エンジンをやっている
  • テキストマイニングとは
    • 大量のデータ:人間ではハンドリングできない規模のデータ
    • フリーテキスト:自然言語による記述、構造化されていないデータ
    • さまざまなノイズ:工夫が必要、前処理が必須、解析ミスがつきもの
    • 分かち書き、形態素解析、複合語抽出、係り受け解析、ルールベース
    • ノイズとの戦い:未知の用語、誤記、文法のバリエーション、テーマの非統一
    • 構造を解釈できれば、データマイニングの技術が適用できる
    • 構造化されたデータとの組合せ:日付、作者、タグ、数量
    • アウトプット:属性間の相関、似たアイテムの集合、全体の傾向など
    • 価値ある情報:行動の指針となる情報
    • プロセス:テキストマイニングとはより大きなビジネスプロセスの一部
    • マネーを生むテキストマイニング
    • 願わくば、あなたのテキストマイニングが誰かに価値をもたらすことを。ご清聴ありがとうございました。
  • テキストマイニングでお金を生むには?
    • モノを売る商売をするときに、技術を使って面白いものを作って人を集めるとか

WordNetで作ろう、言語横断検索 by @stakemuraさん

  • 背景
    • 社内Google Codeのようなものを考える
    • 登録されるプログラムが増え続けると、機能が沢山あっても何を使えばいいかわからない
  • 提案
    • 検索性能の強化
    • 推薦昨日の搭載
  • 改善方法
    • 日英翻訳
    • 同義語
  • システムの特徴
    • フィールドが多い:名称、作者名、概要、内容、マニュアルなど
    • ドキュメント規模は小さい:PC1台レベル
    • リンク解析などは不要
    • 検索システムは自前で構築:Luceneで十分かどうか不明だった
  • 言語横断検索のアプローチ
    • 3つのアプローチ:対訳辞書、対訳コーパス、機械翻訳
  • WordNet
    • もともとはプリンストンの辞書だった
    • 日本語WordNet:NICTが開発、SQLite3形式、対訳辞書として使える
  • 類義語の抽出
    • ワードネットから類義語の抽出が可能
  • 情報検索とは
    • 検索性能の尺度:再現率と適合率
    • 横断検索によって、再現率は改善したが適合率が低下した
  • ベクトル空間モデル
    • 単語の重みを考慮する
    • TF-IDF
  • Binary Independence Model
    • 確率モデルで実装
  • BM25
    • d_wを文章D内での単語wの出現回数とした場合
    • P(d_w): 2つのポワソン分布からなると考える
    • 文書長の平均が出てくる
  • BF25Fでやっと納得のいく結果が得られた
    • LuceneでのBM25F対応は難しい
  • まとめ
    • WordNetwを用いた日英横断検索
    • 情報検索基礎:TF-IDFからBM25まで
    • Luceneといえども万能ではない
    • N-gramデータによるストップワード管理
    • 対訳辞書がない場合のアプローチ

R言語によるはじめてのテキストマイニング by @yokkunsさん

  • 自己紹介:Rパッケージ本を執筆しました!
  • テキストマイニングとR言語
  • RMeCabとRCaBoCha:初心者には敷居が高い!
  • YjdnJlpパッケージ
    • Yahoo!のテキスト解析APIパッケージを使うパッケージ
    • Rだけでテキスト解析ができる
    • みんな持ってるアプリケーションID
    • 形態素解析
    • 係り受け解析
    • 特徴語抽出
  • コレスポンデンス分析をしてみる
    • 東京都知事選挙の文書を解析
    • caパッケージ
  • まとめ
    • Rには統計・機械学習の手法が揃っている
    • YjdnJlpは、手軽にテキスト解析ができる
    • Rを使いたくなった方はTokyo.Rへ!
  • 最後に
    • Tokyo.Rでは発表者を募集しています

「コレカモネット」のご紹介 by @tksさん

  • チームラボの話:11年目、150人、エンジニア70%の会社
  • Twitterボット:@korekamoに向かって質問する
  • ユニークな回答
  • 許してくれるキャラを作る
  • おもろく、評判になる回答の作り方
  • まとめ:テクノロジー×クリエイティブ

k-meansの実装

@toilet_lunchさんの発表を聞いて作りたくなったので、久しぶりにC++でk-meansを書いてみました。

#include <iostream>
using namespace std;

const size_t N = 4, D = 2, K = 2;
double data[N][D] = {{0,0}, {1,1}, {10,10}, {9,11}};


double distance(double a[D], double b[D]) {
  double result = 0.0;
  for (size_t i = 0; i < D; i++) {
    result += (a[i] - b[i]) * (a[i] - b[i]);
  }
  return result;
}

int main() {
  double center[K][D] = {{0,0}, {10,10}};
  size_t cluster[N] = {0, 0, 0, 0};
  while (true) {
    // update cluster
    bool update = false;
    for (size_t i = 0; i < N; i++) {
      for (size_t j = 0; j < K; j++) {
        if (distance(data[i], center[j]) < distance(data[i], center[cluster[i]])) {
          cluster[i] = j;
          update = true;
        }
      }
    }
    if (!update) break;
    // update center
    for (size_t i = 0; i < K; i++) {
      for (size_t j = 0; j < D; j++) {
        center[i][j] = 0.0;
      }
      size_t num = 0;
      for (size_t j = 0; j < N; j++) {
        if (cluster[j] == i) {
          for (size_t d = 0; d < D; d++) {
            center[j][d] += data[i][d];
          }
          num ++;
        }
      }
      for (size_t d = 0; d < D; d++) {
        center[i][d] /= (double)num;
      }
    }
  }
  // output cluster number
  for (size_t i = 0; i < N; i++) {
    cout << i << ": " << cluster[i] << endl;
  }
  return 0;
}

おわりに

第1回のときは「にこにこテキストマイニング」だった名称も(ニコニコ動画と関係あるかと勘違いされるので)第2回では「さくさくテキストマイニング」と変更になり、ますます盛り上がってきていていいなあ、と思います。勉強会の運営という意味でもがんばっており、来週のTokyoNLPで活かせたらいいなと思います。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。