「ビジネス活用事例で学ぶデータサイエンス入門」を読んだ

最近、データ分析に興味があるので、「ビジネス活用事例で学ぶデータサイエンス入門」を読んでみた。

ビジネス活用事例で学ぶ データサイエンス入門

ビジネス活用事例で学ぶ データサイエンス入門

1章でデータ分析について簡単に説明して、2章で以下のデータ分析のフローを紹介、
1. 現状とあるべき姿
2. 問題発見
3. データの収集と加工
4. データ分析
5. アクション
それ以降はこのフローに則って、3~6章に基礎的な内容、7~10章に応用的な内容が書かれている。


内容としては、ソーシャルゲーム会社のゲームアプリの諸問題を改善するのにデータ分析を利用するというシナリオになっていて、具体例をあげながら、フローに沿って説明されるのでわかりやすい。
書面の都合上、2の問題発見の部分が結構さらっと書かれていたりするけど、実際には1度で正解が導けることはないだろうから、色々思考錯誤するんだろう。
前に少しグロースハック的なことをしたときには、問題をどこまで細分化するかとか、この部分で結構色々悩んだ気がする。
このあたりは実際に業務とかでやって、経験的にしか学べないことも結構多いんだろうなと思うとなかなか難しい。
とはいえ、ざっくりと分析のフローが知れるので読んでみてよかった。


本には分析で利用しているRのコードが載っているので、実際に動かすといいんだけどまだやれてない。
というか、Rのコードあんまり書く気になれないので、pythonで書き直してみるか、julia触ってみたいのでjuliaで書いてみようかな。


本とは少し関係ないけど、気になるのはこういうデータ分析みたいなのはどの程度の規模のサービス、製品に対してなら有効かということ。始まったばかりのサービスに対しては、データ分析をしてもあんまり意味ないというか、データ分析より機能追加とかやるべきことがたくさんある。なので、ある程度成熟したサービスでやることが最も効果的なんだろうと思うんだけど、その境界がどのへんにあって、どういう感じで決めるものなのかなと思った。まあ、もちろん規模だけじゃなくて、ソーシャルゲームみたいなお金に直結するサービスでは必要性が高いとかサービスの性質も関係あるだろうけど。


そういえば、DATA SCIENCE FESTIVAL RECOMMEND CONTESTとかやってるみたいだから余裕があったらやってみたい

CabochaとComainuをDockerで動かす

下の記事を見て、研究とかで使われるツールでちょっとインストールとかが複雑なものはもうDockerで配布したほうがいいのかなと思った。
専門用語を自動抽出するTermExtractをDockerで簡単に使えるようにしました - CreateField Blog

なので、試しにCabochaとComainuをDockerで動かせるようにしてみた。

Cabocha(日本語構文解析器)

Cabochaのインストールはそんなに複雑じゃないけど、--enable-utf8-only(CabochaというかMeCabだけど) みたいなの毎回気にしなくて良くなくなる。
今回は辞書にはUnidicを利用

docker pullして

$ docker pull skozawa/cabocha-unidic

docker runすればCabochaが使えるようになる。

$ echo "太郎は花子が読んでいる本を次郎に渡した" | docker run -i skozawa/cabocha-unidic cabocha
    太郎は---------D
      花子が-D     |
    読んでいる-D   |
            本を---D
            次郎に-D
              渡した
EOS

MeCabも入ってるからMeCabも使える

$ echo "太郎は花子が読んでいる本を次郎に渡した" | sudo docker run -i skozawa/cabocha-unidic mecab   
太郎	タロー	タロウ	タロウ	名詞-固有名詞-人名-名		
は	ワ	ハ	は	助詞-係助詞		
花子	ハナコ	ハナコ	ハナコ	名詞-固有名詞-人名-名		
が	ガ	ガ	が	助詞-格助詞		
読ん	ヨン	ヨム	読む	動詞-一般	五段-マ行	連用形-撥音便
で	デ	テ	て	助詞-接続助詞		
いる	イル	イル	居る	動詞-非自立可能	上一段-ア行	連体形-一般
本	ホン	ホン	本	名詞-普通名詞-一般		
を	オ	ヲ	を	助詞-格助詞		
次郎	ジロー	ジロウ	ジロウ	名詞-固有名詞-人名-名		
に	ニ	ニ	に	助詞-格助詞		
渡し	ワタシ	ワタス	渡す	動詞-一般	五段-サ行	連用形-一般
た	タ	タ	た	助動詞	助動詞-タ	終止形-一般
EOS

