Natural Language Processing (NLP)
自然言語処理(NLP)は、トークンからLLMまで、人間の言語をコンピューターが分析、理解、生成できるようにするAI分野です。
自然言語処理(NLP)は、コンピューターがテキストや音声による人間の言語を分析、理解、生成できるようにする人工知能(AI)の分野です。タスクは文章中の名前の特定から、本の翻訳や会話まで多岐にわたり、計算言語学と機械学習、ディープラーニングを組み合わせています。ウェブ検索、スパムフィルター、音声アシスタント、スマートフォンのキーボード候補、大規模言語モデル(LLM)を基盤とするチャットボットは、いずれもNLPを利用しています。
ルールベースから大規模言語モデルへ#
1954年のジョージタウン大学とIBMによる実験では、250語の語彙と6つの文法規則を使い、ロシア語の文章を60文以上英語に翻訳しました。Joseph WeizenbaumのELIZA(1966)は、キーワードと定型応答を照合し、心理療法士を模倣しました。手書きのルールでは実際のテキストの曖昧さや多様性に対応できなかったため、1980年代後半からは、注釈付きテキストから確率を学習する統計的NLPが使われるようになりました。隠れマルコフモデルは品詞をタグ付けし、統計的機械翻訳は何百万もの翻訳済み文ペアから学習しました。
2010年代にはニューラルネットワークが主流になりました。Word2vec(2013)は、関連する単語を近くに配置する埋め込みを学習し、リカレントニューラルネットワーク(RNN)は文を1語ずつ読み取りました。トランスフォーマー(2017)は、再帰処理をセルフアテンションに置き換え、すべての単語を並列に相互に関連付けました。BERTやGPTなどの事前学習済みトランスフォーマーは、ラベルなしテキストから言語を学習するため、各タスクで必要なラベル付きデータセットは少量で済みました。2022年11月のChatGPT公開以降、LLMは文章による指示だけで多くのNLPタスクを処理しています。
NLPシステムによるテキストの表現方法#
最新のNLPシステムは、まずテキストを、単語全体またはトークン化によって得られるサブワード単位に分割し、各トークンを埋め込みベクトルに変換します。通常はトランスフォーマーであるニューラルネットワークが、その系列を、各トークンのベクトルに周囲の情報を反映した文脈ベクトルに変換します。タスク固有の出力は、テキスト全体に対する1つのラベル、各トークンに対するタグ、回答範囲の開始位置と終了位置、または新たに生成されたトークンを読み取ります。意味はベクトルに表現されるため、異なる単語を使う文でもベクトル空間上で近くに配置されることがあります。all-MiniLM-L6-v2文エンコーダーはその例です。
from sentence_transformers import SentenceTransformer
# A small sentence encoder maps each text to a 384-dimensional vector
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
query = "How do I reset my password?"
candidates = ["I forgot my login credentials", "How do I reset my router?"]
# Encode all texts, then compare the query with each candidate by cosine similarity
embeddings = model.encode([query, *candidates])
scores = model.similarity(embeddings[0], embeddings[1:])[0]
for text, score in zip(candidates, scores):
print(f"{score:.2f} {text}")言い換えの「ログイン情報を忘れました」は質問とのスコアが0.68ですが、質問の6語のうち5語を繰り返す「ルーターをリセットするにはどうすればよいですか?」のスコアは0.53です。セマンティック検索と検索拡張生成(RAG)の検索段階では、同じ比較によって文書を順位付けします。
代表的なNLPタスク#
- 感情分析: レビュー、投稿、アンケート回答に含まれる意見を、ポジティブ、ネガティブ、中立に分類します。
- 固有表現認識(NER): 人物、組織、場所、日付の各言及にタグを付けます。
- 質問応答: 文書の一覧ではなく、質問への回答を返します。
- テキスト要約: 文書の要点を保ちながら、より短いテキストにまとめます。
- テキスト生成: トークンを1つずつ新たなテキストを生成します。チャットボットやコーディングアシスタントの基盤となるタスクです。
コンピュータービジョンにおけるNLP#
人は言語を使ってコンピュータービジョンモデルに何を探すかを指示します。また、NLPとビジョンの組み合わせにより、画像について読み書きするモデルが生まれました。視覚言語モデル(VLM)は写真について質問に答えたり、画像キャプションを書いたりします。CLIPは、4億組の画像とキャプションから、画像とテキストの共通埋め込み空間を学習しました。オープンボキャブラリー検出器は、クラス一覧をテキストとして受け取ります。Ultralytics YOLOE-26モデルでset_classes(["double-decker bus", "person"])を呼び出すと、各クラス名がCLIPトークナイザーでトークン化され、AppleのMobileCLIP2テキストエンコーダーでエンコードされます。検出器はそのテキスト埋め込みを画像領域と照合し、学習時に一度も見ていないカテゴリを検出・セグメンテーションします。
NLPと関連用語の違い#
- 自然言語理解(NLU): ユーザーの意図や代名詞の指示対象など、意味の理解に関わるNLPの分野です。テキストを生成する自然言語生成(NLG)が、もう1つの主な分野です。
- 大規模言語モデル: 数十億のパラメーターを持ち、プロンプトによって多くのNLPタスクを実行するトランスフォーマー言語モデルです。1つのタスクに特化して学習した小規模モデルよりも、リクエストあたりのコストが高くなります。
- 音声認識: 音声をテキストに変換し、そのテキストをNLPモデルが解釈します。
- 光学文字認識(OCR): 印刷または手書きのテキスト画像を文字に変換します。スキャンした文書をNLPで読み取る前に行う最初の処理です。










