データが不十分なときに深い学習をする方法を教えてくださいNLP

要約:深い学習を行うためのデータはまだありません。

データ科学者として、あなたの最も重要なスキルの1つは、あなたの問題に適したモデリング手法とアルゴリズムを選択することです。 数か月前、テキスト分類の問題を解決しようとしました。これは、どのニュース記事がクライアントに関連していたかを並べ替えました。

私は数千のタグ付きサンプルしか持っていないので、TF-IDFのロジスティック回帰などの単純な古典的な機械学習モデリング手法を使い始めましたが、このモデルは長い文書のテキスト分類に適しています。

私のモデルのエラーを発見した後、私は単語を理解するだけではこの作業には不十分であることを発見しました。私は、文書のより深い意味理解を使用するモデルが必要です。

深い学習モデルは、翻訳、Q&A、抄録、自然言語推論などの深い理解を必要とする複雑なタスクで非常によく機能します。 これは良い方法だと思われますが、深い学習には通常、数十万〜数百万のトレーニング・マークのデータ・ポイントが必要であり、何千ものデータが明らかに十分ではありません。

しばしば、大規模なデータセットは、過大適合を避けるために深く学ばれます。 ディープニューラルネットワークには多くのパラメータがあります。通常、データが不十分な場合は、トレーニングセットを覚えてテストセットのパフォーマンスが低下します。 大きなデータなしでこの現象を回避するためには、特別な技術を使用する必要があります。

この記事では、記事、ブログ、フォーラム、Kaggleで見つけたいくつかの方法を、大きなデータなしでより良い目標を達成するために示します。 これらの方法の多くは、コンピュータビジョンで広く使用されているベストプラクティスに基づいています。

正規化

正則化法は、過学習を避けるために、機械学習モデル内でさまざまな方法で使用される方法です。この方法は、理論的背景が強く、一般的な方法でほとんどの問題を解決できます。

L1とL2の正則化

この方法はおそらく最も古く、多くの機械学習モデルで長年使用されてきました。 この方法では、最小化しようとしているモデルの損失関数に重み付けサイズを追加します。 このようにして、モデルはウェイトを小さくしようとし、モデルを助けないウェイトは大幅にゼロになり、モデルには影響しません。 このようにして、より少数の重みを使用してトレーニングセットをシミュレートすることができます。 詳細な手順については、 この記事をお読みください。

ドロップアウト

ドロップアウトはもう一つのより新しい正則化方法です。ニューラルネットワークのすべてのノード(ニューロン)はトレーニング中に破棄されます(ウェイトはゼロに設定されます)。この方法では、ネットワークは特定の神経に依存することができません。メタまたはニューロンの相互作用は、ネットワークの異なる部分の各パターンを学習する必要があります。 これにより、モデルは新しいデータへの昇進の重要なパターンに集中することができます。

早く立ち止まる

アーリーストップは、検証セットのパフォーマンスを監視する必要がある単純な正規化方法です。検証パフォーマンスが引き続き向上することがわかった場合は、トレーニングを停止します。 このアプローチは、モデルが5〜10期またはそれ以前の段階で過度にフィットする傾向があるため、大きなデータがない場合には重要です。

少数のパラメータ

大量のデータセットがない場合は、各レイヤーのパラメータとニューロンの数を設定することに非常に注意する必要があります。 さらに、畳み込みレイヤーのような特別なレイヤーは、完全に連結されたレイヤーよりもパラメーターが少ないので、問題に合ったときに使用すると便利です。

データの強化

データの強化は、訓練データをラベル不変の方法で変更することによって、より多くの訓練データを作成する方法です。 コンピュータビジョンでは、フリップ、トリミング、スケーリング、回転などのデータセットを強化するために、多くのイメージ変換が使用されます。

これらの変換は、画像データには役立ちますが、テキストには有効ではありません。たとえば、「Dog Loves Me」のような文を反転することは有効な文ではありません。 テキストデータの強化方法は次のとおりです。

類義語置換

