読者です 読者をやめる 読者になる 読者になる

Hatena Engineer Seminar #5で関連記事レコメンドエンジンの開発について話しました

Hatena Engineer Seminar #5 で「はてなブックマークに基づく関連記事レコメンドエンジンの開発」というタイトルで話しました。
この内容です。

bookmark.hatenastaff.com



以下が資料です。結構、話で補完してる部分もあるので、資料だけだとわかりづらい部分もあるかもしれません。

関連記事と一口に言っても、関連性にはいろいろあると思うので、そこを整理しつつ、タグがなくても関連記事を求められるようなアプローチをとりました。
まだ開発を始めて1ヶ月くらいということあり、まだまだプロトタイプ感が否めないですが、もっと改善していく予定です。

認知心理学の本を読んだ

最近、認知心理学について少し興味が出てきたのでいくつか読んでみた。


自然言語処理の研究をしていたけど、認知科学のことは勉強するタイミングなかったせいか、全然知らなかった。けど、言語処理してるんだから、認知科学のこと多少は知っておいてもよいのではという気になった。ただ、どれを読んだらいいかわからないのだけど、適当に探して読んでみた。

認知科学への招待

認知科学への招待

タイトル通り導入的な内容でわかりやすかった。フレーム理論やスクリプト理論とか、自然言語処理でも聞いたことがある内容が書いてあって、どうやって発展してきたのかがわかって面白かった。最後のほうにでてきた超情報場というのはちゃんと理解できなかった。

現代の認知心理学〈3〉思考と言語

現代の認知心理学〈3〉思考と言語

1つ目の本よりは学術的な内容の本。問題解決における思考やコネクショニストモデルに基づく言語理解について書かれていた。他には、空間表現(前後左右上下)の理解をどのようにしているかや、言語理解と身体化理論について(身体の動きと言葉が一致しているほうが認知が早い)も書かれていておもしろい。

文章理解の認知心理学:ことば・からだ・脳

文章理解の認知心理学:ことば・からだ・脳

2つ目と同様、学術的な内容の本。2つ目と一部重複してる内容もあるけど、より文章理解に特化したもの。読書量と語彙量の関連性や物語理解について共感しやすいほど物語の理解も早いらしいということが書いてあってなるほどと思った。


とりあえずいくつか読んでみたけど、認知科学が思っていた以上に工学的な印象があることに驚いた。もちろんそうでない部分もあるけど、結構コンピュータで実現できるかどうかも重要な要素っぽかった。まだ研究対象が単語や短文のものが多いので、長文、文章に対する研究も進んでいって欲しいと感じた。


あと、最近読んだWSDM(Web Search and Data Mining) 2015のSarcasm Detection on Twitter: A Behavioral Modeling Approachという論文がおもしろかった。Twitterから皮肉を見つける問題で、これまで言語的な手がかりのみを利用していたものに対して、心理行動科学?(psychological and behavioral sciences)からの知見を活かすことで性能を向上したというもの。あまりこういう論文を見たことなかったので、おもしろかった。言語処理系の学会にもこういう論文あるのかな。

長単位解析器Comainu 0.71をリリースしました

NLP Comainu

中・長単位解析器Comainuのバージョン0.71をリリースしました。
機能的な変更点はなく、unidic2 (unidic.db) の公開への対応が主な変更です。


unidic2を近日リリース予定としてから1年たってしまいました(すいません...)が、unidic2の一般配布に関する確認がとれた(BCCWJの成果DVDにはunidic2が含まれているので一部の人には既に配布されていた)ので、Comainu用にunidic2をコンパイルしたunidic.dbの配布とその対応を含めたComainu 0.71をリリースしました。これで誰でもComainuを正しく動作させることができるようになります。

リリース comainu 0.71 - 中・長単位解析器 Comainu - SourceForge.JP
リリース comainu-unidic2 0.10 - 中・長単位解析器 Comainu - SourceForge.JP


unidic2(unidic.db)の有無による違い

これまでのComainuでも長単位解析はほぼできており、unidic.dbがなくても長単位の境界推定結果は変わりません。

ただし、unidic.dbがないと、長単位の語彙素、語彙素読みを正しく生成できない場合があります。長単位の語彙素、語彙素読み生成には短単位の語形代表表記や語形基本形などを利用しており、現状ではこれらの情報がunidic2にしかないため、一部の活用がある長単位では語彙素、語彙素読みが正しく生成できていませんでした。

