HMM、ビタビ、中国語の単語のセグメンテーション

実際の実務経験とインターネットに基づく研究ノート、書籍情報のクエリと記録。主に中国語単語分割におけるHMM(隠れマルコフモデル)、ビタビアルゴリズムとその中国語単語分割への応用について。

序文

        キーワード抽出+simhashという手法で問題バンクの重複に対処しています。キーワードを抽出する前に、中国語の単語のセグメンテーションが必要です。シソーラスをもとに単語を切り出すのが基本的な方法ですが、シソーラスを完成させることはもちろん不可能です.このとき、シソーラスに登録されていない単語(未登録単語)が処理されていないことを確認するために、ある特定の予期しない単語の分割状況に正確に対処するには、理解が必要です。この記事は、問題バンクの重複排除の過程での中国語の単語分割に関する筆者の学習経験をまとめたものであり、後世の人々が参照し、相互に通信できるように、ここに蓄積されています。

この記事では、確率論に詳しくなく、中国語の単語分割ツールについて理解を深めたい学生を中心に、HMM (隠れマルコフ モデル) と Viterbi (ビタビ) アルゴリズムを紹介します。 - 他の関連するアルゴリズムの深い理解. アイデアを学ぶ方法. 同時に、専門家からのさらなる意見や提案も期待しています。

同時に、数学が苦手な学生が数学を恐れなくて済むように願っています。著者は特に詳しくないので、HMM と Viterbi、およびそれらと中国語の単語分割の関係について、彼の個人的な学習過程と例に基づいてできるだけ簡単に紹介します。

文章

HMM を正式に導入する前に、マルコフ過程とマルコフ連鎖を理解する必要があります。

マルコフ過程(マルコフ過程)

プロパティ:確率プロセスに現在の状態と過去のすべての状態が与えられると、その将来の状態の条件付き確率分布は現在の状態のみに依存します; プロセスの履歴パス) は条件付きで独立しています, このランダムプロセスはマルコフを持ちます財産

定義:マルコフ特性を満たす過程をマルコフ過程と呼ぶ

DTMC (離散マルコフ連鎖)

定義:時間と状態の両方が離散マルコフ過程です。

重要な特性:システムの現在の状態を知ると、将来の進化は過去の進化に依存しません。

一般的な説明:現在の時間を T とすると、T+1 が特定の値に等しい確率は T のみに関連し、[0, T-1] 内のすべての値とは関係ありません (最初の-次マルコフ連鎖)。
P { X n + 1 = in + 1 ∣ X 0 , X 1 , . . , X n = in } = P { X n + 1 ∣ X n = in } P\{X_{n+1}=i_ {n+1}\ |\ X_0,X_1,...,X_n=i_n\} = P\{X_{n+1}\ |\ X_n = i_n\}P { Xn + 1=n + 1 X 0バツ1. . . バツn=n}=P { Xn + 1 X n=n}
マトリックス:これは実際にはn段階の遷移確率マトリックスであり、詳細に説明するとより複雑になります.後で理解に影響を与えることなく、Baiduを自分で作成できます.
P = [ P 11 P 12 ... P 1 n ... P 21 P 22 ... P 2 n ... P 31 P 32 ... P 3 n ... ] P\ =\ \left[ \begin{array}{ccc} P_{11} & P_{12} & … & P_{1n} & … \\ P_{21} & P_{22} & … & P_{2n} & … \\ P_{ 31} & P_{32} & … & P_{ 3n} & ... \end{array} \right ]P = P1 1P2 1P3 1P1 2P2 2P3 2P1n _P2n _P3n _
        このように、最初にマルコフ過程と DTMC とは何かを覚え、次に HMM (Hidden Markov Model) とは何かを理解するのは簡単です。

HMM (隠れマルコフモデル)

        正式な導入の前に、まず文を例として使用します。テキストを直接与え、HMM に従ってテキストをセグメント化します。

"我爱梅沙"

