機械学習 - 隠れマルコフモデルの固有表現認識

  • アウトライン

NLPのアプリケーションでエンティティの認識を名前付きはい、特に情報抽出の分野において、また、非常に広範です。HMM - エンティティの認識(NER)というアプリケーションは、最も一般的に使用されるアルゴリズムモデルは、隠れマルコフモデル(隠れマルコフモデル)です。このセクションでは、主にHMM、HMMのNERの導入の原理で行われ、応用例を示しています。

 

  • 分析のHMM原則

HMMの原理を説明する前に、HMMのいくつかの基本的な概念への言及は、最初の状態は、Hすることにより本明細書に表されることが暗黙的である、第二の大文字Oの意味で本明細書中で使用される明示的な状態であります。HMMは、確率が当社の明示的な状態のOの問題に基づいて、暗黙の状態Hで計算され、HMMにおける基本的な前提条件が唯一と言って前に各時間ステップの暗黙的な状態ということがありましょうステップ暗黙の状態。具体的には何を意味し、以下の私の絵を見て、あなたに説明するために、この絵を組み合わせて

 

 まず、すべての観測の私たちが直接、このような文、「王Liと天津の観光における2」を得ることができるという情報があり、これはシーケンスで観察され、我々は直接情報を入手することができます。そして、どのように我々はこの声明による後ろに取得することができます暗黙のシーケンスは、それに含まれていますか?これは、HMMが解決しようとする我々の問題です。隠された状態との間の図から分かるように、我々はよくのみ隠された状態を決定するために、前のステップにより、各工程の状態を隠された表示されることがあり、遷移行列、によって接続され、隠された状態との間で観察放出マトリクスが接続されていることによって、すなわち、の隠れ状態が与えられ、それぞれの観察確率点です。少し抽象ので、その下の画像で遷移行列と放出マトリックスを表示してみましょう

 

 番組上の画像いくつかの行列、我々のニーズの1つのHMM分析。まず、私たちの最初の行列は、各データの隠された状態の第一セットのセマンティクスに基づいて算出され、遷移行列は、当社のトレーニング計算すべての言語の暗黙的な状態の集合、例えば、すべての統計情報我々に基づいていますH0-それぞれ、あるH0-「H0とH0-」H1確率を導出し、「H0とH0-」H1の数、及び合計で割った値は、確率の他の他の遷移行列と同じ理由に達しました。排出マトリックスは、その手順は、すべてのH0-「O0、O1、O2、O3、O4の数の統計です、私たちのトレーニングデータのセマンティック焦点に基づいて計算した後、合計で割って、H0得隠された状態であり、各状態に対応する全ての明示的な確率は、また、同様の値の他の発光マトリクスを計算することができます。これは初期行列、推移マトリックス、および排出マトリックス方法および手順を導出します。私たちのセマンティクスの後、これらのデータから得られた濃度は、Vertibiアルゴリズムによって、私たちの観察可能なシーケンスに従って隠れ状態系列で計算します。

 

  • Vertibiアルゴリズム

Vertibiアルゴリズムは、それが動的に最適なパスで計画することができ、動的な経路計画アルゴリズムです。実際には、私たちの最高の暗黙の状態シーケンスで計画に対する当社の上記遷移行列、初期行列とEmmsionマトリックスに基づいて計算することができNERの私達の特定のアプリケーションでは、ここでP(H0H1H2H3H4H5を見つけることです.... .......)一方通行の最大値は、ここで注意すべき点は、必ずしも結論大域的最適に来ていないローカル最適な理由は、暗黙の状態の各ステップの確率とこのステップだけではなく、暗黙的な状態のステップの前に、現在の明示的な状態の影響を受けるが、また、その影響で。ここでは、Vertibiアルゴリズムに、便宜上、我々は唯一の図に示すハステップは、以下を参照してください示してどのように表示するために、小さな例を使用します

 

  • コードは、隠れマルコフアルゴリズムおよびビタビアルゴリズムを示しています

