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

2012-02-08

「日本語入力を支える技術」本日発売! #ステマ

id:tkngさんによる「日本語入力を支える技術」が本日2月8日に発売となりましたので,宣伝させて頂きます.

Amazon.co.jp: 日本語入力を支える技術 ~変わり続けるコンピュータと言葉の世界 (WEB+DB PRESS plus): 徳永 拓之: 本

今見たら,Amazonのコンピュータのベストセラーランキングで2位でした! おめでとうございます!

f:id:nokuno:20120208180326p:image

ちなみにステマじゃないよ! 堂々と宣伝って言ってるよ! レビューしたからといって1円ももらってないけどね!

なお,まだ正式な告知はしていませんが,2月25日(土)に開催される第9回自然言語処理勉強会(TokyoNLP)ではid:tkngさんのサイン会が行われる予定です.興味の有る方は,書籍をお持ちになってお越しください.

第9回自然言語処理勉強会 #TokyoNLP : ATND

2012-02-03

極大部分文字列の復習

極大部分文字列について復習しました.

極大部分文字列を使った twitter 言語判定(中谷 NLP2012) - Mi manca qualche giovedi`?

岡野原さんによる元論文はこちら.

http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/papers/nl187_okanohara.pdf


極大部分文字列の定義については,id:n_shuyoさんのTokyoNLPでの発表資料で,論文と同様の説明がサンプル付きでされています.

#TokyoNLP で「∞-gram を使った短文言語判定」を発表しました - Mi manca qualche giovedi`?

ここでは,

  1. 部分文字列の間に,包含関係に基づく半順序関係を導入する
  2. この半順序関係における極大元を極大部分文字列と定義する

という定義の仕方をしていて非常にエレガントで分かりやすい…のですが,情報系が専門の人は「半順序」「極大元」あたりの用語を大学で習わなかった人もいるかもしれません(というか私がそうでした).

半順序と極大元の定義に関してはWikipediaが分かりやすいのでオススメです.

順序集合 - Wikipedia

今回の場合,部分文字列の間に包含関係がある場合は順序関係を定義できますが,包含関係がない場合は順序関係を定義できない(しない)ため,半順序となります.一般に半順序関係を持った集合では,その要素(元)より大きな要素が存在しないような要素が複数存在する可能性があり,これを極大元と呼びます.全順序(すべての要素間で順序関係が定義できる)だと極大元=最大元で1つしかないわけですが,半順序だと極大元と最大元は必ずしも一致しない(極大元の集合に最大元が含まれる)ことに注意が必要です.

さて,半順序関係はループを持たないため,有向非循環グラフ(DAG)として図示することができ,これをハッセ図と呼びます.

ハッセ図 - Wikipedia

極大部分文字列においてもハッセ図を描いたら分かりやすくなるんじゃないかと思い,描いてみました.

例として abrakadabra という文字列の半順序関係は以下のハッセ図で表され,各部分グラフの一番上の頂点が極大部分文字列となります.

f:id:nokuno:20120203114156p:image

この場合の極大部分文字列は {a, abra, abracadabra} となります.

頻度1の極大部分文字列は文字列全体となり,文書分類では特殊文字で連結した文字列を使うため素性として使われることはありません.また,拡張接尾辞配で抽出できるのも出現回数が2回以上の極大部分文字列となります.

id:n_shuyo さんのNLP2012論文を添削させていただいたりしていて,論文はこれでいいけど発表は図で例示できるといいなあと思って作ってみました.変なところがあったら教えて頂ければ幸いです.

追記:ab→abraのような,2文字スキップするリンクも必要でしたね.

2012-02-02

mixi Engineers' Seminar #3 に参加しました #mixi_engineers

mixi Engineers’ Seminar #3 : ATND

