Qt4 + DirectX 9/10.1/11デモを公開しました

Qt、使ってますか?あれってGPLと商用ライセンスしかないんじゃという方は、とりあえずNokiaのページで目を覚ましてください。LGPL化の波に押されて、Google EarthやMaya 2011など、今やQtを使った実用3Dアプリは増殖の一途を辿っています。またSafariGoogle ChromeのHTMLレンダリングに使われるWebkitを手軽に試せることでも有名なQt。SVGの読み書きも楽勝です。

が、Qtでグラフィックスアプリをばりばり作っているという方はまだ少数派ではないかと思います。そこで用意しました。DirectX 9/10.1/11に対応した、完全Public Domainのサンプルです。

実行結果は、Direct SDKサンプルの'HLSLWithoutFX'と同等ですが、デバイスやデバイスオブジェクト周りの初期化をQtWidgetの継承クラスとして抽象化したことで、使い勝手のいい仕様になっています。またMSAAの自動検出やリサイズ時SwapChain再構築など、3Dアプリを作る際に欠かせない機能も、DXUTに依存することなく実現しています。

またQtについて言えば、MFCやDXUTなど今までのC++ベースのライブラリとは比べ物にならないほど生産性を持っていることが、使ってみればすぐにわかるかと思います。正直C#のWinFormsやWPFと比べてもそれほど見劣りもしません。C++のコード資産を持っているけど、GUIのために他の言語に乗り換えるのも億劫という貴方、これを機にQtですごいアプリを作ってみませんか?

第参回天下一カウボーイ大会来場者の皆さんお疲れさまでした

短いプレゼンでしたが、twitterや懇親会を含め様々な感想を頂きました。どうもありがとうございました!中でも「あの発想はなかった」という意見が聞けた時が一番嬉しかったですね。特にレコメンデーションやテキストマイニングみたいな、どこにでもあるありふれた技術を使って、今までにない新しいコンセプトのサービスを作るというのはなかなか大変です。そんな中、

App Concierge : Recommendation over marketplace

というテーマも、実は数10あったアイデアの中から、

  • 世界レベルで、似たようなことをやっている人が他にいないか
  • 時流に合ったテーマ・問題設定を選んでいるか

といった自分なりの判断基準で振るいにかけて最後に残ったものでした(といいつつ、誰か既にやっていたらごめんなさい)。また念願だった増井先生からの意見も後で頂けました。方向性は間違っていないとのことなので、地道に改良を続けることにします。次のステップは英語(海外市場)対応ですかね。

第参回天下一カウボーイ大会オリエンテーションに参加してきました

7月31日、新宿某オフィスにて、第参回天下一カウボーイ大会の主催者・講演者メンバーらによる、オリエンテーション&飲み会に参加してきました!

講演者メンバーといっても半分くらいは面識のある方だったりするのですが、今回1番驚きだったのは人気ブログ「キャズムを超えろ!」知られるCerevo社長の岩佐さん。なんとこの方、学部時代の大学の方の同期で、同じコンピュータビジョンの研究室の方でした。まさに奇遇な出会い。物凄い低い確率だと思うのですが、こんなこともあるんですね。当日は他の人には真似できない家電系のネタで攻めるそうなので期待大です。

また飲み会では、トロ父さんことビサイド南治社長とPlaystation Storeの○○さ加減について熱く語り合ったり、^cさんこと高橋啓治郎さんとこれからどうやってサバイブしようみたいな話をしたり、その他様々なバックグラウンドを持つ方と熱い時間を過ごしてきました。

というわけで、第参回天下一カウボーイ大会、盛り上がり必至な予感です!みんなチケット買ってね


第参回天下一カウボーイ大会の出場が決まりました

一昨年が"動画広告"(IPAX2008や第壱回天下一カウボーイ大会)、昨年が"評判分析"(GDD2008のHackathonなど)、そして今年はこのブログで何度も話題にしている"商品推薦"をやります。

