自然言語処理(NLP)とは?意味と仕組みをわかりやすく解説|できること・技術の歴史・Pythonで試す方法

NLP(自然言語処理、Natural Language Processing)とは、日本語や英語のように人が日常で使う言葉を、コンピューターで分析・理解・生成するための技術の総称です。かな漢字変換、検索エンジン、機械翻訳、迷惑メールの判定、ChatGPTのような対話AIは、どれも自然言語処理の技術でできています。

この記事では、NLPの意味、コンピューターにとって言葉の何が難しいのか、文章を処理する手順、できることの一覧、ルールベースから大規模言語モデル(LLM)までの技術の移り変わりを順に説明します。後半では、Pythonで日本語の文章を単語に分けたり、似た文章を探したりする小さな例を、実際に動かした結果つきで紹介します。

なお「NLP」という略語は、心理学・自己啓発の分野で「神経言語プログラミング(Neuro-Linguistic Programming)」を指すこともあります。この記事で扱うのは、AI・コンピューターの分野の自然言語処理です。

自然言語処理(NLP)の意味

「自然言語」は、日本語・英語・中国語のように、人の社会の中で自然に生まれて使われてきた言葉のことです。これに対して、PythonやJavaのようなプログラミング言語は、人が目的を持って作った「人工言語(形式言語)」です。

プログラミング言語は文法が厳密に決められていて、1つの書き方には1つの意味しかありません。自然言語はそうではなく、同じ文が文脈によって違う意味になり、省略や言い換えも当たり前に起こります。この「あいまいな言葉」をコンピューターで扱えるようにするのが自然言語処理です。

自然言語 プログラミング言語
例 日本語、英語 Python、Java
文法 例外が多く、時代とともに変わる 厳密に定義されている
意味 文脈で変わる(あいまい) 1つに決まる
省略 主語の省略などが普通に起こる 書かれていないことは実行されない

コンピューターにとって言葉が難しい理由

単語の区切りがない(日本語の場合)

英語は単語の間に空白がありますが、日本語にはありません。そのため、まず文を単語に区切る作業が必要になります。区切り方を間違えると意味が変わります。後で実際に動かしますが、「外国人参政権」は辞書と区切り方の規則によっては「外国/人参/政権」と区切られてしまいます。

同じ言葉に複数の意味がある

「かける」は、電話をかける・眼鏡をかける・時間をかける・塩をかける、と文脈でまったく違う意味になります。人は前後の文から自然に判断しますが、コンピューターにはその判断の手がかりを与える必要があります。

書かれていないことを補う必要がある

「明日行ける?」「ちょっと厳しいかな」という会話では、「行けない」とはどこにも書かれていません。言外の意味や常識を補って理解することは、長く自然言語処理の難題でした。

自然言語処理の基本的な流れ

文章を処理するときは、おおむね次の順に解析を進めます。どの段階まで行うかは目的によって変わります。

段階 やること 例
形態素解析 文を意味を持つ最小単位(形態素)に分け、品詞を付ける 「今日/は/良い/天気/です」
構文解析 単語どうしの係り受け(どの語がどの語にかかるか)を調べる 「良い」が「天気」にかかる
意味解析 単語や文の意味を決める 「かける」がどの意味かを決める
文脈解析 複数の文にまたがる関係を扱う 「それ」が何を指すかを決める

最近の大規模言語モデルは、これらの段階を明示的に分けずに、大量の文章から一度に学習します。それでも、検索や分析の前処理では形態素解析が今も広く使われています。

自然言語処理でできること

タスク 内容 身近な例
テキスト分類 文章をカテゴリに分ける 迷惑メールの判定、問い合わせの振り分け
感情分析 文章が肯定的か否定的かを判定する 商品レビューの集計
固有表現抽出 人名・地名・組織名・日付などを抜き出す 契約書から日付や会社名を拾う
情報検索 質問に関係の深い文書を探す 検索エンジン、社内文書の検索
機械翻訳 ある言語の文を別の言語に訳す 翻訳アプリ
要約 長い文章を短くまとめる 会議の議事録の要約
質問応答・対話 質問に答える、会話を続ける チャットボット、対話AI
文章生成 条件に合わせて文章を作る メールの下書き、コードの生成
音声との組み合わせ 音声認識の結果を理解し、返答を音声にする スマートスピーカー、音声アシスタント

