NLP:スペルチェック-内観(パート2)

パート1 )今日、私たちのシステムによるテキストの理解のレベル、どのスペルミスがキャッチしやすいか、非常に単純ではないか、非常に難しいかについて話します。



そもそも、テキストは2つの観点から見ることができます。単語、スペース、句読点の単純なシーケンスとして、または構文とセマンティックの依存関係によって接続された概念のネットワークとして。 「大きな犬が大好き」という文では、単語間の関係の構造は同じですが、単語を任意の順序で並べることができます。







エラーはさまざまなレベルで発生することもあります。 線形構造を間違える可能性があります-同じ単語を2回入力し、ドット、括弧などを忘れます。 つまり、チェーンで単語を構築するプロセスでエラーが発生し、人が文法規則の無知から抜け出すことはほとんどありません。 これはおそらく単純な不注意の問題です。 ただし、チェーンのレベルでは、いくつかの実際の文法エラーを特定できます。 たとえば、英語のテキストに「以前」の組み合わせを含めるべきではありません。「以前」または「以前」のいずれかである必要があります。



それでも、実際の文法は概念のネットワークの分析レベルから始まります。 犬についての例では、文中のこれらの単語の相対的な位置に関係なく、件名「I」を動詞「愛」と直接組み合わせて番号を付ける必要があります。 もちろん、この考慮により、線形構造のレベルで特定されたより単純なエラーをキャッチする必要性が排除されるわけではありません。



最初のレベル

最も簡単な方法でエラーチェックを開始するのが賢明です。 部分文字列の平凡な検索のレベルで何かを捕まえることができるなら、なぜ重い砲兵を接続するのですか? 最も単純な機能は、MS Wordに存在するオートコレクトリストです。 ユーザーによる確認がなくても、システムによって自動的に修正された明らかなタイプミスについて話しています:abbout-> about、amde-> made、compleatly->完全に。 オートコレクトは非常に明白な機能のように思えるかもしれませんが、MS Wordのアクティブユーザーとしてオートコレクトが役立つ場合が多く、他のワードプロセッサでもオートコレクトが見られることを嬉しく思います。 そして、このために私たちは最終的に働きます。



テキストを1つの大きな行として扱う正規表現に基づく単純なルールは、もう少し複雑です。 現在、正規表現を使用して、活版印刷の粗さに関連する単純な状況をキャッチします。句読点間のスペース、単語間の余分なスペース、「!?」などの非標準的な組み合わせ などなど。 原則として、単純な部分文字列検索のレベルであっても、スペルチェッカーによってスキップされたエラーの数を見つけることができます。



オファーとトークン

今、私たちはもっと面白いことを進めています。 テキストを文字列としてではなくテキストとして正確に分析するには、その中の構造要素を強調表示する方法を学ぶ必要があります。 私たちはまだ単語間の関係の構造からは程遠いので、最も単純なことから始めましょう-文の境界を認識します。 なぜこれが必要なのですか? まあ、最初に、文の始まりと終わりに特徴的なエラーがあります:大文字で始まるのを忘れた、終わりにドットを置くのを忘れた(省略記号、疑問符/感嘆符)。 それほど明白ではないケースがあります-例えば、数字で書かれた数字で文を始めることは文体的に受け入れられません。 第二に、既存の文構造がなければ、分析の次の段階に進むことは不可能です-文の単語間の関係を識別するために。



私たちの世界のあらゆるものと同じように、一見したところ、テキストを文章に分解する作業はもはや簡単ではないように思えます。 明白なアルゴリズムは、文が終わる句読点を見つけ、その後に大文字が続くことです。 同時に、「M。イワノフが述べたように...」という人の名前に出会うと間違われます。同様に、ピリオドが発生する略語がパスに表示されます。 原則として、アナライザーに名前と略語のリストを追加できますが、このソリューションにはまだ欠陥があります。 たとえば、新しい言語に合わせて完全に書き換える必要があります。新しい言語では、文を終了する規則があります。 さらに、明らかな矛盾があります。入力テキストにエラーが含まれているという事実から進めます(モジュールの本質はその修正にあります)。 間違った入力の条件でテキストを文章に分割する方法は? この場合、プロポーザルのジャンクションでエラーが表示される機会は自動的に失われます。 境界がポイントと大文字の間にあると仮定した場合、「大文字を忘れた」というタイプのエラーはすぐに手の届かないところに置かれます。なぜなら、システムは単に文章の境界がこの場所にあることを理解しないからです。



現在、実際の条件でテキストを文章に分割する最も一般的なアプローチは、機械学習に基づく分類アルゴリズムを使用することです。



文スプリッター