タイトルは「Marketplaceを越える商品推薦」。Amazonに代表される購買履歴や操作履歴に基づく商品推薦技術(いわゆる協調フィルタリング)は、同一ドメインでは有用でもその外に向けては非力です。しかし今やApp StoreAndroid MarketにOvi StoreにWindows Marketplaceと、Marketplace乱戦時代。断絶されたマーケットからどう情報を紬ぎ、有用なレコメンドに繋げるか?そんなアプリ配信の未来について考える時間を一緒に共有できたら幸いです。

正直すでに名前が上がっているレギュラー陣の方々が凄すぎて、一体何のイベントなのか、自分でもよくわからなくなってますが、他の皆さんに負けない位の強いメッセージを秋葉原から発信する予定です。乞うご期待!!!

お手軽実装で評判分析

あの商品を買うべきか買わざるべきか?いま一つ踏ん切りが付かない時に頼りになるが、ネット上にある商品のレビュー記事。しかしレビューをしらみつぶしにチェックするのは大変ということで、ここ数年 評判分析(Sentiment Analysis)が使われるようになってきました。
この評判分析が具体的にどんな問題を解決できるのかというと、以下の画像は評判分析のさらにその応用に当たる評判要約(Sentiment Summarization)に関する文献からの引用になりますが、沢山ある感想文をカテゴライズできたりします。


A Joint Model of Text and Aspect Ratings for Sentiment Summarization
Ivan Titov, Ryan McDonald
46th Meeting of Association for Computational Linguistics (ACL-08). Columbus, OH, USA, 2008.

つまり、似たような意見ばかりで全然参考にならなかった。もう帰る!という事態が防げるわけです。きっと楽天の人気商品なんかでは効果てきめんでしょう。なにせ感想文の数が3桁とか4桁に上るものがざらにありますからね。こんな便利な評判分析(要約)ですが、実は”精度をあまり求めなければ”簡単に作れます。以下はそんなお手軽評判分析の作り方。

評価表現辞書の作成

最初にやるべきことは評価表現辞書の作成です。ここでいう評価表現(Evaluative Expressions)とは、商品属性に当たる観点(Aspect)と評価(Evaluation)のペアを刺したもので、例えば"値段"が"安い"などがそうです。これを手動で作っていたらいくら時間があっても足らないので、ネット上で集めたレビューから自動生成する方法を考えます。今時、価格.comAmazonが提供するAPIなどから、商品レビューなんていくらでも取れますので、分析する対象に最も近いと思うドメインのレビューを絞り込みましょう。

次に構文解析で以下のルールでレビューから語句を抽出します。自分がこれならお手軽に出来るだろうと思ったルールが以下に2つ紹介します。品詞体系はUniDic準拠です(IPA辞書などの場合は、形状詞=名詞/形容動詞語幹に置き換えて下さい)

パターン1 名詞+助詞+形容(状)詞
  • 形容(状)詞を探索します。品詞が連続している場合はひとまとめにします。
  • ただし品詞体系が助動詞語幹及び文字列が"ない|なく|なかっ|"に該当するものは除外します。
  • 上記の形態素を含む文節(前方)及びその係り元の文節から、名詞及び助詞を列挙します。
  • 名詞は品詞体系が"副詞可能|人名"に該当するものは除外します。
  • 助詞は文字列が"が|は|も|に|を"に限定します。
  • 名詞及び形容(状)詞の直後に接尾辞が入る場合はそれも含めます。
  • この時点で名詞と助詞がそれぞれ1つ以上獲得できなければ破棄します。
パターン2 形容(状)詞+名詞
  • 形容(状)詞を探索します。品詞が連続している場合はひとまとめにします。
  • ただし品詞体系が助動詞語幹及び文字列が"ない|なく|なかっ|"に該当するものは除外します。
  • 上記の形態素を含むを含む文節(後方)及びその係り先の文節から、名詞を列挙します。
  • 名詞は品詞体系が"副詞可能|人名"に該当するものは除外します。
  • 名詞及び形容(状)詞の直後に接尾辞が入る場合はそれも含めます。
  • この時点で名詞が1つ以上獲得できなければ破棄します。