AI-OCRや会話解析など、自然言語処理を事業にしている国内企業はAI-OCR・文書AI・自然言語処理の国内企業17社にまとめています。

技術の移り変わり:ルールから大規模言語モデルへ

ルールベース

初期の自然言語処理は、人が文法や辞書をもとに「この形ならこう処理する」という規則を書いていました。動きが説明しやすい反面、規則にない表現には対応できず、規則を書き足す作業に終わりがありません。

統計的手法・機械学習

次に、大量の文章から単語の出現のしかたを数え、確率で判断する方法が主流になりました。文章を単語の出現回数のベクトルにして、分類器で迷惑メールを判定する、といった方法です。機械学習そのものの仕組みは機械学習とは?仕組み・種類・できることを簡単に解説で説明しています。

単語の意味をベクトルで表す(word2vec)

2013年に発表されたword2vecの論文(Mikolovら)は、単語を数百次元の数値の並び(ベクトル)で表し、意味の近い単語が近いベクトルになるように学習する方法を示しました。単語の「意味の近さ」を計算で扱えるようになったことが、その後の深層学習による自然言語処理の土台になりました。

Transformerと事前学習モデル(BERT・GPT)

2017年の論文「Attention Is All You Need」で提案されたTransformerは、文中のどの単語に注目するかを計算する「Attention(注意機構)」だけで文を処理するモデルです。2018年には、Transformerを大量の文章で事前学習してから個別のタスクに合わせて調整するBERTが発表されました。2020年のGPT-3の論文「Language Models are Few-Shot Learners」は、モデルを大きくすると、少数の例を示すだけで新しいタスクをこなせることを示しました。Transformerの仕組みはTransformerとは?仕組みをわかりやすく解説で詳しく扱っています。

大規模言語モデル(LLM)と生成AI

現在のChatGPT、Claude、Geminiといった対話AIは、この流れの先にある大規模言語モデルです。翻訳・要約・分類・文章生成など、以前はタスクごとに別のモデルを作っていた処理を、1つのモデルへの指示(プロンプト)でこなせるようになりました。一方で、もっともらしい誤り(ハルシネーション)を出すことがある、学習した時点より新しい情報を知らない、といった性質もあるため、事実の確認は今も人の仕事です。AI全体の歴史はAI(人工知能)の歴史をわかりやすくにまとめています。

Pythonで自然言語処理を試してみる

自然言語処理は、Pythonのライブラリを使うと数行で試せます。ここでは、pipでインストールできる純Python製の形態素解析器Janome(0.5.0)と、機械学習ライブラリscikit-learn(1.9.1)を使いました(Python 3.12で実行、2026年10月15日確認)。インストールはpip install janome scikit-learnです。

形態素解析:文を単語に分けて品詞を付ける

from janome.tokenizer import Tokenizer

t = Tokenizer()
for token in t.tokenize("今日は良い天気です"):
    print(token.surface, token.part_of_speech.split(",")[0], sep="\t")

実行結果:

今日	名詞
は	助詞
良い	形容詞
天気	名詞
です	助動詞

「です」は動詞ではなく助動詞と判定されています。品詞が分かると、「名詞だけを取り出してキーワードにする」といった処理ができます。

区切り方のあいまいさを確かめる

from janome.tokenizer import Tokenizer

t = Tokenizer()
for text in ["すもももももももものうち", "外国人参政権"]:
    print(" / ".join(t.tokenize(text, wakati=True)))

実行結果:

すもも / も / もも / も / もも / の / うち
外国 / 人参 / 政権

早口言葉の「すもももももももものうち」は正しく区切れていますが、「外国人参政権」は「外国/人参/政権」になりました。辞書にない語やまぎらわしい並びでは、こうした誤りが起こります。実務では、分野ごとの単語を辞書に追加して精度を上げます。

似た文章を探す:TF-IDFとコサイン類似度

