エンドツーエンドのクローズドドメイン質問応答システム。 Huggingface Transformers Libraryの上に構築されています。
[[維持]このリポジトリはもはや維持されていませんが、教育目的で維持されています。 CDQAの代替手段が必要な場合は、https://github.com/deepset-ai/haystackをご覧ください
システムがどのように機能し、その実装がどのように機能するかを理解することに興味がある場合は、高レベルの説明を含むMediumに関する記事を書きました。
また、Feedlyが主催する#9 NLP朝食の間にプレゼンテーションを行いました。ここでチェックできます。
pip install cdqagit clone https://github.com/cdqa-suite/cdQA.git
cd cdQA
pip install -e .実験は次のとおりです。
t2.medium Deep LearningAMI(Ubuntu)バージョン22.0p3.2xlargeディープラーニングAMI(ubuntu)バージョン22.0 +単一のテスラV100 16GB。 cdQAを使用するには、次の列を使用してPandasデータフレームを作成する必要があります。
| タイトル | 段落 |
|---|---|
| 記事のタイトル | [記事のパラグラフ1、...、記事のパラグラフn] |
cdqaコンバーターの目的は、RAW Documentsデータベースからこのデータフレームを簡単に作成できるようにすることです。たとえば、 pdf_converterは、 .pdfファイルを含むディレクトリからcdqaデータフレームを作成できます。
from cdqa . utils . converters import pdf_converter
df = pdf_converter ( directory_path = 'path_to_pdf_folder' )このコンバーターを使用するには、Java OpenJDKをインストールする必要があります。現在、次のようなコンバーターがあります。
将来、より多くのコンバーターを改善し、追加する予定です。乞うご期待!
GitHubリリースからモデルとデータを手動でダウンロードするか、ダウンロード機能を使用できます。
from cdqa . utils . download import download_squad , download_model , download_bnpp_data
directory = 'path-to-directory'
# Downloading data
download_squad ( dir = directory )
download_bnpp_data ( dir = directory )
# Downloading pre-trained BERT fine-tuned on SQuAD 1.1
download_model ( 'bert-squad_1.1' , dir = directory )
# Downloading pre-trained DistilBERT fine-tuned on SQuAD 1.1
download_model ( 'distilbert-squad_1.1' , dir = directory )事前に訓練された読者を使用して、コーパスのパイプラインを適合させます。
import pandas as pd
from ast import literal_eval
from cdqa . pipeline import QAPipeline
df = pd . read_csv ( 'your-custom-corpus-here.csv' , converters = { 'paragraphs' : literal_eval })
cdqa_pipeline = QAPipeline ( reader = 'bert_qa.joblib' ) # use 'distilbert_qa.joblib' for DistilBERT instead of BERT
cdqa_pipeline . fit_retriever ( df = df )カスタム分隊のような注釈付きデータセットで読者を微調整したい場合:
cdqa_pipeline = QAPipeline ( reader = 'bert_qa.joblib' ) # use 'distilbert_qa.joblib' for DistilBERT instead of BERT
cdqa_pipeline . fit_reader ( 'path-to-custom-squad-like-dataset.json' )微調整後にリーダーモデルを保存します:
cdqa_pipeline . dump_reader ( 'path-to-save-bert-reader.joblib' )入力クエリを与えられて最高の予測を取得するには:
cdqa_pipeline . predict ( query = 'your question' )Nの最良の予測を取得するには:
cdqa_pipeline . predict ( query = 'your question' , n_predictions = N )また、最終ランキングスコアの計算において、レトリーバースコアの重量とリーダースコアを変更する可能性もあります(デフォルトは0.35です。
cdqa_pipeline . predict ( query = 'your question' , retriever_score_weight = 0.35 )カスタムデータセットでモデルを評価するには、注釈を付ける必要があります。注釈プロセスは、3つのステップで実行できます。
Pandas DataFrameをSquad形式でJSONファイルに変換します。
from cdqa . utils . converters import df2squad
json_data = df2squad ( df = df , squad_version = 'v1.1' , output_dir = '.' , filename = 'dataset-name' )アノテーターを使用して、グラウンドトゥルースの質問アンダーペアを追加します。
Squad形式のデータセットに答える閉じたドメイン質問のWebベースのアノテーターであるcdQA-annotatorを参照してください。
パイプラインオブジェクトを評価します。
from cdqa . utils . evaluation import evaluate_pipeline
evaluate_pipeline ( cdqa_pipeline , 'path-to-annotated-dataset.json' )読者を評価する:
from cdqa . utils . evaluation import evaluate_reader
evaluate_reader ( cdqa_pipeline , 'path-to-annotated-dataset.json' )Examples Directoryの下でいくつかのノートブックの例を作成しました。
また、BinderまたはGoogle Colaboratoryを使用して、これらのノートブックの例を直接再生することもできます。
| ノート | ハードウェア | プラットフォーム |
|---|---|---|
| [1] CDQAを使用した最初のステップ | CPUまたはGPU | |
| [2] PDFコンバーターの使用 | CPUまたはGPU | |
| [3]チームで読者を訓練する | GPU |
BinderとGoogle Colaboratoryは一時的な環境を提供し、開始が遅い場合がありますが、 cdQAを簡単に始めたい場合は、それらをお勧めします。
次を実行して、 cdQA REST APIを展開できます。
export dataset_path=path-to-dataset.csv
export reader_path=path-to-reader-model
FLASK_APP=api.py flask run -h 0.0.0.0これで、APIをテストするリクエストを作成できます(ここではHTTPIEを使用して):
http localhost:5000/api query== ' your question here ' cdQAシステムの上にユーザーインターフェイスを提供したい場合は、 cdQA向けに開発されたWebインターフェイスであるCDQA-UIの指示に従ってください。
貢献ガイドラインをお読みください。
| タイプ | タイトル | 著者 | 年 |
|---|---|---|---|
| ?ビデオ | スタンフォードCS224N:ディープラーニングレクチャー10のNLP - 質問回答 | クリストファー・マニング | 2019年 |
| ?紙 | オープンドメインの質問に答えるためにウィキペディアを読んでください | ダンキ・チェン、アダム・フィッシュ、ジェイソン・ウェストン、アントワーヌ・ボルド | 2017年 |
| ?紙 | 神経読解など | ダンキチェン | 2018年 |
| ?紙 | BERT:言語理解のための深い双方向変圧器の事前訓練 | ジェイコブ・デヴリン、ミン・ウェイ・チャン、ケントン・リー、クリスティーナ・タウタノバ | 2018年 |
| ?紙 | コンテキストワード表現:コンテキスト紹介 | ノア・A・スミス | 2019年 |
| ?紙 | Bertseriniでのエンドツーエンドのオープンドメイン質問応答 | Wei Yang、Yuqing Xie、Aileen Lin、Xingyu Li、Luchen Tan、Kun Xiong、Ming Li、Jimmy Lin | 2019年 |
| ?紙 | オープンドメインの質問応答におけるバート微調整のためのデータ増強 | Wei Yang、Yuqing Xie、Luchen Tan、Kun Xiong、Ming Li、Jimmy Lin | 2019年 |
| ?紙 | バートとのパッセージの再ランク | ロドリゴ・ノゲイラ、キュンギョン・チョ | 2019年 |
| ?紙 | MRQA:質問に答えるためのマシンリーディング | ジョナサン・ベラント、パーシー・リアン、ルーク・ゼトルモイヤー | 2019年 |
| ?紙 | Cloze Translationによる監視されていない質問応答 | パトリック・ルイス、ルドビッチ・デノイアー、セバスチャン・リーデル | 2019年 |
| フレームワーク | Scikit-Learn:Pythonでの機械学習 | Pedregosa et al。 | 2011年 |
| フレームワーク | Pytorch | アダム・パスケ、サム・グロス、スミス・チンタラ、グレゴリー・チャナン | 2016年 |
| フレームワーク | トランス:Tensorflow 2.0およびPytorchの最先端の自然言語処理。 | 顔を抱き締める | 2018年 |
Apache-2.0