https://registry.hub.docker.com/u/skozawa/cabocha-unidic/

Comainu(中・長単位解析器)

Comainuは依存ツールが結構あってインストールするの面倒なので、Dockerで使えると便利な気がする。

こっちもdocker pullしてrunすれば使える。

$ docker pull skozawa/comainu

XML版のUnidic2がまだ公開されてない影響で標準エラーにメッセージだしてるので、-a stdin -a stdout だけ指定して、stderrは出力しないようにしてる。

$ echo "固有名詞に関する論文を執筆した" | docker run -i -a stdin -a stdout skozawa/comainu comainu plain2longout
B    固有    コユー     コユウ  固有    名詞-普通名詞-形状詞可能                        名詞-普通名詞-一般      *       *       コユウメイシ    固有名詞        固有名詞
        名詞    メーシ  メイシ  名詞    名詞-普通名詞-一般                      *       *       *       *       *       *
        に      ニ      ニ      に      助詞-格助詞                     助詞-格助詞     *       *       ニカンスル      に関する        に関する
        関する  カンスル        カンスル        関する  動詞-一般       サ行変格        連体形-一般     *       *       *       *       *       *
        論文    ロンブン        ロンブン        論文    名詞-普通名詞-一般                      名詞-普通名詞-一般      *       *       ロンブン        論文    論文
        を      オ      ヲ      を      助詞-格助詞                     助詞-格助詞     *       *       ヲ      を      を
        執筆    シッピツ        シッピツ        執筆    名詞-普通名詞-サ変可能                  動詞-一般       サ行変格        連用形-一般     シッピツスル    執筆する        執筆し
        し      シ      スル    為る    動詞-非自立可能 サ行変格        連用形-一般     *       *       *       *       *       *
        た      タ      タ      た      助動詞  助動詞-タ       終止形-一般     助動詞  助動詞-タ       終止形-一般     タ      た      た
EOS

https://registry.hub.docker.com/u/skozawa/comainu/


ちょっとインストールとか設定が面倒なツールとかはDockerにして配ればちょっと試したいくらいのときにも気軽に使えるしよさそう。ツール使いたいだけなのに、インストールに手間取って時間とられるのは不毛だし、どんどんDockerでも配布されるようになればいいんじゃないかと思った。まあ、ディスクサイズとられるのがちょっと辛いけど。

「ITビジネスの原理」を読んだ

「ITビジネスの原理」を読んだけど、個人的にはそんなに面白くなかった。


章構成は以下の通り。

  1. ITビジネスは何で稼いできたのか
  2. ネットが世界を細分化する
  3. ネットワークとコミュニケーション
  4. 消費されるコミュニケーション
  5. ITの目指すもの、向かう場所


1~4章は基本的なことが書いてある印象で、これまでのWebの流れやその中でどういう風にビジネスが行われてきたかが書かれてある。
Web業界あまり知らない人には面白いのかもしれない。

4章の終わりから5章ではハイコンテキストというキーワードを使って著者が一番言いたかったと思われることが書かれている。
商品やサービスの売り方として、アメリカ的なフォーマットが決まっていて必要な情報がきっちり書かれているローコンテキストなモノの売り方ではなく、商品とその商品にまつわる物語や売っている人との関係性を売るようなハイコンテキストなモノの売り方が重要となるというもので、前者がAmazon、後者が楽天らしい。あと、非言語コミュニケーションの話やウェアラブルデバイスの話も少し書いてあった。

5章のなかで、

  • コミュニケーションは共通語から多言語へ
  • 多言語から、さらに非言語へ

のような節があって、多言語化も非言語化もどっちも今後起きると思うので、それぞれはいいんだけど、多言語化はよりローカルへ、非言語化はよりグローバルへと方向性としては逆な気がするのでこの2つが連続して起きるような構成だったのはちょっと気になった。