次に、HMMのプロセスに従って分析します。

  1. 文中の単語について、4 つの状態 (隠れた状態空間 S) を定義します。

    • B—始めます。文字が単語の先頭文字であることを示します
    • M - ミドル。文字が単語の中間文字であることを示します
    • E - 終了。単語の末尾の単語を意味します
    • S――独身。一言を一言で表現する
  2. 文では、すべての単語が一緒になって観察セット (観察状態) を形成する、つまり O = {I, Love, Mei, Sha} と定義します。

  3. 単語 (観察状態) を見るとき、それは BMES のある単語の確率であり、初期確率行列を形成します (行列値は大量のテキスト統計に基づいて取得されています)どの単語も BMES に転送される確率は一定であるため、行列は 1x4 の確率行列 (π ベクトル/初期確率行列) であり、ここでは、行列は次のようになります。

    {
          
          
      "B": -0.26268660809250016,
      "E": -3.14e+100,
      "M": -3.14e+100,
      "S": -1.4652633398537678
    }
    
  4. 現在の単語が BMES である場合に次の単語が BMES である確率である確率行列が既に存在します (4x4 状態遷移確率行列、行列の値は大量のテキスト統計に基づいて取得されています)、すなわち [ A bb A bm A be A bs A mb A mm A me A ms A eb A em A ee A es ​​A sb A sm A se A ss ] \left[ \begin{array}{ccc} A_{bb} & A_ {bm} & A_ {be} & A_{bs}\\ A_{mb} & A_{mm} & A_{me} & A_{ms}\\ A_{eb} & A_{em} & A_{ee} & A_{es} \\ A_{sb} & A_{sm} & A_{se} & A_{ss}\\ \end{array} \right ]bb _mb _eb _sb _bm _むむ_たちsm _なる__e eebs _ミリエス_s s、実際には、ここでの多くのケースの確率は 0 であるため、実際の行列は次のようになります。

    {
          
          
      "B": {
          
          
        "E": -0.510825623765990,
        "M": -0.916290731874155
      },
      "E": {
          
          
        "B": -0.5897149736854513,
        "S": -0.8085250474669937
      },
      "M": {
          
          
        "E": -0.33344856811948514,
        "M": -1.2603623820268226
      },
      "S": {
          
          
        "B": -0.7211965654669841,
        "S": -0.6658631448798212
      }
    }
    
  5. すでに確率行列があり、各単語は BMES の各状態の確率です (起動確率行列/混同行列、行列の値は大量のテキスト統計に基づいて取得されています)、つまり: { B ij | i ∈ [0x4E00, 9FA5 ] , j ∈ (B, M, E, S) }, ここで、発光行列は次のとおりです。

    {
          
          
        "B": {
          
          
            "我": 1.4614045662995514,
            "爱": 1.968025153941063,
            "梅": 2.237194588185915,
            "沙": 1.983966134924789
        },
        "E": {
          
          
            "我": 2.8844153800921876e+101,
            "爱": 2.5467388205842573e+101,
            "梅": 2.5483227218706336e+101,
            "沙": 2.6413544826999272e+101
        },
        "M": {
          
          
            "我": 2.6778005616524882e+101,
            "爱": 2.2547330469174095e+101,
            "梅": 2.5528428570784386e+101,
            "沙": 2.321741847245321e+101
        },
        "S": {
          
          
            "我": 6.611019698336738,
            "爱": 11.146923368528606,
            "梅": 14.546547456418994,
            "沙": 13.526900849382743
        }
    }
    

        このようにして、HMM の 5 タプル( S , O , Π , A , B ) (S, O, \Pi, A, B) を取得します。S P _B ) (2 セットの状態セットと 3 セットの確率セット):

  1. 隠れ状態 S: マルコフ過程で記述された隠れ状態の集合
  2. 観察状態 O:表示・直接観察により得られた状態の集合
  3. (hidden) 状態遷移行列 A: 隠れ状態間の相互遷移の確率行列
  4. 確率ベクトルΠ ( π i ) \Pi(\pi_i)を初期化します。P ( p) : 各観測状態は、最初は各隠れ状態の確率セットです。は 1xN 行列です (N は隠れ状態空間のサイズです)
  5. Confusion Matrix/Emission Probability Matrix B: 各観測状態が各隠れ状態に移行する確率セット (放出確率)

        モデルのさまざまな部分を決定したら、段階的に進めることができます。一般的な考え方は

  1. 初期状態を計算する
  2. 2回目、3回目、4回目の遷移確率をまとめて計算
  3. 最も可能性の高いパスを見つける (動的計画法)

