自然言語処理について勉強してみた

# はじめに
この記事は、社会人大学生が自然言語処理についてこれまでの学習をまとめた記事です。
自然言語処理について興味がある方は是非読んでみてください。

:::note warn
この記事は筆者が学んだことをアウトプットした記事です。
自然言語処理の専門家ではないので間違っていることを書いている可能性があります。ご注意ください。
:::

# 自然言語処理とは
自然言語処理（NLP: Natural Language Processing）とは、人間の言語をコンピュータに理解させ、処理し、生成する技術と研究分野のことを指します。
NLPは、言語学、コンピュータサイエンス、人工知能の交差点に位置し、人間の言語を機械が理解しやすい形に変換し、その情報を基に様々なタスクを実行することを目指しています。
例えば、chatGPTなどはまさしくこの自然言語処理を使用しています。
日本語で「今日の天気は？」と入力してもコンピュータは理解してくれません。
感覚的には、日本人が外国語を聞いて理解できないのと似ていると思います。
これをコンピュータに理解させようとする分野が自然言語処理ということです。

ちなみに、自然言語とは日本語や英語などの人間が普段使っている言語のことです
一方で人工言語は、C言語やJavaなどのプログラミング言語のことです。

では自然言語処理の難しさについてみていきましょう。

# 自然言語処理の難しさ
当然ながら、コンピュータは自分で日本語の意味を知ることはできません。
人工知能があれば可能じゃないか！と思うかもしれませんが、人工知能も前提知識なしに日本語を理解することができません。
人工知能であっても、大量の教師データや前提データをもとに事前学習する必要があります。
例えば、最近「草」という言葉を面白いという意味で使用することがありますが、まさにこの面白いという意味の「草」をコンピュータは理解出ません。
日本においてはこのような新しい言葉が毎年誕生しています。
このように言葉の意味をコンピュータに理解させるには大量のデータを準備する必要があるのです。
また、文法の理解やほかのごとの自然な結びつきなど、考慮する点が多くあります。
これが自然言語処理の難しさです。

ここからちょっと難しい内容です。

# 文字コード
コンピュータは0 or 1の並びで文字を認識します。
この基本単位を1ビット、8ビットを1バイトといいます。
コンピュータに文字を認識させるために使用するのが文字コードです。
文字コードにはいろいろな種類がありますが現在主流なのは可変長のUTF-8という文字コードです。
文字によって、1バイト、2バイト、3バイトといった風に分かれています。これによってさまざまな国の文字を表現できるようにしたのがUTF-8です。

# 言語リソース
簡単に言うと、研究に使われる言語資源です。
テキストの集合であるコーパスなどが該当します。

## コーパス
・**生コーパス**
単に文章を集めたもの
・**対訳コーパス**
機械翻訳の重要な知識源
・**注釈付与コーパス**
一定規模のコーパスに対して言語的な解釈を付与したコーパス

コーパスの例
**Brown Corpus**: 英語のさまざまなジャンルからなる大規模なテキストコレクション。
**British National Corpus (BNC)**: 現代のイギリス英語を代表する100万語のテキストコレクション。
**Balanced Corpus of Contemporary Written Japanese (BCCWJ)**: 現代日本語のバランスの取れたコーパス。

コーパスというのは大量のテキストデータを提供してくれるので、このコーパスを使用することで言語モデルや、アルゴリズムを効果的に訓練することができます。
chatGPTもコーパスを使用して訓練が行われたそうです。

# 言語モデル
さっき少し出てきた**言語モデル**について私の理解を書きます。
言語モデルは、自然言語のテキストを理解し、生成するための統計的・機械学習的なモデルです。
これらのモデルは、大量のテキストデータを基にして、言語のパターンや規則を学習し、特定のタスクに対する予測や生成を行います。
つまり、言語モデルというのは、与えられた文脈から次に来るべき単語を予測したり、文脈に基づいて自然な文を生成したりするものです。
また、テキストの意味を理解し、質問応答やテキスト分類などのタスクを実行したりします。
## 言語モデルの種類
以下、私が調べた言語モデルの種類です
- **n-gramモデル**
**概要**：テキスト中のn個の連続した単語（n-gram）の出現頻度を基に予測を行うモデル
**使用例**: 基本的なテキスト予測や自動補完

- **確率的言語モデル（PLM）**
**概要**: 各単語が与えられた文脈に対してどの程度適合するかの確率を計算します
**使用例**: 音声認識システムや機械翻訳