Linux版について

Comainu-0.70をご利用の場合は、Comainu-unidic2 をダウンロードしていただき、適当な場所 (/usr/local/unidic2/share/unidic.db など) に置いてもらえば正しく動作するようになります。

Comainu-0.71を利用する場合は、ソースファイルに含まれるセットアップ用のスクリプトでunidic.dbを含めた関連ツールをインストールするようにしてあるので、ご利用ください。詳しくはこちら

Windows版について

Comainu-0.70をご利用の場合は、Linux版同様、Comainu-unidic2 をダウンロードしていただき、適当な場所に置くことで正しく動作するようになります。
ただし、Comainu-0.71ではソースファイルとモデルファイル、unidic.dbをまとめて1つのパッケージにしているので、Comainu-0.70をアンインストールしていただき、Comainu-0.71をインストールしてご利用頂くことをおすすめします。


skozawa.hatenablog.com

言語処理学会に参加した

NLP

今年は京都(京大)であったということもあって、言語処理学会第21回年次大会に参加してきた。
16~21日でチュートリアル、本会議、ワークショップとあったけど、本会議の1,2日目とワークショップの計4日間参加。


本会議で発表を聞いたものの中から覚えている/気になったものをメモ程度に。

  • 素性に重みを付けるSelf-training手法を用いた文書分類の領域適応
    • ドメイン適応にself-trainingを適用し、素性の重み付けも少し従来と変えるアプローチ
    • 重み付けのところの有効性はあまりよくわからなかった
    • self-training、勝手に98, 99%とかすごい高い精度じゃないとうまくいかないと思ってたのだけど、性能向上していたので意外だった
  • 議論文生成における文抽象化のための固有表現抽象化
    • 聞きたかったけど、人気だったのであんまりちゃんと聞けなかった
    • 固有表現と固有表現の抽象化候補が与えられた場合に、適切な抽象化先を選択するためのアプローチ
    • 抽象化候補は予め辞書で用意しているけど、抽象化候補の自動取得できないかどうかのほうが気になっている
  • 意見文の対象読者を限定する条件の抽出
    • レビューを読むべき条件を抽出する手法
    • 「女性には」や「子連れの家族旅行なので」などの意見に付随する条件部分を認識する
  • 顔文字のパーツの種類と表情の強弱に着目した顔文字表情推定
    • 顔文字のパーツの種類(口、右目、左手など)を推定し、パーツごとに素性の重みを変えて学習することで顔文字の表情を推定。
    • 8種類の表情(泣く、驚く、笑う、怒る、困る、恥じる、不満、無表情)と6種類の感情(怒り、嫌悪、恐れ、喜び、悲しみ、驚き)を利用
    • 表情の強弱をみて、強い表情(泣く、驚く、笑う、怒る)と弱い表情(困る、恥じる、不満、無表情)では感情の分布傾向が違うというのはおもしろかった
  • 時系列文書を対象としたグラフに基づく文書要約への取り組み
    • 時間軸のある複数文書要約を、LexRankというグラフベースの要約手法を基にした手法を用いて行う
    • 時系列文書の要約のデータセットあること知らなかったので、今度見てみたい
  • Paragraph Vectorを用いたウェブ上のユーザー行動のモデリング
    • アクセスログからParagraph Vectorを使って、学習の素性を作り、ユーザの行動予測(サイト訪問、広告クリック)をするアプローチ
    • 言語処理とは少し違いそうだけど、すごいおもしろかった。
  • A Japanese Word Dependency Corpus
    • 完全に見逃してた...すごい聞きたかった

あとは参加しなかった3日目の発表で気になったけど聞けなかったもの


エラー分析ワークショップにも参加。
色々なエラーや分析が聞けたので楽しかった。


今年は実際にすぐに応用できそうかという視点で発表を聞いてたことが多かった気がするけど、ちょっと失敗だったかな。もう少し単純に言語処理研究への興味という感じで聞けたほうが楽しかった気がする。


来年は東北大学らしいので、ふらっとはいけないのが残念。

論文紹介:HEADY: News headline abstraction through event pattern clustering