機械学習の基礎と評判分析 by 高村大也

  • 自己紹介
  • 概要
    • コンテンツを入手→前処理→分類器→出力
    • 前処理:形態素解析→品詞フィルタ,ストップワード削除
    • 「すずかけ台には良い教授がたくさんいる」→すずかけ台 良い 教授 たくさん
  • 分類器
    • ポジティブかネガティブか
  • ナイーブベイズ分類器
    • 確率的生成モデル
    • 140文字制限は無視
    • ツイートの長さを決める(単語数)
    • ポジティブかネガティブか決める
    • 単語を選ぶ作業を長さ分だけ繰り返す
    • P(ツイート,ポジ) > P(ツイート,ネガ) ならポジティブ,逆ならネガティブ
  • パラメータを決める
    • 訓練データから推定
    • 尤度関数が最大になるようにパラメータを決定
    • 最尤推定ではゼロ頻度問題が発生するので,スムージングが必要
    • 加算スムージングはディリクレ分布を事前分布とするMAP推定の一種
  • 対数線形モデル
    • 色々な素性を取り込みたい(長さ,ユーザIDなど)
    • 線形分類器(SVMなど)
    • 指数関数で正に変形してから割合を取る
    • より汎用的な素性関数による表現を使う
  • パラメータを決める
    • 対数線形モデルで識別学習を行なう
    • 閉形式で求まらないのでSGDなどを使う
    • ナイーブベイズと対数線形モデルを比べると,後者は訓練は遅いが分類精度は良い
    • 正則化項の説明はスキップ
  • 条件付き確率場(CRF)
    • 同じ極性の連続するツイートを抽出したい
    • ポジネガの列のあらゆる組合せについて足し合わせるには指数オーダーの計算量が必要
    • 計算量を減らすために,隣り合った2ツイートのみから素性関数を設計する
    • 隣り合ったツイートだけでも,同じ極性が連続しやすいという特性は表現できる
    • CRFの応用:形態素解析,固有名詞抽出
  • 中川モデル
    • Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    • HLT-ACL 2010
    • NICTの評判分析システムWISDOMに搭載
    • 二重否定(よくなくないわけではない,など)をうまく捉えたモデル
    • 係り受け解析:「人々の,利益が,減る,ことを,すずかけ台の,言語処理技術が,防いだ」
    • 前向き後ろ向きアルゴリズムは使えない→確率伝搬法で解決
    • 周辺化を行って隠れ変数を消去
  • 評判分析とその他の話題
    • 訓練データの作成をサボる方法:ドメイン適応,能動学習
    • ポジネガ判定だけでなく意見全体を概観:クラスタリング,評判要約

推薦システムのアルゴリズム by 神嶋さん

資料:http://www.kamishima.net/archive/recsys.pdf

  • 推薦システムの概要
    • 動機:「100万人の顧客がいたら,100万人の店舗を作れ」by ジェフ・ベゾス(Amazon CEO)
    • 手法:協調フィルタリング v.s. 内容ベース
    • 問題設定:明示的 v.s. 暗黙的評価
  • メモリベース法
    • user-user similarity
    • item-item similarity
    • ステマに弱いのでメモリベース法が有利
  • モデルベース法
    • 行列分解:勾配降下法で損失関数を最小化
  • 確率モデル
    • 履歴条件型:ベイジアンネットで因子を簡略化
    • 共起型:pLSA,潜在変数
    • Google News Personalization
  • 推薦システム研究の話題

Big Data Analysis at mixi by 石川有

  • たんぽぽグループ解析チーム
  • 解析ツール:HadoopとR

2012-01-31

第3回入門ソーシャルデータ勉強会に参加しました #social_data

第3回入門ソーシャルデータ勉強会に参加しました.

第3回「入門 ソーシャルデータ」真面目に勉強する会 @神泉(渋谷) : ATND

IT勉強会カレンダーをきっかけにこの勉強会を知り,自分の監訳した本が読まれていて嬉しく思いました.

入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック



また,始まる前に同じビルの同じフロアでスタートアップのシェアオフィスであるBOATを見学しました.

BOAT by VOYAGE GROUP