何よりも統計で得られる確率結果がマイナスなのはなぜですか?

        これはコンピュータのアンダーフロー問題を含みます . 一般的な操作では、アンダーフローによって引き起こされるエラーは明らかではありませんが、中国語の単語のセグメンテーションでは、フォントが非常に大きく [0x4E00, 9FA5] あり、確率は常に間隔 [0, 1] はい、現時点では、わずかなアンダーフローがモデル全体の計算エラーを引き起こす可能性があります。したがって、実際のアプリケーションで高精度の確率計算問題を処理するには、対数を使用することをお勧めします対数関数のグラフを見るだけで、保存されている確率がすべて負である理由を理解できます。しかし、なぜ他の機能ではなくログに記録するのでしょうか? 個人的には、以下の2点が主な要因だと思いますが、はっきりとは言えないかもしれませんが、学生の方はぜひ追加してください。

  1. 浮動小数点の乗算および除算演算を対数演算および差演算に変換して、オーバーフローの精度と誤差の累積を減らすことができます。

    log ⁡ α MN = log ⁡ α M + log ⁡ α N \log_{\alpha}MN\ =\\log_{\alpha}\!M+\log_{\alpha}\!Nログ_aみん_ = ログ_aM+ログ_aN

    log ⁡ α MN = log ⁡ α ⁣ M − log ⁡ α ⁣ N \log_{\alpha }\frac{M}{N}\ =\ \log_{\alpha }\!M -\log_{\alpha }\ !Nログ_aNM = ログ_aMログ_aN

  2. x が 0 に近づくと、対数は無限大になり、無限に小さい確率でも表現できます。

  3. 任意の x ∈ [0, 1] の場合、x が変化すると、対数の結果が大幅に変化します。

初期状態を計算する

        上記の HMM 五重項に従って、式ai ( j ) = π ( j ) bjki , i ∈ N , j ∈ ( B , E , M , S ) , k ∈ ( 我, 爱, 梅, 沙) a_i( j) = \pi(j)b_{jk_i}, i \in N, j \in (B, E, M, S), k \in (私、愛、梅、砂)a()=π ( j ) bj kεN jε( B E M S ) kε私は,,)は計算で求めることができます。

{
    
    
    "B": {
    
    
        "我":1.1851974272161176,
        "爱":1.9983762718297673,
        "梅":2.388164278255412,
        "沙":2.5132210235744683 
    },
    "E":{
    
    
        "我":1.4167147493671037e+101,
        "爱":2.388740537292971e+101,
        "梅":2.854670014651611e+101,
        "沙":3.004155434998415e+101
    },
    "M":{
    
    
        "我":1.4167147493671037e+101,
        "爱":2.388740537292971e+101,
        "梅":2.854670014651611e+101,
        "沙":3.004155434998415e+101
    },
    "S":{
    
    
        "我":6.611019698336738,
        "爱":11.146923368528606,
        "梅":13.321157069582242,
        "沙":14.018722376196262
    }
}

状態遷移確率行列を計算する

        上記の初期状態を取得した後、次の図のすべてのアークの確率は、上記の HMM 5 倍数と組み合わせて反復的に取得できます。t 反復公式は次のとおりです (実際、これはマルコフ n ステップ遷移行列反復公式にも一般化できます)。
P t + 1 ( s ) = bsot + 1 ∑ i = 0 nat ( s ) asis ∈ P_{t+1}(s)\ =\ b_{so_{t+1}}\sum_{i=0}^ {n}{a_{t}(s)a_{si}}\\ s \inPt + 1() = bいいえ_t + 1私は= 0nat( s ) aそしてsε

        これは、アークの確率を重みとして取り、最大の重みを持つパスを見つけることによって取得できます。計算プロセスが複雑なため、ここには記載されていません。コード テストの後、ケースの単語分割結果は「I/爱梅萨」です。

