/** * WPML compatibility functions * * @global array $duplicated_posts Array to store the posts being duplicated. * * @package Yoast\WP\Duplicate_Post * @since 3.2 */ add_action( 'admin_init', 'duplicate_post_wpml_init' ); /** * Add handlers for WPML compatibility. */ function duplicate_post_wpml_init() { if ( defined( 'ICL_SITEPRESS_VERSION' ) ) { add_action( 'dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10, 3 ); add_action( 'dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10, 3 ); add_action( 'shutdown', 'duplicate_wpml_string_packages', 11 ); } } global $duplicated_posts; // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: Renaming a global variable is a BC break. $duplicated_posts = []; /** * Copy post translations. * * @global SitePress $sitepress Instance of the Main WPML class. * @global array $duplicated_posts Array of duplicated posts. * * @param int $post_id ID of the copy. * @param WP_Post $post Original post object. * @param string $status Status of the new post. */ function duplicate_post_wpml_copy_translations( $post_id, $post, $status = '' ) { global $sitepress; global $duplicated_posts; remove_action( 'dp_duplicate_page', 'duplicate_post_wpml_copy_translations', 10 ); remove_action( 'dp_duplicate_post', 'duplicate_post_wpml_copy_translations', 10 ); $current_language = $sitepress->get_current_language(); $trid = $sitepress->get_element_trid( $post->ID ); if ( ! empty( $trid ) ) { $translations = $sitepress->get_element_translations( $trid ); $new_trid = $sitepress->get_element_trid( $post_id ); foreach ( $translations as $code => $details ) { if ( $code !== $current_language ) { if ( $details->element_id ) { $translation = get_post( $details->element_id ); if ( ! $translation ) { continue; } $new_post_id = duplicate_post_create_duplicate( $translation, $status ); if ( ! is_wp_error( $new_post_id ) ) { $sitepress->set_element_language_details( $new_post_id, 'post_' . $translation->post_type, $new_trid, $code, $current_language ); } } } } // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: see above. $duplicated_posts[ $post->ID ] = $post_id; } } /** * Duplicate string packages. * * @global array() $duplicated_posts Array of duplicated posts. */ function duplicate_wpml_string_packages() { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: renaming the function would be a BC-break. global $duplicated_posts; foreach ( $duplicated_posts as $original_post_id => $duplicate_post_id ) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. $original_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $original_post_id ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. $new_string_packages = apply_filters( 'wpml_st_get_post_string_packages', false, $duplicate_post_id ); if ( is_array( $original_string_packages ) ) { foreach ( $original_string_packages as $original_string_package ) { $translated_original_strings = $original_string_package->get_translated_strings( [] ); foreach ( $new_string_packages as $new_string_package ) { $cache = new WPML_WP_Cache( 'WPML_Package' ); $cache->flush_group_cache(); $new_strings = $new_string_package->get_package_strings(); foreach ( $new_strings as $new_string ) { if ( isset( $translated_original_strings[ $new_string->name ] ) ) { foreach ( $translated_original_strings[ $new_string->name ] as $language => $translated_string ) { do_action( // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals -- Reason: using WPML native filter. 'wpml_add_string_translation', $new_string->id, $language, $translated_string['value'], $translated_string['status'] ); } } } } } } } } 差分学習 要望 – Raqqa

差分学習 要望

1) 取得側の“多様性”を先に担保(事実の幅を増やす)
Multi-query RAG:ユーザ質問を複数表現に書き換えて並列検索(同義語・役割視点)。
Rerankで多様化:MMR や RRF で“関連性×非重複”を両立(同じ文脈ばかり拾わない)。 CMUコンピュータサイエンス学院+2Elastic+2
2) 生成側の“答えの多様性”
Verbalized Sampling(VS):
例)「この質問に対する候補回答を3つと、その確率(自信度)を言語化して提示」。
訓練不要・推論時だけで多様性を1.6〜2.1倍にできると報告。ERPの説明系にも応用可。 arXiv+1
プロンプト・アンサンブル:
「営業Ops視点/会計視点/在庫視点/管理者視点」など役割別の回答を生成し、上位を提示。
3) “正しさ”のガード(多様性≠でたらめ)
再ランク基準:①根拠カバレッジ(何件の根拠に支えられるか)、②一貫性(内部矛盾なし)、③Odoo手順の可実行性(UI/メニュー名やAPI名の存在チェック)。
ファクト制約:最終回答は引用と出典付、数値・画面名は retrieval に現れた語だけ許可。
温度と本数の上限:k=2〜3、回答トークンを短く、コストとばらつきを抑制。
4) UI/運用
トグル:「Answer mode = Standard / Diverse」。既定は Standard。
表示:「最適解+他の見方(2件)」をタブ表示、各タブに根拠リンク/“違い”の一言注釈。
ログ:どの候補が採択されたか、根拠のドキュメントID、VSでの“確率”を監査ログに。

デモ段階(A+B1)での最小実装
Retrieval を Multi-query + MMR/RRF に差し替え。
生成は VSスタイルで候補2〜3本を出し、内部スコアでBest-of-N採択。
エンドポイントに mode=diverse を追加(既定は standard)。
CI では 決定論テスト(温度0/1本)と、多様性スモーク(温度↑+候補数↑で形状だけ検証)を分離。
どこまで“VS”を攻めるか(注意点)
VSは創造的課題で効果が大きい一方、業務手順の厳密性が要る場面では出し過ぎ禁物。
→ “説明の観点や粒度”を変える用途に限定、最終手順は単一の確定版を返す。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です