[中級編]LLMへ至る道~自然言語処理ってなに?~[6日目]

2023.12.06

みなさんこんにちは!クルトンです。

前回ブログでは、評価指標についてご説明してきました。機械学習モデルの学習後のお話として、機械学習モデルの性能チェックのために使われるものについて簡単にチェックしていきました。

ここまでのブログで簡単にですが機械学習モデルがどういう時に使われるかや、学習や推論というステップがあること、損失関数や活性化関数、ニューラルネットワーク、学習後の評価指標について確認してきました。

本日からは、徐々にLLMで取り扱っている内容に近づいていきます。まずは人が扱う言語(日本語や英語など)をコンピュータが理解する分野、自然言語処理のご紹介から始めます。

自然言語処理って?

自然言語とは、人間が会話で使っている日本語や英語のような言語の事を言います。それらの言語をコンピュータが処理して扱う分野を自然言語処理と言います。

自然言語処理では、さまざまなタスク(解決したい特定のトピック)があります。以下に列挙してみます。

  • 形態素解析
    • 文章を単語レベルに分解した後に、各単語ごとにどのような品詞や活用形であるかを確認
  • 固有表現認識
    • 文章から、人名や知名、組織名や知名、日付や金額などの表現を認識
  • 文章の類似度判定
    • 文章Aと文章Bの内容が似ているか判定
  • 文章分類
    • 文章をカテゴリーに分類するもので、例えばネガティブやポジティブという文章のカテゴリーに分類
  • 文章生成
    • 与えられた文章に続く言葉を出力する、もしくは与えられた条件に合うような文章を出力

上記は一例ですが、同じ人間が使う文章を入力としても、出力はさまざまな用途に合わせて存在しています。

コンピュータが言葉を理解するためにしていること

機械学習モデルで自然言語処理を解くという事は、機械学習モデルの学習や推論のステップの時の入力は文章という事になります。

しかし、2日目のブログの損失関数のご紹介時でも触れた通り、入力されたものをコンピュータが受け取るには数値に変換する必要があります。

road-to-llm-advent-calendar-2023-02-01

文章や単語を数値の集まり、数学で言うところのベクトルに変換したものを分散表現と言います。どのように文章を分散表現へと変換していくのかは、明日以降に触れていきますが、ひとまずは今日のところは 「文章であっても数値の集まり(ベクトル)に変換すればコンピュータが理解できる」 という事を知っておけばOKです!

そして、文章を入力として受け取る機械学習モデルの中でニューラルネットワークを使うものを ニューラル言語モデル と言います。 ニューラル言語モデルについても明日以降にご紹介する予定です。

文章を分散表現にすると何が嬉しいのか

分散表現という数値変換した結果、コンピュータに処理をお任せできるというお話をしました。この分散表現というのはベクトルであるというお話もしましたが、ベクトルであるという所が重要なポイントになってきます。

ところでベクトルというのはどういうものか知っておられるでしょうか?知らない方やお忘れの方に一言で言うと、 距離と方向 を数値を使って表しているものです。

例えばPythonでは以下のようなものがベクトルを表しています。

[1.1, -1.3, 0.0519, 2.8943]

上記のようなベクトルという距離と方向が分かるものを学習するから、文章の類似度判定、文章分類、文章生成という事も可能となります。

文章の類似度、文章分類、文章生成について、アドベントカレンダーの後半に差し掛かったあたり(18日目頃)に簡単なPythonコードを使った例をご紹介する予定です。

文章を入力として可視化する機械学習以外の手法

本アドベントカレンダーでは機械学習について触れてきており、機械学習以外の事は紹介していませんが、自然言語処理についてせっかくですのでPythonコードで簡単に確認できる機械学習以外の例をご紹介しようかと思います。

その名もワードクラウドです。文章を可視化する方法で、見た目が面白いので良ければやってみてください。最小の簡単なコードで確認をしてみます。

実行環境はGoogle Colab(ランタイムはCPU)です。Googleのアカウントさえあればどなたでも無料で使えますので、ぜひお手元でご確認していただけたらと思います。

まず最初に日本語で表記するために必要なものをインストールします。

# 日本語フォントがないのでインストールする
!apt-get -y install fonts-ipafont-gothic

そして、ワードクラウドを生成するPythonコードを実行します。複数の文章の中でよく使われている単語がどれであるかを見た目で分かりやすくしたものになります。

from wordcloud import WordCloud
import matplotlib.pyplot as plt

input_text_data = """
これは ワードクラウドを 作成する 簡単 な サンプルコードです。
Pythonを 使って 文章を 可視化する と 見た目 が 面白いです。
機械学習の 手法 では 無いですが 自然言語処理と 言われる 分野は 他にも 様々な 面白い 内容が あります。
ワードクラウド について ご興味 持たれた 方は 次に MeCab や Sudachi という 形態素解析と 呼ばれる ツールを 調べてみると 良いかも しれないです。
"""

# ワードクラウドの生成
wordcloud = WordCloud(width=800, height=400, background_color="white", font_path='/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf').generate(input_text_data)

# 描画設定
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")

# ワードクラウドを表示
plt.show()

road-to-llm-advent-calendar-2023-06-01

ワードクラウドについてご興味持たれた方は、次に「形態素解析」というキーワードで検索してみてください。文章を形態素と呼ばれる単位で分けるにはどうすれば良いのか、という内容が確認できます。

終わりに

本日は自然言語処理について簡単にですがお話してきました。 自然言語処理という事で対象とする入力は文章であるものの、文章からどういう事を機械学習モデルにさせるかは多岐に渡ります。

本日のブログの内容で一番記憶に残しておいて欲しいのは、分散表現についてです。今後のブログの内容にも度々出てくると思います。

本日ご紹介したワードクラウドについて「次に調べると良いもの」として形態素解析というキーワードを出しました。実は明日ご紹介する内容は似ているところもあるトークナイザーというものをご紹介します。

本日はここまで。よければ明日のブログもご覧ください!