ただし間違っても、上記パターンだけで評価表現が漏れなく取得できるとは決して思われないように!例えば、「お買い得だった」「好感触だった」など、名詞(あるいは接頭詞+名詞)だけで表現できるものなど、例外パターンはいくらでも考えられます。

獲得できた形態素群を名詞(BODY)+形容(状)詞(HEAD)としてトランザクション出力します。今回は、ゲームドメインでその相関を求めてみました。括弧内のパーセンテージは、観点が支持度(Support)、表現が信頼度(Confidence)に当たります。それぞれが上位のものから順にソートして並べたものが以下の表です。

観点 評価1 評価2 評価3 評価4
ゲーム(4.3) 面白い(6.6) いい(6.2) 良い(4.3) 好き(3.2)
こと(3.1) いい(4.9) 可能(4.3) 多い(4.2) 残念(4.1)
方(3) いい(18) 好き(16) 良い(8.6) 多い(4.2)
人(2.3) 好き(24) いい(12) 多い(6.3) 良い(4.3)
もの(1.9) いい(5) 多い(4.3) 良い(3.9) 面白い(3.2)
点(1.7) 悪い(21) 良い(21) 良かっ(7.3) 残念(6.9)
感じ(1.7) いい(13) 良い(7.8) 好き(2.1) 残念(1.9)
プレイ(1.6) いい(6.4) 楽しく(4.8) 面白い(3.7) 良い(3.5)
気(1.5) いい(6.5) 多い(3.9) 良い(3) 少ない(2.4)
キャラ(1.5) 好き(10) いい(6.5) 良い(3.5) 多い(2.6)
事(1.4) 多い(4.9) 可能(4.4) 残念(3.4) いい(3.3)
作品(1.4) 良い(7.6) いい(6) 好き(5.5) 素晴らしい(4.9)
ストーリー(1.4) いい(6.6) 良い(5.4) 面白い(3.3) 良かっ(3.1)
難易度(1) 高い(16) 高め(7.2) 高く(5.3) 低い(4.5)
ほう(0.89) いい(37) 良い(8.3) 良かっ(4.3) よかっ(4.2)
グラフィック(0.85) 綺麗(18) いい(4.9) 良い(4.5) 素晴らしい(3.3)
敵(0.78) 強い(8) 強さ(5.5) 強く(4.1) いい(3.4)
戦闘(0.76) 楽しい(5.5) いい(5.4) 面白い(5) 良い(2.8)

注:上記の例では単純なスコアリングで求めていますが、例えば感嘆詞("すごい!"など)や副詞+形容詞("とても美味しかった"、など)の組み合わせではウェイトを大きくするなど、様々な改造が考えられます。興味のある方は是非トライしてみてください。

この時点では、パッと見たところゲームに関連のありそうな語句が確認できる一方、そうでないものも多数散見されます。こうした語句はどうやって機械的に分別すればよいでしょうか?実は最も簡単な方法として、検索エンジンAPIを使うテクニックがあります。例えば、ゲームに関連する語句、ここでは仮に"ドラゴンクエスト"とすると、それぞれのHit数は以下のような結果になりました。

