Transformers documentation
DPR
이 모델은 2020-04-10에 HF papers에 게시되었으며, 2020-11-16에 Hugging Face Transformers에 기여되었습니다.
DPR
개요
Dense Passage Retrieval(DPR)은 최첨단 오픈 도메인 Q&A 연구를 위한 도구 및 모델의 집합입니다. Vladimir Karpukhin, Barlas Oğuz, Sewon Min, Patrick Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, Wen-tau Yih가 Dense Passage Retrieval for Open-Domain Question Answering에서 소개했습니다.
해당 논문의 초록은 다음과 같습니다:
오픈 도메인 질의응답은 후보 컨텍스트를 선택하기 위해 효율적인 패스리지 검색에 의존하며, TF-IDF나 BM25와 같은 전통적인 희소 벡터 공간 모델이 사실상 표준 방법입니다. 본 연구에서는 간단한 듀얼 인코더 프레임워크를 사용하여 소수의 질문과 패스리지로부터 임베딩을 학습함으로써, 밀집 표현만으로 검색을 실용적으로 구현할 수 있음을 보여줍니다. 다양한 오픈 도메인 QA 데이터셋에서 평가한 결과, 우리의 밀집 검색기는 top-20 패스리지 검색 정확도 기준으로 강력한 Lucene-BM25 시스템을 9%~19%의 절대적 차이로 크게 능가하며, 우리의 엔드투엔드 QA 시스템이 여러 오픈 도메인 QA 벤치마크에서 새로운 최첨단 성능을 달성하는 데 기여합니다.
이 모델은 lhoestq에 의해 기여되었습니다. 원본 코드는 여기에서 찾을 수 있습니다.
사용 팁
DPR은 세 가지 모델로 구성됩니다:
- 질문 인코더: 질문을 벡터로 인코딩
- 컨텍스트 인코더: 컨텍스트를 벡터로 인코딩
- Reader: 검색된 컨텍스트 내 질문의 답변을 추출하고, 관련성 점수를 함께 반환합니다(추론된 스팬이 실제로 질문을 답변하는 경우 점수가 높음).
DPRConfig
클래스 transformers.DPRConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 30522hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.1attention_probs_dropout_prob: float | int = 0.1max_position_embeddings: int = 512type_vocab_size: int = 2initializer_range: float = 0.02layer_norm_eps: float = 1e-12pad_token_id: int | None = 0bos_token_id: int | None = Noneeos_token_id: int | list[int] | None = Noneprojection_dim: int = 0is_decoder: bool = Falseadd_cross_attention: bool = False )
매개변수
- vocab_size (
int, 선택 사항, 기본값30522) — 모델의 어휘 크기입니다.input_ids로 표현할 수 있는 서로 다른 토큰의 수를 정의합니다. - hidden_size (
int, 선택 사항, 기본값768) — 숨겨진 표현의 차원입니다. - num_hidden_layers (
int, 선택 사항, 기본값12) — Transformer 디코더의 숨겨진 레이어 수. - num_attention_heads (
int, 선택 사항, 기본값12) — Transformer decoder의 각 attention layer에 사용할 attention head의 수입니다. - intermediate_size (
int, 선택 사항, 기본값3072) — MLP 표현의 차원입니다. - hidden_act (
str, 선택 사항, 기본값gelu) — 디코더에서 사용되는 비선형 활성화 함수(함수 또는 문자열)입니다. 예를 들어,"gelu","relu","silu"등이 있습니다. - hidden_dropout_prob (
Union[float, int], 선택 사항, 기본값0.1) — 임베딩, 인코더, 풀러의 모든 완전 연결 계층에 적용되는 드롭아웃 확률입니다. - attention_probs_dropout_prob (
Union[float, int], 선택 사항, 기본값0.1) — Attention 확률에 적용할 dropout 비율입니다. - max_position_embeddings (
int, 선택 사항, 기본값512) — 이 모델이 사용될 수 있는 최대 시퀀스 길이입니다. - type_vocab_size (
int, 선택 사항, 기본값2) —token_type_ids의 어휘 크기입니다. - initializer_range (
float, 선택 사항, 기본값0.02) — 모든 가중치 행렬을 초기화하는 truncated_normal_initializer의 표준 편차입니다. - layer_norm_eps (
float, 선택 사항, 기본값1e-12) — 레이어 정규화 레이어에서 사용되는 epsilon 값입니다. - pad_token_id (
int, 선택 사항, 기본값0) — 어휘에서 패딩에 사용되는 토큰 ID입니다. - bos_token_id (
int, 선택 사항) — 어휘에서 스트림 시작에 사용되는 토큰 ID입니다. - eos_token_id (
Union[int, list[int]], 선택) — 어휘에서 스트림 종료에 사용되는 토큰 ID입니다. - projection_dim (
int, 선택 사항, 기본값0) — 텍스트 및 비전 투영 레이어의 차원. - is_decoder (
bool, 선택 사항, 기본값False) — 모델이 디코더로 사용되는지 여부입니다.False인 경우 모델은 인코더로 사용됩니다. - add_cross_attention (
bool, 선택 사항, 기본값False) — 모델에 cross-attention 레이어를 추가할지 여부.
이것은 DPRQuestionEncoder의 설정을 저장하기 위한 설정 클래스입니다. 지정된 인자에 따라 Dpr 모델을 인스턴스화하여 모델 아키텍처를 정의하는 데 사용됩니다. 기본값으로 설정을 인스턴스화하면 facebook/dpr-ctx_encoder-single-nq-base와 유사한 설정이 생성됩니다.
Configuration 객체는 PreTrainedConfig를 상속하며 모델 출력을 제어하는 데 사용할 수 있습니다. 자세한 내용은 PreTrainedConfig의 문서를 참고하세요.
예:
>>> from transformers import DPRConfig, DPRContextEncoder
>>> # Initializing a DPR facebook/dpr-ctx_encoder-single-nq-base style configuration
>>> configuration = DPRConfig()
>>> # Initializing a model (with random weights) from the facebook/dpr-ctx_encoder-single-nq-base style configuration
>>> model = DPRContextEncoder(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDPRContextEncoderTokenizer
DPRContextEncoder 토크나이저를 구성합니다.
DPRContextEncoderTokenizer은 BertTokenizer와 동일하며, 구두점 분할과 워드피스를 포함한 끝에서 끝까지의 토큰화를 수행합니다.
사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 BertTokenizer를 참조하세요.
DPRContextEncoderTokenizerFast
클래스 transformers.DPRContextEncoderTokenizerFast
< source >( vocab: str | dict[str, int] | None = Nonedo_lower_case: bool = Trueunk_token: str = '[UNK]'sep_token: str = '[SEP]'pad_token: str = '[PAD]'cls_token: str = '[CLS]'mask_token: str = '[MASK]'tokenize_chinese_chars: bool = Truestrip_accents: bool | None = None**kwargs )
HuggingFace의 tokenizers 라이브러리를 기반으로 하는 “fast” DPRContextEncoder 토크나이저를 구성합니다.
DPRContextEncoderTokenizerFast는 BertTokenizer와 동일하며, 구두점 분할과 wordpiece를 포함하는 끝에서 끝까지의 토큰화를 실행합니다.
사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 BertTokenizer를 참조하세요.
DPRQuestionEncoderTokenizer
DPRQuestionEncoder 토크나이저를 생성합니다.
DPRQuestionEncoderTokenizer는 BertTokenizer와 동일하며, 구두점 분할과 워드피스를 포함하는 전체 토큰화 과정을 수행합니다.
사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 BertTokenizer를 참조하세요.
DPRQuestionEncoderTokenizerFast
클래스 transformers.DPRQuestionEncoderTokenizerFast
< source >( vocab: str | dict[str, int] | None = Nonedo_lower_case: bool = Trueunk_token: str = '[UNK]'sep_token: str = '[SEP]'pad_token: str = '[PAD]'cls_token: str = '[CLS]'mask_token: str = '[MASK]'tokenize_chinese_chars: bool = Truestrip_accents: bool | None = None**kwargs )
HuggingFace의 tokenizers 라이브러리를 기반으로 하는 “fast” DPRQuestionEncoder 토크나이저를 생성합니다.
DPRQuestionEncoderTokenizerFast은 BertTokenizer와 동일하며, 구두점 분할과 워드피스를 포함하는 end-to-end 토큰화를 실행합니다.
사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 BertTokenizer를 참조하세요.
DPRReaderTokenizer
class transformers.DPRReaderTokenizer
< source >( *argsdo_lower_case = False**kwargs ) → dict[str, list[list[int]]]
매개변수
- questions (
str또는list[str]) — 인코딩할 질문입니다. 여러 패스지에 대해 하나의 질문을 지정할 수 있습니다. 이 경우 질문은[questions] * n_passages처럼 복제됩니다. 그렇지 않으면titles또는texts의 개수와 동일한 수의 질문을 지정해야 합니다. - titles (
str또는list[str]) — 인코딩할 패사지의 제목입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록을 사용할 수 있습니다. - texts (
str또는list[str]) — 인코딩할 패사지 텍스트입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록을 사용할 수 있습니다. - padding (
bool,str또는 PaddingStrategy, 선택 사항, 기본값은False) — 패딩을 활성화하고 제어합니다. 다음 값을 받을 수 있습니다: True 또는 'longest': 배치 내 가장 긴 시퀀스 길이로 패딩합니다(단일 시퀀스만 제공된 경우 패딩하지 않음). 'max_length': max_length 인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 패딩합니다. False 또는 'do_not_pad' (기본값): 패딩하지 않음(즉, 서로 다른 길이의 시퀀스로 구성된 배치 출력 가능).True또는'longest': 배치 내 가장 긴 시퀀스 길이에 맞게 패딩을 수행합니다(단일 시퀀스만 제공된 경우 패딩을 하지 않음).'max_length':max_length인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 패딩합니다.False또는'do_not_pad'(기본값): 패딩을 하지 않습니다(즉, 서로 다른 길이의 시퀀스로 구성된 배치로 출력할 수 있습니다).
- truncation (
bool,str또는 TruncationStrategy, 선택 사항, 기본값은False) — 잘림을 활성화하고 제어합니다. 다음 값을 허용합니다:True또는'longest_first':max_length인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 방식은 토큰 단위로 잘라내며, 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우 가장 긴 시퀀스에서 토큰을 하나씩 제거합니다.'only_first':max_length인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우에만 쌍의 첫 번째 시퀀스를 잘라냅니다.'only_second':max_length인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우에만 쌍의 두 번째 시퀀스를 잘라냅니다.False또는'do_not_truncate'(기본값): 잘라내기 없음 (즉, 모델이 허용하는 최대 입력 크기보다 긴 시퀀스 길이를 가진 배치 출력 가능).
- max_length (
int, 선택 사항) — truncation/padding 파라미터 중 하나가 사용할 최대 길이를 제어합니다.설정하지 않거나
None으로 설정하면, truncation/padding 파라미터 중 하나가 최대 길이를 요구할 경우 미리 정의된 모델 최대 길이를 사용합니다. 모델에 특정 최대 입력 길이가 없는 경우(XLNet 등) 최대 길이로 truncation/padding하는 기능이 비활성화됩니다. - return_tensors (
str또는 TensorType, 선택 사항) — 설정된 경우, Python 정수 목록 대신 텐서를 반환합니다. 허용되는 값은 다음과 같습니다:'pt': PyTorchtorch.Tensor객체를 반환합니다.'np': Numpynp.ndarray객체를 반환합니다.
- return_attention_mask (
bool, 선택 사항) — attention mask를 반환할지 여부. 설정하지 않으면return_outputs속성에 따라 정의된 해당 tokenizer의 기본값에 따라 attention mask를 반환합니다.
반환값
dict[str, list[list[int]]]
다음 키를 가진 사전:
input_ids: 모델에 입력할 토큰 ID 목록.attention_mask: 모델이 어떤 토큰에 주의를 기울여야 하는지 지정하는 인덱스 목록.
DPRReader 토크나이저를 구성합니다.
DPRReaderTokenizer은 BertTokenizer와 거의 동일하며, 구두점 분할과 wordpiece를 포함하는 end-to-end 토큰화를 수행합니다. 차이점은 question, titles, texts라는 세 개의 입력 문자열을 받아 결합한 뒤 DPRReader 모델에 전달한다는 점입니다.
사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 BertTokenizer를 참조하세요.
입력 문자열의 토큰 ID와 .decode_best_spans에 전달할 기타 정보를 딕셔너리로 반환합니다.
토크나이저와 어휘를 사용하여 질문과 여러 패스지(제목 및 본문)의 문자열을 ID(정수) 시퀀스로 변환합니다.
그 결과로 생성되는 input_ids는 크기가 (n_passages, sequence_length)인 행렬입니다.
DPRReaderTokenizerFast
클래스 transformers.DPRReaderTokenizerFast
< source >( vocab: str | dict[str, int] | None = Nonedo_lower_case: bool = Trueunk_token: str = '[UNK]'sep_token: str = '[SEP]'pad_token: str = '[PAD]'cls_token: str = '[CLS]'mask_token: str = '[MASK]'tokenize_chinese_chars: bool = Truestrip_accents: bool | None = None**kwargs ) → dict[str, list[list[int]]]
매개변수
- questions (
str또는list[str]) — 인코딩할 질문입니다. 여러 패스지에 대해 하나의 질문을 지정할 수 있습니다. 이 경우 질문은[questions] * n_passages처럼 복제됩니다. 그렇지 않으면titles또는texts의 개수와 동일한 수의 질문을 지정해야 합니다. - titles (
str또는list[str]) — 인코딩할 패사지의 제목입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록을 사용할 수 있습니다. - texts (
str또는list[str]) — 인코딩할 패사지 텍스트입니다. 패사지가 여러 개인 경우 문자열 또는 문자열 목록을 사용할 수 있습니다. - padding (
bool,str또는 PaddingStrategy, 선택 사항, 기본값은False) — 패딩을 활성화하고 제어합니다. 다음 값을 받을 수 있습니다: True 또는 'longest': 배치 내 가장 긴 시퀀스 길이로 패딩합니다(단일 시퀀스만 제공된 경우 패딩하지 않음). 'max_length': max_length 인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 패딩합니다. False 또는 'do_not_pad' (기본값): 패딩하지 않음(즉, 서로 다른 길이의 시퀀스로 구성된 배치 출력 가능).True또는'longest': 배치 내 가장 긴 시퀀스 길이에 맞게 패딩을 수행합니다(단일 시퀀스만 제공된 경우 패딩을 하지 않음).'max_length':max_length인수로 지정된 최대 길이로 패딩하거나, 해당 인수가 제공되지 않으면 모델이 허용하는 최대 입력 길이로 패딩합니다.False또는'do_not_pad'(기본값): 패딩을 하지 않습니다(즉, 서로 다른 길이의 시퀀스로 구성된 배치로 출력할 수 있습니다).
- truncation (
bool,str또는 TruncationStrategy, 선택 사항, 기본값은False) — 잘림을 활성화하고 제어합니다. 다음 값을 허용합니다:True또는'longest_first':max_length인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 방식은 토큰 단위로 잘라내며, 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우 가장 긴 시퀀스에서 토큰을 하나씩 제거합니다.'only_first':max_length인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우에만 쌍의 첫 번째 시퀀스를 잘라냅니다.'only_second':max_length인수로 지정된 최대 길이로 잘라내거나, 해당 인수가 제공되지 않은 경우 모델이 허용하는 최대 입력 길이로 잘라냅니다. 이 옵션은 시퀀스 쌍(또는 쌍의 배치)이 제공된 경우에만 쌍의 두 번째 시퀀스를 잘라냅니다.False또는'do_not_truncate'(기본값): 잘라내기 없음 (즉, 모델이 허용하는 최대 입력 크기보다 긴 시퀀스 길이를 가진 배치 출력 가능).
- max_length (
int, 선택 사항) — truncation/padding 파라미터 중 하나가 사용할 최대 길이를 제어합니다.설정하지 않거나
None으로 설정하면, truncation/padding 파라미터 중 하나가 최대 길이를 요구할 경우 미리 정의된 모델 최대 길이를 사용합니다. 모델에 특정 최대 입력 길이가 없는 경우(XLNet 등) 최대 길이로 truncation/padding하는 기능이 비활성화됩니다. - return_tensors (
str또는 TensorType, 선택 사항) — 설정된 경우, Python 정수 목록 대신 텐서를 반환합니다. 허용되는 값은 다음과 같습니다:'pt': PyTorchtorch.Tensor객체를 반환합니다.'np': Numpynp.ndarray객체를 반환합니다.
- return_attention_mask (
bool, 선택 사항) — attention mask를 반환할지 여부. 설정하지 않으면return_outputs속성에 따라 정의된 해당 tokenizer의 기본값에 따라 attention mask를 반환합니다.
반환값
dict[str, list[list[int]]]
다음 키를 가진 사전:
input_ids: 모델에 입력할 토큰 ID 목록.attention_mask: 모델이 어떤 토큰에 주의를 기울여야 하는지 지정하는 인덱스 목록.
HuggingFace의 tokenizers 라이브러리를 기반으로 하는 “fast” DPRReader 토크나이저를 생성합니다.
DPRReaderTokenizerFast은 BertTokenizer와 거의 동일하며, 구두점 분할과 wordpiece를 포함하는 end-to-end 토큰화를 수행합니다. 차이점은 question, titles, texts라는 세 개의 입력 문자열을 가지고 있으며, 이 문자열들을 결합하여 DPRReader 모델에 전달한다는 점입니다.
사용 예시 및 매개변수에 대한 문서에 대해서는 상위 클래스 BertTokenizer를 참조하세요.
입력 문자열의 토큰 ID와 .decode_best_spans에 전달할 기타 정보를 딕셔너리로 반환합니다.
토크나이저와 어휘를 사용하여 질문과 여러 패스지(제목 및 본문)의 문자열을 ID(정수) 시퀀스로 변환합니다. 생성된 input_ids는 (n_passages, sequence_length) 크기의 행렬이며, 형식은 다음과 같습니다:
[CLS] <질문 토큰 ID> [SEP] <제목 ID> [SEP] <본문 ID>
DPR에 특화된 출력
class transformers.models.dpr.modeling_dpr.DPRContextEncoderOutput
< source >( pooler_output: Tensorhidden_states: tuple[torch.Tensor, ...] | None = Noneattentions: tuple[torch.Tensor, ...] | None = None )
매개변수
- pooler_output (
torch.Tensor, shape(batch_size, embeddings_size)) — DPR 인코더는 컨텍스트 표현에 해당하는 pooler_output을 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 질문 임베딩을 사용하여 컨텍스트를 임베딩하여 최근접 이웃 쿼리를 수행하는 데 사용됩니다. - hidden_states (
tuple[torch.Tensor, ...], 선택 사항, 다음 조건에서 반환됩니다:output_hidden_states=True이 전달되거나config.output_hidden_states=True) — 다음 형태의 튜플:torch.Tensor(임베딩이 있는 경우 임베딩 레이어의 출력 1개 + 각 레이어의 출력 1개)로, 형태는(batch_size, sequence_length, hidden_size).각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
- attentions (
tuple[torch.Tensor, ...], 선택 사항, 다음 조건에서 반환됩니다:output_attentions=True이 전달되거나config.output_attentions=True) — 다음의 튜플입니다:torch.Tensor(각 레이어당 하나씩, 모양이(batch_size, num_heads, sequence_length, sequence_length).self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
DPRQuestionEncoder의 출력 클래스입니다.
class transformers.models.dpr.modeling_dpr.DPRQuestionEncoderOutput
< source >( pooler_output: Tensorhidden_states: tuple[torch.Tensor, ...] | None = Noneattentions: tuple[torch.Tensor, ...] | None = None )
매개변수
- pooler_output (
torch.Tensor, shape(batch_size, embeddings_size)) — DPR 인코더는 질문 표현에 해당하는 pooler_output를 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 컨텍스트 임베딩을 활용한 최근접 이웃 쿼리에 질문을 임베딩하는 데 사용됩니다. - hidden_states (
tuple[torch.Tensor, ...], 선택 사항, 다음 조건에서 반환됩니다:output_hidden_states=True이 전달되거나config.output_hidden_states=True) — 다음 형태의 튜플:torch.Tensor(임베딩이 있는 경우 임베딩 레이어의 출력 1개 + 각 레이어의 출력 1개)로, 형태는(batch_size, sequence_length, hidden_size).각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
- attentions (
tuple[torch.Tensor, ...], 선택 사항, 다음 조건에서 반환됩니다:output_attentions=True이 전달되거나config.output_attentions=True) — 다음의 튜플입니다:torch.Tensor(각 레이어당 하나씩, 모양이(batch_size, num_heads, sequence_length, sequence_length).self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
DPRQuestionEncoder의 출력 클래스입니다.
class transformers.DPRReaderOutput
< source >( start_logits: Tensorend_logits: typing.Optional[torch.Tensor] = Nonerelevance_logits: typing.Optional[torch.Tensor] = Nonehidden_states: tuple[torch.Tensor, ...] | None = Noneattentions: tuple[torch.Tensor, ...] | None = None )
매개변수
- start_logits (
torch.Tensor, shape(n_passages, sequence_length)) — 각 패스지의 스팬 시작 인덱스에 대한 로짓. - end_logits (
torch.Tensor, shape(n_passages, sequence_length)) — 각 passage에 대해 스팬의 끝 인덱스에 대한 logits입니다. - relevance_logits (
torch.Tensor, shape(n_passages, )) — DPRReader의 QA 분류기가 출력하는 값으로, 각 passage가 주어진 질문에 답할 수 있는 점수를 나타내며, 다른 모든 passage와 비교됩니다. - hidden_states (
tuple[torch.Tensor, ...], 선택 사항, 다음 조건에서 반환됩니다:output_hidden_states=True이 전달되거나config.output_hidden_states=True) — 다음 형태의 튜플:torch.Tensor(임베딩이 있는 경우 임베딩 레이어의 출력 1개 + 각 레이어의 출력 1개)로, 형태는(batch_size, sequence_length, hidden_size).각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
- attentions (
tuple[torch.Tensor, ...], 선택 사항, 다음 조건에서 반환됩니다:output_attentions=True이 전달되거나config.output_attentions=True) — 다음의 튜플입니다:torch.Tensor(각 레이어당 하나씩, 모양이(batch_size, num_heads, sequence_length, sequence_length).self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
DPRQuestionEncoder의 출력 클래스입니다.
DPRContextEncoder
클래스 transformers.DPRContextEncoder
< source >( config: DPRConfig )
매개변수
- config (DPRConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
pooler 출력을 컨텍스트 표현으로 출력하는 기본 DPRContextEncoder transformer.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DPRContextEncoderOutput or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor다음 형태의(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 사전 학습과 일치시키기 위해 DPR 입력 시퀀스는 [CLS] 및 [SEP] 토큰을 사용하여 다음과 같이 포맷팅되어야 합니다:(a) 시퀀스 쌍의 경우(예: 제목+본문 쌍):
- attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- token_type_ids (
torch.Tensor형상(batch_size, sequence_length), 선택 사항) — 입력의 첫 번째 및 두 번째 부분을 나타내는 세그먼트 토큰 인덱스. 인덱스는[0, 1]:- 0은 sentence A 토큰에 해당합니다.
- 1은 sentence B 토큰에 해당합니다.
- inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - output_attentions (
bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의attentions항목을 참조하세요. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
DPRContextEncoderOutput 또는 tuple(torch.Tensor)
torch.Tensor의 튜플 또는 DPRContextEncoderOutput (인수가 return_dict=False인 경우 또는 config.return_dict=False인 경우)로, 구성(DPRConfig)과 입력에 따라 다양한 요소를 포함합니다.
DPRContextEncoder의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
pooler_output (
torch.Tensor, shape(batch_size, embeddings_size)) — DPR 인코더는 컨텍스트 표현에 해당하는 pooler_output을 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 질문 임베딩을 사용하여 컨텍스트를 임베딩하여 최근접 이웃 쿼리를 수행하는 데 사용됩니다.hidden_states (
tuple[torch.Tensor, ...], 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
attentions (
tuple[torch.Tensor, ...], 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
tokens: [CLS] is this jack ##son ##ville ? [SEP] no it is not . [SEP]
token_type_ids: 0 0 0 0 0 0 0 0 1 1 1 1 1 1DPR은 절대 위치 임베딩을 사용하는 모델이므로, 일반적으로 왼쪽이 아닌 오른쪽으로 입력을 패딩하는 것이 권장됩니다.
AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
예:
>>> from transformers import DPRContextEncoder, DPRContextEncoderTokenizer
>>> tokenizer = DPRContextEncoderTokenizer.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
>>> model = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base")
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="pt")["input_ids"]
>>> embeddings = model(input_ids).pooler_outputDPRQuestionEncoder
클래스 transformers.DPRQuestionEncoder
< source >( config: DPRConfig )
매개변수
- config (DPRConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
pooler 출력을 질문 표현으로 출력하는 기본 DPRQuestionEncoder transformer.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DPRQuestionEncoderOutput or tuple(torch.Tensor)
매개변수
- input_ids (
torch.LongTensor다음 형태의(batch_size, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 사전 학습과 일치시키기 위해 DPR 입력 시퀀스는 [CLS] 및 [SEP] 토큰을 사용하여 다음과 같이 포맷팅되어야 합니다:(a) 시퀀스 쌍의 경우(예: 제목+본문 쌍):
- attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- token_type_ids (
torch.Tensor형상(batch_size, sequence_length), 선택 사항) — 입력의 첫 번째 및 두 번째 부분을 나타내는 세그먼트 토큰 인덱스. 인덱스는[0, 1]:- 0은 sentence A 토큰에 해당합니다.
- 1은 sentence B 토큰에 해당합니다.
- inputs_embeds (
torch.Tensor, shape(batch_size, sequence_length, hidden_size), 선택) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대해 더 세밀한 제어가 필요한 경우에 유용합니다. - output_attentions (
bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의attentions항목을 참조하세요. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
DPRQuestionEncoderOutput 또는 tuple(torch.Tensor)
torch.Tensor의 튜플 또는 DPRQuestionEncoderOutput (인수가 return_dict=False인 경우 또는 config.return_dict=False인 경우)로, 구성(DPRConfig)과 입력에 따라 다양한 요소를 포함합니다.
DPRQuestionEncoder의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
pooler_output (
torch.Tensor, shape(batch_size, embeddings_size)) — DPR 인코더는 질문 표현에 해당하는 pooler_output을 출력합니다. 시퀀스의 첫 번째 토큰(분류 토큰)의 마지막 레이어 hidden-state를 Linear 레이어로 추가 처리한 값입니다. 이 출력은 컨텍스트 임베딩을 활용한 최근접 이웃 쿼리에 질문을 임베딩하는 데 사용됩니다.hidden_states (
tuple[torch.Tensor, ...], 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
attentions (
tuple[torch.Tensor, ...], 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
tokens: [CLS] is this jack ##son ##ville ? [SEP] no it is not . [SEP]
token_type_ids: 0 0 0 0 0 0 0 0 1 1 1 1 1 1DPR은 절대 위치 임베딩을 사용하는 모델이므로, 일반적으로 왼쪽이 아닌 오른쪽으로 입력을 패딩하는 것이 권장됩니다.
AutoTokenizer를 사용하여 인덱스를 얻을 수 있습니다. 자세한 내용은 PreTrainedTokenizer.encode() 및 PreTrainedTokenizer.call()를 참조하세요.
예:
>>> from transformers import DPRQuestionEncoder, DPRQuestionEncoderTokenizer
>>> tokenizer = DPRQuestionEncoderTokenizer.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
>>> model = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
>>> input_ids = tokenizer("Hello, is my dog cute ?", return_tensors="pt")["input_ids"]
>>> embeddings = model(input_ids).pooler_outputDPRReader
class transformers.DPRReader
< source >( config: DPRConfig )
매개변수
- config (DPRConfig) — 모델의 모든 매개변수를 포함하는 모델 구성 클래스입니다. 구성 파일로 초기화하는 것은 모델과 연관된 가중치를 로드하지 않으며, 구성 정보만 로드합니다. 모델 가중치를 로드하려면 from_pretrained() 메서드를 확인하세요.
스팬 예측을 출력하는 기본 DPRReader transformer.
이 모델은 PreTrainedModel에서 상속됩니다. 라이브러리가 모든 모델에 대해 구현하는 일반적 메서드(다운로드 또는 저장, 입력 임베딩 크기 조정, 헤드 프루닝 등)에 대한 세부 사항은 상위 클래스 문서를 확인하세요.
이 모델은 또한 PyTorch torch.nn.Module의 하위 클래스입니다. 일반적인 PyTorch Module처럼 사용하며, 일반적인 사용법 및 동작과 관련된 모든 사항은 PyTorch 문서를 참조하세요.
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DPRReaderOutput or tuple(torch.Tensor)
매개변수
- input_ids (
tuple[torch.LongTensor]의 형태(n_passages, sequence_length)) — 어휘 사전에서 입력 시퀀스 토큰의 인덱스입니다. 1) 질문, 2) 패스지 제목, 3) 패스지 본문으로 구성된 시퀀스 3중 구성이어야 합니다. 사전 학습과 일치시키기 위해 DPRinput_ids시퀀스는 [CLS]와 [SEP]를 사용하여 다음과 같은 형식으로 포맷되어야 합니다:[CLS] <question token ids> [SEP] <titles ids> [SEP] <texts ids>DPR은 절대 위치 임베딩을 사용하는 모델이므로, 일반적으로 왼쪽이 아닌 오른쪽으로 입력을 패딩하는 것이 권장됩니다.
DPRReaderTokenizer를 사용하여 인덱스를 가져올 수 있습니다. 자세한 내용은 해당 클래스의 문서를 참조하세요.
- attention_mask (
torch.Tensor형상이(batch_size, sequence_length), 선택 사항) — 패딩 토큰 인덱스에 대한 attention을 수행하지 않도록 방지하는 마스크. [0, 1]에서 선택된 마스크 값: 마스크되지 않은 토큰은 1, 마스크된 토큰은 0. attention mask란 무엇인가요?[0, 1]:- 마스크되지 않은 토큰에 대해 1
- 마스크된 토큰에 대해 0
- inputs_embeds (
torch.Tensor, shape(n_passages, sequence_length, hidden_size), 선택 사항) —input_ids를 전달하는 대신 임베딩 표현을 직접 전달할 수 있습니다. 이는 모델 내부의 임베딩 조회 행렬보다input_ids인덱스를 관련 벡터로 변환하는 방식에 대한 더 세밀한 제어가 필요한 경우 유용합니다. - output_attentions (
bool, 선택 사항) — 모든 attention 레이어의 attentions 텐서를 반환할지 여부. 자세한 내용은 반환 텐서 섹션의attentions항목을 참조하세요. - output_hidden_states (
bool, 선택 사항) — 모든 레이어의 hidden states를 반환할지 여부입니다. 자세한 내용은 반환되는 텐서 중hidden_states항목을 참고하세요. - return_dict (
bool, 선택) — 일반 튜플 대신 ModelOutput를 반환할지 여부.
반환값
DPRReaderOutput 또는 tuple(torch.Tensor)
torch.Tensor의 튜플 또는 DPRReaderOutput(return_dict=False가 전달되었거나 config.return_dict=False인 경우)로, 구성(DPRConfig)과 입력에 따라 다양한 요소를 포함합니다.
DPRReader의 forward 메서드는 __call__ 특수 메서드를 오버라이드합니다.
이 함수 내에서 forward pass의 레시피를 정의해야 하지만, 이후에는 이 함수 대신
Module인스턴스를 호출해야 합니다. 전자는 전처리 및 후처리 단계를 실행하는 것을 처리하는 반면, 후자는 이를 조용히 무시하기 때문입니다.
start_logits (
torch.Tensor, shape(n_passages, sequence_length)) — 각 패스지의 스팬 시작 인덱스에 대한 로짓.end_logits (
torch.Tensor, shape(n_passages, sequence_length)) — 각 passage에 대해 스팬의 끝 인덱스에 대한 logits입니다.relevance_logits (
torch.Tensor, shape(n_passages, )) — DPRReader의 QA 분류기 출력으로, 질문을 답변하는 데 각 패시지가 다른 모든 패시지와 비교했을 때 얻는 점수에 해당합니다.hidden_states (
tuple[torch.Tensor, ...], 선택 사항,output_hidden_states=True가 전달되거나config.output_hidden_states=True인 경우 반환됨) —torch.Tensor의 튜플(모델에 임베딩 레이어가 있는 경우 임베딩의 출력에 대한 것 1개 + 각 레이어의 출력에 대한 것 1개)로, 모양은(batch_size, sequence_length, hidden_size)입니다.각 레이어의 출력에서 모델의 Hidden-states와 선택적 초기 임베딩 출력을 포함합니다.
attentions (
tuple[torch.Tensor, ...], 선택 사항,output_attentions=True가 전달되었거나config.output_attentions=True인 경우 반환됨) — 각 레이어마다 하나씩 포함된torch.Tensor의 튜플로, 모양은(batch_size, num_heads, sequence_length, sequence_length)입니다.self-attention 헤드에서 가중 평균을 계산하는 데 사용되는 attention softmax 이후의 attention 가중치.
예:
>>> from transformers import DPRReader, DPRReaderTokenizer
>>> tokenizer = DPRReaderTokenizer.from_pretrained("facebook/dpr-reader-single-nq-base")
>>> model = DPRReader.from_pretrained("facebook/dpr-reader-single-nq-base")
>>> encoded_inputs = tokenizer(
... questions=["What is love ?"],
... titles=["Haddaway"],
... texts=["'What Is Love' is a song recorded by the artist Haddaway"],
... return_tensors="pt",
... )
>>> outputs = model(**encoded_inputs)
>>> start_logits = outputs.start_logits
>>> end_logits = outputs.end_logits
>>> relevance_logits = outputs.relevance_logits