NLP

2週間くらい前になるけど、社内輪読会があって論文紹介をした。
今回はACL2013の HEADY: News headline abstraction through event pattern clustering を紹介した。

内容

同じ内容のニュースの集合に対してヘッドラインを生成する話。固有表現を汎化してパターン抽出し、そのパターンをNosiy-OR Baysian Networkで学習することで、固有表現の種類に応じてヘッドラインに使われやすいパターンを推論する。


感想・疑問
  • 抜粋的(extractive)ではなく、要約的(abstractive)なアプローチを取った手法として、そこそこ良い性能がでていそう。
  • HEADYの圧縮率はどの程度なのか。文ごと取得する手法ではあるが、TopicSumが良い性能をだしているので、短くする必要がないならTopicSumでよさそうに見える。目的としては短めのヘッドラインを作りたいという話なので、HEADYによって生成されるヘッドラインがどの程度の長さなのかが気になった。例として表4に出しているものだと、他のとそんなに長さ変わらないように見えるけど、何かしてるんだろうか。
  • どの程度抜粋的なアプローチではできないヘッドラインが作られたか。要約的(abstructive)なアプローチということだったが、結構抜粋的(extractive)な結果になり得そうなので、その差はどのくらいあるんだろ。
    • Noisy-OR Baysian Networkを用いないベースラインのMost freq. patternとは有意差がないようなので、ある程度は抜粋的なアプローチでできてしまうということなんだろうか。
  • ヘッドラインの生成に成功したのはどの程度か。手法的に固有表現が含まれていないとヘッドラインを生成できないようなのだけど、固有表現が含まないニュースコレクションはどのくらいあるんだろ。ニュース記事だと新商品とか固有表現辞書に含まれてないものが結構でてきそうなので、結構取りこぼすものが多いとなると、実際に使うのは難しそう。もちろん固有表現抽出を辞書ベースじゃなくて学習ベースにすればいいのかもしれないけど。


これはちょうどはてなブックマークのトピック機能を作っていたときにトピックのタイトル生成をする際に参考にしようと思って読んだもの。

日本語WordNet-Affect構築のnltk3対応

NLP

前に作った、日本語WordNet-Affect作るためのスクリプトが動かないとコメントをもらったので修正した。


python2、nltk2系だと動いていたけど、バージョンを固定しないとnltk3が入るようになっていつの間にか動かなくなってた。python2系使ってたらnltk2を入れて欲しいものだけど、特にそういうことは考慮してくれないようだ。


なので、python3系、nltk3系で動くように修正した。
ただ、その際にsqliteのDriverに使ってた pysqlite2 はpython3 対応されてないのでどうしようかという感じだったけど、python3系ではsqlite3がデフォルトで入っていてそちらを使うのが正しいようだったのでこれも修正。
http://docs.sqlalchemy.org/en/rel_0_9/dialects/sqlite.html#driver


masterブランチはpython3, nltk3で動くようになった。python2使いたい人はpython2-nltk2ブランチ使えば動くはず。
https://github.com/skozawa/japanese-wordnet-affect



日本語WordNet-Affectの話、2,3人から質問されたんだけど、わざわざ新規にTwitterアカウントとったりして素性隠して質問してくるのはなんでなんだろう。まあ、別に回答はするんだけど、どうせならどこでどうやって使われたか知りたいのになーと思うのでちょっと残念。

2015年目標

もう2015年も半月たとうとしてるけど、今年の目標を考えた。
毎年1月はいつの間にか過ぎてるみたいな感じになってる気がする。


考えた今年の目標は以下の3つ。

  • 何か発表する
    • 去年はあまり発表とかしてなかったので、今年はなにか発表したい。特に今ネタがあるわけではないので何か作らないと。
  • 本読む
    • 去年も目標にしてたけど、達成できなかったので引き続き。非技術書を1ヶ月に1冊くらいは読みたい。とはいえ、他の目標のほうを優先しそう。
  • 中・長期的な計画を立てる
    • 3~5年くらい継続してできるようなことを探したい。最近あんまりそういうことできてないから、ひとつの方向性を見据えて積み重ねていけると良いな。


去年色々考えたけど、ここ3年くらい基本的な考えは変わってなかったことがわかったので、とりあえず今のままやっていこうと思う。