この方法では、テキスト中のランダムな単語を同義語に置き換えます。たとえば、「私はこの映画が大好きです」という文章を「私はこの映画が大好きです」という文章に変更しました。同じラベルにすることができます。 同義語の単語ベクトルは非常に似ているので、この方法は私にとっては機能しません。したがって、モデルは2つの文を展開ではなくほぼ同じ文として扱います。

方向変換

このアプローチでは、テキストを使用して機械翻訳による中間言語に翻訳し、それを他の言語に翻訳します。 この方法はKaggle Toxicity Review Challengeで成功裏に使用されました。 たとえば、「私はこの映画が大好きです」をロシア語に翻訳すると、「Мнеоченьнравитсяэтотфильм」が得られます。英語に翻訳すると「私はこの映画が本当に好きです。 逆翻訳方法は、最初の方法と同様に、同義語置換を提供しますが、同じ意味を保持しながら単語を追加または削除して文章を解釈することもできます。

ファイルの切り取り

ニュース記事は長く、データを表示するときに、すべての記事がドキュメントを分類する必要はありません。 これは記事をいくつかのサブ文書にデータ拡張として切り抜くことを考えるようになったので、私はより多くのデータを得るでしょう。 まず、文書からいくつかの文章を抽出し、10個の新しい文書を作成しようとしました。 これは、文章間に論理的な関係のない文書を作成しますが、不正な分類子があります。 私の2番目の試みは、各記事を5つの連続した文に分けることでした。 このメソッドは非常にうまく動作し、私に良いパフォーマンスを向上させます。

対立するネットワークの生成

GANは、データ・サイエンスで最もエキサイティングな最新の開発の1つであり、画像作成の世代モデルとしてよく使用されています。 このブログ記事では、GANを使用して画像データのデータを強化する方法について説明しますが、テキストとしても使用できます。

移行学習

マイグレーション学習とは、別の問題(通常は大きなデータセット)によって問題に訓練されたネットワークからのウェイトの使用を指します。 マイグレーション・ラーニングは、いくつかのレイヤーのウェイト初期化として使用されることもあります。 コンピュータビジョンでは、事前に訓練されたImagenetモデルを使用することは問題を解決するための非常に一般的な方法ですが、NLPにはImagenetのような学習の移行に使用できる非常に大きなデータセットがありません。

事前に訓練された単語ベクトル

NLPディープラーニングアーキテクチャは、通常、ホットコードワードをデジタルベクタ表現に変換する埋め込みレイヤで始まります。 埋め込みレイヤーをゼロから練習できますが、教師なし学習メソッドを使用して大量のデータを訓練したり、ドメイン内のデータを訓練するWord2Vec、FastText、またはGloveなどの事前に訓練された単語ベクトルを使用することもできます。 あらかじめ訓練された単語ベクトルは、大量のデータに基づく単語のモデルコンテキストを提供し、モデル内のパラメータ数を減らし、過適合の可能性を大幅に低減するので、非常に効率的です。 ここでは 、単語の埋め込みについて詳しく読むことができます

事前に訓練された文章ベクトル

モデルの入力を単語から文に変更することができるので、パラメータの数が少なく、十分な表現力を持つ少数のモデルを使用できます。 これを行うには、FacebookのInferSentやGoogleの一般的な文章エンコーダなど、事前に訓練された文章エンコーダを使用できます。 我々はまた、マークされていないデータのために、思考ベクトルや言語モデルをスキップするなどの方法を使用して文章エンコーダを訓練することもできる。 以前のブログ投稿から教師なしの文章ベクトルの詳細を知ることができます。

トレーニング済みの言語モデル

ULMFITOpen-AI ConverterBERTなどの最近の論文は、非常に大規模なコーパスで言語モデルを事前にトレーニングすることで、多くのNLPタスクで驚くべき結果を達成しています。 言語モデルは、先行する単語を使用して、文の次の単語を予測するタスクです。 私にとって、この種の事前トレーニングは、より良い結果を得るのにはあまり役立ちませんでしたが、記事では微調整に役立ついくつかの方法が示されていますが、まだ試していません。 これは 、プレトレーニング言語モデルについての良いブログです。

監督されていないまたは自己監視された学習のための事前訓練

