文字列の類似度を測るレーベンシュタイン距離

デジタル化を知りたい
先生、「レーベンシュタイン距離」って、何ですか?デジタル化の資料に出てきたのですが、よく分かりません。

デジタル化研究家
簡単に言うと、2つの言葉がどれだけ違うかを数字で表したものだよ。例えば、「えんぴつ」と「えんぴち」は、最後の文字が違うだけなので、レーベンシュタイン距離は1になるんだ。

デジタル化を知りたい
なるほど。1文字違うと距離が1なんですね。では、「えんぴつ」と「シャーペン」ではどうなりますか?

デジタル化研究家
そうだね。「えんぴつ」を「シャーペン」に変えるには、「え」を「シ」、「ん」を「ャ」、「ぴ」を「ー」、「つ」を「ペ」、「」を「ン」に置き換える必要があるから、レーベンシュタイン距離は5になるね。
レーベンシュタイン距離とは。
二つの文字の並びが、どのくらい違っているかを表す『レーベンシュタイン距離』という言い方があります。これは『編集距離』とも呼ばれます。具体的には、ある文字の並びを別の文字の並びに変えるために、文字の一つ一つを足したり、消したり、置き換えたりする操作が何回必要かを数えます。そして、そのうちもっとも少ない回数が『レーベンシュタイン距離』になります。
二つの文字列の違いを数値化

計算機の世界では、文字の並びの比較は至る所で行われています。例えば、探し物をするための仕掛けに入力された言葉と、目的地の題名の類似点を調べたり、書き間違いを正すための候補を示したりする際に、文字の並び同士がどれくらい似ているかを判断する必要があります。レーベンシュタイン距離とは、このような文字の並びの類似度を測るための物差しのひとつです。二つの文字の並びが与えられた時、それらの間のレーベンシュタイン距離は、片方の文字の並びをもう片方の文字の並びに変換するために必要な最小の編集回数で表されます。編集操作には、文字の挿入、削除、置換の三つの種類があります。
具体的に、文字列「ねこ」と「ねずみ」のレーベンシュタイン距離を計算してみましょう。「ねこ」を「ねずみ」に変換するには、「こ」を削除し、「ず」「み」を挿入する必要があります。あるいは、「こ」を「ず」に置換し、「み」を挿入する方法もあります。いずれの場合も、二回の編集が必要です。つまり、「ねこ」と「ねずみ」のレーベンシュタイン距離は2です。
レーベンシュタイン距離が小さいほど、二つの文字の並びは類似しているとみなされます。例えば、「りんご」と「みかん」のレーベンシュタイン距離は3ですが、「りんご」と「りんこ」のレーベンシュタイン距離は1です。これは、「りんご」と「りんこ」の方が「りんご」と「みかん」より似ているという直感と一致しています。
レーベンシュタイン距離は、様々な場面で活用されています。例えば、文章の剽窃検出や、データベースにおけるあいまい検索、音声認識などです。情報処理において、文字の並びの比較は欠かせないものであり、レーベンシュタイン距離はそのための強力な道具として利用されています。
| 項目 | 説明 |
|---|---|
| レーベンシュタイン距離 | 2つの文字列の類似度を測る尺度。一方の文字列を他方の文字列に変換するために必要な最小編集回数で表される。 |
| 編集操作 | 挿入、削除、置換 |
| 例:「ねこ」と「ねずみ」 | レーベンシュタイン距離は2 (「こ」を削除、「ず」「み」を挿入、もしくは「こ」を「ず」に置換、「み」を挿入) |
| 距離と類似度 | レーベンシュタイン距離が小さいほど、2つの文字列は類似している。 |
| 活用例 | 文章の剽窃検出、データベースにおけるあいまい検索、音声認識など |
編集距離とレーベンシュタイン距離

「編集距離」と「レーベンシュタイン距離」は、一見同じもののように思われますが、厳密には違います。編集距離は、二つのものの違いを数値化したものと言えるでしょう。たとえば、文字の並びやものの順番など、様々な対象に対して適用できます。文字列以外にも、例えば商品の陳列順など、様々な並び替えを考える場面で編集距離という考え方が役に立ちます。ある並びから別の並びへと変更するために必要な最小の手間を数値で表すのが編集距離です。
レーベンシュタイン距離は、この編集距離の中でも、特に文字列に特化したものを指します。二つの文字列がどれくらい似ているかを測るための尺度として使われます。具体的には、ある文字列を別の文字列に変換するために必要な最小の操作回数を求めます。この操作には、文字の挿入、削除、置換の三種類があります。例えば、「りんご」を「みかん」に変換する場合を考えてみましょう。「り」を「み」に置換し、「ん」を「か」に置換し、「ご」を削除すれば、「みかん」になります。この場合、三回の操作で変換できたので、レーベンシュタイン距離は3となります。もちろん、他の変換方法も考えられますが、レーベンシュタイン距離は、その中で最も少ない操作回数を求めるものです。
レーベンシュタイン距離は、文字列の類似度を測る尺度として、様々な場面で活用されています。例えば、文章の校正、音声認識、遺伝子配列の解析などです。文章の校正では、誤字脱字の検出に役立ちます。音声認識では、入力された音声と辞書に登録されている単語との類似度を計算することで、正しい単語を特定します。遺伝子配列の解析では、異なる生物種の遺伝子配列の類似度を比較することで、進化の関係性を調べることができます。このように、レーベンシュタイン距離は、文字列を扱う様々な分野で重要な役割を果たしています。
まとめると、編集距離はより広い概念であり、レーベンシュタイン距離は編集距離の中でも文字列に特化したものであると言えます。レーベンシュタイン距離は、挿入、削除、置換という三つの基本操作によって定義され、文字列の類似性を測るための有効な手段となっています。
具体的な計算方法