BOATでは,未踏時代の知り合いの斎藤さんが共同創業者をやっているgrowbuttonというサービスの会社とお話をしました.

Grow! – Social Tipping Platform –

いわゆるイイネ!ボタン系のサービスですが,FacebookのLikeボタンなどと違い,ボタンを押すごとに1ドルをそのサイトに寄付することができるというサービスで,とても面白いと思いました.


以下,勉強会のメモです.今回は3章 古き良きメールボックスをやりました.

http://zaffra.com/static/matthew/enron.mbox.json.gz

  • enronデータセットのダウンロード
  • mbox形式からjson形式へ変換
  • CouchDBを利用した頻度分析
  • 自分のメールデータの分析

演習時間中はTopCoder SRM 531に参戦してました.すみません><

2012-01-28

第3回Twitter研究会に参加しました #twitterconf

第3回Twitter研究会に後半から参加しました.今回もTwitterを中心として色々な発表があって,懇親会では色々な人と話ができてよかったと思います.

第3回Twitter研究会公式サイト

また,会場では@さん作成の座席表が活躍していました.今後は一般のイベントにも使えるようになるそうなので,2月のTokyoNLPのときには活用したいですね!

第3回 Twitter 研究会の座席表


ビジネスおよびコンシューマ向けTwitter解析技術の紹介 by KDDI研究所 池田和史

http://homepage3.nifty.com/toremoro/study/Twitter3/twitterconf3-ikeda.pdf

  • Twitterのアジェンダ,可能性,対象
  • ソーシャルメディア分析技術
    • ビジネス向け:口コミマーケティングツール
    • コンシューマ向け:TV視聴支援アプリケーション
  • 口コミマーケティングツール
    • ポジティブ・ネガティブなツイートの分類(時系列順)
    • 年代・性別・地域・趣味などの割合を可視化
    • 仕組み:属性ごとに特徴的な言葉による分類
  • TV視聴支援アプリケーション
    • 盛り上がっている番組,場面などを解析
    • 人名,ポジネガなどを解析

NTT研究所におけるyammerの取り組み 社内Twitterの活用事例 by 中山・tokoroten

NTT研究所におけるYammerの取り組みと、社内Twitterの統計解析

  • 自己紹介
  • yammer: 社内向けtwitterクローン
    • 乱立する社内Twitterを統一した
    • 地震をきっかけに普及
    • 最近では研修でも使われている
  • NTT研究所のYammerの使い方は変
    • トップダウンではなくボトムアップに使われている
    • ハンドルネーム・アニメアイコン…
  • Yammerを導入してどうなった?
    • 縦割りの解消
    • 公式SNSが廃れた
  • 使われ方,グループ紹介
    • /dev/null
    • 入社年別
    • 研究所別
    • アニメ部屋
  • yammerの統計解析
    • ユニーク発言者数
    • 発現量
    • 発言長
    • 丁寧語比率
    • グループ比率
    • 返信比率
    • 役職ごと
    • 時間帯ごと

tumblrを用いた情報集約支援への応用について by 筑波大 阿部さん (@frkout)

  • 自己紹介
    • 筑波大の計算知能・マルチメディア研究室
  • 研究テーマ
    • グラフマイニング
    • TumblrのReblog-Treeを対象
  • tumblrのグラフ解析
    • リブログ関係はツリー構造
    • リブログから嗜好のソーシャルグラフを作る
    • コミュニティ分割:なんとか法
    • コミュニティごとにHITSアルゴリズムを適用→重要ユーザの算出
    • 情報流量の算出:Ford-Fulkerson法

LT

あんちべさん

ソーシャル・ニュースリーダー「Crowsnest」におけるTwitterのリアルタイム解析と情報整理の未来

