업무용 스크립트 요청문에 입력·출력·오류 원칙 담기
“자동화해 줘”를 실행 가능한 작업 설명으로 바꿉니다. 민감정보 없는 합성 샘플과 손으로 확인한 기대 결과를 붙여, 팀별 작업 기록 집계 스크립트를 요청하는 문장을 완성합니다.
AI를 사용하면 여러 논문 초록을 간단한 비교표로 정리할 수 있지만, 각 셀이 원문에 근거하는지 확인해야 합니다. 이 글에서는 작은 합성 초록 3개로 AI 비교표를 만들고 모든 셀을 초록과 대조하는 방법을 설명합니다.
이런 분께여러 논문을 AI 채팅 도우미로 비교하면서 비교표의 각 셀이 제공된 초록에 실제로 근거하는지 확인하고 싶은 학생과 연구자를 위한 내용입니다.
비교표는 여러 논문을 목적, 방법, 데이터, 결과, 한계와 같은 동일한 구조로 압축해서 볼 수 있어 유용합니다. 하지만 AI 채팅 도우미가 각 초록에서 제공하는 정보의 수준이 다르더라도 모든 행을 비슷하게 채워 넣을 수 있다는 위험이 있습니다. 어떤 초록은 데이터셋 이름을 제시하고, 다른 초록은 표본만 설명하며, 또 다른 초록은 한계를 전혀 언급하지 않을 수 있습니다. 이런 빈칸을 그럴듯한 표현으로 채우면 표는 깔끔해 보이지만 근거는 약해집니다.
가장 안전한 원칙은 간단합니다. 사실을 담은 모든 표의 셀은 제공된 초록의 문장으로 뒷받침되어야 합니다. 초록에 해당 정보가 없다면 일반적인 연구 관행이나 논문 제목을 근거로 추론하지 말고 Not stated라고 표시해야 합니다. 특히 이 표를 이후 문헌고찰, 연구계획서, 방법론 선택에 활용하려면 이 원칙이 중요합니다.
다음 초록은 이 튜토리얼을 위해 만든 합성 예제입니다. 모든 추출 내용을 사람이 직접 확인할 수 있도록 의도적으로 짧게 구성했습니다.
| 논문 | 합성 초록 |
|---|---|
| P1 | We predict beam deflection using linear regression from 120 finite-element samples. The model achieved a mean absolute error of 0.18 mm on a 30-sample test set. The study considers only linear-elastic cases. |
| P2 | A random forest surrogate was trained on 500 simulated bracket designs using thickness and hole diameter as inputs. Prediction error for maximum von Mises stress was below 4% for 90% of the validation cases. |
| P3 | We compare Gaussian process regression and a neural network for estimating plate displacement from 200 simulation cases. Gaussian process regression produced lower RMSE than the neural network. Training time increased substantially as the dataset grew. |
단순히 논문을 요약해 달라고 요청하지 말고, 열 구조를 지정하고 초록에 명시된 정보만 사용하도록 제한하는 것이 좋습니다. 또한 나중에 각 주장을 검증할 수 있도록 비어 있지 않은 모든 셀에 근거 문장을 함께 제시하도록 요구합니다.
적절한 비교표라면 P1의 방법을 linear regression, P2를 random forest, P3를 Gaussian process regression과 neural network로 정리할 수 있습니다. 데이터 규모는 각각 P1의 120 finite-element samples, P2의 500 simulated bracket designs, P3의 200 simulation cases로 정리할 수 있습니다. 그러나 일부 열은 의도적으로 비어 있어야 합니다. 예를 들어 P2 초록에는 한계가 명시되지 않았으므로 해당 셀은 Not stated로 유지해야 합니다.
| Paper | Method | Data size | Inputs or target | Reported result | Limitation |
|---|---|---|---|---|---|
| P1 | Linear regression | 120 finite-element samples | Beam deflection | MAE 0.18 mm on a 30-sample test set | Only linear-elastic cases |
| P2 | Random forest | 500 simulated bracket designs | Thickness and hole diameter to maximum von Mises stress | Error below 4% for 90% of validation cases | Not stated |
| P3 | Gaussian process regression and neural network | 200 simulation cases | Plate displacement | Gaussian process regression had lower RMSE | Training time increased as dataset grew |
이 표는 간결하지만 모든 행이 그럴듯하게 채워졌다는 이유만으로 받아들여서는 안 됩니다. 각 셀은 여전히 초록의 직접적인 근거와 연결되어야 합니다.
자동 검증을 위해 간단한 CSV 파일 paper_table.csv를 저장합니다. 각 사실 행에는 paper_id, field, value, evidence 열을 둡니다. evidence에는 AI가 해당 값을 뒷받침한다고 주장하는 정확한 초록 문구를 넣습니다. 값이 Not stated인 행에서는 evidence를 비워 둘 수 있습니다.
| paper_id | field | value | evidence |
|---|---|---|---|
| P1 | method | Linear regression | linear regression |
| P1 | data_size | 120 finite-element samples | 120 finite-element samples |
| P1 | result | MAE 0.18 mm | mean absolute error of 0.18 mm |
| P2 | limitation | Not stated | |
| P3 | result | GPR lower RMSE | Gaussian process regression produced lower RMSE than the neural network |
세 개의 초록을 abstracts.txt에 저장합니다. 각 줄은 P1<TAB>abstract text 형식으로 작성합니다. 아래 스크립트는 abstracts.txt와 paper_table.csv를 읽고 각 evidence 문구가 해당 논문의 초록에 실제로 존재하는지 확인한 뒤 결과를 outputs/paper_table_check.txt에 저장합니다. 입력 파일은 수정하지 않으며 출력 파일이 이미 존재하면 중단합니다.
import csv
from pathlib import Path
ABSTRACTS_FILE = Path("abstracts.txt")
TABLE_FILE = Path("paper_table.csv")
OUTPUT_DIR = Path("outputs")
OUTPUT_FILE = OUTPUT_DIR / "paper_table_check.txt"
def load_abstracts(path):
abstracts = {}
with path.open("r", encoding="utf-8") as file:
for line_number, line in enumerate(file, start=1):
line = line.rstrip("\n")
if not line:
continue
if "\t" not in line:
raise SystemExit(f"Invalid abstract line {line_number}.")
paper_id, text = line.split("\t", 1)
abstracts[paper_id] = text
return abstracts
def main():
if not ABSTRACTS_FILE.is_file():
raise SystemExit(f"Abstracts file not found: {ABSTRACTS_FILE}")
if not TABLE_FILE.is_file():
raise SystemExit(f"Table file not found: {TABLE_FILE}")
if OUTPUT_FILE.exists():
raise SystemExit(f"Output already exists: {OUTPUT_FILE}")
abstracts = load_abstracts(ABSTRACTS_FILE)
report = []
checked = 0
unsupported = 0
with TABLE_FILE.open("r", encoding="utf-8", newline="") as file:
reader = csv.DictReader(file)
required = {"paper_id", "field", "value", "evidence"}
if reader.fieldnames is None or not required.issubset(reader.fieldnames):
raise SystemExit("paper_table.csv is missing required columns.")
for row_number, row in enumerate(reader, start=2):
paper_id = row["paper_id"].strip()
field = row["field"].strip()
value = row["value"].strip()
evidence = row["evidence"].strip()
if paper_id not in abstracts:
raise SystemExit(f"Unknown paper_id on row {row_number}: {paper_id}")
checked += 1
if value == "Not stated":
status = "REVIEW_NOT_STATED"
elif evidence and evidence in abstracts[paper_id]:
status = "EVIDENCE_FOUND"
else:
status = "EVIDENCE_NOT_FOUND"
unsupported += 1
report.append(
f"{paper_id}\t{field}\t{status}\tvalue={value}\tevidence={evidence}"
)
report.append("")
report.append(f"cells_checked={checked}")
report.append(f"evidence_not_found={unsupported}")
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
OUTPUT_FILE.write_text("\n".join(report) + "\n", encoding="utf-8")
print(f"Wrote: {OUTPUT_FILE}")
if __name__ == "__main__":
main()
근거 문구가 존재하는지 확인하는 것은 첫 단계일 뿐입니다. 검토자는 표의 값과 초록의 표현이 실제로 같은 의미인지도 비교해야 합니다. 예를 들어 P2에는 prediction error가 validation cases의 90%에서 4% 미만이었다고 적혀 있습니다. 이를 prediction error was below 4%라고만 요약하면 90%라는 조건이 사라지므로 원문보다 강한 주장으로 바뀝니다.
| 셀 | 초록의 근거 | 수동 검토 판단 |
|---|---|---|
| P1 result: MAE 0.18 mm | mean absolute error of 0.18 mm on a 30-sample test set | 근거가 있지만 test set 조건을 유지해야 합니다. |
| P2 result: error below 4% for 90% of cases | Prediction error ... below 4% for 90% of the validation cases | 근거가 있습니다. |
| P2 limitation: Not stated | 합성 초록에 한계를 설명하는 문장이 없습니다. | Not stated를 유지하고 한계를 만들어내지 않습니다. |
| P3 result: GPR lower RMSE | Gaussian process regression produced lower RMSE than the neural network | 근거가 있습니다. |
초록 기반 비교는 논문을 빠르게 선별하고 정리하는 데 유용하지만 상세한 방법론 평가에는 충분하지 않습니다. 자동 스크립트는 근거로 제시된 문구가 올바른 초록에 실제로 존재하는지만 확인합니다. 요약 문장이 정확한 의미를 유지하는지, 서로 다른 지표가 비교 가능한지, 논문 전체를 읽었을 때 해석이 달라지는지는 판단하지 못합니다.
따라서 신뢰할 수 있는 흐름은 각 논문에 고정 ID를 부여하고, 비교표 열을 고정하고, 정보가 없으면 Not stated를 사용하고, 모든 사실 셀에 근거 문구를 붙이고, 근거의 존재 여부를 자동 확인한 다음 의미를 사람이 직접 검토하는 것입니다. 이렇게 하면 AI가 만든 비교표의 편리함을 활용하면서도 완성된 표를 검증된 사실로 오인하는 것을 줄일 수 있습니다.
2026-09-21 · hand-checked example · Python 3.12
설명과 예제는 직접 작성했습니다. 관련 동작과 개념은 아래 공식 자료에서 확인할 수 있습니다.