二つの言葉の似ている度合いを測る方法の一つに、レーベンシュタイン距離というものがあります。これは、一つの言葉を別の言葉に変換するために必要な最小の編集回数で表されます。編集操作には、文字の挿入、削除、置換の三種類があります。
レーベンシュタイン距離を求めるには、動的計画法と呼ばれる計算方法がよく使われます。まず、二つの言葉に対応する表を作成します。表の行には一方の言葉の文字を、列にはもう一方の言葉の文字を順番に並べます。そして、各升目には、行に対応する部分的な言葉と列に対応する部分的な言葉の間のレーベンシュタイン距離を書き込んでいきます。
表の左上隅から右下隅に向かって、順番に計算を進めていきます。最初の升目(両方の言葉が空の状態)には0を書き込みます。次に、最初の行と最初の列の升目を埋めていきます。この部分は、片方の言葉が空の状態なので、もう片方の言葉の長さと同じ値になります。これは、空の言葉からある長さの言葉を作るには、その長さと同じ回数だけ文字を挿入する必要があるからです。
それ以外の升目の値は、以下の三つの値を比較して、最も小さい値を選びます。一つ目は、左隣の升目の値に1を足した値です。これは、列に対応する言葉の最後の文字を削除する操作に対応します。二つ目は、上の升目の値に1を足した値です。これは、行に対応する言葉の最後の文字を挿入する操作に対応します。三つ目は、左斜め上の升目の値です。もし行と列の最後の文字が同じであれば、この値をそのまま使います。もし異なる場合は、この値に1を足します。これは、文字を置換する操作に対応します。
このようにして、表の右下隅まで計算を進めていくと、最終的に右下隅の升目に二つの言葉全体のレーベンシュタイン距離が得られます。この計算方法は、手順が明確で無駄がなく、多くの処理手順で簡単に利用できるようになっています。
| a | b | c | ||
|---|---|---|---|---|
| 0 | 1 | 2 | 3 | |
| b | 1 | 1 | 1 | 2 |
| a | 2 | 1 | 2 | 2 |
| d | 3 | 2 | 2 | 3 |
説明
- 左上隅は0で初期化
- 1行目と1列目は、空文字からの距離なので文字数
- その他は、以下の3つの最小値
- 左隣の升目+1 (削除)
- 上の升目+1 (挿入)
- 左斜め上の升目+(文字が異なる場合は1) (置換/一致)
- 右下隅がレーベンシュタイン距離
様々な応用例

文字の入れ替えや削除、挿入といった操作回数によって二つの文字列の類似度を測るレーベンシュタイン距離は、様々な分野で活用されています。身近な例では、コンピュータやスマートフォンで文章を作成する際に利用するスペルチェッカーが挙げられます。入力した単語が辞書にある単語と一致しない場合、レーベンシュタイン距離を用いて類似した単語をいくつか提示することで、誤入力を素早く修正することを可能にしています。
外国語を翻訳する機械翻訳も、レーベンシュタイン距離が役立っている分野の一つです。翻訳結果が原文とどの程度一致しているかを評価する指標として用いることで、より正確な翻訳を実現できます。また、生物学の分野でも、この技術は応用されています。デオキシリボ核酸やたんぱく質の配列データを比較することで、生物同士の進化の関係や病気の原因解明に役立てられています。
インターネットで情報を検索する際にも、レーベンシュタイン距離は重要な役割を果たします。検索窓に入力されたキーワードと、ウェブサイトに保存されている情報との類似度を計算することで、利用者が求める情報に素早くアクセスできるようにしています。検索キーワードを少し間違えて入力した場合でも、類似したキーワードを含むウェブサイトが表示されるのは、レーベンシュタイン距離のおかげです。
さらに、大量のデータから有益な情報を取り出すデータマイニングにおいても、レーベンシュタイン距離は活用されています。データの中に含まれる小さな誤りや不要な情報を取り除くことで、データの質を高め、より正確な分析を可能にします。このように、レーベンシュタイン距離は、文字列を扱う様々な場面で、その力を発揮しているのです。
| 分野 | レーベンシュタイン距離の活用例 |
|---|---|
| 情報処理 | スペルチェッカーでの誤入力修正 |
| 機械翻訳 | 翻訳結果の原文との一致度評価 |
| 生物学 | DNAやタンパク質の配列比較による進化関係や病気原因の解明 |
| インターネット検索 | 検索キーワードとウェブサイト情報の類似度計算による情報アクセス支援 |
| データマイニング | データの誤りや不要な情報の除去によるデータ質の向上 |
利点と限界