我/B
我/S
爱/B
爱/E
爱/M
爱/S
梅/B
梅/E
梅/M
梅/S
沙/S
沙/E

        HMM を使用してすべての予測問題を解決できるわけではありません。実際、HMMには3つの重要な仮定があります(個人的な理解では、3つの仮定はこれら3つの仮定を満たす問題であり、すべてHMMを使用して解決できます)。

  1. マルコフ仮説 - つまり、上記の1 次マルコフ連鎖で、特定の状態にある確率は最後の状態にのみ関係し、以前の状態とは関係ありません。

    P { X n + 1 = in + 1 ∣ X 0 , X 1 , . . . , X n = in } = P { X n + 1 ∣ X n = in } P\{X_{n+1}=i_{n+1}\ |\ X_0,X_1,...,X_n=i_n\ } = P\{X_{n+1}\ |\ X_n = i_n\}P { Xn + 1=n + 1 X 0バツ1. . . バツn=n}=P { Xn + 1 X n=n}

  2. 不動の仮定 - 状態は時間/タイミングに依存しない

    P ( X i + 1 ∣ X i ) = P ( X j + 1 ∣ X j ) 、任意の i について、 j は P(X_{i+1}|X_i)\ =\ P(X_{j+1} | X_j)、任意の i、j について真を保持P ( Xi + 1X) = P ( Xj + 1X) 任意のiに対してj設立

  3. 出力の独立性の仮定 - 出力の状態は現在の状態にのみ関連します。つまり、現在の入力の状​​態は出力の状態によって決定され、このプロセスは以前の入力、出力、または時間によって変更されません。

    P ( O 1 , . . , OT ∣ X 1 , . . . , XT ) = Π ( OT ∣ XT ) P(O_1,...,O_T | X_1, ..., X_T) = \Pi(O_T \ |\ X_T)P ( O1. . . TX1. . . バツT)=P ( OT X T)

Viterbi - HMM の最適化された実装

        HMM には 3 つの確率行列があり、UTF-8 エンコーディングの場合、漢字の数も膨大です。このとき、操作 (分割する文の長さ) が大きくなるにつれて、混同行列と状態遷移確率行列が指数関数的に大きくなり、動的計画法に基づいて最大確率経路が求められます。このプロセスの複雑さは指数関数的に増加する可能性があります。現時点では、ビタビ アルゴリズムを使用してこの問題を解決しています。特定の制約が満たされている場合、DAG 内のすべてのアークの確率 (重み) を解決する必要はありません。制約は次のとおりです (この制約は個人的な要約であり、正確かどうかはわかりません。学生は変更または補足を歓迎します):

  1. ネットワーク内の最長パスを見つける
  2. すべてのノードの選択は、前の層の最大確率ノードと現在のノードの入力値によってのみ影響を受けます

        上記を組み合わせて、HMM の 3 つの仮定に関して、Veterbi が HMM の最大確率パスを解くのに適していることがわかります。特定のプロセスはここでは繰り返されません. 一般的な考え方は、初期確率計算は上記の計算方法と同じであり、後続のすべての状態計算は前の層の計算で最も高い確率ノードのみを取るということです. これは再帰的なプロセスであり、最後にバックトラックすることで単語分割の結果を得ることができます。ビタビ アルゴリズムを使用することの主な効果は、他の無関係なパスによって引き起こされる計算量を節約することであると感じることができます (個人的にはこれは貪欲に少し似ていると思いますが、貪欲の結果は必ずしも最適解ではなく、ビタビ アルゴリズムの結果が最適な untie です)。

