1.04k likes | 1.18k Views
テキストマイニングのための 基礎技術(前編). 北陸先端科学技術大学院大学 鶴岡 慶雅. スケジュール. 1 日目 10:00 – 12:00 データ構造、辞書、 索引付け 12:00 – 13:00 昼食休憩 13:00 – 14:45 実習(検索エンジンの作成) 14:45 – 15:00 コーヒーブレイク 15:00 – 16:30 ベクトル空間モデル 資料 http://www.jaist.ac.jp/~tsuruoka/alaginseminar2010/. スケジュール. 2 日目 10:00 – 12:00 データマイニング入門、機械学習
E N D
テキストマイニングのための基礎技術(前編)テキストマイニングのための基礎技術(前編) 北陸先端科学技術大学院大学 鶴岡 慶雅
スケジュール • 1日目 10:00 – 12:00 データ構造、辞書、索引付け 12:00 – 13:00 昼食休憩 13:00 – 14:45 実習(検索エンジンの作成) 14:45 – 15:00 コーヒーブレイク 15:00 – 16:30 ベクトル空間モデル 資料 http://www.jaist.ac.jp/~tsuruoka/alaginseminar2010/
スケジュール • 2日目 10:00 – 12:00データマイニング入門、機械学習 12:00 – 13:00 昼食休憩 13:00 – 14:45 実習(クラスタリング、機械学習) 14:45 – 15:00 コーヒーブレイク 15:00 – 16:30 機械学習(続き) 資料 http://www.jaist.ac.jp/~tsuruoka/alaginseminar2010/
参考書 • Introduction to Information Retrieval • Manning, Raghavan and Schütze • Cambridge University Press. 2008. • http://nlp.stanford.edu/IR-book/information-retrieval-book.html • The Elements of Statistical Learning (2nd edition) • Hastie, Tibshirani and Friedman • Springer-Verlag. 2008 • http://www-stat.stanford.edu/~tibs/ElemStatLearn/
自己紹介 • 経歴 • 東京大学工学系研究科(工学博士) • 東京大学理学部 • 科学技術振興機構 研究員 • University of Manchester • National Centre for Text Mining (NaCTeM) • 北陸先端科学技術大学院大学 • 研究分野 • 自然言語処理 • テキストマイニング • ゲームAI
激指(げきさし) • コンピュータ将棋プログラム • 2010年世界コンピュータ将棋選手権優勝(4度目) • 機械学習を用いた探索制御、形勢判断 • レーティング:約3000点(プロ棋士レベル) Windows XP/Vista/7 PlayStation2 PSP ニンテンドーDS
デモ • FACTA+ • 医学・生物学文献用の情報検索システム • 1700万文献 • 概念間の直接・間接的な関係を検索 • http://refine1-nactem.mc.man.ac.uk/facta/
デモ • GENIA tagger • 英語用の言語処理ツール • Tokenization • 品詞タグ付け • 原型の出力 • 浅い構文解析 • 固有表現認識 http://www-tsujii.is.s.u-tokyo.ac.jp/GENIA/tagger/
テキスト処理のためのデータ構造 • 文書⇒数値列 • ハッシュテーブル • 辞書 • Nグラム • 転置インデックス • 接尾辞配列
文字列から数値列へ • 文字列をそのまま扱うのは速度・メモリ効率が悪い • 文字列を数値列に変換
入力を単語に分割(英語) • Tokenization Humpty Dumpy sat on a wall, Humpty Dumpy sat on a wall , • ルールベースのスクリプト • カンマ、ピリオド、括弧などを切り離す • Tokenizer.sed • http://www.cis.upenn.edu/~treebank/tokenizer.sed
入力を単語に分割(日本語) • 単語分割 すももももももももものうち すもも も もも も もも の うち • 曖昧性が大きく英語よりもはるかに難しい • 統計、機械学習を用いた手法が主流 • MeCabhttp://mecab.sourceforge.net/ • JUMAN http://www-lab25.kuee.kyoto-u.ac.jp/nl-resource/juman.html
単語列から数値列へ 入力単語列 (tokenization済) 数値列
単語と数値の対応表 • 出現した単語列の辞書をつくる必要 • 単純に配列に格納すると、辞書引きのたびにO(n) の計算量(nは辞書中の単語数) Humpty Dumpty sat on a wall Humpty Dumpty had a great fall …
連想配列 • 添え字に文字列を使える配列 例(Python) dictionary.has_key(’Humpty’) dictionary[’Humpty’] = 2 • 辞書引きの計算量 • O(1): ハッシュテーブルによる実装 • O(log n): 平衡2分探索木などによる実装 • 多くのプログラミング言語で標準装備
ハッシュテーブル(HashTables) ハッシュテーブル 文字列 数値(ハッシュ値) • 文字列をハッシュ関数を用いて適当な数値に変換 • ハッシュテーブルのサイズで余りをとると、テーブル上での位置が一意に決まる • O(1) の計算量で辞書引きができる Humpty 261 inthash_function(string s) h = 0 for i = 0 to s.length h = h * 101 h = h + s[i] return h% hashtable.size 適当な素数
ハッシュテーブル • 衝突(collision) • 違う文字列から同じハッシュ値が計算されてしまうことがある • チェイン法(chaining) • エントリをリストへのポインターにして複数の要素を保持する • オープンアドレス法(open addressing) • 空のエントリを探す
トライ木(Trie) k • 前方一致検索が効率的に実行できる • 実装: ダブル配列(double array)など back c a b l l ball t bat c u t cut
索引付け(indexing) • 情報検索 • クエリーにマッチする文書を取得 • 基本操作:ある単語が出現する文書すべてを取得 • 文書を頭から単純にスキャンするのは、文書量が増えると遅くなる
転置インデックス(inverted index) • 単語ごとにそれが出現する文書IDのリスト 転置インデックス
全文検索 • 転置インデックスなどの単語ベースの索引付けでは、全文検索ができない • 全文検索 • クエリーの文字列が出現している場所をすべて見つける • 単語区切りの境界は関係なし
接尾辞配列(suffix array) abracadabra 文書 Suffix Array Suffixの辞書順 にソート
接尾辞配列(suffix array) abracadabra 文書 Suffix Array 文書中から raが出現する位置 をすべて知りたい場合 SuffixArray 上で2分探索 1 O(log n) で検索できる! 2 3
実習1 検索エンジンの作成 • ファイルから文書集合を読み込む • 文書を単語列に変換 • 転置インデックスを作成 • クエリー(単語)にマッチする文書を返す • 余裕があれば全文検索も
ベクトル空間モデル • ベクトル空間モデル • tf-idf • 類似度 • 再現率・適合率
ベクトル空間モデル • 文書やクエリを高次元空間における点で表現 似てる文書
ベクトル空間モデル • 単語の出現回数でベクトルを作ると 次元 単語 d1 = (1, 1, 1, 1, 1, 1, 0, 0, 0) 単語 “Humpty” の出現回数 d2 = (1, 1, 0, 0, 1, 0, 1, 1, 1)
文書の類似度 • コサイン類似度(cosine similarity) • ベクトルが同じ方向を向いていれば 1、直交してると 0 例 (1, 1, 1, 1, 1, 1, 0, 0, 0) (1, 1, 0, 0, 1, 0, 1, 1, 1) 参考
tf-idf • 単語の重み付け手法 • 頻度を直接用いた場合、機能語(a, the, on, to など)の頻度に大きく影響される • 意味的に重要な単語の重みを大きくしたい 重み Term Frequency (TF) Inverse Document Frequency (IDF) 珍しい単語ほど重みが大きくなる
情報検索(information retrieval) • クエリで取得したい情報を指定 クエリ 文書集合
性能評価 • 適合率(precision) • 検索ノイズがどれだけ少ないか • 再現率(recall) • 検索漏れがどれだけ少ないか • f-score • 適合率と再現率の調和平均
性能評価 • 適合率(precision) • 再現率(recall) • f-score
データマイニング入門 • クラスタリング • 階層クラスタリング • K-means クラスタリング • スペクトラルクラスタリング • 類似度・相関の計算 • 相関ルールの抽出
クラスタリング • 似たようなサンプルをまとめあげる • 階層的クラスタリング • 非階層的クラスタリング
検索エンジン + クラスタリング http://clusty.com
階層的クラスタリング • サンプル間に距離を定義 • 例 ベクトル空間モデルによるコサイン類似度 • アルゴリズム • すべてのサンプルを個別のクラスタとして開始 • もっとも近いクラスタ同士を統合し新たなクラスタとする • すべてのクラスタが統合されるまで 2 に戻り繰り返す
階層的クラスタリング • 例 デンドログラム (Dendrogram) 1 3 5 2 4 1 2 3 4 5
クラスタ間の距離の定義 最短距離法(single link) 最長距離法(complete link) 重心法(centroid) 群平均法(group-average)
階層的クラスタリング • 計算量 • ナイーブに実装すると O(n3) • 効率的な実装 O(n2 log n) • サンプル数が多くなると大変
k-means法 • クラスタの重心 • 最小化 • アルゴリズム • k個の代表点c1,…ckをランダムに選択 • すべての点を代表点がもっとも近いクラスタに割り当て • 各クラスタの重心を代表点にして2へ戻り繰り返す
k-means法 • 実装が簡単 • 計算量が小さい • クラスタ数 k をあらかじめ決めておく必要 • すべてのクラスタがほぼ同じサイズ • 初期値のランダムな配置に依存
スペクトラルクラスタリング spectral clustering k-means (Lee and Choi, 2004)
スペクトラルクラスタリング • 準備 類似度行列 頂点 iの次数(接続しているエッジの類似度の和) 次数行列 (サブ)グラフ A の頂点の数
グラフラプラシアン • グラフラプラシアン(graph Laplacian) • 性質 正規化バージョン
スペクトラルクラスタリング • 入力:類似度行列 S, クラスタ数 k • グラフラプラシアンの固有ベクトルを固有値が小さいものから k 個求める (最初のは無視) • それらの固有ベクトルを並べて行列 V を作成 • 行列 V の個々の行を、k 次元空間上の位置とみなし、頂点を空間上の点として配置 • K-means アルゴリズムでそれらの点をクラスタリング
スペクトラルクラスタリング • グラフをサブグラフに分割
関連する概念・単語の抽出 • 糖尿病と関係が深い症状は? 「糖尿病」との共起頻度 単に「痛み」がありふれた 単語だからでは?
Pointwise Mutual Information • Pointwise Mutual Information(PMI) • 偶然共起するよりもどれだけ多く共起したか • X と Y が独立なら PMI = 0
Pointwise Mutual Information • 糖尿病と関係が深い症状は? 「糖尿病」とのPMI P(糖尿病) = 0.6 P(狭心症) = 0.4 P(痛み) = 0.8 P(疲労感) = 0.6 P(糖尿病, 狭心症) = 0.4 P(糖尿病, 痛み) = 0.6 P(糖尿病, 疲労感) = 0.4
Symmetric Conditional Probability • Symmetric Conditional Probability (SCP) • 両方向の条件付確率の積