社会人研究者が色々頑張るブログ

pythonで画像処理やパターン認識をやっていきます

自然言語処理をやってみたい

はじめに

このブログのタイトルにもあるように、平日は企業で研究開発業務に携わっています。
研究を生業にしていく為には、日々投稿される最新の研究論文を常にインプットしていかなくてはならないのですが、研究以外の業務も沢山あるので中々に難しい問題があります。
昨今は「査読付き論文誌や国際会議に投稿する前に、すぐにArxivと呼ばれる論文投稿サイト(査読なし)にペーパーを公開して周りの反応を見る」と言う文化が出来つつ有ります。
これにより良くも悪くも最新研究の投稿速度がますます早くなり、昨今では投稿論文の数が「物理的に人間が読める速度を超えてしまったのではないか?」と言われています。
arXiv.org e-Print archive

かく言う僕も、自分の分野外の研究は、有名な国際会議で投稿された論文(のアブストラクト)を追いかけていくので精一杯です。
このままでは、良質な論文を見逃してしまい、研究者としてのセンスが鈍っていってしまいそうなので、AI/パターン認識の力を借りて論文のインプット量を高めていきたいと思いました。

実際に欲しいアプリケーションは以下のようなものです。

機能 イメージ図
最新研究のレコメンデーション f:id:nsr_9:20211021160323p:plain
大量の論文ファイルの管理 f:id:nsr_9:20211021160358p:plain
論文ファイルの要約 f:id:nsr_9:20211021162429p:plain

この様なアプリケーションは、自然言語処理技術を用いる事で実装できると思います。 今回から自然言語処理pythonで実装し、研究開発業務をより豊かなものにしていきたいと思います。

自然言語処理のことはじめ

自然言語処理に関しては素人なので、まずはじめにWikipediaに乗っている関連技術について調査してみました。

応用技術 要約
自動要約生成 長い文章を自動的に要約する
情報抽出 非構造データから構造化された情報を取り出す
情報検索 大量の文書情報から必要な情報を取り出す
機械翻訳 ある言語(英語)から別の言語(日本語)に変換する
自然言語生成 アルゴリズムにより文章を生成する
光学文字認識 文書画像から文字を読み取る
質問応答システム 自然言語の質問に対して、答えを返す
音声認識 発話音声から文字を聞き取る
校正 誤りを含む文章情報から正しい文章を出力する
かな漢字変換 ひらがな文章から漢字に変換する

先程のアプリケーションイメージと照らし合わせると次のようになります。

機能 イメージ図
最新研究のレコメンデーション 情報検索
大量の論文ファイルの管理 情報抽出
論文ファイルの要約 自動要約生成

これらの技術について実装出来るようになれば、目的のアプリケーションを作れると思います。

ワードクラウド

Python自然言語処理用のライブラリを調べていたらワードクラウドを簡単に生成出来るパッケージを見つけました。
ワードクラウドは文章要約技術の一種であり、文章中の頻出単語をグラフィカルに画像表現する事が出来ます。

ワードクラウドパッケージは、pipを用いる事で簡単に導入できます。

pip install wordcloud

使いかも簡単で、単語ごとに半角スペースで区切られたtextデータを与えるだけで出力画像を得ることが出来ます。

from wordcloud import WordCloud

words = "test sample aaa"
wordcloud = WordCloud(background_color="white", width=512, height=512, min_font_size=12)
wordcloud.generate(words)
wordcloud.to_file("out.png")

Kaiming先生のMask R-CNNの論文のアブストラクトを与えると次のような出力を得ました。
ICCV 2017 Open Access Repository

f:id:nsr_9:20211021203536p:plain

CNNとかMASKとかOBJECTなど画像処理や物体検出で頻出する単語が大きく表示されていますね。
これだけの結果でどんな論文であるか予想することは難しいですが、既知の論文ならこの画像から内容がある程度思い出せそうだなぁって思いました。

まとめ

論文調査を高速化する為に、自然言語解析について学んでいこうと思いました。
また、文章要約技術の一つであるWordCloudを導入し、その振る舞いを観察してみました。
次回から、より深い内容に付いて調査し、アプリケーションを開発していきたいと思います。