主張としてはハイコンテキストなコミュニケーションが今後重要となるという話で、その点はそうだと思った。


ITビジネスの原理

ITビジネスの原理

文節境界解析のラベルと性能

文節境界解析で使うラベルで、BIとBILUの2種類でどちらが性能がよいかを検証してみた。結果的にはBIだけのほうが性能が高かった。


前回の輪読会で紹介した固有表現抽出に関する論文の中で印象に残ったことのひとつとして、系列ラベリングに使うラベルで最近はBIOよりもBILOUを使ったほう性能が高いというものがあった。
BIO(Begin, Inside, Outside)とBILOU(Begin, Inside, Last, Outside, Unit(Begin and Last))の違いは固有表現の末尾を考慮するかどうかで、末尾を考慮したほうが性能がよいというもの。
社内輪読会で「Joint Inference of Named Entity Recognition and Normalization for Tweets」を紹介した - skozawa's blog


Comainuでは、同じ系列ラベリングの問題である文節境界解析を行っていて、そこではラベルとしてBIを利用している。文節境界解析の場合、Oはないので、BかIを付与することになる。それで、文節境界解析でも固有表現抽出と同様にラベルとしてBILUを利用することで性能が向上するかを試してみた。


データはBCCWJの一部を学習データのサイズを変えながら試してみる。
学習のモデルはSVMで、素性は形態素情報(書字形、語彙素読み、語彙素、品詞、活用型、活用形、語種情報)と形態素が括弧内かどうかを表すラベル(BIO)。

テストデータ 学習データ1 学習データ2 学習データ3 学習データ4
文数 4534 4534 13602 22670 31738


結果としては、データサイズに関わらずBIの方がよかった。

- 学習データ1 学習データ2 学習データ3 学習データ4
BI 95.96 96.87 97.29 97.57
BILU 95.81 96.81 97.28 97.52


BIとBILUでの誤りを軽く調べてみたけど(「/」が文節境界)、BIのモデルでは形態素間をくっつける傾向にあって、BILUのモデルだと分割する傾向があった。BILUのほうは「ガッカリ/する」とか、それを分割してしまうのかというのもちらほらあって、分割しすぎて性能が下がっていそうだった。

モデル
BI 反論して / きています。 反論してきています。
BI 滞在費 / 全て 滞在費全て
BILU つくっていった。 つくって / いった。
BILU ガッカリする。 ガッカリ / する。

文節境界解析だと、Lを求めるのはほぼBを求めることと同じなので、Lを導入してもあまり性能はよくならなかったのかな。それに、BIだけのOがないタスクだと2値分類なので、BILUで多値分類にすることで問題が複雑になったのかもしれない。

関係ないけど、実験中にComainuのバグを見つけてしまったので、とりあえずやってよかった。
モデルの再学習しないといけないので、今度やってアップデートしよう...

社内輪読会で「Joint Inference of Named Entity Recognition and Normalization for Tweets」を紹介した

社内輪読会で論文を紹介した。
今回はACL2012からJoint Inference of Named Entity Recognition and Normalization for Tweetsを紹介。

内容

ツイートから固有表現抽出(NER)、及び、固有表現の正規化(NEN)を行っている。提案のポイントは、これまで、NERとNENを別タスクとして、NERを行った後にNENを行っていたものを、同時に解いている点。これにより、NENで得られる知見をNERにフィードバックできて、性能が向上するというもの。


感想

  • NENの効果

人名と地名、組織名などの区別は難しそうなので、それをNENの知見を取り入れて解決できるのであればよさそうに感じた。

  • 評価実験

ベースラインとして従来研究の手法を利用して比較してるけど、提案手法をNERとNENに分割して直列に適用した手法との比較もして欲しいと感じた。ベースラインのNENの手法はルールベースなので、ルールベースを学習ベースにしたのが効いたのか、NERとNENを同時に解いていることが効いているのかちょっと分かりづらい。

  • 外部辞書

素性としてWikipediaなどの外部辞書に含まれているかを利用していて、それがだいぶ効いているのだけど、外部辞書に含まれていない固有表現がどの程度存在してどの程度抽出できるのか気になった。

  • NERのラベル

