検索
column & blog
DX技術本部

自然言語処理(NLP)

AIを活用した自然言語処理(NLP) 5つのポイント

開発者が語る、
AIを活用した自然言語処理(NLP) 5つのポイント

システム情報の古山と申します。
今回は自然言語処理について、いくつかの重要なポイントをおさえつつお伝えできればと思います。

プロフィール 古山理々子

1.これだけは押さえておきたい!自然言語処理の基礎知識
自然言語というのは、人が日常的に話し、聞き、読み書きしている言語を言います。
また、自然言語処理というのは、その自然言語をコンピュータ上で扱うための技術のことを指します。
以下に自然言語処理で用いられる代表的な用語を説明します。

(1) オントロジー
情報の意味を示すための、概念・仕組みのことを言います。
個々の情報の繋がりを明らかにし、構造化し、整理するモデルです。

オントロジー
上図の例では、「生物」という概念は「植物」と「動物」に分類され、「動物」は「犬」と「猫」に分類され、「猫」は「頭」「胴体」「足」「しっぽ」という属性を持ち、「足」には「肉球」があり…、といった具合に世の中のさまざまな物事を整理することで、モノとモノの関係性や、モノが持つ情報を表現できるといったものがオントロジーです。

(2) コーパス
コーパスは、処理するデータを大量に集めたものです。例えばテキストコーパスは文章を大量に集めたもので、新聞記事や雑誌、小説、辞書などが挙げられます。音声コーパスは音声を大量に集めたもので、対話、インタビュー、講演などが挙げられます。

要は、データの集まりのことをコーパスと言いますが、AIにおいてはコーパスを集めることが非常に重要で、コーパスが充実しているかどうかがAIの成否を分けるポイントとなります。

(3) ディープラーニング(深層学習)
次は自然言語処理でディープラーニング(深層学習)を用いた手法について説明します。
ディープラーニングを用いた自然言語処理としては、2010年頃にRNNやLSTMといったモデルが頻繁に利用されていたところから始まります。

その後、大きな変換点となったのが、2013年にword2vecと呼ばれる、単語をベクトル表現に変換する手法の誕生です。これによって単語同士を足し引きで演算することや、単語同士の類似度を計算することが可能になりました。
ベクトル表現自体が非常に表現力の高い表現方法であることから、それ以降のモデルは単語をベクトル化してから処理する方式が前提となり、ベクトル表現のモデルとしてGlove, FastTextといったモデルも出てきました。

次の転換点としては2017年、Transformerと呼ばれる翻訳用のモデルが提案されたことです。
このTransformerのモデル内部では、Attentionという仕組みを用いており、このAttentionがモデルの精度を高めることを可能とし、汎用性が高く、並列処理が高速である特徴から、Transformer以降はAttentionを利用したモデルが多く提案されています。
有名なモデルとしてBERT*1が挙げられますが、文章生成に使われるGPTといったモデルもあり、これらのモデルは全てAttentionをベースとしたモデルとなっています。

ディープランニング

*1 BERTは2018年にGoogleから発表された自然言語処理のためのモデルで、Attentionが内部で利用されており、非常に精度の高いモデルとして当時は話題になりました。日本語の事前学習モデルも公開されており、日本国内では最も盛んに利用されているモデルの一つです。
BERTはGoogleの検索エンジンにも利用されており、世界的にも普及が進んでいるモデルで、日本国内でも多く商用利用されているモデルです。

▲ページトップへ戻る

2. 失敗しない自然言語技術の選び方

(1) 深層学習 VS 統計的手法
自然言語技術は大きく分類すると、「深層学習」と「統計的手法」の2つに分類されます。
この2つの手法は目的に応じて使い分ける必要があり、精度を求める場合には「深層学習」、解釈性を求める場合には「統計的手法」を用います。

深層学習VS統計的手法
深層学習は自動翻訳、チャットボット、音声対話システムなど、精度を求めるソリューションに適しており、統計的手法はテキストマイニング、データ分析、テキスト分析など入出力に対して解釈(相関関係)を求めるソリューションに適しています。解釈性を求める統計的手法は、結果に対して何らかの理由付けを求める必要がある場合に適していると言えます。
深層学習・統計的手法

(2) 自然言語タスクによる選定
自然言語タスクによる選定
自然言語処理のタスクは非常に種類が多く、30種以上が存在します。

自然言語タスク①

自然言語処理における全体としてどのようなタスクが存在するか理解しておくことが非常に重要で、このタスクを知ることで、「どの業務にどのタスクが適用できるか」といった応用範囲の勘所を掴むことができます。よくある失敗ケースとして「BERTで何かをしたい」といった技術起点に物事を進めてしまい、解決すべき課題が何であるのか、目的を見失っている事例があります。
まずは目的をしっかりと定め、どのタスクに適用できるのか、そのためにどの技術を採用するのかといったプロセスで進めていくことが重要です。

自然言語タスク②

また、開発を進めていく上で、最中に方向性を変えることもあり、他のタスクの方が適している、複数のタスクを組み合わせた方がより適していることも起こり得ることから、具体的なタスク選定においては有識者の意見を取り入れることも重要です。

▲ページトップへ戻る

3. 自然言語処理はデータが命

データの種類は「辞書」と「コーパス」の2種類があります。「辞書」は単語、「コーパス」は文章のリストのことを示します。