Crowsnest [ソーシャル・ニュースリーダー]

  • 自己紹介
    • 浜本階生さん
    • @kaiseh
    • Tophatener,Blogopolis
    • RMake
  • 今日主張したいこと
    • ソーシャルWebにも情報整理のアーキテクチャが必要
    • 人を暗黙的タームとする検索エンジン
  • 反論
    • Twitterの機能自体が情報整理のアーキテクチャなのでは?
    • フォロー,RT
    • →ハイパーリンクに対するGoogleのように,Twitterにも上位レイヤーでの情報整理が必要では?
  • Crowsnestは検索エンジン
    • 形態素→ユーザ
    • 明示的→暗黙的
    • 検索エンジンとCrowsnestは似ている
    • Crowsnestでは人がキーになっている
  • 競合サービス
    • はてなブックマーク(マイホットエントリー)
    • Flipboard (Cover Stories)
    • Summify (Twitterに買収)
  • 技術背景
    • URLツイートの収集:"http"で検索,ストリーミング,タイムライン
    • パフォーマンス:文書の登録後にターム(言及ユーザ)がどんどん増えていく
    • Apche Solrなどの検索エンジン実装はこの特性にマッチしない
    • 独自エンジンを開発:インメモリインデックス
    • 圧縮,符号化,32ビット化…
    • Crowsnest専用に割り切った実装
  • 今後
    • iOSアプリ
    • クリックログ
    • ジャンル別のユーザレコメンド
  • まとめ
    • 「人」をベースとした検索エンジンがアツい!
    • 短縮URLはリダイレクトをたどっている

個人的にはid:kaisehさんに初めて会えたのが嬉しかったです!

mixiボイスTwitter連携開発 森垣さん

http://homepage3.nifty.com/toremoro/study/Twitter3/twitterconf3-morigaki.pdf

  • 自己紹介
    • 株式会社ミクシィコンテンツ部
  • Twitterアプリケーションの作り方
    • 取得
    • 書き込み
  • 多数のユーザーが使うWebアプリケーションの場合
    • 取得×ユーザ数 = 無☆理
    • 書き込み×ユーザ数 = 無☆理
  • システム構成(取得)
    • API制限対策→並列化
    • 遅延・クジラ対策→非同期化(ジョブキュー, gearmand)
  • システム構成(書き込み)
    • あけおめアタック
    • バルスアタック
    • 並列化でスケールアップ
    • 非同期化:Q4M
  • まとめ
    • 怒られないように作る
    • 大規模サービスでの外部連携は大変
    • 基本は並列化と非同期化

懇親会

懇親会では色々な人とお話させていただいたり,酔った勢いで昨日のCROSSの報告と自己紹介LTをしてみたりもしました.

またお会いする機会がありましたらよろしくお願いします.

2012-01-27

エンジニアサポート新年会CROSSに参加しました #cross2012 #cross2012c

エンジニアサポート新年会CROSSに参加し,データマイニングセッションのパネラーとして登壇しました.

セッション|エンジニアサポート新年会2012 CROSS

データマイニングCROSS

  • オープニングトーク by @hamadakoichiさん
    • TokyoWebMining主催
    • DeNA:ソーシャルゲームのデータマイニングチーム立ち上げ
    • Mobage:大量ユーザ・大規模データ
    • データマイニングの3つの用途
      • 定常的なアクセス解析 (KPI Views)
      • アドホック解析 (Business Planning)
      • サービス活用 (Recommendation, Advertisement)
    • 大規模データ処理の技術基盤:Hadoop,HDFS,MapReduce,Pig,Hive,Mahout, R
  • 第1部:統計解析や時系列解析
    • 登壇者紹介:yokkuns, 紀さん,森本さん,市川さん,teramonagiさん,佐藤さん
    • データマイニング・機械学習は実ビジネスやサービスでどういったところに活用されているか
    • 理論だけでなく,実ビジネスやサービスならではのポイントはあるか?
    • 自己満足な解析,上司や顧客に理解されるためにはどうすればいいか
    • 分析結果はどのように見せているか?:数学的な素養のない人にも分かりやすく
    • ハマりどころ,実際にハマった経験など
    • データ不足に悩まされたことは? それに対する対処法は?
    • データマイニングの2012年の展望
  • 第2部:機械学習と大規模データ解析
    • Kauli 高田さん (@karubi):広告最適化(媒体より)
    • Scaleout 山崎さん (@yamaz):大規模広告配信エンジン
    • ロックオン 中川さん:広告主より,マーケティング,講演,寄稿
    • Albert 上田さん:最適化
    • 自然言語処理 奥野

