CALVIN에서 새 언어 모델을 사용한다고 로봇 시범 자체가 다시 만들어지는 것은 아닙니다. 공개된 재라벨링 스크립트는 주석 파일을 읽어 언어 임베딩을 다시 계산합니다. reannotate를 켜면 그 전에 작업별 후보 문장 중 하나를 다시 고릅니다. 영상·행동 궤적을 수집하거나 과제 성공 여부를 새로 판정하는 처리는 이 스크립트에 없습니다.
이 차이는 실험 해석에 바로 영향을 줍니다. 문장은 그대로 둔 채 임베딩 모델만 바꿨는지, 문장도 바꾸고 임베딩도 바꿨는지에 따라 비교하는 대상이 달라지기 때문입니다. CALVIN은 여기서 긴 언어 지시 기반 조작을 위한 연구 벤치마크를 뜻합니다.
reannotate가 바꾸는 필드는 language.ann이다
2026년 10월 15일 확인한 공식 재라벨링 코드는 입력 파일을 읽은 뒤 cfg.reannotate가 참일 때만 data["language"]["ann"]을 바꿉니다. 각 시퀀스의 language.task를 기준으로 해당 작업의 후보 지시문에서 하나를 무작위로 고릅니다.
그다음에는 옵션과 관계없이 선택된 문장 목록을 언어 모델에 전달해 language.emb를 다시 계산합니다. 따라서 옵션을 끈 실행도 ‘아무 변경 없음’이 아닙니다. 기존 문구를 새 모델의 벡터 표현으로 바꾸는 실행일 수 있습니다.
가령 같은 서랍 열기 시범에 기존 문장 A와 후보 문장 B가 있다고 합시다. 옵션을 끄면 A에 대한 새 임베딩을 얻습니다. 옵션을 켜면 해당 작업의 후보에서 고른 문장에 대한 임베딩을 얻습니다. 이때 새 문장이 반드시 B이거나 기존 문장과 반드시 다르다고 보장할 수는 없습니다. 코드는 후보 중 하나를 추출하기 때문입니다.
두 설정으로 학습한 정책의 성능이 다르더라도, 문장과 임베딩 모델을 동시에 바꿨다면 언어 모델 하나의 효과로 읽을 수 없습니다. 임베딩 모델의 영향을 분리하려는 비교라면 같은 입력 문장 목록을 쓰고, 문장 다양화의 효과를 보려면 문장 선택 조건을 별도로 비교하는 편이 맞습니다.
README의 훈련 예시와 코드의 경로 분기를 나눠 읽는다
CALVIN README는 훈련 분할의 문장을 다시 추출하는 예시로 reannotate=true를 소개합니다. 하지만 현재 코드는 기능을 훈련 데이터에만 제한하지 않습니다. 입력 경로 문자열에 training이 있으면 cfg.train_instructions, 그렇지 않으면 cfg.val_instructions를 선택합니다.
이 분기는 파일 내용을 읽어 분할을 추론하는 방식이 아닙니다. 예를 들어 실제 훈련 주석을 별도의 scratch 경로로 옮겼는데 문자열에 training이 없다면, 코드상 선택되는 후보는 검증 지시문입니다. 폴더 이름을 바꾸는 작업이 문장 선택에 영향을 줄 수 있다는 뜻입니다.
추가 검증용 임베딩 파일을 저장하는 조건도 별개입니다. 경로 문자열에 validation이 있을 때, 검증 작업별 지시문에 대한 임베딩을 계산해 embeddings.npy로 저장합니다. ‘훈련 경로가 아니면 검증 문장 선택’과 ‘검증 문자열이 있어야 추가 파일 저장’은 같은 조건이 아닙니다.
또 하나의 차이는 입력 경로입니다. README의 명령 예시는 데이터셋 디렉터리를 보여주지만, 확인한 스크립트는 cfg.path를 np.load에 직접 전달합니다. 실제 사용 전에는 선택한 코드와 설정에서 주석 파일 경로가 무엇인지 맞춰야 합니다. README 예시를 그대로 실행하면 모든 버전에서 동작한다고 가정할 수 없습니다.
새 주석 파일이 원본 데이터 정정을 대신하지는 않는다
스크립트는 입력 파일의 부모 위치를 기준으로 상위 디렉터리 아래 cfg.name_folder를 만들고, 그곳에 auto_lang_ann.npy를 저장합니다. 이름만 보고 항상 안전한 새 사본이라고 판단할 수는 없습니다. 실제로 계산되는 출력 경로가 입력이나 보존할 결과와 겹치지 않는지 확인해야 합니다.
이 언어 처리와 구분해야 할 것이 배포 데이터 자체의 정정입니다. README의 2022년 9월 16일 기록에는 ABC·ABCD 데이터의 잘못된 언어 주석과 scene_info.npy 수정이, 2023년 2월 24일 기록에는 D 데이터의 scene_info.npy와 해당 체크섬 수정이 나옵니다. 이는 당시 배포 파일에 대한 정정 이력입니다. 새 임베딩 모델을 선택했다는 이유로 이런 정정까지 자동 적용되는 것은 아닙니다.
예를 들어 잘못된 문구가 들어 있는 주석에 reannotate를 끄고 새 언어 모델만 적용하면, 코드상 그 문구를 새 벡터로 바꾸게 됩니다. 반대로 문구를 다시 추출하더라도 scene_info.npy를 교체하는 동작은 없습니다. 파일을 정상적으로 저장했다는 사실과 입력 데이터의 오류가 바로잡혔다는 사실은 따로 판단해야 합니다.
비교할 때는 바뀐 대상을 이름으로 말한다
실험 설명에 ‘CALVIN 라벨을 업데이트했다’고만 쓰면 독자는 문구, 임베딩, 원본 정정 중 무엇이 달라졌는지 알 수 없습니다. ‘같은 문구에서 언어 모델만 변경’, ‘작업별 후보 문장을 다시 추출한 뒤 임베딩 계산’, ‘정정된 배포 파일로 입력 교체’처럼 실제 변경을 구분하면 결과의 해석도 명확해집니다.
여러 실험을 연결해 관리하는 방법은 로봇 데이터 버전과 계보 관리에서 더 넓게 다룹니다. 여기서 먼저 필요한 판단은 이 스크립트의 출력이 새 궤적이 아니라 언어 주석 파일이라는 점, 그리고 문장 선택이 경로 문자열에도 영향을 받는다는 점입니다.
이 글은 README와 공개 스크립트를 대조한 설명입니다. 재라벨링이나 정책 학습을 실행하지 않았으며, 언어 모델을 바꿨을 때의 성능 향상을 주장하지 않습니다.