レーベンシュタイン距離を使うと、二つの文字列がどれだけ似ているかを数値で表すことができます。この方法は、文字の入れ替え、削除、挿入といった操作が何回必要かで似ている度合いを測ります。計算方法が分かりやすく、様々な場面で使えます。たとえば、似たような言葉を探したり、誤字脱字を自動で修正したり、データベースの中から似たような記録を見つけ出すといった作業に役立ちます。
しかし、レーベンシュタイン距離には得意な点と苦手な点があります。文字列の長さが大きく違う場合は、正確な比較が難しいです。例えば、「りんご」と「りんご飴」では、「りんご飴」の方が文字数が多いので、距離が大きくなってしまいます。しかし、意味としては非常に近い言葉です。このように、文字数の差が大きいと、本来は似ている言葉でも、似ていないと判断される可能性があります。
また、レーベンシュタイン距離は文字の順番にだけ注目し、言葉の意味は全く考慮していません。「東京大学」と「京都大学」は距離が小さいと判定されますが、場所も違いますし、偏差値なども異なる全く別の大学です。このように、文字の並びが似ていても、実際の意味が全く異なる場合、レーベンシュタイン距離は適切な指標とは言えません。
さらに、文字列が長くなるほど計算に時間がかかるという問題点もあります。文字列の長さの二乗に比例して計算量が増えるため、膨大な量の文字列を扱う場合、処理速度が遅くなる可能性があります。
レーベンシュタイン距離は便利な道具ですが、これらの限界を理解した上で、適切な場面で使うことが重要です。状況によっては、他の方法と組み合わせることで、より精度の高い比較が可能になります。
| メリット | デメリット |
|---|---|
|
|
他の類似尺度との比較

文字列同士の似ている度合いを測る方法は、レーベンシュタイン距離以外にも数多く存在します。それぞれの方法には、得意な点と不得意な点があるため、目的や状況に合わせて最適な方法を選ぶことが重要です。ここでは、代表的な方法をいくつか比較し、レーベンシュタイン距離の特徴を改めて見ていきましょう。
まず、レーベンシュタイン距離は、二つの文字列がどれくらい編集操作が必要かで似ている度合いを測ります。挿入、削除、置換といった操作の回数が少ないほど、二つの文字列は似ていると判断されます。この方法は、計算方法が分かりやすく、処理速度も速いという利点があります。そのため、手軽に文字列の類似度を調べたい場合に適しています。
一方、ジャロ・ウィンクラー距離は、共通の文字列の数を重視して計算します。文字列の順番の違いに敏感で、特に文字列の先頭部分が一致している場合、より高い類似度を示します。人名や地名など、綴りが多少異なっていても同じものを指している場合に有効です。レーベンシュタイン距離よりも計算は複雑になりますが、より正確な結果が期待できます。
さらに、コサイン類似度は、文字列をベクトルという数値の組に変換し、そのベクトル同士の角度に基づいて類似度を計算します。この方法は、文字列の意味的な側面を捉えることができます。例えば、「車」と「自動車」は、レーベンシュタイン距離では大きく異なりますが、コサイン類似度では高い類似度を示す可能性があります。ただし、ベクトルへの変換方法によっては計算結果が大きく変わるため、注意が必要です。
このように、様々な類似度計算方法が存在し、それぞれに特徴があります。レーベンシュタイン距離は、計算のシンプルさと処理速度の速さが魅力です。まずはレーベンシュタイン距離を試してみて、必要に応じて他の方法も検討することで、より精度の高い分析が可能になります。
| 手法 | 特徴 | メリット | デメリット/注意点 | 適している場合 |
|---|---|---|---|---|
| レーベンシュタイン距離 | 編集操作(挿入、削除、置換)の回数で類似度を測る | 計算方法が分かりやすく、処理速度が速い | – | 手軽に文字列の類似度を調べたい場合 |
| ジャロ・ウィンクラー距離 | 共通の文字列の数を重視、文字列の順番の違いに敏感 | 綴りが多少異なっていても同じものを指している場合に有効 | レーベンシュタイン距離よりも計算が複雑 | 人名や地名など |
| コサイン類似度 | 文字列をベクトルに変換し、ベクトル同士の角度で類似度を計算 | 文字列の意味的な側面を捉えることができる | ベクトルへの変換方法によっては計算結果が大きく変わる | 意味的に近い単語の類似度を測りたい場合 |