データマイニングについての濃いメンバーで非常に熱い議論を交わすことができ,またその後の懇親会も色々な人と交流できて,まさにCROSSの名にふさわしい会になったと思います.

この場を借りて運営していただいたニフティの中村さん,データマイニングセッション司会のDeNA濱田さん・里さんや他の登壇者の方に感謝を申し上げます.ありがとうございました.

2012-01-22

TokyoNLP主催者からのメッセージをお読みください

TokyoNLP(自然言語処理勉強会@東京)の主催者として勉強会の説明と各回の発表紹介をしたときの資料を公開します.

この他にも,公開可能な資料はSlideshareにアップロードしてあります.

Yoh Okuno’s profile


自然言語処理・機械学習・データマイニングの分野を中心に,以下のようなトークが可能です.

  • TokyoNLP
  • Social IME
  • 機械翻訳
  • かな漢字変換
  • 予測変換
  • スペル訂正
  • トランスリテレーション
  • 言語モデル
  • Hadoop
  • Python
  • 論文紹介
  • PRML読書会
  • アルゴリズムイントロダクション読書会

もしこれらの内容でトークや執筆をして欲しいといった要望があれば,遠慮無くおっしゃってください.

2012-01-21

テキストファイルを処理するときのUnixコマンドまとめ

個人的にテキストファイルを処理することが多いのですが,簡単な処理ならUnixのコマンドをパイプとリダイレクトで組み合わせてできることが多くあります.今回はそんななかでもちょっとマニアックなTIPSをまとめてみました.

sortコマンドでタブ区切りのファイルを指定する

最近知って驚愕したのがこれ.

sortコマンドでタブ区切りのファイルを指定したいときは,Ctrl+v Tabでタブ文字を入力していたのですが,

$ sort -t $'\t' -k 2,2 < input.txt

のようにしてタブ区切りで2番目のキーでソートすることができます.

1000行おきにデータをサンプリングする

1000行おきにファイルからデータをサンプリングしたいときとかは,perlでワンライナーを書くのが速いようです.

$ perl -ne '$i++; print unless ($i % 1000)' < input.txt

某所のコードゴルフによるとこれだけ短くできるみたいです(気持ち悪い‥)

$ perl -ne '$.%1e3||print' < input.txt

$ perl -pe '$_=""if$.%1e3' < input.txt

pythonだとこうはいきませんね.こういうのを見ると,perlも使いこなせるようになりたいところ.

タブ区切りのフィールドを指定して取り出す

タブ区切りのフィールドを指定して取り出すには,cutコマンドが便利です.

$ cut -f 3 < input.txt

$ cut -f 3,4 < input.xt

ただし,フィールドを入れ替えることはできないので,その場合はawkを使うことになります.

$ awk '{print $3, $2;}'

awkだとデフォルトがスペース区切りなので,入力をタブ区切りにするにはsortと同じように$'\t'を区切り文字に指定し,出力をタブ区切りにするにはOFS="\t"を指定する必要があります.ちょっと面倒ですが…

$ awk -F $'\t' '{OFS="\t"; print $3, $2;}'

cutコマンドの逆で行数が同じ複数のファイルを列結合(SQLでいうJOIN)するには,pasteコマンドが使えます.


追記:@さんがこんな記事を書いていました.

[O] テキストファイルをソートするときに頻繁に使うUnixコマンド

sortするとき,環境変数に LC_ALL=C を設定しておくことは大事ですね! いつもはaliasにしているので書き忘れてしまいました.

2012-01-15

エンジニアサポート新年会CROSSに参加します #cross2012

