|
著者について: mczhao は Ctrip のシニア R&D マネージャーであり、自然言語処理テクノロジーの分野に重点を置いています。 概要 新たな消費者トレンドやインターネットミームの出現が続く中、EコマースプラットフォームにおけるNLPタスクでは、これまでに見たことのない単語に頻繁に遭遇します。これらの単語はシステムの既存の語彙に含まれておらず、「語彙外単語」と呼ばれます。 一方、シソーラス内の単語が欠落していると、一部のシソーラスベースの単語セグメンテーションの品質に影響し、間接的にテキストの想起と強調表示の品質、つまりユーザーのテキスト検索の精度と検索結果の解釈可能性に影響します。 一方、BERT/Transformerなどの主流のNLPディープラーニングアルゴリズムでは、中国語の処理において単語ベクトルではなく文字ベクトルが用いられることが多い。理論的には単語ベクトルを用いた方がより良い結果が得られるはずだが、語彙外単語も含まれるため、実際には文字ベクトルの方が効果的である。辞書がより包括的であれば、単語ベクトルを用いた方が文字ベクトルよりも優れているだろう。 結論として、新しい単語の発見は私たちが今すぐ解決しなければならない問題です。 I. 従来の教師なし手法 新しい中国語の単語を発見するという問題には、業界では既に比較的成熟した解決策が存在します。入力となるテキストコーパスは、N-Rayを用いて分割され、候補となるセグメントが生成されます。これらのセグメントの統計的特徴が計算され、それらの特徴を用いてセグメントが単語であるかどうかが判断されます。 業界の主流のアプローチは、3つの主要な指標(人気度、凝集性、隣接文字の豊富さ)を統計的に分析・観察することです。これらの指標については、オンラインで多くの記事で解説されています。ここでは概要を説明しますが、詳細については、Hello NLPとSmooth NLPによる2つの新しい単語発見に関する記事を参照してください。 1.1 人気 単語の出現頻度は、人気度を表すために使用されます。コーパス全体におけるすべてのセグメントの出現頻度がカウントされ、高頻度のセグメントは多くの場合、単一の単語を表します。 1.2 凝集性 ポイント相互情報量を使用して凝集性を測定する: 例えば、「Hanting」が単語であるかどうかを判断するには、log(P("Hanting")/P("Han")P("Ting"))を使用します。「Hanting」が単語になる確率は、「Hanting」の人気度に正比例し、「Han」と「Ting」という文字の個々の人気度に反比例します。これは理解しやすいでしょう。例えば、最も頻繁に出現する漢字は「的」(de)です。「的」とペアになっている漢字はどれも非常に高い確率で出現しますが、だからといって「x的」や「的x」が単語を構成するわけではありません。ここでは、「的」の個々の人気度が抑制的な役割を果たしています。 1.3 左右に隣接する文字の多さ 左右隣接エントロピーは、単語セグメントの左側と右側の文字の豊富さを表すために使用されます。左右隣接エントロピーは、候補単語セグメントの左側または右側に出現する文字の分布のランダム性を表します。左右エントロピーとして個別に表示することも、単一の指標として組み合わせることもできます。 例えば、「Shangri-La」というフレーズは人気度と凝集度が非常に高く、そのサブフレーズ「Shangri-La」も人気度と凝集度が高い。しかし、「La」という文字はほとんどの場合「Shangri-La」の後に出現するため、右隣接エントロピーが非常に低く、語形成を阻害する。したがって、「Shangri-La」という3つの文字は単独では単語を形成できないと判断できる。 II. 古典的手法の限界 従来の手法の問題点は、閾値パラメータを手動で設定する必要があることです。NLPの専門家は、現在のコーパスにおけるセグメントの確率分布を理解した上で、これらの指標を数式で組み合わせたり、それぞれを独立して使用したりして、判断基準となる閾値を設定します。この基準を用いた結果も、高い精度を達成できます。 しかし、確率分布、つまり単語の頻度は静的ではありません。コーパスが充実したり、コーパスの重み付けされた人気度(通常は対応する製品の人気度)が変動したりすると、専門家が設定した式のパラメータと閾値も常に調整する必要があります。これは多くの人的資源を浪費し、AIエンジニアをパラメータ調整の専門家に変えてしまうことになります。 III. ディープラーニングに基づく新語発見 3.1 単語頻度確率分布図 既存の業界アルゴリズムで使用されている3つの指標は、いずれも最終的には同じ特徴、つまり単語の頻度に依存しています。統計手法では、シンプルながらも重要な統計量は、ヒストグラムやボックスプロットなど、グラフで表示されることがよくあります。モデルがなくても、人間は一目で正しい判断を下すことができます。コーパスは固定長のセグメントに分割でき、各セグメントの単語頻度は0~255に正規化され、2次元行列にマッピングされます。行は開始文字、列は終了文字、各ピクセルはセグメントを表します。ピクセルの明るさは、その候補単語セグメントの人気度を示します。 上の画像は、「浦東空港ラマダホテル」というフレーズの単語頻度確率分布を示しています。肉眼でも「浦東」「浦東空港」「空港」「ラマダホテル」といった比較的明るい直角二等辺三角形のブロックが大まかに識別できることに驚きました。これらのブロックは、必要なフレーズ内の対応する単語を識別するために使用できます。 3.2 古典的な画像セグメンテーションアルゴリズム 単語の頻度確率分布を観察することで、短文セグメンテーション問題を画像セグメンテーション問題に変換できます。前述の新しい単語発見アルゴリズムと同様に、初期の画像セグメンテーションアルゴリズムもエッジのグレースケール変化の閾値検出に基づいていました。技術の進歩により、現在ではディープラーニングアルゴリズムが一般的に使用されており、中でもU-Net画像セグメンテーションアルゴリズムは非常によく知られています。 U-Netの前半では、畳み込みダウンサンプリングを用いて、複数の層にまたがる異なる粒度の特徴を抽出します。後半では、アップサンプリングを用いてこれらの特徴を同じ解像度で連結します。最後に、全結合層とソフトマックスを用いて、ピクセルレベルの分類結果を取得します。 3.3 畳み込みネットワークに基づく新しい単語発見アルゴリズム 単語頻度確率分布マップのセグメント化は、画像のセグメント化に似ています。どちらも、類似したグレーレベルを持つ隣接部分を切り取るという点です。したがって、画像セグメント化アルゴリズムと同様に、完全な畳み込みネットワークを使用して文章のセグメント化を行うこともできます。畳み込みを使用する理由は、文章や画像をセグメント化する際に、セグメント化のエッジ付近のピクセルなどの局所情報に重点を置くためです。多層ネットワークを使用する理由は、多層プーリングが異なるレイヤーからの特徴の閾値設定を表現できるためです。例えば、地図の地形をセグメント化する場合、傾斜(一次導関数/差分)と傾斜の変化(二次導関数/差分)の両方を考慮する必要があります。これらはそれぞれ個別に閾値設定され、組み合わせる方法は単純な線形重み付けではなく、シーケンシャルネットワークです。 新しい単語の発見シナリオでは、次のアルゴリズムを設計しました。 1) まず、短い文の単語頻度分布グラフを 24x24 のサイズまで 0 で埋めます。 2) まず、2つの3x3畳み込み層を使用して4つのチャネルを出力します。 3) 2 つの畳み込み層を連結し、さらに 3x3 畳み込みを実行して、単一のチャネルを出力します。 4) 損失関数はロジスティック = T であるため、最後の層は分類のためにソフトマックス出力を実行する必要はありません。 U-Net と比較すると、次の違いがあります。 1) セグメンテーションに使用される短文は一般に短く、単語頻度分布マップの解像度が高くないため、ダウンサンプリングとアップサンプリングは放棄され、モデルはそれに応じて簡素化されます。 2) U-Netは3クラス分類アルゴリズム(ブロック1、ブロック2、エッジ)であるのに対し、本アルゴリズムでは2つの分類(ピクセルが単語であるかどうか)のみを必要とします。そのため、最終的な出力結果も異なります。U-Netは連続したブロックと境界線を出力するのに対し、本アルゴリズムでは特定の点が正か負かを知るだけで済みます。 下の画像は、モデルを学習させた後の予測結果です。出力には、「上海」(上の行、下の列)、「虹橋」、「ビジネス街」という単語に対応するピクセルが識別されていることがわかります。 学習済みモデルを用いて、Ctripランドマークデータベースからランドマーク名を入力すると、下図に示すように、いくつかの新しい単語を自動的に分割・発見できます。精度の低いケースもいくつかありますが、全体的な精度は許容範囲内です。 これらの単語をシソーラスにインポートした後、検索語のセグメンテーション精度が向上し、セグメンテーションされた結果のシソーラスカバレッジも向上しました。検索語のセグメンテーションでは、一般的に、想起漏れを防ぐために過剰な想起を優先するため、業界では、想起漏れ対策として文字ベースのセグメンテーションなど、より積極的なアプローチが採用されています。一方、精度は通常、後続のランキングによって対処されます。そのため、セグメンテーション精度は向上したものの、ユーザーにとって検索結果の精度が大幅に向上したようには見えませんでした。ただし、セグメンテーションエラーによる誤ったハイライト表示によって発生するいくつかの問題は解決できます。 IV. 内部モデル分析 モデルの動作を調査するには、中間層の畳み込みカーネルを調べることができます。まず、モデルの畳み込み層の畳み込みカーネルの数を4から1に簡略化します。トレーニング後、TensorFlow API(`model.get_layer('Conv2').__dict__`)を使用して中間層を参照できます。Conv2層の畳み込みカーネルは以下のようになります。 ご覧のとおり、1行目と2行目はモデルに対して逆の効果をもたらします。これらは、そのピクセルにおける前の行と現在の行の差(重み付き)に対応しています。グレースケールの差が大きいほど、このピクセルで表される文字列が単語である可能性が高くなります。 また、1 行目と 2 列目の絶対値 0.04505884 が比較的小さいこともわかります。これは、1 行目の正のパラメータから 2 行目を引いた値と、3 列目の負のパラメータから 2 列目を引いた値が互いに打ち消し合うためと考えられます。 V. スペースの最適化 この記事では、まだ改善の余地が大いにある、非常に単純な完全畳み込みネットワーク モデルについて説明します。 まず、特徴選択の範囲を拡大することができます。例えば、本論文では入力特徴は単語頻度のみですが、左右の隣接エントロピーも入力特徴に含めることで、セグメンテーション効果はより正確になります。 第二に、ネットワークの深さを増やすという選択肢があります。モデル分析の結果、最初の畳み込み層は主にピクセルがゼロで埋められたケースを処理し、ピクセルの真の熱量に実際に焦点を合わせている層は1つだけであることが明らかになりました。3x3畳み込みカーネルは一次差分の結果のみを考慮し、現在のピクセルの前後2行目と2列目は無視します。カーネルサイズを適切に大きくするか、ネットワークを深くすることで、モデルの視野を広げることができます。しかし、ネットワークを深くすると、過学習につながる可能性もあります。 最後に、このモデルは語彙を補完して単語分割の性能を向上させるだけでなく、単語分割の参照データとして直接利用することもできます。このモデルの予測結果は、単語分割プロセスにおける候補語の想起と単語分割パスのスコアリングという2つのステップに適用できます。 |