文章を単語に分けたら、TF-IDF(その文書に多く、ほかの文書には少ない単語ほど重く数える方法)でベクトルにし、質問文とのコサイン類似度(ベクトルの向きの近さ)を計算します。簡単な検索エンジンの仕組みです。

from janome.tokenizer import Tokenizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

t = Tokenizer()
def wakati(text):
    return [tok.base_form for tok in t.tokenize(text)
            if tok.part_of_speech.split(",")[0] in ("名詞", "動詞", "形容詞")]

docs = [
    "Pythonでデータ分析を学ぶ",
    "Pythonで機械学習のモデルを作る",
    "週末に京都でお寺を巡る",
]
query = "Pythonの機械学習を学びたい"

vec = TfidfVectorizer(tokenizer=wakati, token_pattern=None)
X = vec.fit_transform(docs + [query])
scores = cosine_similarity(X[-1], X[:-1])[0]
for doc, s in sorted(zip(docs, scores), key=lambda x: -x[1]):
    print(f"{s:.3f}  {doc}")

実行結果:

0.573  Pythonで機械学習のモデルを作る
0.392  Pythonでデータ分析を学ぶ
0.000  週末に京都でお寺を巡る

「Python」「機械学習」が共通する文書がいちばん上に来て、共通する単語のない文書は0になりました。base_form(基本形)を使っているので、「学び(たい)」と「学ぶ」が同じ単語として数えられています。ただし、この方法は単語が一致しないと似ていると判定できません。「旅行」と「観光」のように言葉が違って意味が近い文章を見つけるには、word2vecやTransformerのように意味をベクトルにする方法が必要になります。

自然言語処理を学ぶ順番

  1. Pythonの基本:文字列の操作(分割・置換・正規表現)が自然言語処理の土台です。
  2. 形態素解析と単語の集計:JanomeやMeCabで文を区切り、単語の出現回数を数える。
  3. 機械学習で分類する:scikit-learnでTF-IDFと分類器を組み合わせ、文章を分類する。
  4. Transformerを使う:事前学習済みモデルを使って、分類や要約を試す。
  5. LLMを使ったアプリを作る:APIでLLMを呼び出し、自分のデータと組み合わせる。

テックジムは、東京・永田町に本校がある通学型のプログラミングスクールです。自分のペースでPythonを学び、詰まったところはその場でトレーナーに質問できます。まず試してみたい方は無料講座から始められます。

よくある質問

Q. NLPとは何の略ですか?

AIの分野ではNatural Language Processing(自然言語処理)の略で、人が使う言葉をコンピューターで分析・理解・生成する技術を指します。心理学・自己啓発の分野では、神経言語プログラミング(Neuro-Linguistic Programming)の略として使われることもあります。

Q. 自然言語処理とAI・機械学習の関係は?

自然言語処理はAIの研究分野の1つで、言葉を扱う技術全体を指します。機械学習は、その中で使われる主要な手法です。現在の自然言語処理の多くは、機械学習(特に深層学習)で作られたモデルを使っています。

Q. ChatGPTも自然言語処理ですか?

はい。ChatGPTは、Transformerをもとにした大規模言語モデルを使う対話AIで、自然言語処理の技術の1つです。翻訳・要約・分類・文章生成といった、自然言語処理の多くのタスクを1つのモデルでこなせます。

Q. 自然言語処理を学ぶにはどの言語がよいですか?

Pythonが一般的です。形態素解析のJanomeやMeCab、機械学習のscikit-learn、深層学習のライブラリなど、必要な道具がPythonでそろっています。

Q. 日本語の自然言語処理が難しいのはなぜですか?

日本語は単語の間に空白がないため、まず文を単語に区切る必要があり、区切り方によって意味が変わるからです。主語の省略が多いことも、文脈を補う難しさにつながります。

機械学習の全体像は機械学習とは?仕組み・種類・できることを簡単に解説|Pythonで動く例つきにまとめています。

自然言語処理は、テックジムのAIエンジニア養成コースの第1章「教師なし学習と自然言語処理入門」で扱っています。機械学習とディープラーニングを16章で順に学ぶコースで、章ごとに実務での使いどころ(想定案件)が示されています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら