NLP入門: 中国語のルールベースの単語分割法を3つ教えます

NLP入門: 中国語のルールベースの単語分割法を3つ教えます

自然言語理解において、トークンは独立して動作できる意味のある最小の言語コンポーネントです。単語の識別は、自然言語を理解するための第一歩です。このステップを踏むことによってのみ、中国語はフレーズ分割、概念抽出、トピック分析、さらには英語のような自然言語理解に移行し、最終的にはインテリジェントコンピューティングの最高レベルに到達できます。したがって、すべての NLP ワーカーは単語分割技術を習得する必要があります。

1. 単語分割の概念と分類

「言葉」という概念は、中国語の言語学界において常に混乱を招き、長引く問題となってきました。 「単語とは何か」(単語の抽象的な定義)と「単語とは何か」(単語の具体的な定義)という 2 つの基本的な質問には、まだ権威ある明確な表現がなく、今日では世界的に認められた語彙リストは存在しません。

この問題の主な難しさは、中国語の構造がインド・ヨーロッパ語族のそれと大きく異なり、語の構成の境界を定義するのが難しいという点にあります。例えば、英語では単語そのものが「word」という表現であり、英語の冠詞の形式は「word」に区切り文字(スペース)を加えたものになります。

中国語では、単語は文字を基本単位としていますが、冠詞の意味表現は依然として単語ごとに区切られています。したがって、漢字を一定の方法で整理し、異なる単語に分割する必要があります。

中国語の単語分割は、コンピュータが文中の単語を自動的に識別し、単語間に境界マーカーを追加できるようにすることです。このプロセスは単純に見えますが、実際にははるかに複雑です。主な難しさは、単語の分割の曖昧さにあります。

典型的な NLP 単語分割のシナリオを例に挙げてみましょう。「既婚かつ未婚」というフレーズは、「既婚/かつ/未婚/」と分割すべきでしょうか、それとも「既婚/かつ/未婚/」と分割すべきでしょうか。この問題は、機械が処理するのが困難です。また、未登録単語や単語分割の粒度などの要素も単語分割効果に影響を与える重要な要因です。

中国語の自動単語分割が提案されて以来、約 30 年間の探究を経て、多くの単語分割方法が登場しました。これらは主に、ルールベースの単語分割、統計単語分割、混合単語分割 (ルール + 統計) の 3 つの流派にまとめることができます。近年、BILSTM+CRF などの単語分割にディープラーニングが使用されることが増えています。

ルールベースの単語分割は、最も早く登場した方法です。主に手動で語彙を設定し、特定の方法でマッチングと分割を実行します。実装はシンプルで効率的ですが、語彙に入力されていない新しい単語を処理するのは困難です。

その後、統計的機械学習技術が登場し、統計的単語分割手法が単語分割タスクに適用されるようになりました。この方法は、新しい単語の発見などの特殊なシナリオにうまく対応できます。しかし、実際には、純粋な統計的セグメンテーションにも欠点があります。それは、コーパスの品質に大きく依存するということです。したがって、実際には、通常のセグメンテーションと統計的セグメンテーションを組み合わせた、混合セグメンテーションがよく使用されます。

[[349010]]

2. 通常の単語分割

ルールベースの単語分割は、辞書の継続的なメンテナンスと更新を必要とする機械的な単語分割方法です。文を分割する場合、文の各文字列が語彙内の各単語と 1 つずつ照合されます。見つかった場合は分割され、見つからない場合は分割されません。

マッチング区分に応じて、前方最大マッチング、逆方向最大マッチング、双方向最大マッチングの 3 つの主要なセグメンテーション方法があります。

1. 前方最大マッチング

フォワード・マキシマム・マッチは通常 MM 方式と呼ばれ、その実行プロセスは次のとおりです。

  • 左から右に分割される中国語の文章の m 文字を一致フィールドとして取ります。ここで、m は機械辞書内の最長エントリの文字数です。
  • 機械辞書を調べて一致させます。一致が成功した場合、一致するフィールドは単語として分割されます。一致が失敗した場合、一致フィールドの最後の単語が削除され、残りの文字列が再一致のための新しい一致フィールドとして使用されます。上記のプロセスは、すべての単語がセグメント化されるまで繰り返されます。

たとえば、最長単語の長さが 5 の辞書があり、辞書には「南京市長」、「揚子江橋」、「橋」という 3 つの単語が含まれています。

ここで、前方最大一致を使用して、文「南京長江橋」を分割します。まず、文の最初の 5 語「南京長江」を取り出します。この単語は辞書に存在しないことがわかったので、長さを短くして最初の 4 語「南京市長」を取り出します。この単語は辞書に存在するため、単語が分割されていることが確認されます。

