私はNLPモデルとして、バートトークン化にはWordPieceを使用します。WordPieceでは、トークンを次のように分割します。playing
にplay
そして##ing
より広範囲の未知語 (OOV) をカバーしていると述べられています。WordPiece のトークン化が実際にどのように行われるのか、また、希少/OOV 語を効果的に処理する方法を説明してくれる人はいませんか?
ベストアンサー1
WordPiece と BPE は、NLP タスクで単語をサブワード レベルに分割するためによく使用される 2 つの類似した手法です。どちらの場合も、語彙は言語のすべての個別の文字で初期化され、語彙内の最も頻繁な/可能性の高い記号の組み合わせが語彙に繰り返し追加されます。
WordPieceアルゴリズムを考えてみます。原著論文(文言は私が若干修正しました):
- テキスト内のすべての文字を使用して、単語ユニット インベントリを初期化します。
- 1 のインベントリを使用して、トレーニング データ上に言語モデルを構築します。
- 現在の単語インベントリから 2 つの単位を組み合わせて新しい単語単位を生成し、単語単位インベントリを 1 つ増やします。モデルに追加したときにトレーニング データの可能性が最も高くなる可能性のあるすべての単語単位の中から、新しい単語単位を選択します。
- 事前に定義された単語単位の制限に達するか、可能性の増加が特定のしきい値を下回るまで、2 に進みます。
のバイオペアルゴリズムはステップ 3 のみで異なり、ここでは、現在のサブワード単位のセットの中で次に頻繁に出現するペアの組み合わせとして新しい単語単位を選択するだけです。
例
入力テキスト: 彼女は歩きました。彼は犬の散歩係です。私は歩きます
最初の 3 つの BPE マージ:
w
a
=wa
l
k
=lk
wa
lk
=walk
したがって、この段階では、語彙には、、、および とともに、すべての最初の文字が含まれますwa
。lk
通常walk
、これは一定数のマージ操作に対して実行されます。
珍しい/OOV 単語はどのように処理されますか?
簡単に言えば、このような分割方法を使用すると、OOV 単語は不可能になります。語彙に出現しない単語は、サブワード単位に分割されます。同様に、まれな単語の場合、使用したサブワードのマージの数が限られているため、その単語は語彙に出現しないため、より頻繁なサブワードに分割されます。
これはどのように役立ちますか?
モデルが という単語を見たと想像してくださいwalking
。この単語がトレーニング コーパスに少なくとも数回出現しない限り、モデルはこの単語をうまく処理する方法を学習できません。ただし、 、 、 という単語がそれぞれ数回しか出現しない可能性がありますwalked
。walker
サブワードwalks
分割がなければ、これらすべての単語はモデルによって完全に異なる単語として扱われます。
walk@@ ing
ただし、これらが、などに分割されるとwalk@@ ed
、それらすべてにwalk@@
共通点が生まれ、トレーニング中に頻繁に発生するようになるため、モデルはそれについてさらに学習できるようになる可能性があることに注意してください。