こんにちは!株式会社Fusicの採用広報チームです。
「広報が勉強してみた」シリーズも第3回となりました!
第1回では、機械学習ってなに?という機械学習の大枠、
第2回では、機械学習で扱う「画像」のタスクについて解説しました。
第3回となる今回は、「自然言語処理(NLP)」について紐解いていきます。
前回の「画像」編とはまた違った機械学習の奥深さをお伝えできればと思います。
今回は、機械学習チームの石橋と、
4月に新卒として入社した同じく機械学習チームの瓦 祐希が講師に加わりました。
―本日はよろしくお願いします!今回のテーマは「自然言語処理(NLP)」ということですが、そもそも自然言語処理ってなんですか?
石橋:
「自然言語処理(NLP)」とは、
人間が普段使う言語である「自然言語」をコンピューターで処理するタスクです。
言葉のもつ意味をいかにしてコンピューターが取り扱えるようにするか? というのが腕の見せ所です。
―具体的にどのように処理しているんですか?
石橋:
自然言語処理の技術を使う前に、まず以下のように前処理をする必要があります。
前処理には、様々な方法があるのですが、
ここではシンプルな「Bag of Words(BoW)」という手法で解説します。
以下2つの例文を用意します。
A) 王様の耳はロバの耳
B) 馬の耳に念仏
2つの例文から特徴を抽出するため、
文章を名詞や助詞などの単位で区切ります。
A) 王様 / の / 耳 / は / ロバ / の / 耳
B) 馬 / の / 耳 / に / 念仏
次に、(A)(B)それぞれについて、単語の出現回数をカウントします。
ただし、助詞はいろいろな文章に出現し、
“文の特徴を抽出する”ことを邪魔する可能性があるためカウントはしません。
その結果、以下のような表を作ることができます。
A) 王様の耳はロバの耳(上段:出現単語 下段:出現回数)
王様 | 耳 | ロバ |
1 | 2 | 1 |
B) 馬の耳に念仏(上段:出現単語 下段:出現回数)
馬 | 耳 | 念仏 |
1 | 1 | 1 |
上の表を見ると、
A) には、“王様”という単語が1回、“耳”という単語が2回、“ロバ”という単語が1回。
B) には、“馬”という単語が1回、“耳”という単語が1回、“念仏”という単語が1回、
という風に出現回数をカウントすることができます。
2つの例文に出現している単語は、「王様、耳、ロバ、馬、念仏」の5つです。
(A)(B)それぞれの表を、5つの単語を用いて以下のように表します。
A) 王様の耳はロバの耳(上段:出現単語 下段:出現回数)
王様 | 耳 | ロバ | 馬 | 念仏 |
1 | 2 | 1 | 0 | 0 |
B) 馬の耳に念仏(上段:出現単語 下段:出現回数)
王様 | 耳 | ロバ | 馬 | 念仏 |
0 | 1 | 0 | 1 | 1 |
それぞれの表が完成しました。
この表を数字の羅列で書き直してみます。
A) [1, 2, 1, 0, 0]
B) [0, 1, 0, 1, 1]
このように表現できます。
当シリーズ vol.1 画像認識の説明の中で、
「画像は数字の羅列で、どういう数字の集まりが画像を表しているのか」を検出するという話をしました。
自然言語処理では上記のような処理を加えることにより、
自然言語も数字の羅列に落とし込むことができるようになります。
実際のデータは、もっとたくさんの文章や単語があり、
結果的に膨大な数字の羅列が出来上がります。
コンピューターは、このような数字の羅列を使って
この後にご紹介する「分類」や「生成」といった様々なタスクを解いていくんです。
―なるほど。コンピューターは、数字の羅列に落とし込むことで処理ができるようになるんですね。実際にどんなことができるのでしょう?
石橋:
では、具体的に自然言語処理でどんなことができるのかを、
「分類」と「生成」という2つのタスクを例に挙げて解説します。
まず、「分類」のタスクです。
「分類」の中にも様々なタスクが存在しますが、
今回は、「テキスト分類」を例に挙げて説明します。
テキスト分類とは、「テキストを分類するタスク」です。その名の通りですね。
ここでは、メールの文章から、
「すぐに返信するメールと後でまとめて返信するメールを振り分ける」
というタスクを考えます。
まず、過去に送られてきたメールを以下のように振り分けます。
(ア) すぐに返信するメール
(イ) 後でまとめて返信するメール
判定したいメールが、(ア)(イ)どちらに該当するのか
機械学習モデルがメールの文章から学習します。
その後、学習した機械学習モデルを使用することで
新しく受信したメールを(ア)(イ)のどちらかに振り分けることが可能です。
その他にも、インターネットサイトで、映画や本のレビュー欄に書かれている内容が
ポジティブな内容か、ネガティブな内容かなどを分類することもできます。
ポジティブ・ネガティブ判定のような典型的な問題は
何かしらのサービスやパッケージが公開されている可能性が高いですが、
少しニッチな判定問題、例えば、
「会社内の文章データを関連部署に振り分ける」や
「カルテ情報から病状や患者の特性の分類」、「ウイルスや細菌の遺伝子情報から効果的な薬の判定」などは
学習させてみないと判定が難しい場合が多いと思います。
このような場合には、自身で用意したデータを用いて、判定モデルに学習させることで
それぞれの判定問題に特化した学習モデルを作ることができます。
―前回の画像編で勉強した「画像分類」と似ていますね。
石橋:
そうですね!
画像分類とテキスト分類は、入力が“画像”なのか“自然言語”なのか、という違いだけで
数字の羅列に落とし込んだ後の考え方はほとんど同じです。
―では、「生成」とはどういうものなのでしょうか?
石橋:
「生成」とは、学習したデータから文章を生成するタスクのことです。
わたしたちの身近なところですと、
翻訳・要約・対話が例として挙げられます。
翻訳は、Google翻訳をイメージしてもらうとわかりやすいと思います。
日本語から英語、英語から韓国語というように、様々な言語を機械が自動的に翻訳してくれますよね。
これは生成タスクの1つなんです。
要約は、文章から要約するポイントを自動で抽出し、要約された文章を生成するタスクです。
モデルは要約前の文章と、要約後の文章を学習することで、要約された文章を生成することができるようになります。
そして、対話はチャットボットがわかりやすい事例ですね。
Q&Aのチャットボットでは、人間が自然言語で行った質問に対して、
機械学習モデルが適切に回答してくれます。
最近では、Webサイトの問合せなどもこのチャットボットが使われています。
―そういわれてみると、普段よく使用するものも多いですね!身近なところでもたくさんの自然言語処理が使用されているんですね!
石橋:
そうなんです!
身近なところに機械学習が使用されていると嬉しくなりますよ(笑)
瓦:
翻訳について、どのように生成しているのかを掘り下げてみます。
例えば、
① I have a pen.
私はペンを持っています。
② My brother is a teacher.
私の兄は教師です。
③ My brother has a pen.
私の兄はペンを持っています。
④ Bob is a teacher.
ボブは教師です。
①~④のような文のペアを学習させた場合、
「a teacher」=「教師」
「a pen」=「ペン」
「My brother」=「私の兄」
上記のように、単語の関連性を学習していくことができます。
学習した単語が多ければ多いほど、
モデルにとって、文章としては未知なものが入力されても
「I am a teacher=私は教師です。」や
「Bob has a pen=ボブはペンを持っています。」というような翻訳結果を得られることが期待できます。
―文章生成にもたくさんの学習が必要なんですね!自然言語処理は、今後どのように応用されていくのでしょうか?
石橋:
最近では自然言語以外の領域に、自然言語処理のノウハウが応用される例が出始めています。
「バイオインフォマティクス(※1)」と呼ばれる領域の
遺伝子などの生体情報を扱っている分野での例が挙げられます。
DNA情報は自然言語ではありませんが、
数字の羅列で表すこともできるので、自然言語処理で使った手法を応用することができます。
急速に発展している機械学習、そして、自然言語処理の恩恵を受け、
ワクチン開発のスピードが飛躍的に高まることや
ウイルスや細菌の研究スピードが加速することが期待されています。
タンパク質を自在に設計できるようになると、
食料問題や環境問題などの新しい切り口の解決策になるかもしれませんね。
(※1)バイオロジー(生物学)とインフォマティクス(情報学)の2つの分野を融合した学問分野のこと。
―分野を超えて様々な応用が期待されているんですね!これまで3回に渡って機械学習の勉強をしてきましたが、これらの技術が組み合わさることもあるのでしょうか?
石橋:
はい。実際に、当シリーズ vol.2でご紹介した画像生成タスクと
自然言語処理を組み合わせることでキャプション生成も可能です。
キャプション生成とは、画像の説明文を機械学習モデルで生成することです。
当社のインターン生が試した内容を、Tech Blogでご紹介していますのでぜひご覧ください。
https://tech.fusic.co.jp/posts/2020-10-09-img-caption/
―タスクを組み合わせることで、様々なことができるようになるんですね!瓦くんは、大学院在籍中に「自然言語処理」について研究をしてきたと聞きましたが、今後Fusicでどんなことに挑戦してみたいですか?
瓦:
前述した「対話」システム、いわゆるチャットボットに挑戦してみたいです。
実は、雑談ができるチャットボットを作るというのは難しいことです。
現在使われているチャットボット、
例えば、ゴミの出し方について質問できる福岡市のLINE Botなどは
必要な知識量が限られ、またシステマチックに応答ができることから、
特定のドメインの質問に対して応答することが多いです。
一方、雑談ができるチャットボットは多くの知識を持ち、臨機応変にレスポンスを返さなくてはなりません。
どうすれば雑談ができるチャットボットが作れるだろう?と考えるとワクワクしてきます。
また、普段の業務においても
自然言語処理の技術を使い、業務効率があがるシステムを開発していきたいですね。
―今後の開発に期待しています!最後に、Fusicに機械学習を用いた開発を依頼するメリットを教えてください。
瓦:
Fusicでは、お客様のご希望やニーズに合わせて、
多岐にわたる支援ができるところですね。
概念実証(PoC)をはじめ、実行環境を構築することも可能ですし、
Webシステムに機械学習を組み込むこともできるので、
お客様の課題に合わせて、様々なシステムをご提案できます。
お困りごとはぜひ当社へ!
石橋:
自然言語処理を含め、機械学習はたくさんの可能性を秘めています!
今回のシリーズを通して「機械学習って面白い!」と感じていただけたら嬉しいです。
--
=======
Fusic 機械学習チームでは、案件のご相談を随時受け付けております。
お気軽にお声がけください。
【お問合せ先】
過去の機械学習記事