はじめに
2020年の4月に新卒入社として PHONE APPLI にジョインし、ちょうど一年が経とうとしています。
本当にあっという間でした。
新卒一年目にしてさまざまなことを経験させていただき、学びも多く有りましたが、その中でも自分が強く意識づけられたことは、「人に物事を伝える力」の重要性です。
特にテクノロジーリサーチ部は、技術調査をするという部署がら、調査結果を人に報告したり、文章に起こしたりする機会が多々あるので、相手に正確かつ漏れなく物事を伝える、ということが、どれだけ大切なのかを日々痛感させられています。
社会人にとってもこの「伝える力」というのは、必須の能力だと思いますが、自分はもともと、この「伝える力」に苦手意識を持っており、これまでの人生であまりここを意識せずに過ごしてきたので、物事をニュアンスで伝えようとしてしまいがちです。
そのため、自分のこの苦手意識の改善をするために、 5W1H というフレームワークを日頃の業務の中で意識しています。
テクノロジーリサーチ部は技術調査だけでなく、自社にとって新たな価値を探る企画活動もおこなっている部署であり、そのような場面でも 5W1H を使うことがあるので、日常でこのフレームワークに触れる機会は多いです。
5W1H について
5W1H とは何か?は説明するまでもないと思いますが、、
相手に伝わりやすいように、漏れなく情報や状況を正確に伝えるための6つのポイントです。
ビジネスフレームワークの基本とまで言われています。
この 5W1H、頭で分かっていても実際には意識できていないことが多々あると思います。
「これやっておきます!」など、一見問題なさそうですが、これだけだと「Where」 や「What」といった要素が欠けてしまっているので、あとあと認識のズレに気付きことも起こり得るかもしれません。
特にリモートワークが主体となったいま、チャットツールの多用であったり、ボディランゲージがリアルよりも伝わりづらかったりと、相手に口頭や文章だけで正確に情報を伝える重要性が、以前よりも高まっているのかなと感じます。
成果物
今回は、この 5W1H を構文解析で抽出するツールを作成してみました。
このツールは、文章を入力するとその文章の 5W1H を解析し抽出します。
5W1H に当てはまらないような文章を入力すると抽出されないので、「この日本語では伝わりづらい」ということに、気付くきっかけを与えることができます。
次項からは、この成果物の開発過程について触れていこうと思います。
COTOHA API
今回このツールで、5W1H を抽出するにあたり、COTOHA API を使用しました。
以下は使用した API です。
構文解析 API では、形態素解析と構文解析の技術が含まれ、固有表現抽出 API では、固有表現抽出の技術が含まれています。
次は、自然言語処理の一分野であるそれぞれの技術を、簡潔に紹介していきたいと思います。
形態素解析とは
形態素とは語学の用語で、「意味をもつ表現要素の最小単位」と言われています。そして、形態素解析は、文章をこの形態素という単位に分割する技術です。
形態素解析は、自然言語処理のファーストステップで行われ、後の処理に繋がる土台として使われます。
構文解析とは
構文解析とは、形態素解析で分割した単語を同士の関係性を解析し、文章の構造を発見するための技術です。
COTOHA API では、係り受けと言われる関係を抽出することで、「主語と述語」「修飾語と被修飾語」などの関係性を解析できます。
固有表現抽出とは
人名や地名などといった固有名詞や、日付表現、時間表現などに表す言葉の総称である固有表現を抽出します。
COTOHA API では、抽出した固有表現がどこに所属するクラスなのか、ということを解析できます。
実装
次は、上述した COTOHA API を使用して、どのようにして 5W1H を抽出していくのか、というロジック部分に触れていきたいと思います。
説明に用いる例文は、以下の内容になります。
- 先月の週末に、江戸川の河口付近で後藤は大きい魚を釣った。 (Why & How 無し)
- 来月の週末に、江戸川の河口付近で後藤は新しい釣竿を用いて、大きい魚を釣りあげるつもりです。なぜなら、釣りづらいと言われる冬に、どうしても魚を釣りたいからです。 (Why & How 有り)
1st Step : 動詞に係っている文節を抜き出してまとめておく
- 形態素に分割
- 動詞を抽出する
- 抽出した動詞に係っている、文節を取得する
- 3 で取得した文節に係っている文節を取得し、係っている文節がなくなるまで繰り返す
今回は文章の中核を「動詞」と捉え、この動詞を基準として考えるようにしました。
もちろん、動詞を含まないような文章も日常ではあるかと思いますが、 今回は割愛します。(例:この海鮮丼は美味しい)
1st Step では、まず入力した文章を形態素に分割し、動詞を含む文節を抜き出します。
そして抜き出した文節に対して、係り受けの関係を持っている文節を抜き出し、また、そこから更に係り受けの関係を持っている文節を探っていきます。
こうすることで、動詞を基点とした木構造ような形で文章を表すことができます。
{ doushi: '釣った。', kakari: ['先月の週末に、', '江戸川の河口付近で','後藤は', '大きい魚を' ] }
2nd Step : 文節の意味や固有表現から 5W1H を割り振る
- 元の文章の固有表現を抽出する
- 「いつ、どこで、誰が」に関連する固有表現があった場合、その単語を含む文節を「Who」「Where」「When」に割り当てる
- 動詞に係っている文節の関係性から、「What」「How」を割り当てる
- 「なぜ?」に関連するようなキーワードをあらかじめ用意しておき、そのキーワードを含む文節を「Why」に割り当てる
2nd Step では、1st Step でまとめた文章の構造に対して、実際に 5W1H の割り振りを行います。
まずは「Who」「Where」「When」の3つの要素です。これらの要素の割り振りは、文章の固有表現を抽出した際に分類されるクラスを用います。
固有表現のクラスから「Who」「Where」「When」を割り振るために、固有表現抽出を行う前に、あらかじめクラスの中からそれぞれの要素に該当すると思われるものを定義しておきます。 ( DAT クラスは「When」など)
そして、定義しておいたクラスを持つ固有表現が抽出された場合、その固有表現を含む文節を、それぞれ「Who」「When」「Where」として割り当てます。
以下は、先程の例文で抽出された固有表現とそのクラスです。
- 先月: DAT (日付表現)
- 週末: DAT (日付表現)
- 江戸川: LOC (場所)
- 後藤: PSN (人名)
次に「What」「How」の要素ですが、これらは、文節間の関係性から割り当ての仕組みを決めていこうと思います。
COTOHA の構文解析 API では、文節の係り受けを解析した時に、その関係性を分類する、「依存関係ラベル」というものを出力できます。
今回は、それぞれ「What」「How」に該当すると思われる依存関係ラベルをあらかじめ決めておき、動詞に対する係り方がそれにマッチするような文節を、「What」「How」として割り当てるように実装しました。
以下は「What」「How」の定義に用いた依存関係ラベルです。
object
:動作・変化の影響を受ける対象
manner
:動作・変化のやり方
最後に「Why」の割り当てです。
個人的に、この要素抽出することがもっとも難しいのでは?と思っています。
この部分があるだけで、文章の係り方が大分複雑になるので、改めて日本語というものの難しさを感じます。
今回、「Why」の表現は「What」や「How」のように該当する依存関係ラベルが無いと判断したので、あらかじめ、「なぜなら」や「だから」といった「Why」に関連するようなキーワードを定義しておき、そのキーワードを含む文節を「Why」として割り当てる方法を選択しました。
まとめ
今回は、自分にとって初分野である自然言語処理の勉強も兼ねてツールの開発をしてみましたが、言語の解析は、やはり一朝一夕では身に付かないような、学問としての奥の深さを感じました。
割り当て方法などのロジック部分を開発していく中で、どのような文章が人に伝わりやすいのか?を考える良いきっかけにもなり、結果、言語処理の学習自体が、「伝える力」の向上にも一役買ったと思います。
また、開発過程で気づいたこととして、「Why」と「How」など、文章中に無くても意味が伝わるような要素ほど、抽出の難易度が高いということを感じました。
これらの要素が存在すると、文節の係り方が複雑化します。
文節の掛かり方が複雑になるということは、それだけ日本語としても伝わりづらくなる可能性があるので、どれだけ伝わりやすく、これらの要素を文章に組み込むのかというのが、「伝える力」を向上させるポイントになるのでは?と思います。
そして、当記事では触れていませんでしたが、動詞が複数抽出された時の重み付けのロジックや「Why」の割り当ての詳細についても、まだまだ改良の余地があると感じているので、今後、より良いロジックでの実装ができるように改善を続けていきたいと思います。