このリポジトリには、質問に答えるための最も重要な論文のいくつかの実装が含まれています。実装はチュートリアルの形式であり、上記の論文の大まかな注記です。このリポジトリは、深い学習とNLPの基本を知っており、わずかに複雑な論文を読み始め、それらがどのように実装されているかを見たい人に役立つかもしれません。また、このリポジトリは、Pytorchの基本に精通していることも想定していますが、私はすべてを簡単な用語で分解するために最善を尽くしました。
質問への回答は、一般的にNLPシステムとAIの知能を判断できることに基づいた重要なタスクです。 QAシステムには、いくつかのトピックに関する短い段落またはコンテキストが与えられ、パッセージに基づいていくつかの質問をされます。これらの質問に対する答えは、コンテキストの範囲であり、それはパッセージで直接利用可能です。このようなモデルをトレーニングするには、分隊データセットを使用します。
「QA用のNLPプリプロセシングパイプライン」という名前のノートブックには、私が書いたすべての前処理コードが含まれています。プリプロセシングコードは高レベルのライブラリを使用せず、すべての機能をゼロから書きました。トークン化にはスペイシーのみを使用します。ここで実装されている機能は、多くのNLPタスクに共通しているため、始めたばかりの人にとって有用かもしれません。たとえば、語彙、前処理された埋め込み、データセット/データローダーなどの重量行列の作成。後知恵では、TorchTextのようないくつかの高レベルライブラリを使用することはより良いアイデアであり、現在同じことに取り組んでいます。
すべてのノートブックは、このアプローチに基づいています。最終的に、ニューラルネットの構築とは、テンソルを使用することです。各テンソルの形状と内容を知ることは、学習中に非常に便利だと思ったものです。したがって、コードの各行の後、コードの変換のために発生するテンソルの形状と変化についてコメントしました。これにより、ニューラルネットで何が起こっているのかを理解するプロセスがより直感的になります。
より高速なGPUへの無制限のアクセスはありません。以下のモデルは、vast.aiでGPUをレンタルすることにより訓練されています。私は実験の大部分にGTX 1080 Tiを使用しました。
最初のノートブックでは、多層LSTMと双線形の注意を伴う比較的単純なモデルを実装します。各レイヤー/コンポーネントの詳細と直観は、コードにジャンプする前に説明されています。このモデルは、この論文で説明したモデルと非常によく似ており、同じ最初の著者であるDanqi Chenも持っています。 2番目のモデルは、「丁寧な読者」としても知られています。ノートブックに実装されているモデルは、これのわずかに高度なバージョンです。取得したDEVセットの結果は次のとおりです。
| エポック | em | F1 |
|---|---|---|
| 5 | 56.4 | 68.2 |
結果を改善するためにこれをもっとトレーニングし、すぐに更新します。
次に、もう少し複雑な紙に移動します。この論文では、前の論文で得られた結果を改善します。ここで実装されたモデルは、以前のモデルとは異なり、複数のレベルの粒度でのコンテキストとクエリを表すマルチステージ階層アーキテクチャです。また、このペーパーでは、LSTMSと本質的に双方向の記憶のない注意メカニズムを広範囲に使用するため、再発も含まれます。このノートブックでは、キャラクターの埋め込み、ハイウェイネットワークなどの重要なNLP技術について詳しく説明しています。 DEVセットの結果:
| エポック | em | F1 |
|---|---|---|
| 5 | 60.4 | 70.1 |
最後に、私たちは再発から離れ、自己触たちと畳み込みのみを使用します。このペーパーでは、「注意が必要です」からインスピレーションを得ています。モデルのデザインの背後にある重要な動機は次のとおりです。畳み込みはテキストのローカル構造をキャプチャし、自己関節は各ペアの単語間のグローバルな相互作用を学習します。このチュートリアルでは、自己関節や深さごとの分離可能な畳み込みなどのトピックについて説明しています。 DEVセットの結果:
| エポック | em | F1 |
|---|---|---|
| 3 | * | 36.6 |
私は現在、このモデルをトレーニングしています。私は現在時間が短いので、より高速なGPUにアクセスできません。これを1エポックでトレーニングするには、GTX 1080 Tiで約1時間かかります。
私は専門家ではありません。このプロジェクトの背後にある私の主な動機は、NLPドメインについて学ぶことでした。概念的または愚かな間違いが見つかった場合は、親切に問題を作成し、それらを迅速に修正するために最善を尽くします。他の貢献も大歓迎です。モデルをトレーニングして結果を改善した場合は、PRを作成してください。このドメインにもっと多くの論文を実装し、それらをこのリポジトリに追加したい場合は、喜んでお手伝いします。私は現在時間内に不足していますが、このリポジトリを積極的に維持しています。