本記事のターゲット
- 自然言語処理って聞いたことあるけど、なんか難しそう・・・
- でも分析してみたいことがある!!
- ザックリで良いから、どんな仕組みで成り立つ技術なのかも理解したい!
そんな方(初学者、非IT系の方)に興味を持ってもらえれば良いなと思って、本記事を執筆しました。
#筆者は、情報系出身でもなければ理系出身でもなく、業務で自然言語処理を扱っているわけでもないです。
#そんなバックグラウンドを抱えており、難しい話は一切ないので安心してください。
それでは、「わかりやすい」をモットーに、図解を交えて解説していきますので、どうぞよろしくお願いいたします。
目次
01. なぜ自然言語処理に興味をもったか
02. 自然言語処理の概要
03. 手軽に使えるツール紹介(COTOHA API)
04. ツールの利用方法
05. 自然言語処理やってみた(検証系)
#第1章のみ、システム開発の話が出てきます。
#非IT系の方は読み飛ばしてもOKですが、一応分かりやすく書いてみました。
なぜ自然言語処理に興味をもったか
- 筆者は普段、業務アプリケーション開発をしています。
- 簡単に言うと、「業務を行う上で必要なシステム」の開発です。
- ex. ) コンビニ:商品の仕入情報などを記録する「在庫管理システム」
- 一連の流れは、V字型モデルと表現されます(要件定義から受入テストまで)。
- 各工程の内容については、こちらの記事を参考に:
- https://www.linuxacademy.ne.jp/lablog/programmer/98/
- 品質を作り込む:システム開発に必要な設計書を作るプロセス
- 品質を検証する;開発したシステムをテスト(試験)するプロセス
#特に重要なのは、左側の「品質の作り込み」です。
#早い段階で良い設計書が出来ていないと、後から不具合が発覚した場合の手戻りが大変だからです。
#なので設計書を作るときは、このような体制でReview(指摘)を行うことで、品質を担保します。
#そしてReviewのやり取りは記録されます。例えば、このようにExcelで運用されることも多いです。
- 各項目の詳細については、こちらの記事を参考に:
- https://www.itmedia.co.jp/im/articles/0905/11/news155_3.html
#筆者が着目したのは、この「指摘内容」という項目です。
#指摘をする人が自由に記述できる部分なので、割と細かく書かれていたりします。
- ex. ) 指摘内容:XXServiceクラスの処理5は、◯◯の場合における例外処理が必要では?
- 例えば詳細設計という工程では、このように細かい粒度(メソッド単位や条件分岐と言ったりします)で記述されたりします。
#ならば、このレビュー記録(Excel)から、特徴的なキーワードを抽出できないだろうか?
#そうすれば、将来の設計に活かせるヒントが得られるかもしれない、そう考えました。
#そしてこれを実現できる技術、それが自然言語処理です。
#なので今回は、このようにキーワード抽出する話をしたいと思っています。
- システム開発に用いる「レビュー記録」のドキュメント以外にも、適用対象は様々です。
- ex. ) 議事録、アンケート情報など(いわゆる自由記述のテキストデータ)
- 社内には、こうした文書がたくさんあるはずで、自然言語処理を活用できる幅は広いと考えています。
自然言語処理の概要
- そんなわけで、自然言語処理の概要です。
- 簡単に言うと、「人間の言葉をコンピュータで自動処理させる技術」です。
- あるテキストデータがあって、そこに自然言語処理を行うことで、何らかの処理結果が返却される。
- で、この「自然言語処理」がどんな仕組みで成立しているのかが気になりますよね。
- 例えば、形態素解析という技術と、我々が普段使っているような辞書で成り立っています。
- 実際には処理工程がいくつかあるので、詳しくはこちらの動画を参考に:
- https://www.youtube.com/watch?v=E6ZbP4Wcu8I
- 簡単にいうと、「文章を細かく分解する手法」です。
- 例えば、「私は夏休みに旅行へ行った。」というテキストデータに対して、形態素解析をかけるとこうなります。
- そしてこの時、辞書を使っているから「形態素≒品詞」に分解することが可能となっています。
手軽に使えるツール紹介
#そんなわけで、こうした自然言語処理が手軽に使えるツールを探してみました。
#筆者が選んだのは、COTOHA APIです。
- 自然言語処理を手軽に使えるAPIとされており、NTTコミュニケーションズさんが提供しているサービスになります。
- APIとは簡単にいうと、「Web上に公開されている便利なサービス・機能」が使える窓口みたいなものです(なので、中身がどういう仕組みかは見えない)。
- そして利用するためには、その窓口(API)を叩いてあげる必要があります(APIを叩く、と表現されます)。
- 詳細については、次の章で図解するので安心してください。
#提供されているAPIはたくさんありますが、まずはキーワード抽出APIという機能を使ってみます。
- つまりこれを使えば、解析したい文章をパラメータ(APIに渡す値)として、API(窓口)を叩けば、抽出してくれたキーワードだけを返却してくれそうな感じがしますよね。
- COTOHA APIについては、こちらの公式サイトを参考に:
- https://api.ce-cotoha.com/contents/index.html
ツールの利用方法
#ではこのAPIを、一体どうやって使うのだろうか?
- この点については、まず下記の記事を確認してください:
- https://qiita.com/Harusugi/items/535874c0456dbc4db231
- COTOHA APIを叩けるようにしたExcelファイルを配布してくれています(便利!)。
- 記事を読めば、とりあえずはExcelを使った自然言語処理が体感できると思います。
- なので本章では、ExcelからAPIを叩くことができる仕組み、そして抽出したキーワードが返却される仕組みを図解することに特化します。
#最初に、全体のアーキテクチャ(構造)を載せておきます。これから2段階に分けてご説明します。
- いわゆるOAuth認証という仕組みが使われています。
- OAuth認証については、こちらの記事を参考に:
- https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be
#まずはCOTOHA APIにアカウント登録をすると、このようなマイページにアクセスできます。
- ここに表示されているClient IDとClient secret、簡単にいうと、「Client=利用者を識別するためのIDとPW」です。
- つまり、自分自身に固有のアカウント情報が割り当てられているんですね(当たり前ですが)。
#そしてまず1段階目は、このIDとPWを使って、APIを利用するためのアクセストークンを取得します。
#簡単にいうと、「APIを利用するための権限情報」みたいなものです。
- 具体的には、Client IDとClient secretをパラメータ(APIに渡す値)として、API(窓口)にRequest(要求)を行います。
- そうすると、API(窓口)からのResponse(応答)として、Access Token(利用権限)が返却されます。
#次に2段階目は、このアクセストークン(利用権限)に加えて、document(解析したい文章)を使って、キーワード抽出APIを叩きます。
- 具体的には、Access Tokenとdocumentをパラメータ(APIに渡す値)として、API(窓口)にRequest(要求)を行います(=キーワード抽出APIを叩きます)。
- そうすると、API(窓口)からのResponse(応答)として、result(解析結果)が返却されます。
- ちなみに、この解析結果はjson形式と呼ばれる構造をしており、「テキストデータを表記する方法の1つ」と覚えてもらえればOKです。
例えば、「私は夏休みに旅行へ行った。」というテキストデータをもとに、キーワード抽出APIを叩くとこのようなjsonデータが返却されます。
"{
""result"" : [ {
""form"" : ""私"",
""score"" : 16.55608
}, {
""form"" : ""夏休み"",
""score"" : 10.7258
}, {
""form"" : ""旅行"",
""score"" : 8.64247
} ],
""status"" : 0,
""message"" : """"
}"
自然言語処理やってみた
#最後に、COTOHA APIを使って、ちょっとした検証をしてみたいと思います。
#まず見て頂きたいのが、記事中に何度か出てきたこの例文、2つのAPIで解析した結果がこちらです。
- 具体的には、構文解析API、キーワード抽出APIを叩いた結果をまとめています。
- なんとなくお気づきの方もいるかもしれませんが、この例文を見て「名詞であれば、それは単純にキーワードになるのではないか?」と筆者は感じました。
- キーワード抽出APIを利用する側の立場として、キーワードの抽出基準が知りたいのは当然ですよね。
#そこで、テキストデータ100件くらいを集めて、いかなる場合もこの構造が成立するのかを検証してみました。
#が、数が多くなると分かりづらくなってしまうので、ご紹介するのは以下のサンプル例文にします。
- Wikipediaさんより、自然言語処理の説明文を一部引用してきました。
#このサンプル例文をもとに、2つのAPIを叩いた結果がこちらです(構文解析は、一部省略)。
- 注目したいのは、2つのAPIで抽出した名詞の数です。差分が生じていることがわかります。
- 具体的には、構文解析で抽出した名詞の数は7個、そのうち、キーワード抽出APIでも抽出された名詞の数は5個です。
#つまり、キーワードにならない名詞も存在するということです。例えばこんなイメージ。
- 構文解析APIで「A・B・C」3つの名詞が抽出されても、その全てがキーワードになるわけではないんですね(単純じゃないところが面白い!)。
#そこで、この事象を読み解くために色々と分析/調査してみたのですが、おそらくjsonデータの中に含まれていたscoreという要素ではないかと思っています。
再掲:
"{
""result"" : [ {
""form"" : ""私"",
""score"" : 16.55608
}, {
""form"" : ""夏休み"",
""score"" : 10.7258
}, {
""form"" : ""旅行"",
""score"" : 8.64247
} ],
""status"" : 0,
""message"" : """"
}"
- formという要素の中にキーワードが入っている一方で、socreという要素には何らかの値が入っています。
#COTOHA APIによると、このscoreという要素は、キーワード1つ1つの特徴度を表している値だそうです。
- おそらく、特徴度≒重要度といったイメージでしょうか。
- TF-IDFという特徴度の計算方法も存在します。詳しくは、こちらの記事を参考に:
- http://www.b-trust.jp/tf-idfを勉強して説明してみた/
- 太字になっているのは名詞として抽出された単語(合計7個)で、そのうち赤字になっている単語が、キーワードとして抽出されなかったものです。
- ここから分かるのは、「自然言語処理」という言葉を説明するにあたって、赤字になっている単語はそこまで重要ではなさそうだということです。
- つまり、赤字の単語は「この文章における特徴度≒重要度」(=score)が低いため、キーワードとして抽出されなかったのではないか?というのが私の考察です。
さいごに
- いかがでしたでしょうか?今回は、初学者/非IT系の方を対象とし、少しでも分かりやすくお伝えするために図解を中心とした記事を執筆してみました。
- 記事中にもありますが、システム開発にかかわらず、あらゆるテキストデータが自然言語処理の適用対象だと思っています。
- そして、ただなんとなくAPIを使うのではなくその仕組みを理解し、さらにそのAPI(ex.キーワード抽出)について深く掘り下げて調べてみる、等々を通じて、技術や自然言語処理の面白さが伝われば本当に嬉しいです。
#本記事の内容は、すべて筆者が独学で調べたものをまとめています。
#軽微な誤り等を含む場合もあるかと思いますが、何卒ご容赦いただけますと幸いです。
参考文献
◇ COTOHAAPIセミナー 自然言語処理概要:
https://www.youtube.com/watch?v=E6ZbP4Wcu8I
◇ APIリファレンス|COTOHA API:
https://api.ce-cotoha.com/contents/reference/apireference.html
◇ Excelで誰でも簡単言語処理:
https://qiita.com/Harusugi/items/535874c0456dbc4db231
◇ TF-IDFを勉強して説明してみた:
http://www.b-trust.jp/tf-idfを勉強して説明してみた/
◇ OAuth 2.0 の仕組みと認証方法:
https://murashun.jp/blog/20150920-01.html