문서

Helpers

언어 감지

laya.detect_language는 laya.lang.analyse입니다.

이름, 타입, 기본값과 코드는 영어로 유지합니다. 나머지는 번역입니다 (아직 번역하지 않은 항목은 영어 원문으로 표시됩니다).

analyse

analyse(state: Union[str, bytes, Mapping, list, None]) -> Dict[str, object]

상태에 대한 전체 감지 결과입니다.

script, script_profile, language(최선의 노력, None일 수 있음), is_english, non_latin_fraction, mixed_segment(대부분 영어인 상태를 비영어로 만든 행이나 필드, 없으면 None)를 반환합니다.

실제로 읽히는 것은 문자열 값입니다. 상태에 그것이 여러 개 있을 때 비영어 값 하나면 충분합니다. 모든 값을 하나의 윈도로 합치면 긴 영어 메모가 4000자를 채우거나 짧은 독일어 메시지를 투표로 누를 수 있고, 그러면 그 메시지가 영어 체크포인트로 보내졌습니다(#384). 세그먼트 스캔은 여전히 4000자에서 멈추며, 바로 이것이 거대한 필드를 저렴하게 유지합니다. 스캔이 닿지 않은 값은 이후에 따로 읽힙니다.

매개변수

stateUnion[str, bytes, Mapping, list, None]

detect_script

detect_script(text: str) -> str

text의 지배적인 문자 체계입니다: 'latin', 'han', 'devanagari', ... 또는 문자가 없으면 'unknown'입니다.

매개변수

textstr

is_english

is_english(state: Union[str, bytes, Mapping, list, None]) -> bool

영어 체크포인트가 이 상태를 읽을 것으로 기대될 때 True입니다.

매개변수

stateUnion[str, bytes, Mapping, list, None]

이메일

clean_email_body

clean_email_body(body: str, max_chars: int = 3000) -> str

인용된 이메일 이력, 서명, 면책 문구를 제거해 입력을 집중시킵니다.

max_chars는 결과가 잘리는 길이이며, 올리지 않으면 3000자입니다 -- 같은 예산을 받아 그대로 전달하는 email_state를 참고하십시오.

매개변수

bodystr
max_charsint= 3000

email_state

email_state(
    subject: str,
    body: str,
    sender: Optional[str] = None,
    clean: bool = True,
    max_chars: int = 3000,
    extra,
) -> Dict

이메일 분류를 위한 깨끗한 상태 딕셔너리를 구성합니다.

max_chars는 clean_email_body가 본문을 자르는 예산이며, 긴 메시지에는 올릴 가치가 있습니다. 기본값에서는 본문이 3000자에서 멈추므로, 마지막 문단에 도착한 요청은 모델에 닿지 않습니다 -- 하나의 윈도 분량을 넘겨 읽을 수 있도록 상태를 윈도로 스캔하는 predict_long을 통하더라도 마찬가지입니다. clean=False이면 무시되며 본문을 통째로 넘깁니다.

다른 모든 키워드는 상태의 필드가 되어 모델이 읽습니다. 여기서의 오타는 오류가 아니라 입력 변경입니다.

매개변수

subjectstr
bodystr
senderOptional[str]= None
cleanbool= True
max_charsint= 3000
extra

질문 프리셋

triage_questions

triage_questions() -> Dict

고객 지원 티켓 분류를 위한 사전 설정 질문입니다.

email_questions

email_questions(categories: Optional[Dict[str, str]] = None) -> Dict

수신 이메일 분류와 위협 필터링을 위한 사전 설정 질문입니다.

매개변수

categoriesOptional[Dict[str, str]]= None

guard_questions

guard_questions() -> Dict

실시간 LLM 입력 가드레일을 위한 사전 설정 질문입니다.

moderation_questions

moderation_questions() -> Dict

콘텐츠 안전과 모데레이션을 위한 사전 설정 질문입니다.

router_questions

router_questions() -> Dict

지능형 모델 라우팅을 위한 사전 설정 질문입니다.

후보 추리기

shortlist_choice

shortlist_choice(
    state: Any,
    criteria: Any,
    embed_fn: Callable[[Sequence[str]], Any],
    k: int = DEFAULT_SHORTLIST_K,
    DEFAULT_SHORTLIST_K,
    instructions: Optional[str] = None,
    return_scores: bool = False,
) -> Any

state의 상위 k개 choice 라벨을 반환합니다.

embed_fn은 문자열 리스트를 형상 (len(texts), dim)의 배열로 매핑합니다. 쿼리 텍스트를 먼저, 그다음 criteria 순서대로 옵션마다 문자열 하나씩 해서 한 번 호출됩니다. 옵션 문자열은 choice 질문의 render_options와 일치합니다.

k가 라벨 수 이상이면 모든 라벨이 원래 순서대로 반환되고 embed_fn은 호출되지 않습니다.

동점이면 앞선 라벨을 유지합니다. 순위 매기기는 유사도 하한이 아니라 부호 있는 코사인입니다. 점수가 0인 라벨 -- 신호가 전혀 없거나, 비유한 벡터가 그렇게 취급된 것 -- 은 음수 점수였던 앞선 라벨을 앞지릅니다. 그리고 k는 음수 라벨을 먼저 버립니다.

return_scores=True일 때 반환은 (labels, scores) 쌍이며, scores는 순위 순서대로 유지된 각 라벨의 부호 있는 코사인을 담습니다 -- predict_shortlist가 shortlist 메타데이터에서 보고하는 것과 같은 값입니다. 아무것도 버려지지 않았을 때 scores는 None이며, 그 메타데이터와 정확히 같습니다.

매개변수

stateAny
criteriaAny
embed_fnCallable[[Sequence[str]], Any]
kint= DEFAULT_SHORTLIST_K
DEFAULT_SHORTLIST_K
instructionsOptional[str]= None
return_scoresbool= False

predict_shortlist

predict_shortlist(
    agent: Any,
    state: Any,
    questions: Dict[str, Dict[str, Any]],
    embed_fn: Callable[[Sequence[str]], Any],
    k: int = DEFAULT_SHORTLIST_K,
    DEFAULT_SHORTLIST_K,
    predict_kwargs: Any,
) -> Dict[str, Any]

각 choice 질문의 후보를 추린 다음, predict 또는 system_one을 한 번 호출합니다.

choice가 아닌 질문은 그대로 전달됩니다. 라벨 수가 <= k인 choice는 그대로 전달되고 embed_fn을 호출하지 않습니다. 호출자의 questions 딕셔너리는 변경되지 않습니다.

반환되는 딕셔너리는 모델 결과에 shortlist 항목을 더한 것입니다. 후보가 추려진 choice의 확률은 유지된 라벨에 대해서만 정규화됩니다. shortlist[qid]에는 labels, scores, k, n, passthrough가 들어 있습니다. labels는 후보 추림이 만든 순위 순서이고, passthrough가 설정되어 순위 매기기가 실행되지 않았을 때는 criteria 순서 자체입니다. scores는 그 순서에서 유지된 각 라벨의 부호 있는 코사인입니다 -- 음수 포함, 결코 0으로 클램프되지 않음 -- 아무것도 버려지지 않았을 때는 None입니다.

추가 키워드 인수는 predict / system_one으로 전달됩니다(예: Router의 model=).

매개변수

agentAny
stateAny
questionsDict[str, Dict[str, Any]]
embed_fnCallable[[Sequence[str]], Any]
kint= DEFAULT_SHORTLIST_K
DEFAULT_SHORTLIST_K
predict_kwargsAny

embed_fn_from_agent

embed_fn_from_agent(
    agent: Any,
    max_length: int = 512,
    batch_size: int = 32,
) -> Callable[[Sequence[str]], np.ndarray]

agent에 이미 로드된 체크포인트 인코더를 평균 풀링합니다.

이 호출 가능 객체는 agent.tok과 agent.model.encoder로 문자열 리스트를 임베딩합니다. 결정 헤드를 실행하지 않고 가중치도 다운로드하지 않습니다. embed_fn으로 전달된 전용 bi-encoder가 보통 더 잘 추리지만, 이 헬퍼는 Laya 체크포인트만 메모리에 있는 호출자를 위한 것입니다.

평균에서 패딩 위치는 제외됩니다. 인코더의 train/eval 플래그는 호출자가 설정한 대로 둡니다(로드된 Agent는 이미 eval입니다). 각 호출은 CPU 폴백 이후를 포함해 현재 agent.device를 사용합니다.

매개변수

agentAny
max_lengthint= 512
batch_sizeint= 32

cached_embed_fn

cached_embed_fn(
    embed_fn: Callable[[Sequence[str]], Any],
    maxsize: int = 4096,
) -> Callable[[Sequence[str]], np.ndarray]

embed_fn 출력을 입력 문자열별로 LRU 상한 아래에서 캐시합니다.

predict_shortlist는 호출마다 쿼리와 모든 옵션 텍스트를 임베딩합니다. 매 요청마다 같은 옵션 집합을 추리는 경우 -- 예를 들어 README의 BANKING77 예시처럼 고정된 의도나 라벨 리스트 -- 옵션 행들은 호출 사이에 바뀌지 않는데도 매번 다시 임베딩됩니다. 임베더를 한 번 감싸면:

embed_fn = cached_embed_fn(embed_fn_from_agent(agent))

첫 호출은 그대로 두고 이후 반복 호출마다 새 쿼리만 임베딩하도록 줄여 줍니다.

조회는 정확한 문자열 일치입니다. 캐시에 없는 텍스트는 중복 제거되어 단일 embed_fn 호출로 임베딩되므로, 차가운 캐시는 감싸지 않은 함수와 같은 횟수의 배치 호출을 치릅니다. 행은 float32로 저장됩니다. 캐시는 최대 maxsize개 문자열을 보관한 뒤 가장 최근에 사용되지 않은 항목을 내보내며, 메모리를 약 maxsize * dim * 4 바이트로 제한합니다. embed_fn이 예외를 던지거나 잘못된 형상을 반환하면 아무것도 캐시되지 않습니다.

이 래퍼는 스레드 간에 공유해도 안전합니다. 잠금은 캐시 읽기와 쓰기만 감쌀 뿐 임베딩 호출은 결코 감싸지 않습니다. 반환되는 호출 가능 객체는 cache_info() -- size, maxsize, hits, misses가 담긴 딕셔너리 -- 와 cache_clear()를 가집니다. embed_fn 뒤의 모델이나 가중치가 바뀌면 캐시를 비우십시오.

매개변수

embed_fnCallable[[Sequence[str]], Any]
maxsizeint= 4096

기권

check_min_confidence

check_min_confidence(v: Any)

선택적 기권 임계값 min_confidence를 검증합니다(#361, #394).

[0.0, 1.0] 범위의 실수(모든 답에 하나의 임계값이며, isinstance(True, int)가 성립함에도 불구하고 불리언은 거부됩니다)이거나, 버킷별 매핑(:func:check_min_confidence_map 참고)입니다. 후자에서는 선택지 수에 따라 임계값이 달라질 수 있습니다. 검증된 형태로 값을 반환합니다 -- 스칼라인 경우 float, 매핑인 경우 dict[str, float]이며, 아래 게이트 함수들은 둘 다 받습니다.

매개변수

vAny

check_min_confidence_map

check_min_confidence_map(m: Dict[Any, Any]) -> Dict[str, float]

버킷별 기권 임계값 맵을 검증합니다(#394).

키는 common.temp_bucket 표기법의 선택지 수 버킷 문자열 -- "choice:2", "choice:3-5", "score:6-10", "noul:2" 등 -- 과, 맵이 이름을 대지 않는 임의의 버킷에 쓰이는 선택적 "default"입니다. 값은 [0.0, 1.0] 범위의 부동소수점 수입니다. 하나의 신뢰도 임계값은 선택지 수를 넘어 전이되지 않으므로(#394), 이 맵은 호출자가 각 버킷을 그 캘리브레이션이 실제로 얻는 수준에서 게이트할 수 있게 합니다. :func:laya.calibrate.fit_abstention_thresholds로 하나를 피팅하십시오.

매개변수

mDict[Any, Any]

resolve_min_confidence

resolve_min_confidence(
    answer: Dict[str, Any],
    thresholds: Dict[str, float],
    default: float = 0.0,
) -> float

버킷별 맵에서 이 답의 선택지 수 버킷이 게이트되는 임계값입니다.

맵이 이름을 대지 않는 버킷에 대해서는 맵의 "default" 항목으로, 그다음 default(0.0 -- 아무것도 게이트하지 않음)로 폴백하므로, 설정되지 않은 버킷이 갑자기 기권하는 일은 없습니다.

매개변수

answerDict[str, Any]
thresholdsDict[str, float]
defaultfloat= 0.0

flag_low_confidence

flag_low_confidence(results: List[Dict[str, Any]], min_confidence: float) -> None

선택적 기권 표시입니다(#361). 신뢰도가 min_confidence 아래로 떨어지는 답을 표시합니다.

answer_confidence(max(p), 캘리브레이션 수치가 설명하는 양이자 옵션 수에 따라 치우치지 않는 양)를 읽고, answer_confidence가 없으면 confidence로 폴백합니다. 원래 답과 신뢰도는 그대로 두고, 답이 임계값 아래로 떨어지면 low_confidence: True를 추가하며, 이전에 표시된 답이 이제 기준을 넘으면 제거합니다(예: 결과 딕셔너리가 재사용되거나 다른 임계값으로 재평가될 때).

min_confidence는 부동소수점 수(모든 답에 하나의 임계값)이거나 버킷별 매핑(#394)이며, 후자의 경우 각 답은 자신의 선택지 수 버킷 임계값으로 :func:resolve_min_confidence를 통해 게이트됩니다.

매개변수

resultsList[Dict[str, Any]]
min_confidencefloat

apply_confidence_gate

apply_confidence_gate(
    results: List[Dict[str, Any]],
    min_confidence: Optional[float] = None,
) -> None

게이트가 실제로 적용된 답에 대해 신뢰도 게이트의 상태를 보고합니다.

게이트는 정책이며, 적용을 관찰할 수 없는 정책은 정책이 아닙니다. min_confidence를 설정하면 이 함수는 abstention(:data:GATE_STATES 중 하나)을 모든 답에 쓰고, abstention_threshold도 함께 쓰므로, 호출자는 그렇지 않으면 답할 수 없는 세 가지 질문에 답할 수 있습니다:

  • 결정 중 얼마나 많은 비율이 기권했는지 -- low_confidence가 우연히 설정되었는지로 추론하는 대신.
  • 게이트가 결정하지 못한 답이 몇 개인지. 이는 불리언으로는 전혀 표현할 수 없습니다.
  • 어떤 임계값이 이 결과를 만들었는지 -- flag_low_confidence는 임계값을 소비하고 버리므로, 이것이 없으면 클래스별 임계값을 쓴 배치 실행을 다시 나눌 수 없습니다.

GATE_UNEVALUATED는 불리언이 표현할 수 없는 경우입니다. 게이트는 실행되었지만 답이 쓸 만한 신뢰도를 지니지 않았으므로 게이트가 결정하지 못했습니다. 그것을 통과로 보고하는 것은 플래그로 보고하는 것과 같은 거짓말입니다.

min_confidence를 설정하지 않으면 이 함수는 아무것도 쓰지 않습니다. abstention도, abstention_threshold도, 플래그도 없습니다. 그것이 계약의 전부입니다. 게이트되지 않은 호출은 이전과 정확히 같은 페이로드를 반환하며, 필드의 존재 여부(그것에서 읽어낸 네 번째 값이 아니라)가 게이트가 실행되었음을 호출자에게 알립니다. if min_confidence is not None: 가드 대신, 호출마다 한 번씩 무조건 호출하십시오. 바로 그 가드가 아무것도 보고하지 않는 경로를 남기며, 그것이 이 함수가 구별하려는 상태입니다.

플래그 자체는 :func:flag_low_confidence의 것입니다 -- 규칙을 다시 구현하는 대신 위임하므로, 불리언과 보고된 상태가 어긋날 수 없습니다.

정확히 0.0인 min_confidence는 설정된 것이므로 상태가 보고되며, :func:flag_low_confidence는 0.0을 아무것도 그 아래로 떨어질 수 없으므로 무연산으로 취급합니다. 따라서 쓸 만한 신뢰도를 지닌 모든 답은 passed로 읽히고, 임계값 반향이 그것을 실제 임계값에서의 진짜 통과와 구별합니다.

매개변수

resultsList[Dict[str, Any]]
min_confidenceOptional[float]= None

GATE_STATES

GATE_STATES = (GATE_PASSED, GATE_ABSTAINED, GATE_UNEVALUATED)

캘리브레이션과 학습

answer_confidence

answer_confidence(p: np.ndarray, k: int) -> float

보고되는 답에 실린 확률 질량: max(p).

이것은 temperature scaling이 피팅하는 양이며, 이 저장소의 모든 캘리브레이션 수치가 계산되는 양입니다 -- 두 벤치마크 하네스 모두 ece_score를 호출하기 전에 conf = max(probs)를 취합니다. README의 게이팅 절은 이에 따르는 성질에 기댑니다. 신뢰도 c로 반환된 답 중 약 c만큼이 맞습니다. 이 성질은 조건부이며, 기본적으로 조건이 충족되지 않습니다 -- 이 체크포인트와 이 옵션 수에 대해 온도를 피팅하고 홀드아웃 데이터로 검증한 뒤에만 성립합니다. 배포된 체크포인트는 과신합니다. choice:11+는 1.0에 점 질량을 반환하는 약 10배의 샤프너이므로, 그것들에 임계값을 적용하면 모델 정확도보다 낮게 선택합니다(issue #394).

아래의 confidence_from_probs는 다른 양을 다른 척도로 보고하며 그런 보장이 없으므로, 둘을 같은 임계값으로 비교해서는 안 됩니다.

매개변수

pnp.ndarray
kint

confidence_from_probs

confidence_from_probs(p: np.ndarray, k: int) -> float

정규화된 섀넌 엔트로피 신뢰도: 1 - H(p) / log(k).

전체 분포가 얼마나 집중되어 있는지를 나타냅니다. 유용하지만 캘리브레이션되지는 않았습니다. temperature scaling이 피팅하는 것도, 보고되는 ECE가 재는 것도 아닙니다. answer_confidence를 참고하십시오.

매개변수

pnp.ndarray
kint

ece_score

ece_score(conf: np.ndarray, correct: np.ndarray, bins: int = 15) -> float

신뢰도 구간 전반에 걸친 기대 캘리브레이션 오차(ECE)입니다.

매개변수

confnp.ndarray
correctnp.ndarray
binsint= 15

fit_temperatures

fit_temperatures = fit_temperature_map

fit_one_temperature

fit_one_temperature(pairs: Sequence, min_n: Optional[int] = None) -> float

log T에 대해 NLL + LBFGS로 스칼라 T 하나를 피팅합니다.

결과는 최적화된 스케일을 clamp_temperature한 값이므로 [TEMP_MIN, TEMP_MAX] 안에 있습니다(값이 숫자가 아니면 중립적인 1.0입니다). 주어진 쌍이 min_n보다 적으면 1.0을 반환합니다. min_n의 기본값은 MIN_BUCKET_N(버킷별 하한)입니다. 타입 수준 피팅은 더 낮은 MIN_TYPE_N을 전달하므로, 어떤 버킷도 채우지 못하는 데이터셋도 1.0에 머무르지 않고 스칼라를 얻습니다.

매개변수

pairsSequence
min_nOptional[int]= None

fit_temperature_map

fit_temperature_map(
    records: Iterable,
    compute_ece: bool = False,
    seed: int = 0,
) -> Dict[str, Any]

타입 수준 스칼라와 버킷별 temperature를 피팅합니다.

MIN_BUCKET_N은 버킷별 하한입니다. 더 작은 버킷은 temperature_by_options에서 빠지고 타입 수준 스칼라가 그것들을 덮습니다. MIN_TYPE_N은 그 스칼라에만 적용되는 별도의, 더 낮은 하한입니다.

compute_ece=False(기본값이며 Agent.fit_temperatures가 저장하는 경로)는 모든 기록에 피팅하고 report 키를 반환하지 않습니다. 이 경로에서 seed는 무시됩니다.

compute_ece=True는 temp_bucket으로 층화해 각 버킷의 ECE_HOLDOUT_FRAC을 홀드아웃하며, seed를 사용해 같은 기록이 항상 같은 방식으로 분할되게 합니다. 온도는 나머지에만 피팅되고 ECE는 홀드아웃 기록에만 채점됩니다. report["n"]은 전달된 기록 수이고, report["n_eval"]은 ECE가 기대는 홀드아웃 개수입니다. 홀드아웃 뒤에 MIN_BUCKET_N 아래로 떨어질 버킷은 모든 기록에 피팅되고 평가 집합에서 빠지며, 버려지는 대신 report["buckets_excluded_from_eval"]에 이름이 오릅니다. n_by_bucket은 피팅 자체가 부분 집합을 쓴 경우를 포함해 항상 전체 입력을 셉니다.

매개변수

recordsIterable
compute_ecebool= False
seedint= 0

fit_abstention_thresholds

fit_abstention_thresholds(
    records: Iterable,
    temperature: Sequence[float],
    temperature_by_options: Dict[str, float],
    binning_map: Optional[Dict[str, Dict[str, Any]]] = None,
    target_error: float = 0.10,
    min_bucket_n: int = MIN_ABSTAIN_BUCKET_N,
    MIN_ABSTAIN_BUCKET_N,
    conservative: bool = True,
) -> Dict[str, float]

temp_bucket별 기권 임계값을 피팅해, 게이트가 모든 버킷에서 목표 오차를 유지하게 합니다.

단일 min_confidence는 선택지 수를 넘어 전이되지 않습니다(#394). 2개 선택지와 12개 선택지 답의 캘리브레이션된 신뢰도는 서로 다른 척도에 있으므로, 하나의 컷은 질문에 따라 과도하게 기권하거나 부족하게 기권합니다. 이 함수는 대신 버킷마다 하나의 컷을 피팅하며, 키는 temperature_by_options와 정확히 같습니다(common.temp_bucket, 예: "choice:3-5"). 결과는 :func:laya.confidence.check_min_confidence / :func:laya.confidence.apply_confidence_gate가 곧바로 받는 min_confidence 맵입니다.

records는 fit_temperature_map이 소비하는 것과 같은 (qtype, logits, target[, k]) 튜플입니다(records_from_labeled가 만듭니다). 신뢰도는 캘리브레이션된 max(p)입니다 -- logits는 먼저 피팅된 temperature / temperature_by_options로 스케일링되므로, 임계값과 런타임이 보고하는 숫자는 같은 척도에 있습니다. target_error는 받아들인 답 사이에서 허용되는 오차입니다. min_bucket_n은 너무 작아 피팅할 수 없는 버킷을 생략하고, conservative는 1표본만큼의 여유를 더합니다. 임계값은 캘리브레이션 집합 위의 경험적 컷이며 형식적인 커버리지 보장이 아닙니다 -- 프로덕션 게이트라면 홀드아웃 데이터로 검증하십시오(fit_temperature_map(..., compute_ece=True)가 홀드아웃 분할을 줍니다).

이 임계값을 제공할 agent에 binning_map이 설치되어 있으면 그것을 전달하십시오 -- Agent.fit_binning에 의해서든, binning_map을 담은 캘리브레이션 페이로드에 의해서든 -- 런타임은 무엇인가 읽기 전에 answer_confidence를 그 맵을 통해 다시 캘리브레이션하므로, 그것 없이 피팅한 컷은 게이트가 결코 보지 못하는 척도 위의 컷입니다. 그러면 임계값은 구간화된 척도 위에 있고, 둘을 피팅한 순서는 더 이상 문제가 되지 않습니다. 1,200개의 합성 12개 선택지 기록에서 target_error=0.10으로 측정한 결과: 맵 없이 피팅한 컷은 구간화되지 않은 신뢰도에서 50% 커버리지에 걸쳐 9.8% 오차를 유지하고, 같은 숫자를 구간화된 것과 비교하면 25.6% 오차에서 94.5%의 답을 받아들입니다.

매개변수

recordsIterable
temperatureSequence[float]
temperature_by_optionsDict[str, float]
binning_mapOptional[Dict[str, Dict[str, Any]]]= None
target_errorfloat= 0.10
min_bucket_nint= MIN_ABSTAIN_BUCKET_N
MIN_ABSTAIN_BUCKET_N
conservativebool= True

fit_binning_map

fit_binning_map(
    records: Iterable,
    temperature: Sequence[float],
    temperature_by_options: Dict[str, float],
    bins: int = 15,
    min_bucket_n: int = MIN_BINNING_BUCKET_N,
    MIN_BINNING_BUCKET_N,
) -> Dict[str, Dict[str, Any]]

answer_confidence를 위한 temp_bucket별 히스토그램 구간화 재캘리브레이션 맵을 피팅합니다.

temperature scaling은 버킷마다 스칼라 하나를 적용합니다. 신뢰도 곡선이 단순한 예리화/완화가 아닌 버킷은 고치지 못합니다(배포된 영어 체크포인트가 지닌 병리적인 choice:11+가 그중 하나입니다). 히스토그램 구간화는 비모수적 대안입니다. 버킷의 캘리브레이션된 신뢰도를 [0, 1] 위 bins개의 등폭 구간으로 나누고, 어떤 구간에 들어간 모든 신뢰도를 그 구간의 경험적 정확도로 매핑합니다. 단조성 가정도 추가 의존성도 필요하지 않습니다(NumPy만. 등위 회귀는 scikit-learn을 끌어옵니다).

records는 fit_temperature_map이 소비하는 것과 같은 (qtype, logits, target[, k]) 튜플입니다. 신뢰도는 캘리브레이션된 max(p)입니다(logits는 먼저 피팅된 temperature / temperature_by_options로 스케일링됩니다). 따라서 구간화 맵은 temperature 맵을 대체하는 것이 아니라 그 위에 겹쳐 적용됩니다. {bucket: {"bins": N, "values": [recalibrated confidence per bin]}}를 반환하며, min_bucket_n 미만의 버킷은 생략됩니다. :func:apply_binning_map로 적용하십시오. 빈 구간(캘리브레이션 집합이 결코 만들어내지 않은 신뢰도 범위)은 자기 자신의 중점으로 매핑됩니다. 즉 그 영역을 변경하지 않으므로, 본 적 없는 값이 조작된 0으로 재캘리브레이션되는 일은 없습니다.

매개변수

recordsIterable
temperatureSequence[float]
temperature_by_optionsDict[str, float]
binsint= 15
min_bucket_nint= MIN_BINNING_BUCKET_N
MIN_BINNING_BUCKET_N

apply_binning_map

apply_binning_map(
    confidence: float,
    bucket: str,
    binning_map: Dict[str, Dict[str, Any]],
) -> float

하나의 answer_confidence를 선택지 수 bucket(common.temp_bucket)에 맞게 다시 캘리브레이션합니다.

맵에 그 버킷에 대한 항목이 없으면 신뢰도를 그대로 반환하므로, 맵이 피팅하지 않은 버킷은 잘못된 값으로 밀려 들어가지 않고 그대로 통과합니다.

매개변수

confidencefloat
bucketstr
binning_mapDict[str, Dict[str, Any]]

fit_binning

fit_binning(
    records,
    min_bucket_n: int = MIN_BINNING_BUCKET_N,
    MIN_BINNING_BUCKET_N,
) -> Dict[str, Any]

이 agent가 피팅한 temperature 위에 히스토그램 구간화 맵을 피팅해 저장합니다.

records는 fit_temperatures가 소비한 것과 같은 (qtype, logits, target[, k]) 튜플입니다. 맵의 키는 temperature_by_options와 정확히 같고, 현재 temperature 위에 겹쳐 적용되며, save_calibration이 binning_map으로 씁니다.

매개변수

records
min_bucket_nint= MIN_BINNING_BUCKET_N
MIN_BINNING_BUCKET_N

render_options

render_options(q: Dict) -> List[str]

옵션 텍스트를 라벨 인덱스 순서로 렌더링합니다. Noul의 의미 순서는 항상 [false, true]입니다.

매개변수

qDict

proper_reward

proper_reward(
    q: torch.Tensor,
    target: torch.Tensor,
    qtype: torch.Tensor,
    mask: torch.Tensor,
    w_sph: float = 0.5,
    w_rps: float = 1.0,
    log_floor: float = -9.21,
) -> torch.Tensor

엄격한 proper 채점 규칙 보상: log score + spherical score + ranked probability score.

q: [..., N, K] 보고된 분포 target: [N, K](one-hot 또는 소프트 타깃 분포)

매개변수

qtorch.Tensor
targettorch.Tensor
qtypetorch.Tensor
masktorch.Tensor
w_sphfloat= 0.5
w_rpsfloat= 1.0
log_floorfloat= -9.21

td_lambda_targets

td_lambda_targets(p_true: torch.Tensor, batch: Dict, lam: float = 1.0) -> torch.Tensor

멀티턴 대화 궤적을 위한 TD(lambda) 타깃입니다.

매개변수

p_truetorch.Tensor
batchDict
lamfloat= 1.0

QTYPES

QTYPES = {"choice": 0, "score": 1, "noul": 2}

QTYPE_NAMES

QTYPE_NAMES = {v: k for k, v in QTYPES.items()}