- **ニューラルネットワークベースのモデル**
**概要**: 特に深層学習を利用したモデル。大量のデータと計算リソースを活用して高精度な言語理解・生成を行います
**使用例**: GPT（Generative Pre-trained Transformer）シリーズやBERT（Bidirectional Encoder Representations from Transformers）

## 使用例
実際にどのモデルがどのようなシステムに使われているか調べました。
- **テキスト生成**
例: OpenAIのGPT-3は、人間のように自然なテキストを生成する能力を持っています。例えば、ストーリーの続きを書いたり、詩を生成したりします
- **翻訳**
例: Google翻訳は、ニューラル機械翻訳（NMT）を使用して、言語モデルを基に正確な翻訳を提供します 
- **質問応答システム**
例: Chatbotや仮想アシスタント（例えば、AppleのSiriやAmazonのAlexa）は、言語モデルを使用してユーザーの質問に対する自然な応答を生成します
- **テキスト要約**
例: ニュース記事や長い文書を簡潔にまとめるために、言語モデルが使われます。これにより、重要な情報を短時間で把握することができます
- **感情分析**
例: 顧客のフィードバックやレビューの感情を分析するために使用され、ポジティブ、ネガティブ、ニュートラルといった感情を分類します

言語モデルは、テキストデータから言語のパターンを学習し、それを基に様々なタスクを実行します。
これにより、自然な言語生成、翻訳、質問応答、テキスト要約、感情分析など、広範な応用が可能となります。言語モデルの進化により、NLPの精度と効率は劇的に向上し、実世界での利用もどんどん広がっています。

# ニューラル自然言語処理
今回の記事で一番触れておきたい部分です。
この記事はニューラル自然言語処理までの復習で終了とします。
**ニューラル自然言語処理（Neural Natural Language Processing, Neural NLP）** は、ニューラルネットワークを用いて自然言語を処理・理解する技術です。
これにより、従来の手法では難しかったタスクが高精度に実行可能となります。以下に、ニューラルNLPの主要な要素や応用について説明します。
## ニューラルネットワークの基礎
- ニューラルネットワーク
脳の神経細胞（ニューロン）を模倣した計算モデル。多層のノード（ニューロン）で構成され、入力データを処理して出力を生成
- ディープラーニング
多層ニューラルネットワーク（ディープニューラルネットワーク）を用いた機械学習の一分野。特に、膨大なデータセットから特徴を自動で学習する能力がある
## ニューラルNLPのアーキテクチャ
- Recurrent Neural Networks (RNNs)
時系列データの処理に適したニューラルネットワーク
特に、長短期記憶（LSTM）やゲート付き再帰ユニット（GRU）などの改良版が使用されます
- Convolutional Neural Networks (CNNs)
主に画像処理で用いられるが、テキストの特徴抽出にも適用可能。例えば、文の中のn-gramパターンの検出に使用されます
- Transformers
注意機構（attention mechanism）を中心に設計されたモデル
BERT（Bidirectional Encoder Representations from Transformers）やGPT（Generative Pre-trained Transformer）が代表例です

## 主要なモデルと技術
- Word Embeddings
単語を連続ベクトルとして表現する技術。Word2VecやGloVeが代表的な手法
これにより、意味的に類似した単語が近いベクトルとして表現されます
- BERT
文脈を双方向から捉えることができるモデル
事前学習とファインチューニングの2段階でトレーニングされ、様々なNLPタスクに応用されています
- GPT
生成モデルで、文脈に基づいて自然なテキストを生成
特にGPT-3はその巨大なパラメータ数と高精度な生成能力で注目されています

## ニューラルNLPの応用例
- 機械翻訳
言語間のテキストを翻訳
例えば、Google翻訳やDeepLなどがニューラルNLPを活用しています
- 音声認識
音声データをテキストに変換
SiriやGoogle Assistantなどの音声アシスタントに利用されています
- 感情分析
テキストから感情や意図を抽出
顧客フィードバックやソーシャルメディアの分析に使用されます
- テキスト要約
長文のテキストを要約
ニュース記事の自動要約やレポート作成に役立ちます
- 質問応答システム
ユーザーの質問に対して自然な応答を生成
例えば、カスタマーサポートのチャットボットに利用されます

つまり、このニューラル自然言語処理はいろいろなところで使用されています。
おそらく皆さんも使ったことがある機能が含まれていたのではないでしょうか？
自然言語処理は今後のITの発展には欠かせません。
勉強してみるのもいいかもしれませんね！