固有表現抽出のラベルといえば、BIOかと思ってたけど、最近はBILOUの方が使われていて、性能が高いというのは知らなかった。
Comainuでは文節境界解析も少しやっていて、そこでのラベルはBI(Oはない)を使っているけど、BILUを使ったほうがいいのかな、今度試してみよう。

大阪PRML読書会#7に参加した

少し前になるけど、大阪PRML読書会#7 - 大阪PRML読書会 | Doorkeeper に参加した。
前回に続いて2回目の参加。

大阪PRML読書会、良いんだけど、月1なので前回の話を結構忘れてしまう問題がある。あと、1回で進むのが15ページくらいなので、読み終わるのが3年後とかになりそうで、もう少し短いスパンで読みたいんだけど、みんなで集まるとなると月1が限界だし難しいなーと感じた。

PRML、家で一人でだらだら読んでるときは全然理解できなかったけど、勉強会にいって他の人と真面目に読むとある程度理解できる。まぁ、そもそもだらだら読んで理解できる類の本ではないから、家でも真剣に読めということなんだけど、家だとなかなか集中できないことも結構あって、家と会社以外で作業できる場所が欲しい。

それで、ちょうど次回は他の予定と被ってて参加できそうにないから、ここ3週間くらい週1回仕事終わりにカフェにいってPRMLを読み進めてみてる。今のところそれなりにうまくいってるけど、たまにわからないところがあっても、誰にも聞けず困るだけなのが悩ましい。

週1回カフェに行って読んでるけど、それでも上巻読み終わるのにあと3,4ヶ月はかかりそうで長い道程だ。けど、なんで今仕事に役立つ予定がないPRML勉強してるんだろという気がするし、たぶん1ヵ月後にでも仕事に活きる勉強をしたほういいんだと思うけど、最近そっち方面への興味が薄れてる。興味なんてコントロールできないので諦めて、半年、1年後にでもPRMLが役に立つようにしたいなと考えてる。

そんなことより、カフェで勉強とかしたことなかったけど、思っていたよりも集中できるし、結構気に入ってる。場所を変えることで気分転換にもなるし、週に1、2回、仕事が終わった後にカフェに行って、2時間くらい本を読むのはいいなと思う。いいカフェあったら教えて欲しい。

Comainu for 中古和文

中古和文版の長単位解析Comainuを作って、リリースした。

https://sourceforge.jp/projects/comainu-emj/


BCCWJ(現代日本語書き言葉均衡コーパス)を作るときに、長単位解析をしていて、現代文に関しては終わったのだけど、そのあと中古和文でもという話があって少し手伝いをしていた。
実際に手伝ってたのはもう半年以上前で、気づいたらコーパス日本語歴史コーパス(CHJ)として公開されていた。

Unidicの中古和文版も公開されてることなので、Comainuの中古和文版も作った。
中古和文のUnidicとComainuを使うと中古和文の長単位解析ができる。

