1. Phoenix가 Adam에서 Muon으로 갈아탔다 + 검색 지면으로 확장 + reward/link-open 5분위 헤드 스캐폴딩 — X
자료 xai-org/x-algorithm @ aad7179 — "Open-source X Recommendation Algorithm" — 2026-08-19 21:25 UTC, 공개 소스코드. 파일 79개, +3,303/−651 (4세대+3의 파일 14 대비 5.6배). 성격이 4세대+1~+3의 "소규모 정교화"에서 인프라·학습 파이프라인 대규모 확장으로 바뀐 드랍. 특이하게 README #latest-updates 섹션은 8/14의 August 14th 항목이 여전히 최신 — 이 커밋의 변경 사항은 문서 갱신 없이 코드만으로 반영됐다.
배경 이 저장소는 4세대 초대형 드랍(2026-08-13, 47c1bcd) 이후 매일 후속 커밋을 반영해 왔다: 8/14 (c65aa17, 4세대+1) 가중치 해석 규칙·Brazil 필터·Thompson sampling·Phoenix bool 3종 → 8/17 (b089ce6, 4세대+2) 광고 안전 V2·cross-validation·인덱싱 게이트 → 8/18 (11a71f8, 4세대+3) V2 헬퍼 하루 만에 재설계·Following VF hydrator·Phoenix Kafka v3. 이 흐름은 canon이 "매일 커밋" 리듬으로 관찰해 온 것인데, 하루 걸러 8/19에 나온 이번 드랍은 규모(파일 79, +3.3k lines)와 성격(학습 파이프라인 대개편 + retrieval 지면 확장 + 안전 인프라 shadow 배선) 양쪽에서 후속 소규모 정리를 넘어선 대형 확장이다.
Muon optimizer는 Keller Jordan 등이 2024년에 제안한 dense-parameter optimizer로, 기존 momentum-adam 계열과 달리 Newton-Schulz iteration으로 gradient momentum을 근사 직교화(orthogonalization)한다. Kimi K2·Moonshot 등의 대규모 LLM 학습에서 채택된 사례가 있고, 임베딩·norm·logits 등에는 여전히 Adam을 쓰는 하이브리드 배선이 표준이다. 이 저장소가 반영해 온 프로덕션 recsys 학습 파이프라인 중 Muon 채택을 코드로 확인한 첫 사례라는 점이 오늘 자료의 핵심 신호다.
새로 알게 된 것
(1) Phoenix dense-parameter optimizer가 Adam → Muon 전환
파일 두 개가 새로 추가됐다. 새 optimizer 구현체 phoenix/xrex/optimizers/recsys/muon.py (240줄) — optax.contrib._muon의 orthogonalize_via_newton_schulz와 MuonDimensionNumbers를 감싸 xrex 파라미터 트리에 맞게 라벨링·마스킹하는 얇은 어댑터. 그리고 config 노출용 phoenix/xrex/optimizers/recsys/dense_optim.py (47줄) [확인].
핵심 하이브리드 패턴 — matrix-shaped 파라미터만 Muon, 다음 이름 패턴이 걸리면 Adam:
muon_adam_patterns: str = "embed,_emb,logits,vocab,norm,table"
즉 임베딩 테이블·출력 logits 헤드·vocab·layernorm/rmsnorm은 Adam으로 남고 트랜스포머 body의 attention·FFN weight matrix들만 Muon으로 간다. Keller Jordan 2024 오리지널과 Kimi K2 계열 라인의 표준 패턴과 일치.
기본 config _home_direct_packed_base()의 optim 관련 값이 갈아치워졌다 [확인] — phoenix/xrex/configs/xrecsys.py:302-330:
| 파라미터 | 3세대~4세대+3 | 4세대+4 (aad7179) |
|---|---|---|
optim |
Adam (기본) | "muon" |
learning_rate (dense) |
1e-3 | 7.1e-4 |
emb_learning_rate |
0.2 (config에 명시) | (embedding config로 이동) |
muon_consistent_rms |
— | 0.2 |
muon_matrix_weight_decay |
— | 0.014 |
muon_split_fused |
— | "qkv:128" (fused QKV 프로젝션을 128-dim block 단위로 분할해 각각 직교화) |
adam_embedding_weight_decay |
— | 0.014 |
b1, b2 |
— | 0.95, 0.98 |
| embedding optim | rowwise_adagrad (LR 0.2) |
RecsysRowwiseAdagradConfig(learning_rate=0.28, half_life_steps=2500, lazy_decay=True, weight_decay=2.8e-4) |
GB300 override도 같은 방향으로 Muon 채택 (LR 5e-4, half_life_steps=5000, weight_decay=0.01).
"optim_config": RecsysDenseOptimConfig( optim="muon", muon_consistent_rms=0.2, muon_matrix_weight_decay=0.014, muon_split_fused="qkv:128", adam_embedding_weight_decay=0.014, b1=0.95, b2=0.98, ),
muon_split_fused="qkv:128"는 fused QKV projection의 output axis를 128-dim block들로 잘라 각 block을 별도 orthogonalization의 unit으로 다룬다는 뜻. scale_by_muon_shaped가 block 단위로 dim_nums를 재계산해 병렬 Newton-Schulz를 돌린다:
if block is not None and x.shape[-1] > block: n_blocks = x.shape[-1] // block xs = x.reshape(x.shape[:-1] + (n_blocks, block)) dn = optax_contrib.MuonDimensionNumbers(reduction_axis=-3, output_axis=-1) o = orthogonalize_via_newton_schulz(xs, ns_coeffs, ns_steps, preconditioning, 1e-8, dn)
muon_consistent_rms=0.2 옵션은 Muon 업데이트에 sqrt(max(fan_in, fan_out)) × consistent_rms 스케일을 적용해 layer별 update magnitude를 일관되게 유지하는 튜닝 노브 — 오리지널 Muon의 fan-in/fan-out 스케일링과 대체 사용 가능한 안정화 파라미터.
의미 LLM 학습에서 이룩된 optimizer(Muon)가 랭커/retrieval 학습으로 넘어온 관찰 축이 새로 생긴다. 이 저장소가 반영해 온 프로덕션 recsys 학습 파이프라인 (Netflix FM·Meta HSTU/GEM·Kuaishou OneRec 등) 중 Muon 채택을 코드로 확인한 첫 사례라는 점에서 오늘 자료의 최우선 항목. 다른 회사들이 뒤따르는지가 향후 3~6개월 관전 포인트.
(2) Phoenix가 검색 랭킹으로 확장 — xrecsys_search config 신설
For You 피드 학습 config xrecsys 옆에 xrecsys_search가 나란히 추가됐다 [확인] — phoenix/xrex/configs/xrecsys.py:435-473. 주요 차이:
- vocab 대폭 확장:
user_vocab_size=100_000_000,item_vocab_size=100_000_000,author_vocab_size=30_000_000,ip_vocab_size=10_000_000(For You config의 훨씬 작은 vocab 대비 검색 쿼리·클릭 코퍼스는 사용자·아이템 다양성이 커서 vocab 확장 필요) - 아키텍처:
num_layers=8,emb_size=2560,emb_table_width=1024,query_heads=20,kv_heads=4(GQA),history_seq_len=1022,candidate_seq_len=64 - 분산:
ep=512,dp=2,fsdp=1,tp=1— expert-parallel 512 (For You base config 대비 훨씬 큰 EP 축), MoE 라우팅이 검색 config에서 훨씬 큼 - 검색 특화 플래그:
use_product_surface=True(제품 지면 컨디셔닝 켜기),condition_search_relevance_on_prompt=True,use_dense_action_table=True,metric_group="search",output_vocab_size=128(action 128종으로 확장) - 훈련 시그널:
group_id="user_action_sequence_xrecsys"로 별도 그룹,log_q_correction=True
"xrecsys_search": _make_cfg( { "history_seq_len": 1022, "candidate_seq_len": 64, ... "num_layers": 8, "emb_size": 2560, "emb_table_width": 1024, "query_heads": 20, "kv_heads": 4, ... "ep": 512, "fsdp": 1, "dp": 2, ... "use_product_surface": True, "output_vocab_size": 128, "metric_group": "search", "use_dense_action_table": True, "condition_search_relevance_on_prompt": True, }, user_vocab_size=100_000_000, item_vocab_size=100_000_000, author_vocab_size=30_000_000, ip_vocab_size=10_000_000, ),
이 config가 proto의 신규 action 열거 두 개(CLIENT_TWEET_RELEVANT_TO_SEARCH = 105, CLIENT_TWEET_NOT_RELEVANT_TO_SEARCH = 106)와 짝지어져 있다. 기존 161/162 자리는 *_DEPRECATED로 남았다:
CLIENT_TWEET_RELEVANT_TO_SEARCH_DEPRECATED = 161; CLIENT_TWEET_NOT_RELEVANT_TO_SEARCH_DEPRECATED = 162;—
phoenix/crates/serving/xai-recsys-proto/proto/recsys.proto:379-380
의미 이전엔 각 지면(For You / Following / 검색)이 별개 코드베이스라는 게 canon 이해였는데, 이제 같은 Phoenix 트랜스포머 아키텍처가 지면별 config만 갈아끼우면 검색·피드를 모두 서빙하는 방향으로 통합이 진행 중이라는 새 사실. Netflix UniCoRn(2024)의 "검색·pre-query·More Like This 단일 컨텍스추얼 랭커" 및 GenRec(2026)의 "언어화 기반 단일 채점기" 방향과 결이 통함. X가 여기에 어떤 지면(트윗 검색 vs 유저 검색 vs 미디어 검색)을 붙일지, 프로덕션 배포는 언제인지가 다음 관전 포인트.
(3) Phoenix proto에 reward head + link-open 5분위 헤드 신설
Phoenix 예측 출력 스키마가 두 방향으로 확장됐다 [확인] — phoenix/crates/serving/xai-recsys-proto/proto/recsys.proto:
(a) RewardOutputs 메시지 신설. NextActionDistribution에 RewardOutputs rewardOutputs = 8 필드 추가:
message RewardOutputs { repeated float values = 1; repeated float policyLogits = 2; }
ScoreInfo에도 optional double rewardRerankSlotProb = 5 신규. 즉 Phoenix가 확률 예측 헤드 24개 옆에 reward value + policy logits 헤드를 병렬로 낼 수 있게 스캐폴딩이 배선됐다. actor-critic 스타일(value+policy)이거나 reward-model-guided 재순위 슬레이트 결정에 쓰는 것으로 추정 — 어느 스코어러가 이 필드를 소비하는지는 아직 배선 안 됨 [추정] (proto만 정의됐고 home-mixer/scorers/에서 이 필드를 소비하는 코드가 이 커밋에는 없음).
(b) link-open 확률 5분위 헤드. PLACE_HOLDER_167/168/169/170/253 다섯 자리가 각각 명명됐다:
P_OPEN_LINK_P10 = 167; P_OPEN_LINK_P25 = 168; P_OPEN_LINK_P50 = 169; P_OPEN_LINK_P75 = 170; ... P_OPEN_LINK_P90 = 253;
링크 열림 확률을 단일 스칼라가 아니라 분위 5개 분포로 예측한다는 뜻. 지금까지 X의 예측 헤드가 단일 확률/스칼라 계열이었는데, 이 헤드는 분포 형태 예측이 랭커에 처음 도입된 사례. 실체가 quantile regression인지 categorical mixture head인지는 recsys_model.py(+265/−25 대폭 개편) 심층 분석 필요.
(c) SlateContext에 SID 필드 7개 — sidKnown + sidK1/2/3 + sidGap1/2/3 신규 (4세대+3에서 VMRanker에 배선된 SID 필드와 프로토 레벨에서 동기).
정본 반영 services/x.md 세대 테이블에 4세대+4 (aad7179, 2026-08-19) 행 추가; 한 줄 요약에 Muon·xrecsys_search·RewardOutputs·link-open 5분위·Following filter·Grok 4.6 dial·dark_traffic·train-default 승격 7개 항목 포함; "Phoenix 학습·인덱스" 절 대폭 확장 — 새 소절 "4세대+4 Phoenix dense-parameter optimizer가 Adam → Muon 전환" + "Phoenix가 검색 랭킹으로 확장" + "Phoenix proto에 reward head + link-open 5분위 헤드 신설" 3개 신설; bool feature 표 밑에 train-default ON 승격 항목 추가; 필터 절에 "4세대+4 신규 — Following 파이프라인 전용 muted-keyword filter + quoted-text hydrator" 소절 추가; Grox → PtOS 절에 "4세대+4 Grok 4.6 internal 10% 트래픽 dial + NSFW 재분류 스킵 캐시" 소절 추가; 안전 절에 "4세대+4 visibility-filtering shadow deployment(xai-vf-shadow) 배선" 신설; 열린 질문 절에 "4세대+4 드랍으로 해소된 것" 서브섹션 신설 (8개 해소 + 6개 심층 분석 필요); 출처 절에 aad7179 관련 파일 10개 링크 추가.
의미 5일 연속 후속 커밋의 성격이 오늘 크게 바뀌었다. 8/148/18(4세대+1+3)이 "매일 소규모 정교화"(brand safety 문구 조정, filter 신설, hydrator 분기, 흐름 통합)였다면 4세대+4는 **학습 파이프라인 대개편(Muon) + retrieval 지면 확장(검색) + 안전 인프라 신규(dark traffic)**의 세 축에서 실체적 확장이다. Phoenix가 (a) LLM optimizer(Muon)로 학습되고 (b) 검색 지면까지 커버하고 (c) reward head를 배선하며 (d) 링크 클릭 확률을 분포 형태로 예측한다는 네 가지는 canon의 3세대~4세대+3 이해 대비 새로운 축이다. 특히 Muon 채택은 이 저장소가 반영해 온 대규모 프로덕션 recsys 학습 파이프라인 중 코드로 확인한 첫 사례 — LLM 학습에서 시작된 optimizer가 랭커/retrieval 학습으로 확산되고 있다는 관찰의 첫 데이터포인트로 topics/sequence-transformer-ranking.md의 새 관전 축이 열린다. 검색 지면 확장은 Netflix UniCoRn·GenRec가 개척한 "검색·추천 단일 랭커" 흐름의 두 번째 회사 진술 후보 — 프로덕션 배포 확인이 다음 커밋의 관전 포인트.
2. Netflix가 아트워크·비디오 프리뷰 개인화를 MediaFM tri-modal FM으로 갈아탔다 — Netflix
자료 Multimedia Asset Personalization via Multimodal Embeddings at Netflix (arXiv 2608.18322) — 2026-08-18 arXiv 제출, 논문. 저자 8명(Emma Yanyang Kong, Aditya Deshpande, Bowei Yan, Asad Abbasi, Santiago Castro, Avneesh Saluja, David Fagnan, Ashish Rastogi) 전원 Netflix 소속(제목·소속 표기로 확인).
배경 Netflix의 아트워크 개인화는 2017년에 블로그로 전면 배포 진술이 나온 뒤 정본 canon이 큰 갱신 없이 "재순위·다양성"의 한 줄 언급 수준으로 유지해 왔다. 2017년의 밴딧 접근은 캔버스별 별도 모델로 캔버스 5종(billboard / vertical box / horizontal panel / short panel / landscape panel)마다 다르게 학습·서빙됐고, 이미지의 콘텐츠 자체는 모델 밖에서 다뤄져 신규 타이틀·에셋의 콜드스타트가 원천적으로 어려웠다. 이 논문은 2017년의 그 아키텍처가 CLIP 기반 통합 two-tower + 자체 tri-modal foundation model MediaFM으로 세대 전환했음을 A/B 정량치와 함께 처음 공식화하는 자료다. 새로 나오는 개념 몇 개:
- CLIP — OpenAI 2021 vision-language 모델. 이미지와 텍스트를 같은 임베딩 공간에 매핑해 zero-shot 이미지 분류·검색을 가능하게 했다. 여기서는 이미지 인코더 사전학습 결과의 768차원 임베딩을 그대로 재활용.
- two-tower 모델 — 유저 tower와 아이템 tower가 각각 표현을 만들고 dot product로 매칭 스코어를 내는 retrieval/ranking 아키텍처. 이 논문에서는 아이템 tower에 CLIP 이미지 임베딩을 concat.
- SeqCLIP — CLIP 스타일의 프레임 시퀀스 인코더. 비디오 프리뷰 shot들을 순서대로 처리해 shot별 시각 표현을 만든다.
- wav2vec 2.0 — Facebook 2020, 음성 self-supervised 표현 학습. 여기서는 프리뷰 shot의 오디오 트랙 표현.
- text-embedding-3-large — OpenAI 2024 텍스트 임베딩 모델. 여기서는 shot의 timed-text(자막·대사 타임스탬프 얹은 텍스트).
- Masked Shot Modeling — BERT의 Masked Language Modeling을 shot 단위로 옮긴 self-supervised objective. shot 20%를 마스킹하고 cosine distance loss로 복원.
- IPS(Inverse Propensity Scoring) lift — off-policy evaluation에서 자주 쓰는 오프라인 지표. 로그된 무작위 노출 데이터로 새 모델의 counterfactual 성능을 추정.
새로 알게 된 것
CLIP 기반 통합 two-tower — 캔버스 5종을 단일 모델로
캔버스별 별도 모델 5개가 CLIP 이미지 임베딩(768-d)을 item tower에 concat한 단일 two-tower로 통합됐다 [확인] §3.
- Reward-weighted 학습: 캔버스별 학습 예제를 reward 가중치로 균형 (특정 캔버스 편중 방지)
- 콜드스타트: 신규 타이틀·에셋이 상호작용 이력 없이도 CLIP 임베딩만으로 "day zero" 서빙 가능. ID-only 모델의 원천 한계 해소
"Augmenting a two-tower model with CLIP image embeddings lets a single model serve all five Netflix artwork canvas types, replacing five separately trained per-canvas models and substantially improving cold-start performance." — arXiv 2608.18322 abstract
온라인 A/B 정량치 [확인] §5.1:
- 코어 discovery 메트릭 상대 +0.127% (p<0.005)
- Eclipse UI 홀드백 대비 discovery +0.233%, streaming hours +0.184%
- 저자 추정 연간 ≈350M streaming hours 추가
- 검색 확장: CLIP joint text-image space를 재활용해 query-aware artwork를 검색 캔버스에 적용, playthrough rate +0.36% (p<0.05)
MediaFM — Netflix 자체 tri-modal foundation model
비디오 프리뷰 개인화를 위한 자체 학습 tri-modal FM [확인] §4.
- 모달리티: 시각(SeqCLIP) + 음성(wav2vec 2.0) + timed-text(text-embedding-3-large). shot당 concat 후 2,304-d unit-normed 벡터
- 인코더: BERT 스타일 3-layer / 8-head transformer. Masked Shot Modeling (20% shot 마스킹) + cosine distance loss로 self-supervised 사전학습. 프리뷰 표현은 contextualized shot embedding의 mean-pool
- 학습 코퍼스: Netflix 쇼 카탈로그의 대규모 shot corpus (구체 규모 미공개)
- 적용 지면: 모든 디바이스 플랫폼의 비디오 프리뷰 개인화 (프리뷰 30~90초). TV UI 서피스에서 가장 큰 이득
"MediaFM, our in-house tri-modal foundation model trained on a large-scale corpus of shots from the Netflix show catalog, fusing visual (SeqCLIP), audio (wav2vec 2.0), and timed-text signals; adopted for video preview personalization, it outperforms strong visual-only baselines both offline and in online A/B tests." — arXiv 2608.18322 abstract
온라인 A/B 정량치 [확인] §5.2: streaming 메트릭 상대 +0.193% (p<0.02). 오프라인 IPS lift 0.380%. visual-only 베이스라인 대비 tri-modal의 우월성이 오프라인·온라인 양쪽에서 확인 — modality가 세 개 다 붙어야 이득이 정착.
Popularity-Based Winner — 오프라인 프록시 태스크
MediaFM 체크포인트 릴리스 gating을 위해 새 오프라인 프록시가 배치됐다 [확인] §5.4.
- 정의: "만약 unpersonalized·uniform serving policy로 노출했다면 어떤 에셋이 이겼을까"를 에셋 콘텐츠 임베딩만 입력으로 예측 (linear probe binary classification)
- 왜 유효: end-to-end integration이나 A/B test 없이도 임베딩 quality를 랭크. 온라인 outcome과 상관 관찰됨 — 프로브 정확도 순위와 오프라인 IPS + 온라인 A/B 결과 순위가 세 시그널 모두에서 일치
- 정량치: MediaFM 프로브 정확도 = pick-at-random 대비 +25.90 percentage points. SeqCLIP 단독 = +18.75 pp. 트리모달의 uplift가 shot-level 프록시에서 재현
- 의미: 모든 새 MediaFM 체크포인트에 대해 이 프록시가 gating — 후보 공간 pruning 후에만 A/B로 넘어감. Netflix가 오랜 문제("오프라인 지표가 A/B를 예측 못 함")를 임베딩 quality만의 단일 태스크로 부분 우회한 사례
Netflix Embedding Store — 인프라 레이어
플랫폼 레이어의 3단 캐싱 [확인] §4.3:
- 콘텐츠 임베딩 — 에셋이 카탈로그에 유입되는 순간 사전계산 (ingestion time)
- Item-tower projection — 에셋당 캐시
- 일일 materialization — 프로필별 상위 ~500 타이틀 선택 미리 계산
이 3단 캐싱이 저지연 서빙 + 값싼 스크리닝을 동시에 가능하게 만들었다. FM 시대에 이미 회원 임베딩 배치 생산이 프로덕션이었는데 (netflix.md 후보 생성 절), MediaFM은 아이템 쪽 임베딩 파이프라인을 동일 방식으로 확립했다는 대응 사실.
정본 반영 services/netflix.md 재순위·다양성·필터 절의 아트워크 관련 한 줄을 갱신(2017 밴딧 → 2026 MediaFM 세대 전환 명시)하고, 새 절 "아트워크·비디오 프리뷰 개인화 — MediaFM tri-modal FM (2026-08 프로덕션)"을 신설 — 소절 5개(CLIP 기반 통합 two-tower, MediaFM tri-modal FM, Popularity-Based Winner 오프라인 프록시, Netflix Embedding Store 인프라, 의미). 최종 갱신을 2026-08-21로 갱신. 출처 절에 arXiv 2608.18322 항목 추가.
의미 지금까지 canon은 아트워크 개인화를 "재순위·다양성"의 한 줄 언급으로 다뤘다 (2017 밴딧 이후 큰 갱신이 없었기 때문). 이 논문이 그 축을 별도 프로덕션 시스템으로 확립했다:
- 캔버스별 → 단일 모델로의 아키텍처 통합 (5→1)
- 시각-only → tri-modal로의 modality 확장 (audio·timed-text가 정량적으로 uplift 검증)
- 콜드스타트 위치가 랭커 안이 아니라 pretrained 임베딩 (day-zero CLIP 임베딩)
- 오프라인 gating이 A/B의 전제조건으로 프로덕션 프로세스에 편입 (popularity-based winner)
이는 Netflix의 "FM으로 회원 표현 중앙화" 흐름의 아이템 쪽 대응이라 볼 수 있다. 회원은 FM(2025), 아이템은 MediaFM(2026). 두 임베딩이 결합돼 랭커·retrieval·아트워크·프리뷰의 공통 하부구조가 되는 방향. Netflix가 (Foundation Model + GenRec + MediaFM + GenPage)의 4대 FM 스택을 코드·논문으로 다 공개한 셈이 됐고, 회원 중앙화의 대응 축인 아이템 중앙화가 이 저장소의 canon에도 반영됐다.
다음에 볼 것
- X aad7179 심층 분석 —
phoenix/xrex/models/recsys_model.py(+265/−25) 트레이스:RewardOutputs가 어느 학습 루프에서 채워지고 어느 스코어러가 소비하는가, actor-critic 헤드가 별도 학습되는가, link-open 5분위가 quantile regression인지 categorical mixture인지 (필요) - X aad7179 후속 커밋 관찰 — Muon LR·
muon_split_fused·muon_consistent_rms튜닝이 다음 커밋에서 어떻게 이동하는지 (A/B 결과의 지연 지표),xrecsys_searchconfig의 실 프로덕션 배포 진술이 나오는지 (관전) - Netflix MediaFM 후속 — Netflix가 MediaFM을 랭커(FM/GenRec)에 어떻게 합치는지 (아이템 임베딩이 GenRec 컨텍스트에 언어화되는지, FM의 아이템 시퀀스 임베딩과 별도 저장·결합인지)의 다음 발표
- Muon 채택의 두 번째 회사 진술 — Netflix FM·Meta HSTU/GEM·Kuaishou OneRec 중 어느 곳이 다음에 Muon 계열 optimizer를 공개하는지 (→ topics/sequence-transformer-ranking.md의 새 관전 축)
- arXiv cs.IR triage 통과 후보 — OneModel(Xiaohongshu?), UniDot, SIDScope 등 오늘 후보 3~4건이 authors/affiliation 확인 필요분 — 다음 스윕에서 원문 정독 여부 판단