つまり、分類タスクは、属性(A1、...、An)に基づいてオブジェクトCの正しいクラスを決定することです。 学習アルゴリズムには、入力で既知のオブジェクトの大規模な選択が与えられ、これに基づいて、属性値が特定のクラスに属するオブジェクトの属性にどのように影響するかの考えを形成します。 次に、未知のオブジェクトの属性セットをアルゴリズム入力に適用し、最も可能性の高いクラスを取得できます。



分類問題の教科書の例は、4つのパラメーター(花びらとがく片の長さと幅)に基づいてアイリスの花のタイプを決定することです。 虹彩には3種類あります。Irissetosa、Iris virginica、Iris versicolorです。 Irisデータセットには、次の形式のエントリが50個リストされています。







分類アルゴリズムは、このデータを調べて、虹彩属性と1つまたは別の特定の種との対応に関するモデルを構築できます。 私の知らない虹彩が私の庭で育った場合、そのパラメーターを測定し、アルゴリズムにどの種類の虹彩が属するかを尋ねることができます。



分類子は、他の目的にも使用できます。特定の状況での標準決定の表に基づいて決定を行い、隠されたパターンを明らかにします-別の教科書の例では、タイタニック号のcrash落を生き延びた乗客の「属性」を調べて、さまざまなグループの人々(子供/大人、男性/女性、乗客/チームメンバー、チケット所有者1/2/3クラス)の可能性。



さまざまな分類アルゴリズムがあります:決定木、最近傍、ベイジアンネットワーク、最大エントロピーモデル、線形回帰...それぞれに長所と短所があります。 数値データでよりうまく機能するものもあれば、プログラムが簡単なものもあれば、より高速なものもあります。また、分析に便利な形式で識別された分類ルールを策定します。



テキストを文に分解することに関して、分類子は次のように機能します。 入力は、手動で文に分割されたテキストです。 システムは、文の各端の「属性」を調べ(実際、境界の左右にあるものを調べます)、分類モデルを作成します。 これで、アルゴリズムにテキスト内の任意のポイントを入力し、それが文の境界かどうかを尋ねることができます。



どんな微妙さがありますか? まず、ここでは分類問題の標準化があまり一般的ではありません。 入力では、文の終わりのコンテキストのみを取得します。



(A1、...、An)->(文の終わり)



従来の設定では、ナレッジベースにはすべてのオプションが含まれている必要があります。



(A1、...、An)->(文の終わり)

(A1、...、An)->(文の終わりではない)



私たちの場合、表にすべての終わらない文の例を詰め込むのはあまりにも破滅的です-ベースは信じられないほど成長します。 どうやら、この理由で、機械学習スキームの著者として最も頻繁に引用されているA. Ratnaparkhi (問題に適用)は、最大エントロピーの原理を使用していました。 このモデルを使用すると、他の可能なクラスに関係なく、このクラスに属するオブジェクトの確率を単純に求めることができます。 言い換えれば、与えられたコンテキストが文の終わりになる確率をモデルに尋ねます。 アルゴリズムが確率が1/2より高いと答えた場合、文の境界としてコンテキストをマークできます。



他の分類アルゴリズムを試すのは理にかなっていると思います。 私の知る限り、これは行われていません。 手が届くなら-やります。 Ratnaparkhiの実験は、98%の領域でのアルゴリズムの正確さを示しています。つまり、98を正しく推測している文の100の終わりからです。



残念ながら、スペルチェッカーでは、入力テキストにエラーが含まれる可能性があるという事実に再び遭遇します。 センテンスで分類された正しいテキストでモデルをトレーニングすると、コンピューターはセンテンスが常に大文字で始まると判断します。 考慮される属性の「タイトル」を破棄すると、モデルの精度が低下します。 参照テキストに手動でいくつかの間違いを犯すことができます(場所によっては、ポイントを「忘れて」、場所によっては大文字を小文字に置き換えます)。 さらに、Ratnaparkhiシステムでは、まず提案の潜在的な境界を見つけてから、この場所に関する意見をシステムに尋ねる必要があります。 彼は単純にそれをします:ポイント、感嘆符、または疑問符を探して、そこに何があるか尋ねます。 私たちと一緒に、ユーザーはポイントを忘れることができます-そして何をすべきか?



今日、句読点に加えて、改行もチェックします(個人的な経験から-ポイントをどこかに置くのを忘れた場合、これは段落の最後にあります)。 単語間のすべてのスペースを調べてみることができますが、精度が落ちるのではないかと心配しています。 一般的に、考えるべきことがあります:)



さて、今日はこれで十分です。次回も続けましょう。



All Articles