次に、残りの「江橋」を同じ方法で分割して「江」と「橋」を取得し、最終的に「南京市長」、「江」、「橋」の 3 つの単語に分割します。明らかに、この結果は私たちが望んでいるものではありません。前方最大一致法のサンプルコードは次のとおりです。

  1. クラスMM(オブジェクト):
  2. __init__(self)を定義します。
  3. 自己.ウィンドウサイズ= 3  
  4.  
  5. def cut(self,テキスト):
  6. 結果= []
  7. インデックス= 0  
  8. テキストの長さ= len(テキスト)
  9. dic = ['研究', '大学院生', '人生', '起源']
  10. text_length >インデックスの場合:
  11. サイズが範囲内の場合(self.window_size+index,index,-1):#4,0,-1
  12. ピース=テキスト[インデックス:サイズ]
  13. dic にピースがある場合:
  14. インデックス=サイズ-1
  15. 壊す
  16. インデックスインデックス= インデックス + 1
  17. 結果.append(ピース)
  18. 結果を返す

単語分割の結果を以下に示しますが、満足できるものではありません。

  1. テキスト= '生命の起源を研究する'  
  2. トークナイザー= MM ()
  3. print(トークナイザー.cut(テキスト))

出力は次のようになります。

  1. [「大学院生」、「人生」、「の」、「起源」]

2. 逆最大マッチング

逆最大マッチングはRMM法と呼ばれます。 RMM 法の基本原理は MM 法とほぼ同じですが、単語分割の方向が MM 法とは逆になります。

逆最大一致方式では、処理中の文書の末尾から一致スキャンを開始し、毎回最後の m 文字 (m は辞書内の最長の単語) を一致フィールドとして取得します。一致が失敗した場合は、一致フィールドの最初の文字が削除され、一致が続行されます。したがって、使用される単語分割辞書は逆順辞書であり、各エントリは逆順で保存されます。

実際の処理では、まず文書を逆順に処理して逆順文書を生成します。次に、逆辞書に従って、逆順の文書を前方最大一致法を使用して処理できます。

中国語には修飾語構造が多数あるため、後ろから前へマッチングすることで精度が適切に向上します。したがって、逆最大マッチング法の誤差は、順最大マッチング法の誤差よりも小さくなります。

統計結果によると、前方最大マッチングのみを使用した場合のエラー率は 1/169 であり、後方最大マッチングのみを使用した場合のエラー率は 1/245 です。例えば、先ほどの「南京長江橋」の場合、逆最大一致により、最終的に「南京市」と「長江橋」の単語分割結果が得られました。

もちろん、このような区分は完全に正しいというわけではありません。「江大喬」という名前の「南京市長」がいるかもしれません。逆最大一致法のサンプルコードは次のとおりです。

  1. クラスRMM(オブジェクト):
  2. __init__(self)を定義します。
  3. 自己.ウィンドウサイズ= 3  
  4.  
  5. def cut(自分自身、テキスト):
  6. 結果= []
  7. インデックス=長さ(テキスト)
  8. dic = ['研究', '大学院生', '生活', '人生', 'の', '起源']
  9. インデックス> 0 の場合:
  10. サイズが範囲内(index-self.window_size,index)の場合:
  11. ピース=テキスト[サイズ:インデックス]
  12. dic にピースがある場合:
  13. インデックス=サイズ+ 1
  14. 壊す
  15. インデックスインデックス= インデックス - 1
  16. 結果.append(ピース)
  17. 結果.逆()
  18. 結果を返す

単語分割の結果は以下に示されており、非常に正確です。

  1. テキスト= '生命の起源を研究する'  
  2. トークナイザー= RMM ()
  3. print(トークナイザー.cut(テキスト))

出力は次のようになります。

  1. ['研究'、'生活'、'の'、'起源']

3. 双方向最大マッチング

双方向最大マッチング法は、前方最大マッチング法で得られた単語分割結果と逆方向最大マッチング法で得られた結果を比較し、最大マッチング原理に従って単語分割が最も少ない方を結果として選択します。

Sun MS と Benjamin KT の研究によると、中国語の文章の約 90.0% では、前方最大一致と後方最大一致の分割結果が完全に一致しており、正確です。2 つの分割方法で異なる結果になる文章は約 9.0% のみですが、そのうちの 1 つは正しいはずです (曖昧さの検出は成功)。1.0% 未満の文章では、前方最大一致と後方最大一致の分割結果が一致しているが両方とも間違っているか、前方最大一致と後方最大一致の分割結果が異なり両方とも間違っています (曖昧さの検出は失敗)。このため、双方向最大マッチング法は実用的な中国の情報処理システムで広く使用されています。