観点の候補 Hit数(観点∩ドラゴンクエスト Hit数(観点) 割合
こと 4,850,000 367,000,000 1.3%
プレイ 1,750,000 33,300,000 5.2%

上記の表からは、大雑把ですが"こと"よりも"プレイ"のほうが"ドラゴンクエスト"に関連していそうだなということがわかります。(※こうした検索エンジンから意味の相関を求める方法は、Hit数以外にもSnippetから解析するなど様々な方法が提案されています)。こうしたWebの力を借りることで、観点や評価をクラスリングすることが出来るというわけです。しかし、単純には分類できないものも存在します。それは評価表現には違いないが、実はゲーム自体には関係がないというものです。例えば、(商品の)"配達"が"遅い"などがその例です。こうした評価表現の分類については、また機会を改めて考察してみたいと思います。

形態素解析辞書UniDicを使おう

形態素解析辞書として広く使われているIPA辞書ですが、いわゆる口語(話し言葉)を解析対象とするなら、UniDicがお勧めです。いきなり実例ですが、以下の感想文。

ここのケーキは、けた外れに美味しかったヽ(´ー`)ノ

IPA辞書ではこうなっちゃうのが↓

* 0 1D 0/1 1.380119
ここ	名詞,代名詞,一般,*,*,*,ここ,ココ,ココ	O
の	助詞,連体化,*,*,*,*,の,ノ,ノ	O
* 1 4D 0/1 0.000000
ケーキ	名詞,一般,*,*,*,*,ケーキ,ケーキ,ケーキ	O
は	助詞,係助詞,*,*,*,*,は,ハ,ワ	O
、	記号,読点,*,*,*,*,、,、,、	O
* 2 3D 1/2 1.538769
けた	名詞,接尾,助数詞,*,*,*,けた,ケタ,ケタ	O
外れ	名詞,一般,*,*,*,*,外れ,ハズレ,ハズレ	O
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ	O
* 3 4D 0/1 0.000000
美味しかっ	形容詞,自立,*,*,形容詞・イ段,連用タ接続,美味しい,オイシカッ,オイシカッ	O
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ	O
* 4 -1D 3/3 0.000000
ヽ	記号,一般,*,*,*,*,ヽ,ヽ,ヽ	O
(	記号,括弧開,*,*,*,*,(,(,(	O
´	記号,一般,*,*,*,*,´,´,´	O
ー	名詞,一般,*,*,*,*,*	O
`	記号,一般,*,*,*,*,`,`,`	O
)	記号,括弧閉,*,*,*,*,),),)	O
ノ	記号,一般,*,*,*,*,ノ,ノ,ノ	O
EOS

UniDicだとこうなります↓

* 0 1D 0/1 0.260209
ここ	代名詞,*,*,*,*,*,ココ,此処,ここ,ここ,ココ,ココ,ココ,和	O
の	助詞,格助詞,*,*,*,*,ノ,の,の,の,ノ,ノ,ノ,和	O
* 1 4D 2/2 0.000000
ケーキ	名詞,普通名詞,一般,*,*,*,ケーキ,ケーキ,ケーキ,ケーキ,ケーキ,ケーキ,ケーキ,外	O
は	助詞,係助詞,*,*,*,*,ハ,は,は,は,ワ,ワ,ハ,和	O
、	補助記号,読点,*,*,*,*,,、,、,、,,,,記号	O
* 2 3D 0/1 0.049907
けた外れ	形状詞,一般,*,*,*,*,ケタハズレ,桁外れ,けた外れ,けた外れ,ケタハズレ,ケタハズレ,ケタハズレ,和	O
に	助動詞,*,*,*,助動詞-ダ,連用形-ニ,ダ,だ,に,だ,ニ,ダ,ダ,和	O
* 3 4D 0/1 0.000000
美味しかっ	形容詞,一般,*,*,形容詞,連用形-促音便,オイシイ,美味しい,美味しかっ,美味しい,オイシカッ,オイシー,オイシイ,和	O
た	助動詞,*,*,*,助動詞-タ,終止形-一般,タ,た,た,た,タ,タ,タ,和	O
* 4 -1D 0/0 0.000000
ヽ(´ー`)ノ	補助記号,AA,顔文字,*,*,*,,ヽ(´ー`)ノ,ヽ(´ー`)ノ,ヽ(´ー`)ノ,,,,記号	O
EOS

一目で見てわかる違いは文末の顔文字でしょう。作者の細かい配慮が伺えます。また、「形状詞」という品詞もUniDicならではの存在でしょう。これは、形容動詞の語幹に当たるもので本質的には名詞と同じですが、口語では特に頻出するキーワードだけに直観的な分類と言えます。

参考までにUniDicの他にもnaist-dicという定評のある辞書が公開されていますし、また辞書そのものを動的に鍛える方法を公開している方もいます。自分の研究でも100MB単位の評価文書を解析していますが、課題はまだまだいっぱいです。いつかは当方でも辞書の強化に挑戦してみたいですね。