Data 2022.08.08

文の類似度を計算する方法

プロフィール画像

仲山 由莉

こんにちは。ビジネス・インテリジェンス部の仲山です。

ビジネス・インテリジェンス部では、様々なデータを用いた分析業務を行なっています。
いきなりですが、以下A~Cの3つの文のうち、最も似ている組み合わせはどれだと思いますか。

A「猫は可愛い」

B「飼っている猫が可愛い」

C「ラジオを聴くことが日課だ」

AとBは猫の話をしているので、感覚的にAとBが似ている組み合わせである気がします。
しかしAとBがどのくらい似ているのか、定量的に判断することはできません。

そこで本記事では文同士の類似度を計算してみて、AとBの組み合わせが最も似ている組み合わせなのか、
またどのくらい似ているのか計算してみようと思います。

「自然言語処理とは」

普段私たちがコミュニケーションに使用している、日本語や英語などの言語のことを自然言語と言います。
本記事のテーマとして扱う文A~Cも自然言語です。
そして、自然言語処理とは自然言語をコンピュータに認識させて処理する技術のことです。
活用事例として、スマートフォンなどで文章を入力する際に表示される予測変換機能や、機械翻訳ツールなどがあり、
私たちの生活のとても身近なところで活躍している技術です。

「文の類似度を計算する手順」

文の類似度を計算する手順は大きく分けて以下の3つです。

  1. 形態素解析
  2. 文をベクトル化
  3. 文の類似度を計算

①形態素解析

形態素解析とは文を言語が意味をもつ最小単位まで分解することです。
すなわち文を単語単位に分解することです。
文A~Cに対して形態素解析を行うと、以下のようになります。

上記のように単語単位に分解することで、次のステップの文のベクトル化をすることができるようになります。

英語などのように、単語と単語の間がスペースで区切られている言語においては、この作業は容易ですが、日本語の場合はそうではありません。
文が単語で区切られていないため、単語の分解方法によっては全く異なる意味になってしまう可能性があります。
このようなことから、日本語の自然言語処理は難しいと言われています。

②文をベクトル化

ベクトルとは、数字の羅列のことです。
自然言語のままでは計算することはできませんが、ベクトル化することで類似度を計算できるようになります。

ベクトル化する方法は様々にありますが、本記事ではBag-of-Words(BoW)TF-IDFという手法を用いてベクトル化をしてみようと思います。
BoWとTF-IDFの共通している点は、どちらも単語の出現回数をもとにベクトル化をする手法であることです。
BoWを用いて文A~Cをベクトル化すると、以下のようになります。

ベクトルの次元数(列数)は、文A~Cの中に出現する単語数の次元になります。
文Aに注目すると、「猫」「は」「可愛い」列の値が1となっており、それ以外の列は全て0になっています。
このようにBoWでは、文中に出現していない単語であれば0、文中に出現する単語であれば単語の出現回数が入るベクトルになります。

TF-IDFを用いて文A~Cをベクトル化すると以下のようになります。

BoWでベクトル化した結果と比較すると、文中に出現していない単語列の値が0になっていることは変わりませんが、文中に出現している単語の列には単語の出現回数ではない値が入っています。
TF-IDFは単語の出現回数に加えて、他の文に出現しない珍しい単語なのかどうかを考慮してベクトル化する手法です。
出現回数が多く、他の文では出現しない単語ほど、TF-IDFの値は大きくなります。
文Aに注目すると、「猫」「可愛い」は文A内にそれぞれ1回出現しており、文Bにも出現する単語であるため、同じ珍しさとなっており同じ値になっています。
一方で、文A中の「は」という単語は文A内に1回出現しており、文B、Cのどちらにも出現しない単語です。そのため、「猫」「可愛い」という単語よりも「は」という単語の方がTF-IDFの値が高くなっています。

③文の類似度を計算

最後に、BoWとTF-IDFによって得たベクトルを用いて類似度を計算します。
本記事では、類似度の計算にコサイン類似度を使用します。
コサイン類似度とは、2つのベクトルがどのくらい同じ向きを向いているのか表現する手法です。
コサイン類似度は-1から1までの値をとり、2つのベクトルが同じ向きだと1に近い値になり、逆向きだと-1に近い値になります。
そのため、文A~Cそれぞれの組み合わせでコサイン類似度を計算し、その値が1に最も近い組み合わせが、最も似ている文の組み合わせになります。

BoWとTF-IDFによって得たベクトルをコサイン類似度で計算すると、それぞれの文の類似度は以下の通りとなります。

どちらの結果においても、文Aと文Bの類似度が最も高くなっており、冒頭で感覚的に似ていると感じた結果と同じ結果になりました。
また、どちらの結果においても文Aと文Cの類似度は0になっています。
文Aと文Cに共通する単語が出現していないため、全く類似していないという結果になりました。

まとめ

本記事では、形態素解析、文のベクトル化、類似度計算をして文の類似度を計算しました。
今回は3つの文を対象に類似度の計算を行いましたが、文の数をもっと増やして類似文の検索をすることも可能です。
さらに、機械学習のクラスタリングという手法を用いて、類似度が高い文ごとにグループ分けをすることも可能です。

また、今回は文中に含まれる全ての単語を対象にベクトル化をしました。
そして、TF-IDFでベクトル化したところ、文A「猫は可愛い」の助詞「は」のTF-IDF値が最も高いという結果になりました。
しかし、「猫は可愛い」という文中の「は」は助詞であり、重要な単語ではありません。
「は」よりも「猫」や「可愛い」という単語の方が文の特徴を判断するにあたり重要な単語であることが考えられます。

そのため、文の特徴に影響を与えると考えられる品詞、例えば名詞と動詞、形容詞などのみに絞ってベクトル化することで、このような問題は解消されるかと思います。

自然言語処理は、冒頭であげた活用事例の他にも文章要約や文章生成など様々な活用例があり、広告テキストの自動生成など、広告という分野にとっても今後より身近な技術になるのではないかと思います。

この記事を読んでいる方へ

▼2024年4月の媒体アップデート情報
・Xの2024年Q3のテイクオーバー商品情報解禁
・TikTokのカルーセル広告のアップデート
・LINEのA/Bテスト機能
・LINEで一部のYahoo!オーディエンスが利用可能に
など広告担当者必見の内容になっています。

詳しく知りたい

プロフィール画像
仲山 由莉

2020年新卒入社。データ分析などの業務をしています。好きなものはお酒とラジオ。楽しみは実家の猫を撫でること。

PICKUP RANKING
PAGE TOP
お役立ち資料 canvas お問い合わせ