上記の分析は、原則として、暗黙的なマルコフアルゴリズムとビタビアルゴリズムの一部であり、そしてその特定のアプリケーションと実際のコードでは、次の私たちの表情はでNERを示し、そしてここで私はNLPの例を使用し、両方を実証することですアルゴリズム。我々はセマンティクスのセットがあると、私たちは、トレーニングデータの優れたマルコフ行列を計算し、その後、情報文アウトの名前を抽出するために、ビタビアルゴリズムを適用します。これは、我々は初期maxtrixと遷移表の計算の一部であることを、コードを見て最初のNLPでは非常に一般的なケースであります

   计算初始隠れ状態的概率和遷移行列
    DEF calculate_initial_and_transition_matrix(自己)
         辞書self.text_corpus:
             のための I、タグ列挙(辞書[ " タグ" ] [ - 1 ]):
                 もし I == 0:
                    self.pi [self.tag_index [タグ] + = 1 
                current_tag = self.tag_index [タグ]
                next_tag = self.tag_index [辞書[ " タグ" ] [I + 1 ]]
                self.transition [current_tag、next_tag] + = 1 
        self.transition / = np.sum(self.transition、軸= 1、keepdims = TRUE)
        Selfkpi / = Npksum(Selfkpi)
        self.pi [self.pi == 0] = 1E-8 
        self.transition [self.transition == 0] = 1E-8
         リターン self.pi、self.transition

第二に、放出マトリックスを計算するためのコードセクションで見てみましょう

    デフcalculate_emmision_matrix(自己):
         の辞書self.text_corpus:
             の単語、タグのzip(辞書[ " テキスト" ]、辞書[ " タグ" ]):
                self.emmision_matrix [self.tag_index [タグ]、self.dataloader.tokenizer.texts_to_sequences(ワード)[0] [0] + = 1 
        self.emmision_matrix / = np.sum(self.emmision_matrix、keepdims =真、軸= 1 
        self.emmision_matrix [self.emmision_matrix == 0] = 1E-8
         リターン self.emmision_matrix

我々は、マトリックスの値を取得し、当社のトレーニングデータによれば、マトリックスは、これらの値に応じて、我々は、単語が単語名(暗黙的な状態)となっている入力文(明示的な状態)に応じて計算することができますこれらの名前は、情報を抽出します。ここでは、我々は、ここではホイールを作成繰り返す必要はありません、我々はよくを達成役立ったTensorFlowアルゴリズム、vertibi実際のマニュアルの実装を持っていないと、私たちはこのフレームワークは、次のコードのショーで特定の外観をTensorFlow確率を導入するために必要なものです

輸入TFPなどtensorflow_probability
 輸入TFとしてtensorflow

TFD = tfp.distributions
initial_distribution = tfd.Categorical(ちゃったごめんなさい= PI)
transition_maxtrix = tfd.Categorical(ちゃったごめんなさい= 遷移)
observation_matrix = tfd.Categorical(ちゃったごめんなさい= emmision)


モデル = tfd.HiddenMarkovModel(initial_distribution = initial_distribution、
                              transition_distribution = transition_maxtrix、
                              observation_distribution = observation_matrix、
                              num_steps = 11 


test_string = 暁明と王は川釣りに行ってきました
タン = [data_handler.calculator.word_index [インデックス] のためのインデックスリスト(test_string)]
tag_sequence = model.posterior_mode(観測値= タン)
reversed_tag_index = {値:キーのためのキー、値data_handler.calculator.tag_index.items()}
タグ [reversed_tag_index [インデックス] = ための指標tag_sequence.numpy()]
 プリント(タグ)

上記の我々は、暗黙的な状態シーケンス(tag_sequence)を算出したvertibiヘルプをに従って、当社の行列(initial_distribution、transition_matrix、observation_matrix)と同様に、表示状態(test_string)、TFPのアルゴリズムに基づいています。これは、一般にNLPのアプリケーションで使用されるNERの一例です。

 

おすすめ

転載: www.cnblogs.com/tangxiaobo199181/p/12585312.html