東雲の気まぐれな創造

絵とITに関する話を中心としたブログ

主に日本語を対象とした自然言語処理【Python3】

久しぶりに情報学生らしい記事です。今回は自然言語処理のコードをGitHubに公開したので紹介させてください。コード自体の説明は別の記事で書きたいと考えています。自然言語処理そのものについての話からするので必要ない人は直接リンク先に移動してもらった方が手っ取り早いと思います。

github.com

自然言語処理

まず、自然言語とは人が用いる言語のことです。IT技術ではコンピューターが用いる言語として機械語プログラミング言語があるので、誰が(何が)使用する言語なのかというのはしっかり分けて考える必要があります。つまり、自然言語処理とは人が用いる言語をコンピューターで処理する技術のことです。自然言語処理人工知能分野の一部でもあります。人間が書いた文章を理解させたり、人間とコンピューターが会話できるようにするための技術です。

自然言語処理は未解決の課題だらけで伸び代がある分野

最近の人工知能技術の進歩はすごくて、将棋や囲碁人工知能が人間に勝つなど世の中でもかなり認知されるようになってきました。それにも関わらず、人間とまともに会話できる人工知能は1つも存在しません。


Siriやりんなちゃん、ペッパー君のように高度な会話システムが少しずつ増えて来ていますが、それらすら人間の会話と比較してしまうと柔軟ではない部分がかなりあると思います。つまり、世界的なIT企業ですら人間と対等に会話できるシステムを実現できていないのです。


自然言語処理という分野はそれくらい未解決の課題だらけであり、やりがいのある研究分野でもあります。では、なぜ人工知能技術の進歩が凄まじい中で自然言語処理技術がなかなか目立つような進歩をしないのかというと大きくわけて2つの課題があるからです。

  • 自然言語は記号や数字で表現するのが難しい
  • 言葉の意味をコンピューターに理解させるのが難しい


そもそも人工知能とは大雑把に言うなら、世の中のさまざまなデータを数値化して計算を大量に行うことで精度の高い結果を求めるという仕組みです。目に見えるものはほとんどの場合において、色や形、質量があるのでその特徴を数字で表現できるわけです。その点において、言葉は目に見えるものではないので、数字で表現するのが難しいのです。正確に数値化できなければ、正確な計算ができません。


そして、言葉の意味をコンピューターに理解させるのはさらに難しいです。なぜなら、コンピューターには人間のような感覚器官がありません。画像データや音データを取得することは可能ですが、結局それらは数値データに変換されているので、対象の認識の仕方は人間とコンピューターでは全く違うことになります。認識の仕方が全く違うのにどうすれば人間と同じように言葉の意味(対象の概念)をコンピューターに理解させることができるのかというのは難しい課題なのです。


ここからGitHubに公開したという話です。

GitHubに公開したコードについて

タイトルのとおり、主に日本語を対象とした自然言語処理のコードです。


ITの中心は英語圏なので基本的にIT技術英語圏の方が進んでいます。ただでさえ、自然言語処理上記の課題で研究者が少なかったりして情報が少ないのですが、その少ない情報も英語圏中心なので英語を扱うためのものがほとんどです。日本語を扱うための自然言語処理の情報は非常に少ないです。


また、英語よりも日本語の方がさらに処理が難しいのも日本語処理の情報が少ない原因です。英語の文字はアルファベットで、単語はスペースで分けられています。それに対して、日本語は同じ言葉でもひらがな・カタカナ・漢字が存在し、単語はスペースで区切られずに全て繋がっています。したがって、日本語は文を単語に分離するところから始めなければいけません。


したがって、少しでも日本語を対象とした自然言語処理を学びたい人や日本語処理分野に貢献できるように知識を共有できればいいなと考えています。


GitHubに公開したNLPリポジトリにはMITライセンスを適用してありますので、あまり気を使わずにコードを使用していただけると思います。公開したコードは全てMacOS・Python3の環境で書いてます。また、2018/03/21時点で公開してるコードは単純なものが多いですが、コードはこれからも追加したりして、リポジトリの更新もおこなっていく予定なのでよろしくお願いします。


東雲がまともに書けるプログラミング言語がPython3だけなので他の言語のリクエストは勘弁してくださいね(汗)最低限読むくらいなら他の言語もいくつかあるのですが…なので、他の言語で公開したコードの処理を再現してくれる方が出て来てくれたらとても面白そうです。ちなみに、機械学習の勉強もしてるのですが、まだまだ未熟者なのでニューラルネットワーク系の手法での自然言語処理のリクエストも遠慮していただけると助かります(笑)


また、GitHubでスターくれたり、フォークしたりしてくれたら超超超喜びます。他にも、ツイッターとかでリツイートとかリンク先の宣伝をしてくれると嬉しいです。なるべく多くの人と知識を共有できればいいなと思います。


github.com


リクエストとかアドバイスとかご指摘がありましたら、このページにコメントしてくれてもいいですが、ツイッターアカウントにリプしてくれるのが確実で対応も早いと思います。


twitter.com


以上です。よろしくお願いします。