上記の「南京長江橋」は、双方向最大一致法を使用してセグメント化され、「南京/川/橋」と「南京/長江橋」の 2 つの結果が生成されます。最終的に、単語数が少ない「南京/長江橋」という結果が選択されます。

双方向最大マッチングのルールは次のとおりです。

(1)前方単語分割結果と後方単語分割結果の単語数が異なる場合、単語数の少ない方の結果が採用されます(上記の例では、「南京市/川/橋」の単語数は3ですが、「南京市/長江橋」の単語数は2なので、単語数2の結果が返されます)。

(2)分割結果の単語数が同じ場合:

  • 単語分割結果が同じであれば、曖昧さがなく、任意の結果を返すことができることを意味します。
  • 単語分割結果が異なる場合は、単語数が少ない方が返されます。たとえば、上記のサンプルコードでは、前方最大一致によって返される結果は「['研究生', '命', '的', '起源']」であり、単語の数は 2 です。一方、後方最大一致によって返される結果は「['研究', '生命', '的', '起源']」であり、単語の数は 1 です。したがって、返されるのは逆最大一致の結果です。

参照コードを以下に示します。

  1. #単語を構成する単語の数を数える
  2. count_singlechar(単語リスト)を定義します。
  3. len(word) == 1 の場合、word_list 内の word の合計 (1) を返します。
  4.  
  5. 定義bidirectional_segment(テキスト):
  6. ミリメートル= MM ()
  7. rmm = RMM ()
  8. f = mm .cut(テキスト)
  9. b = rmm.cut (テキスト)
  10. もし(len(f) <  長さ(b)):
  11. 戻り値 f
  12. elif (len(f) > len(b)):
  13. bを返す
  14. それ以外:
  15. count_singlechar(f) > = count_singlechar(b)の場合:
  16. bを返す
  17. それ以外:
  18. 戻り値 f

最後に効果を検証します。

  1. print(bidirectional_segment('生命の起源を研究する'))

出力は次のようになります。

  1. ['研究'、'生活'、'の'、'起源']

ルールベースの単語分割は一般的に単純かつ効率的ですが、辞書のメンテナンスには膨大な作業負荷がかかります。今日のインターネットの発展により、新しいインターネット用語が次々と登場し、辞書でそのすべてを網羅することは困難です。さらに、辞書のセグメンテーションでは曖昧さを区別できず、新しい単語を思い出すことができません。

実際のプロジェクトでは、通常の単語分割の使用を検討しますか?

通常の単語分割を使用した単語分割の精度は非常に高いように見えますが、通常の単語分割にはいくつかの大きな問題があります。

  • 辞書を継続的にメンテナンスするのは非常に面倒で、常に新しい単語が登場し、手動でのメンテナンスには時間と労力がかかります。
  • 辞書内のエントリ数が増えるにつれて、実行はますます非効率になります。
  • 曖昧さを解決できません。

<<:  脳卒中の診断と治療を加速させるAIの登場

>>:  機械学習は計算化学研究の発展にどのように役立つのでしょうか?

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

Apple: 画像モデルの事前トレーニングに言語モデルの自己回帰アプローチを使用する

1. 背景GPTなどの大規模モデルの登場後、言語モデルのTransformer +自己回帰モデリング...

GPTで絵本を作るのはすごく早いですね!

今日は、世界的に人気のAIツール「ChatGPT+Midjourney」を使った絵本の制作過程をご紹...

シンプルでスマートなアプローチ: Python による顔認識

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

ChatGPTはプログラミングの楽しさを殺している

長年にわたり、プログラミングは私の人生における最も重要な喜びの源の 1 つでしたが、この喜びがどれだ...

AIが予測分析アプリケーションに与える影響

人工知能 (AI) を使用した予測分析により、企業は過去のデータに基づいて将来の結果を予測し、運用効...

...

...

歴史を作ろう!地球からのドローンが火星へ飛び立ち、NASAはこのようにライト兄弟に敬意を表す

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

...

...

Zipf 行列分解: 推奨システムにおけるマシュー効果を解決する強力なツール

[[407036]] [51CTO.com からのオリジナル記事]アルゴリズムの公平性は、近年、推奨...

QQがスーパーQQショーを開始:3D HDモデルが顔認識AIフェイスピンチをサポート

2月10日、QQ誕生23周年にあたり、テンセントQQチームは、これまでのテスト段階を経て、スーパー...

清華大学がサッカーAIを開発:初めて10人の選手を同時にコントロールして試合を完了し、勝率は94.4%

[[434349]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...

...

...