$ echo "いづれの御時にか、女御、更衣あまたさぶらひたまひける中に、いとやむごとなき際にはあらぬが、すぐれて時めきたまふありけり。" | ./script/comainu.pl plain2longout
B       いづれ  イズレ  イズレ  何れ    代名詞                  代名詞  *       *       イズレ  何れ    いづれ
        の      ノ      ノ      の      助詞-格助詞                     助詞-格助詞     *       *       ノ      の      の
        御      オオン  オオン  御      接頭辞                  名詞-普通名詞-一般      *       *       オオントキ      御時    御時
        時      トキ    トキ    時      名詞-普通名詞-副詞可能                  *       *       *       *       *       *
        に      ニ      ニ      に      助詞-格助詞                     助詞-格助詞     *       *       ニ      に      に
        か      カ      カ      か      助詞-係助詞                     助詞-係助詞     *       *       カ      か      か
        、                      、      補助記号-読点                   補助記号-読点   *       *       、      、      、
        女御    ニョーゴ        ニョウゴ        女御    名詞-普通名詞-一般                      名詞-普通名詞-一般      *       *       ニョウゴ        女御    女御
        、                      、      補助記号-読点                   補助記号-読点   *       *       、      、      、
        更衣    コーイ  コウイ  更衣    名詞-普通名詞-サ変可能                  名詞-普通名詞-一般      *       *       コウイ  更衣    更衣
        あまた  アマタ  アマタ  数多    名詞-普通名詞-一般                      名詞-普通名詞-一般      *       *       アマタ  数多    あまた
        さぶらひ        サブライ        サブラウ        侍う    動詞-一般       文語四段-ハ行   連用形-一般     動詞-一般       文語四段-ハ行   連用形-一般     サブラウタマウ  侍う給う-尊敬   さぶらひたまひ
        たまひ  タマイ  タマウ  給う-尊敬       動詞-非自立可能 文語四段-ハ行   連用形-一般     *       *       *       *       *       *
        ける    ケル    ケリ    けり    助動詞  文語助動詞-ケリ 連体形-一般     助動詞  文語助動詞-ケリ 連体形-一般     ケリ    けり    ける
        中      ナカ    ナカ    中      名詞-普通名詞-副詞可能                  名詞-普通名詞-一般      *       *       ナカ    中      中
        に      ニ      ニ      に      助詞-格助詞                     助詞-格助詞     *       *       ニ      に      に
        、                      、      補助記号-読点                   補助記号-読点   *       *       、      、      、
        いと    イト    イト    いと    副詞                    副詞    *       *       イト    いと    いと
        やむごとなき    ヤンゴトナキ    ヤンゴトナイ    やんごとない    形容詞-一般     文語形容詞-ク   連体形-一般     形容詞-一般     文語形容詞-ク   連体形-一般     ヤンゴトナイ    やんごとない    やむごとなき
        際      キワ    キワ    際      名詞-普通名詞-一般                      名詞-普通名詞-一般      *       *       キワ    際      際
        に      ニ      ニ      に      助詞-格助詞                     助詞-格助詞     *       *       ニ      に      に
        は      ワ      ハ      は      助詞-係助詞                     助詞-係助詞     *       *       ハ      は      は
        あら    アラ    アル    有る    動詞-非自立可能 文語ラ行変格    未然形-一般     動詞-一般       文語ラ行変格    未然形-一般     アル    有る    あら
        ぬ      ヌ      ズ      ず      助動詞  文語助動詞-ズ   連体形-一般     助動詞  文語助動詞-ズ   連体形-一般     ズ      ず      ぬ
        が      ガ      ガ      が      助詞-格助詞                     助詞-格助詞     *       *       ガ      が      が
        、                      、      補助記号-読点                   補助記号-読点   *       *       、      、      、
        すぐれ  スグレ  スグレル        優れる  動詞-一般       文語下二段-ラ行 連用形-一般     動詞-一般       文語下二段-ラ行 連用形-一般     スグレル        優れる  すぐれ
        て      テ      テ      て      助詞-接続助詞                   助詞-接続助詞   *       *       テ      て      て
        時      トキ    トキ    時      名詞-普通名詞-副詞可能                  動詞-一般       文語四段-ハ行   連体形-一般     トキメクタマウ  時めく給う-尊敬 時めきたまふ
        めき    メキ    メク    めく    接尾辞-動詞的   文語四段-カ行   連用形-一般     *       *       *       *       *       *
        たまふ  タマウ  タマウ  給う-尊敬       動詞-非自立可能 文語四段-ハ行   連体形-一般     *       *       *       *       *       *
        あり    アリ    アル    有る    動詞-非自立可能 文語ラ行変格    連用形-一般     動詞-一般       文語ラ行変格    連用形-一般     アル    有る    あり
        けり    ケリ    ケリ    けり    助動詞  文語助動詞-ケリ 終止形-一般     助動詞  文語助動詞-ケリ 終止形-一般     ケリ    けり    けり
        。                      。      補助記号-句点                   補助記号-句点   *       *       。      。      。
EOS

Finish


作ったけど、たぶん需要は5人くらい。僕自身はそんなに中古和文には詳しくない。
あと、関係ないけど、中古和文Unidicって東ロボプロジェクトで古文の問題解くのに使われてたりするのかーと不思議なところに需要があるものだなと思った。