ラベルのないデータから大量のデータセットがある場合は、オートエンコーダやマスキング言語モデルなどの教師なしの方法を使用して、テキストのみを使用してモデルを事前にトレーニングすることができます。 もう一つの選択肢は自己監視を使うことです。 自己監視モデルは、人間の注釈なしにタグを自動的に抽出するモデルです。 Deepmojiプロジェクトでは、Deepmojiでは、つぶやきから絵文字を予測するためのモデルを練習しました。絵文字の予測で良い結果を得た後、彼らのネットワークを使用して、最新の結果を得るためにプレトレーニングしました。トゥイーター感情分析モデル。 絵文字の予測と感情分析は明らかに非常に関連しているので、事前学習の仕事として非常によく機能します。 ニュースデータの自己監視タスクは、タイトル、新聞、コメント数、リツイート数などを予測することができます。 セルフモニタリングは事前にトレーニングするのに非常に適していますが、実際のタグに関連付けられるプロキシタグを特定するのは難しい場合があります。

フィーチャ工学

私は深く学ぶ "キル"機能エンジニアリングは、少し古いです知っている。 しかし、大きなデータセットがない場合、フィーチャエンジニアリングを使用してネットワークに複雑なパターンを学習させると、パフォーマンスが大幅に向上します。 たとえば、私のニュース記事の分類では、著者、新聞、レビュー、タグなどの数がラベルを予測するのに役立ちます。

マルチモードアーキテクチャ

マルチモードアーキテクチャを使用して、ドキュメントレベルの機能をモデルに組み込むことができます。 マルチモーダルでは、テキスト用、機能用、出力レイヤーの組み合わせ、レイヤーの追加など、2つの異なるネットワークを構築しました。 これらの機能は通常テキストよりも強い信号を持つため、これらのモデルは訓練が難しいため、ネットワークは主に機能効果を学習します。 これは、マルチモーダルネットワーク上の素晴らしいKerasチュートリアルです。 この方法は、パフォーマンスを1%未満改善しました。

ワードレベル機能

特徴エンジニアリングの別のタイプは、品詞タグ、意味ロールタギング、エンティティ抽出などの単語レベルの特徴である。 ホットコードされた表現または単語レベルの特徴の埋め込みを単語の埋め込みと組み合わせて、それをモデルへの入力として使用することができます。 たとえば、感情分析タスクでは、感情辞書を使用して埋め込みに別の次元を追加することができます.1は辞書内の単語を意味し、0は他の単語を意味するため、モデルは非常に集中する必要がある単語の一部を簡単に学習します。 私の使命では、いくつかの重要なエンティティの次元を追加しました。これは私に良いパフォーマンスをもたらしました。

フィーチャエンジニアリングとしての前処理

最後のフィーチャエンジニアリングアプローチは、モデルをより簡単に学習できるように入力テキストを事前処理します。 スポーツが私たちのラベルにとって重要でない場合、野球、野球、テニスのスポーツという言葉を変えることができます。スポーツの違いをネットワークが理解するのに役立ちます。重要ではない、ネットワークの数を減らすことができますのパラメータ。 前にも述べたように、長いテキストではニューラルネットワークがうまく機能しないため、テキストの自動要約アルゴリズム(「テキストランキング」など)を実行して重要な文章のみをWebに提供することができます。

私のモデル

私はあらかじめ訓練された単語ベクトルを使用して、その顧客の同じデータに対して弊社が行う別の作業を完了します。 フィーチャープロジェクトとして、エンティティレベルの機能を単語埋め込みに追加しました。 これらの基本モデルの変更により、精度が10%近く向上しました。これにより、私のモデルは少しランダム化され、重要なビジネスインパクトを持つモデルになりました。

クラウドサーバー99元の戦いのグループの購入! Laxinは現金赤いパケットを獲得することもできます! あなたが分裂するのを待っている300万!
直ちにグループを開いて、赤い封筒に勝ちます :http: //click.aliyun.com/m/100 …


著者:[方向]

オリジナルを読む

この記事はYunqi Communityのオリジナルコンテンツであり、許可なく複製することはできません。

元のリンク