ビタビアルゴリズムについて

         多くの人が隠れマルコフ モデルを使用してビタビ アルゴリズムを答えます. 実際、ビタビ アルゴリズムは隠れ馬の 3 番目の問題(観測シーケンスの最も可能性の高いラベル シーケンスを求める) を解決するための単なる実装方法です。この問題は、ビタビ アルゴリズムまたは他の方法 (網羅的方法など) によって実装できます。ビタビ アルゴリズムは、3 番目の隠れた馬の問題を解決するために使用でき、他の問題を解決するためにも使用できます。したがって、ビタビ アルゴリズムを隠れマルコフ モデルと同一視しないでください

         ビタビ アルゴリズムは, 実際には, 各ステップにおける多段階多選択モデルの最適選択問題です. 各ステップのすべての選択は, 最小総コスト (または最大値) と現在のステップまでの前のすべてのステップの現在のコストを保存します. . 次のステップの選択。すべてのステップを順番に計算した後、バックトラックによって最適なパスを見つけます。このモデルに適合するものはすべて、ビタビ アルゴリズムを使用して解決できます. 隠れた馬モデルの 3 番目の問題は、このモデルにちょうど適合するため、ビタビ アルゴリズムが使用されます.

——Zhihu Answer [4]を引用

トポロジカルソートではなく、なぜビタビなのか?

        個人的な理解は次のとおりです。トポロジカルソートは、単一のソースポイントからマルチシンクポイントへのパス選択の問題を解決し、HMM のネットワーク構造はマルチソースの初期状態空間であり、現時点では各ケースが出発点です. したがって、トポロジカル ソートは HMM の計算には適用できません。しかし、この説明は十分に適切ではないと思います。優秀な学生からの訂正を歓迎します。

また、加重非巡回グラフと有向非巡回グラフの2 つのキーワードを見ると、AOE ネットワークが思い浮かびます。AOE ネットワークが説明するのは、**単一のソース ポイント、単一のシンク ポイント、**重み付き、有向非巡回グラフであることを明確にする必要があります。ここでは、AOE ネットワークのクリティカル パス選択プロセスは適用されません。この 2 つを混同しないでください。

吃音分詞

        以上のことから、未登録語の解析方法については一定の理解があると思いますので、詳しくは文末の参考文献 [1] を直接お読みになることをお勧めしますもちろん、これは未登録の単語を処理する一般的な方法にすぎません。実際、非常に大きな辞書を取得でき (ictclas は 3000 万語を含む無料のシソーラスを提供しています)、既存のデータと HMM に基づいて独自の辞書を数えることもできます。吃音の単語分割では、まず辞書ファイルに基づいて接頭辞辞書が構築され、単語が分割されると、文は接頭辞辞書に基づいて完全に分割され、次に各単語の語形成確率が次のように使用されます。 weightを使用してDAG (有向非巡回グラフ)を構築し、最後に、動的計画法の方法を使用して、後ろから前にトラバースし、最大の重みを持つパスを見つけます。このうち、未登録単語の単語生成確率はHMMモデルに基づき、ビタビアルゴリズムを用いて計算されます。

        この基本的な処理については、吃音切り出しのREADMEファイルに実際に記載されています。しかし、HMM を知らない学生にとっては、「未登録の単語については、漢字の単語を形成する能力に基づく HMM モデルが使用され、ビタビ アルゴリズムが使用されます」という文が表示されて混乱する可能性があります。上記を組み合わせて、吃音の単語分割の README ファイルにあるアルゴリズムとその特定のコードの説明に戻ると、アイデアがより明確になる可能性があります。

        また、吃音分詞はDAGに架橋リスト方式を採用(各単語をアークとみなし、単語の開始単語の位置をアークの終点、終了単語の位置を先頭とする)弧の)。吃音分詞では、getDAG メソッドを見つけることができます。その戻り値を出力してみると、このストレージ構造とその後のトラバーサル プロセスをより深く理解するのに役立ちます。

