Kesinの知見置き場

知見を共有していきたいじゃないですか

大学の研究で役に立ったもの(サービス編)

数年間大学で学生として研究生活をしていましたが、今年の3月をもって無事に大学院を卒業できそうです。
そんなわけで過去を振り返るのと、これから大学で研究生活が始まる人に向けて、自分が大学で研究をする上で色々便利だったアレコレを数回に分けて紹介したいと思います。

ちなみに、自分の研究は情報系で、研究室のテーマは自然言語処理、音声言語処理、機械学習関係でした。
あくまで自分には役に立った、ということで情報系以外の分野の人には当てはまらないことも多いと思います。

大学の研究で役に立ったものシリーズの記事

続きを読む

PythonでMongoDBを使うunittestのひな形

タイトルのとおりですが、ケースとしてはFlaskみたいな軽いフレームワークでMongoDBをデータベースに使うModelを自分で実装するような場合です。
実際にデータベースを動かすModelのテストを書くときに、FlaskはフルスタックのDjangoと違って何も面倒を見てくれないので、自分でテストのときだけ使用するdbの作成、破棄などを行う必要があります。

やりたいことは、

  • テスト起動時にテスト用のdb('test')を作成
  • テスト用のデータ(json)を予めdbに入れておく
  • Modelクラスのメソッドをテスト
  • テスト終了時にテスト用のdbの破棄

という流れです。mongodの起動と終了まで面倒を見てくれるともっと便利なはずですが、今回はそこまで求めなかったので、mongodは事前に起動しているという前提になります。 *1

*1:mongodまで面倒をみるなら、参考にあるブログや、test.mysqldが参考になりそうです

続きを読む

Webアプリに高機能な音声認識を追加するWeb Speech API

最近、にわかに音声認識というものが盛り上がっています。
スマートフォンに搭載されている、AppleのSiri、NTTドコモのしゃべってコンシェル、Googleの音声検索あたりが有名ですが、お掃除ロボやエアコン、カーナビといった家電にも音声認識機能が搭載されるようになってきました。
認識の精度や意識の問題(人前で機械に話しかけるのはちょっと恥ずかしい)などの課題はありますが、音声認識はアプリや家電のUIの一部としてこれから普及していくと思われます。

ですが、一般の開発者にとって音声認識機能を自分のアプリやウェブサイトに組み込むのはまだまだ難しいです。
Juliusのようなオープンソース音声認識システムもありますが、一般の開発者が自前で音声認識サーバーを立てるのは敷居が高いと思います。

GoogleAppleばっかりズルい!音声認識が自分のWebサイトやアプリに組み込めたら夢が広がるのになー

  • Javascriptで数行で書けて、
  • 自分でサーバー立てる必要もなくて、
  • 認識精度もよくて、
  • 無料で使える音声認識システム

がどこかに転がってないかなー。という夢を見るわけですが、なんと実はもう既にあるのです!

*デモ機能を試すには最新版のChromeでアクセスをお願いします

続きを読む

テキストセグメンテーションの研究紹介

自分の研究に間接的に使うことになって、最近勉強したのでメモ

テキストセグメンテーションとは?

自然言語処理の一種で、ブログなどの色々なトピックがごちゃまぜに書かれている非構造な文書を、ニュースのようにトピックごとに分割する手法です。

こんな感じに、段落ごとにコロコロとトピックが変わる節操のないブログが記事があったとします。

旅行 
旅行  
スポーツ  
仕事  
スポーツ  
旅行  
旅行

テキストセグメンテーションはこのような非構造な文書を、トピックが変わったところで分割してくれます。

旅行
旅行  
  
スポーツ  
  
仕事  
  
スポーツ  
  
旅行
旅行  

応用先

ではテキストセグメンテーションができると何がうれしいのか?
有望な応用先は、評判抽出、検索、要約といった他の自然言語処理の前処理に使用することです。自然言語処理の様々な手法は、1つ1つの文書に対して処理を行うように考えられていますが、あらかじめトピックごとに分割できていればより精度の高い処理ができるのです。
例えば、先ほどのブログがあらかじめトピックごとに分けられている場合、スポーツについて検索するとスポーツの段落をピンポイントに見つけることができるようになります。

個人的には、会議などの録音音声を音声認識してテキストに書き起こして、それをトピックごとに分割できると便利じゃないかと思っています。ほぼ大学での自分の研究なんですが。

実際にどのように使われているのかはNTT技術ジャーナルにも載っています。

続きを読む

結局Pythonはvirtualenvで管理してみることにした

念願の新しいMacBookAirを手に入れまして、開発に使用するPythonはOSデフォルトとは別に用意したいよねー。さらに言うと、ついにPython2.x系が2.7で開発ストップすることが確定したので、いつでもPython3.x系に移れるようにしたいし、できれば一部でアツいPyPyも含めて複数バージョンのPythonを切り替えつつ、テストが走る環境にしたいですね。

というわけで、調べてみたらPythonにもRubyPerlで大人気の"~brew"、"~env"みたいなのがいくつかあるらしい

  • pythonbrew
  • pyenv
  • pythonz

で、色々調べているうちに@ymotongpooさんのpythonz(pythonbrew)に関する私見という記事を拝見しました。

たしかにパッケージ管理ツールでPythonのインストールができて、virtualenvで仮想環境ごとPythonのバージョンが切り替えられるならpythonbrewとかは不要っぽいですね。

ということでしばらく以下の構成でやってみようと思います
Pythonのインストール: homebrew
Pythonの切り替え: virtualenv + virtualenvwrapper

レッツトライ

まずは普段使い用のPython2.7をインストール

$ brew install python

virtualenv, virtualenvwrapperのインストール

$ pip install virtualenv virtualenvwrapper

virtualenvwrapperにパスを通すために.bashrcに以下を追加

source /usr/local/bin/virtualenvwrapper.sh

Python3.3のインストール、切り替え

homebrewでPython3.3のインストール

$ brew install python3

次にvirtualenvwrapperでPython3.3を使う仮想環境を構築します。
mkvirtualenvコマンドに-pか--pythonオプションで使用するインタプリタを指定することができるので、homebrewでインストールしたPython3.3を指定してやります。

$ mkvirtualenv py3 --python /usr/local/bin/python3

これでこのpy3という仮想環境に切り替えると、使用するPythonは3.3になります。

$ workon py3
$ python -V
Python 3.3.2

PyPyのインストール、切り替え

Python界隈の一部でアツいPyPyも試せるように環境だけは用意しておきます。
PyPyについては2011年のアドベントカレンダーのこの記事が一番おもしろいと思います。
ちなみに外国で開発されているものなので、名前についてはノータッチでお願いいたします//

$ brew install pypy
$ mkvirtualenv -p /usr/local/bin/pypy pypy
$ python -V
Python 2.7.3 (5acfe049a5b0, May 21 2013, 13:47:22)
[PyPy 2.0.2 with GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)]

とりあえず環境だけは用意してみたので、これから長く使いそうなプログラムはテストを書いて、2.7系だけじゃなくて3.x系、PyPyでも動作するようにしていきたいと思います。

参考

http://ymotongpoo.hatenablog.com/entry/20100311/1268313718
http://ymotongpoo.hatenablog.com/entry/20120516/1337123564
https://plus.google.com/114892104481751903211/posts/aPgWC3B7Wrg
http://ymotongpoo.hatenablog.com/entries/2012/09/16
http://virtualenvwrapper.readthedocs.org/en/latest/index.html