(1)辞書
辞書に関しては、基本辞書としてIPA辞書、Unidicの2種類があり、一般の方が利用する言葉は、この2種類の辞書で概ね網羅されています。
但し、実際に自然言語処理をサービス利用していく上では、独自の言葉を辞書として追加していく必要があり、商品名・社名・略語・社内用語や類義語、専門用語などが該当します。
(2) コーパス
コーパスはAIにおける学習データとなるもので、「タグ無しコーパス」、「タグ付きコーパス」、「対訳コーパス」の3種類に分類されます。
「タグ無しコーパス」は最もシンプルなコーパスで、Webサイトをクロールして収集したHTMLや、小説などのそのままの文章のことを意味します。
「タグ付きコーパス」は文章に対して、何らかの正解ラベルが付けられたものになります。FAQように質問文に対しての回答文、文書分類においてどのクラスに属するのかなど、文章に対して情報を付与したものを意味します。
「対訳コーパス」は、文章と文章が対となる形でまとめられたコーパスです。例として、翻訳のデータのように英語と日本語が対になってまとめられたものなどがあります。
辞書・コーパス
自然言語処理においてはデータが命です。
例えばチャットボットで「何も答えられない」、「検索しても欲しい情報が得られない」といった声が出てくるケースがあります。自然言語処理では「辞書」にない単語を入力しても、コーパスに存在しない文章を検索しても答えることはできません。必要な単語は「辞書」として登録し、想定される質問はコーパスを集めて登録 する必要があります。まさに自然言語処理はデータの充実が成否に直結するのです。
(3) データ収集・作成する上でのポイント
それでは、どのようにデータを作成していけば良いのか説明します。
自然言語は画像データ・音声データ等と比較して、「あいまいさ」があることが特徴です。
そのため、利用されるポイントに沿った学習データを作成することで、不要な「あいまいさ」を排除して品質の良いデータを作成することが重要になってきます。
(あいまいさの例・・・年末:年の瀬、歳末:年の暮れ)
データ収集・作成する上でのポイント

4. 忘れてはいけない!前処理の重要性

忘れてはいけない!前処理の重要性
自然言語処理では、技術面に注目しがちですが、「前処理」も非常に重要な作業です。
自然言語処理における前処理は大きく4つに分類されます。

忘れてはいけない!前処理の重要性

テキストのクリーニングは、テキスト内に含まれるノイズを除去する工程です。例えば、Webクローリングしたデータであればhtmlのタグの除去、文章データであれば無駄な行、スペースの除去、twitterなどのSNSでは絵文字や特殊文字を除去するなど、文章の情報のみに処理する必要があります。次にクリーニングしたデータを、形態素解析器を利用して単語を分割していきます。データの分割は辞書データを元に行います。
ここから、単語の正規化、ストップワードの除去をする必要があります。指しているものは同じであるが、呼び方が微妙に異なっているような用語を統一します。「振り込み」と「振込」、「です」・「ます」といった不要な表現の除去が必要になります。
最後のステップが単語のベクトル化です。コンピュータは単語をそのまま理解できないので、単語の情報を数値に変換するステップです。

苦労して集めた辞書もコーパスも、正しく前処理をしなければその価値が失われてしまいます。
開発段階で高い精度だったものが、実際に商用利用すると精度が下がってしまう要因の1つとして、「前処理の不備」が挙げられ、特に前処理の精度は注意が必要です。

▲ページトップへ戻る

5. 成否を分けるのは、最後は人

成否を分けるのは、最後は人
ここからは実際の開発経験に基づくお話です。
例えば、Q&Aのチャットボットでは、サービスの基軸となるデータ(どういった質問があり、どのような回答をすべきか)の作成は、最も利用者に近いお客様に依頼することが多いかと思います。
一般的なコンシューマに向けたサービスであれば、汎用的なQ&Aを推測して文章を作成することは可能ですが、お客様の企業が利用するサービスなどは、利用されるお客様の知識レベルに依存することから、データはお客様が中心になって用意した方が、より実用的なサービスを構築することができるのです。
思い込みで進めてしまい、ターゲットとなるペルソナを定義できていない、また利用者の知識レベルを考慮しなかったり、利用シーンを想定せずに専門性の高いものを求めてしまったが故に、サービス構築のための工数が肥大化してしまったり、高い費用をかけて「使えない」サービスを構築してしまうケースが生じてしまいます。

成否を分けるのは、最後は人

最後となりますが、これまでのご説明の通り、自然言語処理を利用したサービスは、そのサービス構築に関わるヒトが利用価値のあるデータを作成できるかが成否を分けます。
自然言語処理における学習は、専門知識を持った「人」のコピーを作るようなものなので、自ずと学習データの品質は「人」に依存します。モデルを開発するのも「人」、そのモデルを成長させていくのも「人」。自然言語処理によるサービスの構築は、挑戦の精神を持ち、先進の技術に興味を抱き、試行錯誤を繰り返しながらサービスを成長させていくためのマインドセットを持つ、「人」が何より重要なものなのだと思います。

▲ページトップへ戻る

※掲載の会社名・製品・サービス名・ロゴマーク等は各社の日本および他国における商標または登録商標です。
※掲載の画面は、すべてイメージです。また、掲載している文章、写真、画像、データ、イメージについて弊社の許可なく無断転用・ 転載・変更・改ざんすることを固くお断りします。