1月27日(金)にベルサール新宿グランドで行われる,@nifty様によるエンジニアサポート新年会CROSSのデータマイニングセッションにパネラーとして参加します.参加団体としてTokyoNLPをご推薦いただいた,@さんと@さん,主催の@さんにこの場を借りて感謝の意を表したいと思います.

エンジニアサポート新年会2012 CROSS

セッション|エンジニアサポート新年会2012 CROSS

「エンジニアサポート新年会2012 CROSS(以下、新年会CROSS)」は、WEBテクノロジーに関わ る人たちが集まり、WEBの未来を語る勉強会です。

新年会CROSSでは、主催者・参加者の皆さまとのつながりを活かし、「CROSS(クロス)」を テーマとし、「技術」、「年代」、「企業」の間で多くのコミュニケーションが生まれる機会を提供したい と考えておりますので、ぜひこの場に参加していただき、多く交流を持ち、刺激を受け合い、そして、 広い視野を得る機会として ご活用ください。

■ データマイニングCROSS

「データマイニングの実ビジネス・サービス活用と展望」(15:10 - 17:40)C会場

データマイニングの活用により、蓄積データから有効な法則性を見つけ出し、適切な意思決定やビジネス・サービス洗練を迅速にそして継続的に実現する。2011年大規模分散処理技術・データ基盤の普及によりその可能性はさらに広がり続けている。しかしながら実はデータマイニングを実ビジネス・サービスで活用・成功してくためには、必要なノウハウがある。

TokyoWebmining や Tokyo.Rは、それらのノウハウ・技術を分野横断して共有・議論し、ビジネス・サービス活用の裾野を広げることを目的としたコミュニティです。今回はこの日限定で2つのコミュニティがクロスしたスペシャルコラボレーション。ソーシャル・広告・マーケティング・検索・医療・金融の各領域の第一線でデータマイニングで活躍しているメンバーを迎え、各業界や業界横断の活用ノウハウ、2012年の展望に関し、共有・議論を行います。

この日にしか聞けない特別なノウハウと議論。データマイニング・機械学習の活用、迅速・継続的なビジネス・サービス洗練に興味をお持ちの方はぜひご参加ください。

ご興味のある方はぜひご参加ください.よろしくお願いします.

2012-01-12

Mozcの辞書をアライメントしてみた

alt-cannadicをモデルとしてMozcの辞書をアライメントしてみました.ファイルは言語モデル確率でソート済みです.

ダウンロード:

http://code.google.com/p/nokuno/downloads/detail?name=mozc-align.tar.bz2

サイズ:

データ 入力データ アライメント エラー
サイズ(単語数) 1488k 1424k 64k

ライセンスはMozcに合わせて修正BSDライセンスとします.

アライメントに成功したサンプル

し:ょ:う|だ:く|な|く| 承|諾|な|く|

ち:ゅ:う|だ:ん| 中|断|

と|も|ち|ん| と|も|ち|ん|

に:い|ち|ゃ|ん| 兄|ち|ゃ|ん|

ぬ|け|げ| 抜|け|毛|

び|は:く| 美|白|

アライメントに失敗したサンプル(英単語を除く)

ぎんごう 銀行

てんもうひろ 天網恢

ねするどから 根尖から

かくちょうだかいだかい 格調高い

づけるづける 付ける

ふゆどおからどーから 冬遠から

少し前のバージョンだと「あくせられーた 一方通行」とかが取れそうかなと思ったり,「{こうたろう/ひろたろう} 廣太郎」とか興味深いペアが取れていたりしたのですが,今はさすがになくなっているみたいですね.ただ,「づけるづける 付ける」などの読みの繰り返しが多いのは何かのバグかなと思いました.


手法など

アライメントの方法は入力メソッドワークショップで発表したのと同じで,alt-cannadicをモデルとしてm2m-alignerを使いました.

入力メソッドワークショップで発表しました〜「Social IMEの共有辞書をクリーニングしてみた」 - nokunoの日記