自然言語処理モデル(BERT)で文の意味上の類似度を計算

はじめに

この記事は GMOアドマーケティング Advent Calendar 2022 21日目の記事です。
おはようございます。こんにちは。こんばんは。
GMOアドマーケティングのY-Kです。


今回は、

「最近話題の自然言語処理の機械学習のモデルを自分でも軽く触ってみたい!
でも、難しいこと書かれててわからない(号泣)」

という層に向けて、
数ある自然言語処理モデルの中でも有名なBERTモデルを使って、文同士の意味の類似度を計算するという簡単なタスクを難しいことは極力置いといてやっていきます。

準備

今回もGoogle Colab上で行います。
https://colab.research.google.com/?hl=ja

BERTの学習には時間と膨大な学習データ、豊富なインターネットリソースが必要なので、
Hugging Face上で公開されている学習済みBERTモデルを利用していきます。時短です。
https://huggingface.co/


まずは必要なライブラリを使えるようにします。 次にライブラリのインポートを行い、 hugging face上で公開されているどの学習済みモデルを使うかを決め、 tokenizerと学習済みBERTモデルのインスタンスを生成します。 BERTも万能ではないので、文をまるまる全部与えられても解釈できません。

そこで、文の意味を理解しやすいように単語(token)ごとに区切り、さらにはその単語を数字ラベルに変換してあげるのが、tokenizerの役割になります。

ご飯を食べるとき、料理をそのまま人体には吸収できないので、噛んで小さくし消化して吸収し易くするのと似たようなものです。

文のベクトル化

BERTに文(単語)を渡すと、入力単語ごとのベクトルを吐き出します。
これを用いて、文を文の意味を表すベクトルに変換し、文同士の意味上の類似度を計算するために利用します。
変換する関数は以下です。 これで文をベクトル化できるようになりました。

文の類似度計算

文の類似度計算はcos類似度というものを使って算出します。
-1.0 ~ 1.0の間の値で、大きければ大きいほど文の意味が似ているという解釈ができます。 似た意味の文と比べたときよりも類似度が下がっています。

さいごに

今回はBERTモデルを使って、文の意味の類似度を算出するタスクを行いました。
pythonのライブラリで学習済みのモデルを使えば、専門的な知識がなくとも気軽に自然言語処理モデルを扱うことができると思います。
  • 小説をベクトル化して保存、入力された文の意味合いに似た小説を推薦する
  • 歌詞をベクトル化し似た意味合い(ジャンル)の他の歌を推薦する
など、いろいろなタスクに派生することができます。

明日はT.Oさんによる「SpotVMを使ってみる」です。
引き続き、GMOアドマーケティング Advent Calendar 2022 をお楽しみください!


■学生インターン募集中!
https://note.gmo-ap.jp/n/nc42c8a60afaf

■エンジニア採用ページはこちら!
https://note.gmo-ap.jp/n/n02cbeb6edb0d

■GMOアドパートナーズ 公式noteはこちら!
https://note.gmo-ap.jp/