이것은 Pytorch와 Huggingface Transformers를 기반으로 한 라이브러리로,이 Neurips 2021 Paper (뛰어난 종이 상) 와이 JMLR 2023 용지에 소개 된 신경 텍스트와 Mauve 측정의 인간 텍스트 사이의 간격을 측정합니다.
Mauve는 신경 텍스트와 인간 텍스트 사이의 격차를 측정 한 것입니다. 큰 언어 모델의 양자화 된 임베딩 공간에서 두 텍스트 분포 사이의 Kullback – Leibler (KL) 분기를 사용하여 계산됩니다. Mauve는 모델 크기 및 디코딩 알고리즘으로 인해 발생하는 품질의 차이를 식별 할 수 있습니다.
특징 :
자세한 내용은 아래에서 확인할 수 있습니다.
스크립트가 논문의 실험을 재현하려면이 저장소를 참조하십시오.
직접 설치하려면 터미널 에서이 명령을 실행하십시오.
pip install mauve-text
Mauve를 편집하거나 기여하려면 소스에서 설치해야합니다.
git clone [email protected]:krishnap25/mauve.git
cd mauve
pip install -e .
일부 기능에는 더 많은 패키지가 필요합니다. 아래 요구 사항을 참조하십시오.
위의 설치 명령은 다음과 같은 주요 요구 사항을 설치합니다.
numpy>=1.18.1scikit-learn>=0.22.1faiss-cpu>=1.7.0tqdm>=4.40.0또한 Mauve 내에서 기능화를 사용하려면 수동으로 설치해야합니다.
torch>=1.1.0 : 지침transformers>=3.2.0 : Pytorch가 설치된 후 pip install transformers 간단히 실행합니다 (자세한 지침) p_text 와 q_text 는 각각 문자열 목록으로, 각 문자열은 완전한 생성 (컨텍스트 포함)입니다. 모범 사례를 위해서는 Mauve는 p_text 및 q_text 에 대해 각각 최소 수천 세대가 필요합니다 (논문은 각각 5000을 사용). 데모의 경우 빠른 달리기 시간에 각각 100 세대를 사용합니다.
일부 실제 데이터 에서이 패키지의 기능을 보여주기 위해이 저장소는 ./examples 폴더에서 샘플 데이터를 다운로드하여 사용하는 기능을 제공합니다 (Mauve 패키지의 일부가 아니므로 저장소를 복제해야합니다).
쉘 에서이 명령을 실행하여 GPT-2 출력 데이터 세트 레포가 제공 한 Amazon Product 리뷰와 기계 세대를 다운로드하십시오.
python examples/download_gpt2_dataset.py
데이터는 ./data 폴더로 다운로드됩니다. 파이썬에서 데이터 (사용 가능한 5000 개 중 100 개 샘플)를로드 할 수 있습니다.
from examples import load_gpt2_dataset
p_text = load_gpt2_dataset ( 'data/amazon.valid.jsonl' , num_examples = 100 ) # human
q_text = load_gpt2_dataset ( 'data/amazon-xl-1542M.valid.jsonl' , num_examples = 100 ) # machine이제 Mauve를 다음과 같이 계산할 수 있습니다 (Pytorch 및 HF Transformers 설치가 필요합니다).
import mauve
# call mauve.compute_mauve using raw text on GPU 0; each generation is truncated to 256 tokens
out = mauve . compute_mauve ( p_text = p_text , q_text = q_text , device_id = 0 , max_text_length = 256 , verbose = False )
print ( out . mauve ) # prints 0.9917 이 첫 번째는 GPT-2 대형 토큰 화기 및 미리 훈련 된 모델을 다운로드합니다 (이미 다운로드하지 않은 경우). 오프라인 모델이 있더라도 모델을 처음로드하는 데 최대 30 초가 걸립니다. out 필드가 포함되어 있습니다.
out.mauve : mauve score, 0과 1 사이의 숫자는 더 큰 값이 p와 q가 더 가깝다는 것을 나타냅니다.out.frontier_integral : 프론티어 적분, 0과 1 사이의 숫자는 더 작은 값이 p와 q가 더 가깝다는 것을 나타냅니다.out.mauve_star and out.frontier_integral_star : 해당 버전은 Krichevsky-Trofimov 스무딩으로 계산되었습니다. 이 JMLR 2023 용지를 참조하십시오.out.divergence_curve : numpy.ndarray of Shape (m, 2); Divergence 곡선을 볼 수 있도록 matplotlib로 플로팅하십시오out.p_hist : 텍스트 배포의 양자화 된 버전 인 이산 분포 p_textout.q_hist : 위와 동일하지만 q_textDivergence 곡선을 사용하여 플롯 할 수 있습니다
# Make sure matplotlib is installed in your environment
import matplotlib . pyplot as plt
plt . plot ( out . divergence_curve [:, 1 ], out . divergence_curve [:, 0 ]) 각 텍스트 ( p_text 및 q_text 모두)에 대해 Mauve는 내부적으로 GPT-2의 Terimal Hidden 상태를 기능 표현으로 사용합니다. 물론 최근의 LLM도 사용할 수 있습니다. 일반적으로 기능 임베딩이 좋을수록 Mauve의 성능이 더 좋습니다.
이 패키지를 사용하는 방법에는 여러 가지가 있습니다. 예를 들어, 캐시 된 숨겨진 상태를 직접 사용할 수 있습니다 (Pytorch 및 HF 변압기를 설치할 필요는 없습니다).
# call mauve.compute_mauve using features obtained directly
# p_feats and q_feats are `np.ndarray`s of shape (n, dim)
# we use a synthetic example here
import numpy as np
p_feats = np . random . randn ( 100 , 1024 ) # feature dimension = 1024
q_feats = np . random . randn ( 100 , 1024 )
out = mauve . compute_mauve ( p_features = p_feats , q_features = q_feats )이 API는 Mauve와 함께 이미지 또는 오디오와 같은 다른 양식을 평가하는 데 사용될 수 있습니다.
GPT-2 어휘 (예 : transformers.GPT2Tokenizer )를 사용하여 얻은 토큰 화 (BPE) 표현을 사용하여 Mauve를 계산할 수도 있습니다.
# call mauve.compute_mauve using tokens on GPU 1
# p_toks, q_toks are each a list of LongTensors of shape [1, length]
# we use synthetic examples here
import torch
p_toks = [ torch . LongTensor ( np . random . choice ( 50257 , size = ( 1 , 32 ), replace = True )) for _ in range ( 100 )]
q_toks = [ torch . LongTensor ( np . random . choice ( 50257 , size = ( 1 , 32 ), replace = True )) for _ in range ( 100 )]
out = mauve . compute_mauve ( p_tokens = p_toks , q_tokens = q_toks , device_id = 1 , max_text_length = 1024 ) 진행 메시지를 보려면 verbose = mauve.compute_mauve 에 대한 인수 verbose=True 전달하십시오. p 및 q , 예를 들어 p_text 통해 p 에 대한 입력으로 다른 형식을 사용할 수도 있고 q_features 통해 q 사용할 수도 있습니다.
mauve.compute_mauve 다음과 같은 주장을합니다
p_features : numpy.ndarray of Shape (n, d), 여기서 n은 세대 수입니다.q_features : numpy.ndarray of shape (n, d), 여기서 n은 세대 수입니다.p_tokens : 길이 N 목록, 각 항목은 횃불입니다. 길이는 세대마다 다를 수 있습니다q_tokens : 길이 N 목록 N, 각 항목은 횃불입니다. 길이는 세대마다 다를 수 있습니다p_text : 길이 n 목록, 각 항목은 문자열입니다.q_text : 길이 n 목록, 각 항목은 문자열입니다.num_buckets : P 및 Q를 정량화하기위한 히스토그램의 크기. 옵션 : '자동'(기본값) 또는 정수pca_max_data : 클러스터링 전에 PCA 차원 감소에 사용할 숫자 데이터가 있습니다. -1 인 경우 모든 데이터를 사용하십시오. 기본 -1kmeans_explained_var : PCA에 의한 차원 감소를 유지하기위한 데이터의 분산량. 기본 0.9kmeans_num_redo : k-means 클러스터링까지의 횟수 (최상의 목표는 유지됩니다). 기본 5kmeans_max_iter : 최대 k- 평균 반복 수. 기본 500featurize_model_name : 기능을 얻는 모델 이름. 기본 'gpt2-large' ['gpt2', 'gpt2-medium', 'gpt2-large', 'gpt2-xl'] 중 하나를 사용합니다.device_id : 기능화를위한 장치. GPU를 사용하려면 GPU ID (예 : 0 또는 3)를 제공하십시오. 이 ID가있는 GPU가없는 경우 CPU를 사용하십시오.max_text_length : 고려해야 할 최대 토큰 수입니다. 기본 1024divergence_curve_discretization_size : Divergence 곡선에서 고려해야 할 사항 수. 기본 25mauve_scaling_factor : 종이에서 "c". 기본 5.verbose : True (기본값) 인 경우 실행 시간 업데이트를 인쇄하십시오seed : 무작위 종자 K- 클러스터 할당을 평균화합니다.batch_size : 피처 추출을위한 배치 크기. 참고 : p 와 q 길이가 다를 수 있지만 길이가 같은 것이 좋습니다.
질문이나 설명 (패키지 또는 용지에 대한 설명)의 경우 저자에게 연락하는 가장 좋은 방법은 Github에 문제를 제기하는 것입니다. 이메일을 통해 쿼리에 응답 할 수 없습니다.
버그를 찾으면 Github에서 문제를 제기하십시오. 기부하려면 풀 요청을 제출하십시오. 우리는 커뮤니티 기여를 장려하고 가치가 높습니다.
좋은 기능은 다음과 같습니다.
Mauve는 일반적인 사용의 대부분의 지표와는 상당히 다르므로 다음은 Mauve의 적절한 사용에 관한 몇 가지 지침이 있습니다.
상대 비교 :
model1 과 model2 인간 분포를 생성하는 데 더 나은 것을 찾으려면 MAUVE(text_model1, text_human) 및 MAUVE(text_model2, text_human) 비교할 수 있습니다.MAUVE(text_model1, text_human) 아래에서 선택된 하이퍼 파라미터에 따라 다를 수 있지만 상대 추세는 동일하게 유지됩니다.세대 수 :
클러스터 수 (이산화 크기) :
num_buckets 0.1 * 샘플 수로 사용합니다.Mauve는 너무 크거나 너무 작습니다 .
mauve_scaling_parameter 다양한 방법 사이의 상대 순서를 변경하지 않고 MAUVE 점수의 절대 값을 제어합니다. 이 매개 변수의 주요 목적은 해석 가능성을 돕는 것입니다.mauve_scaling_factor 의 값을 높이십시오. (참고 : 이것은 또한 실행당 표준 표준 편차가 증가합니다).mauve_scaling_factor 의 값을 줄이십시오.Mauve는 실행하는 데 너무 오래 걸립니다 .
num_buckets 사용하여 클러스터 수를 줄일 수도 있습니다. 클러스터링 알고리즘의 실행 시간 스케일은 클러스터 수의 제곱입니다. 클러스터 수가 500을 초과하면 클러스터링이 실제로 느려지기 시작합니다. 이 경우 기본값을 재정의하여 클러스터 수를 500으로 설정하는 것이 도움이 될 수 있습니다 ( num_data_points / 10 입니다. 각 P 및 Q의 샘플 수가 5000을 초과 할 때 사용하십시오).kmeans_num_redo 하이퍼 파라미터 kmeans_max_iter 줄 100 1 . 이를 통해 클러스터링은 더 나쁜 클러스터링을 반환하는 비용으로 더 빨리 실행할 수 있습니다.Mauve의 차이는 우리가 정량화하려는 차이점에 비해 크다 .
이 패키지가 유용하거나 연구에서 사용하는 경우 다음 논문을 인용하십시오.
@article{pillutla-etal:mauve:jmlr2023,
title={{MAUVE Scores for Generative Models: Theory and Practice}},
author={Pillutla, Krishna and Liu, Lang and Thickstun, John and Welleck, Sean and Swayamdipta, Swabha and Zellers, Rowan and Oh, Sewoong and Choi, Yejin and Harchaoui, Zaid},
journal={JMLR},
year={2023}
}
@inproceedings{pillutla-etal:mauve:neurips2021,
title={MAUVE: Measuring the Gap Between Neural Text and Human Text using Divergence Frontiers},
author={Pillutla, Krishna and Swayamdipta, Swabha and Zellers, Rowan and Thickstun, John and Welleck, Sean and Choi, Yejin and Harchaoui, Zaid},
booktitle = {NeurIPS},
year = {2021}
}
@inproceedings{liu-etal:mauve-theory:neurips2021,
title={{Divergence Frontiers for Generative Models: Sample Complexity, Quantization Effects, and Frontier Integrals}},
author={Liu, Lang and Pillutla, Krishna and Welleck, Sean and Oh, Sewoong and Choi, Yejin and Harchaoui, Zaid},
booktitle={NeurIPS},
year={2021}
}
이 작업은 NSF DMS-2134012, NSF CCF-2019844, NSF DMS-2023166, NIWC Pacific (N66001-19-2-4031)을 통한 DARPA MCS 프로그램 (DARPA MCS 프로그램), CIFAR "Machines & Brains in Machines & Brains"프로그램에 의해 지원되었습니다.