参照https://github.com/fxsjy/jieba/blob/master/README.md#algorithm

  • 接頭辞辞書に基づく効率的なワード グラフ スキャニングを実現し、文中の漢字の可能なすべての単語構成から構成される有向非巡回グラフ (DAG) を生成します。
  • 動的計画法を使用して、最大確率パスを見つけ、単語の頻度に基づいて最大のセグメンテーションの組み合わせを見つけます
  • 未登録語は漢字の語形成能力に基づくHMMモデル、ビタビアルゴリズムを利用

        上記では、隠れ状態と隠れ状態確率行列が統計を通じて取得されていることを述べました。実際、これはこれ以外の多くのパラメータにも当てはまります。詳細は、吃音分割問題#7 データの生成方法を参照してください。この問題への回答は2012年のものであることに注意してください。2013 年 (最新の更新) には、著者も辞書の大きなバージョンを更新しました。つまり、現在のデータ ソースは、問題 7 での著者の回答のデータ ソースよりも包括的です。

垂直フィールドの最適化

        HMM と吃音単語セグメンテーションの基本的なプロセスを理解すると、吃音単語セグメンテーションは未登録単語を解析するための HMM アルゴリズムの実装を提供しますが、本番環境でより高い精度と再現率を達成するためには、それが必要であることがわかります。垂直フィールドでシソーラスを取得し、対応する単語の頻度を数え、単語の分割規則を変更します。垂直分野(特に、数学、物理学、コンピュータープログラミングなど、この分野に固有のテキスト特性)におけるテキスト処理の精度を向上させるため。

まとめ

        単語の分割における HMM の適用に関して、私の個人的な理解では、これは中国語の単語の分割の問題を単純化するための確率と統計の考え方に基づいているということです。学習プロセスでは、HMM が理由もなくランダムに選択されたり、中国語の未登録単語の処理を実現したりするとは考えられません。これは、フォローアップ学習で混乱を招きやすいものです。より合理的に言えば、中国語のテキストの特徴が HMM の 3 つの仮定と一致するため、HMM が選択された可能性があります。つまり、それを解決する他の方法はありますか?LSTM [1] などもあります。

        歴史を理解することで、初期の自然言語処理が文法規則に基づいていたことを知ることができます (これが、初期の頃、翻訳ツールを非常に滑らかではなく、ほとんど単純な単語から単語へのマッピングに使用していた理由です)。技術の開発と関連技術の開発により、確率と統計に基づくシステムのパフォーマンスがより理想的になります。しかし、「手動規則に基づく単語分割システムは、統計的学習に基づく単語分割システムよりも評価において劣ることが実践によって証明されている」ため、文法規則に基づくシステムが絶望的であるとは考えられません。実際、将来、より正確な自然言語処理を実現するためには、確率や統計に基づく手法に文法規則を組み合わせることは避けられない傾向であると言及している文献は現在多くあります(具体的な例はありませんが、 、確率統計に基づいて分析結果をさらに修正するための文法規則の体系的な使用があり、興味のある学生はそれについてもっと学ぶことができるという印象があります)。同時に、興味のある学生には、基本的な言語開発の歴史と中国語の単語分割の開発プロセスを理解することを個人的にお勧めします.これは、単語分割システムまたは他の NLP システムの原則と開発動向を深めるのに役立ちます.詳細については, [2-3]を参照してください。

        前回の記事からわかるように、現時点では、単語分割ツールおよび単語分割ツールに基づくシステムが、この技術に対して 100% 正しいとは考えられません。したがって、実際のアプリケーションでは、実際のビジネスに基づいてテスト ケースを設計し、Precision、Recall、および F-score の最小値を制限する必要があります。システムがすべてのテスト ケースを完了し、各スコアが対応するしきい値に達すると、テストは合格と見なされます。

参考文献

  1. Sequence tagging Chinese word segmentation based on LSTM network[J]. Computer Application Research, 2017(5).
  2. Zheng Jie. nlp Chinese Natural Language Processing の原則と実践 [M]. 北京: Electronic Industry Press、2017.1
  3. Huang Changning, Zhao Hai. 中国語の単語分割の 10 年間のレビュー[J]. Chinese Journal of Information, 2007, 21(3):8-19.
  4. https://www.zhihu.com/question/20136144
  5. https://github.com/fxsjy/jieba
  6. http://www.52nlp.cn/hmm
  7. https://www.cnblogs.com/zhbzz2007/p/6092313.html

おすすめ

転載: blog.csdn.net/qq_23937195/article/details/102684635