AI 업무 활용

AI로 논문 비교표를 만들고 모든 셀을 검증하는 방법

AI를 사용하면 여러 논문 초록을 간단한 비교표로 정리할 수 있지만, 각 셀이 원문에 근거하는지 확인해야 합니다. 이 글에서는 작은 합성 초록 3개로 AI 비교표를 만들고 모든 셀을 초록과 대조하는 방법을 설명합니다.

목차 보기

이런 분께여러 논문을 AI 채팅 도우미로 비교하면서 비교표의 각 셀이 제공된 초록에 실제로 근거하는지 확인하고 싶은 학생과 연구자를 위한 내용입니다.

준비사항
  • Python 3.12
  • 논문 초록과 CSV 파일에 대한 기본적인 이해

01논문 비교표의 모든 셀을 확인해야 하는 이유

비교표는 여러 논문을 목적, 방법, 데이터, 결과, 한계와 같은 동일한 구조로 압축해서 볼 수 있어 유용합니다. 하지만 AI 채팅 도우미가 각 초록에서 제공하는 정보의 수준이 다르더라도 모든 행을 비슷하게 채워 넣을 수 있다는 위험이 있습니다. 어떤 초록은 데이터셋 이름을 제시하고, 다른 초록은 표본만 설명하며, 또 다른 초록은 한계를 전혀 언급하지 않을 수 있습니다. 이런 빈칸을 그럴듯한 표현으로 채우면 표는 깔끔해 보이지만 근거는 약해집니다.

가장 안전한 원칙은 간단합니다. 사실을 담은 모든 표의 셀은 제공된 초록의 문장으로 뒷받침되어야 합니다. 초록에 해당 정보가 없다면 일반적인 연구 관행이나 논문 제목을 근거로 추론하지 말고 Not stated라고 표시해야 합니다. 특히 이 표를 이후 문헌고찰, 연구계획서, 방법론 선택에 활용하려면 이 원칙이 중요합니다.

02작은 합성 초록 3개 사용하기

다음 초록은 이 튜토리얼을 위해 만든 합성 예제입니다. 모든 추출 내용을 사람이 직접 확인할 수 있도록 의도적으로 짧게 구성했습니다.

논문합성 초록
P1We 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.
P2A 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.
P3We 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.

03AI에게 제한 조건이 있는 비교표를 요청하기

단순히 논문을 요약해 달라고 요청하지 말고, 열 구조를 지정하고 초록에 명시된 정보만 사용하도록 제한하는 것이 좋습니다. 또한 나중에 각 주장을 검증할 수 있도록 비어 있지 않은 모든 셀에 근거 문장을 함께 제시하도록 요구합니다.

  1. 각 초록에 P1, P2, P3처럼 고정된 ID를 부여합니다.
  2. 열을 method, data size, inputs or target, reported result, limitation으로 고정합니다.
  3. 초록에 해당 정보가 없으면 Not stated라고 작성하도록 요구합니다.
  4. 사실을 담은 모든 셀에 짧은 근거 문구나 원문 조각을 함께 요구합니다.
  5. 일반 지식을 이용해 실험 세부사항, 모델 설정, 한계를 추론하지 말라고 명시합니다.

04AI가 만든 일반적인 비교표 검토하기

적절한 비교표라면 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로 유지해야 합니다.

PaperMethodData sizeInputs or targetReported resultLimitation
P1Linear regression120 finite-element samplesBeam deflectionMAE 0.18 mm on a 30-sample test setOnly linear-elastic cases
P2Random forest500 simulated bracket designsThickness and hole diameter to maximum von Mises stressError below 4% for 90% of validation casesNot stated
P3Gaussian process regression and neural network200 simulation casesPlate displacementGaussian process regression had lower RMSETraining time increased as dataset grew

이 표는 간결하지만 모든 행이 그럴듯하게 채워졌다는 이유만으로 받아들여서는 안 됩니다. 각 셀은 여전히 초록의 직접적인 근거와 연결되어야 합니다.

05AI 비교표와 근거를 함께 저장하기

자동 검증을 위해 간단한 CSV 파일 paper_table.csv를 저장합니다. 각 사실 행에는 paper_id, field, value, evidence 열을 둡니다. evidence에는 AI가 해당 값을 뒷받침한다고 주장하는 정확한 초록 문구를 넣습니다. 값이 Not stated인 행에서는 evidence를 비워 둘 수 있습니다.

paper_idfieldvalueevidence
P1methodLinear regressionlinear regression
P1data_size120 finite-element samples120 finite-element samples
P1resultMAE 0.18 mmmean absolute error of 0.18 mm
P2limitationNot stated
P3resultGPR lower RMSEGaussian process regression produced lower RMSE than the neural network

06Python으로 모든 근거 문구 확인하기

세 개의 초록을 abstracts.txt에 저장합니다. 각 줄은 P1<TAB>abstract text 형식으로 작성합니다. 아래 스크립트는 abstracts.txt와 paper_table.csv를 읽고 각 evidence 문구가 해당 논문의 초록에 실제로 존재하는지 확인한 뒤 결과를 outputs/paper_table_check.txt에 저장합니다. 입력 파일은 수정하지 않으며 출력 파일이 이미 존재하면 중단합니다.

python
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()

07근거 문구와 요약 셀의 의미가 실제로 같은지도 확인하기

근거 문구가 존재하는지 확인하는 것은 첫 단계일 뿐입니다. 검토자는 표의 값과 초록의 표현이 실제로 같은 의미인지도 비교해야 합니다. 예를 들어 P2에는 prediction error가 validation cases의 90%에서 4% 미만이었다고 적혀 있습니다. 이를 prediction error was below 4%라고만 요약하면 90%라는 조건이 사라지므로 원문보다 강한 주장으로 바뀝니다.

초록의 근거수동 검토 판단
P1 result: MAE 0.18 mmmean absolute error of 0.18 mm on a 30-sample test set근거가 있지만 test set 조건을 유지해야 합니다.
P2 result: error below 4% for 90% of casesPrediction error ... below 4% for 90% of the validation cases근거가 있습니다.
P2 limitation: Not stated합성 초록에 한계를 설명하는 문장이 없습니다.Not stated를 유지하고 한계를 만들어내지 않습니다.
P3 result: GPR lower RMSEGaussian process regression produced lower RMSE than the neural network근거가 있습니다.

08초록만 이용한 비교의 한계 이해하기

  • 방법, 데이터셋, 평가 세부사항이 중요하다면 초록을 논문 전체의 대체물로 취급하지 마세요.
  • Not stated를 No limitation이나 None으로 바꾸지 마세요. 초록에 없다는 것은 실제 한계가 없다는 증거가 아닙니다.
  • 서로 다른 평가 지표를 실제로 비교할 수 있는 경우가 아니라면 임의로 순위를 만들지 마세요.
  • 초록에 명시되지 않은 데이터 분할, 하이퍼파라미터, 통계적 유의성, 구현 세부사항을 추론하지 마세요.
  • validation set, test set, percentage of cases, comparison baseline과 같은 조건을 유지하세요.

초록 기반 비교는 논문을 빠르게 선별하고 정리하는 데 유용하지만 상세한 방법론 평가에는 충분하지 않습니다. 자동 스크립트는 근거로 제시된 문구가 올바른 초록에 실제로 존재하는지만 확인합니다. 요약 문장이 정확한 의미를 유지하는지, 서로 다른 지표가 비교 가능한지, 논문 전체를 읽었을 때 해석이 달라지는지는 판단하지 못합니다.

따라서 신뢰할 수 있는 흐름은 각 논문에 고정 ID를 부여하고, 비교표 열을 고정하고, 정보가 없으면 Not stated를 사용하고, 모든 사실 셀에 근거 문구를 붙이고, 근거의 존재 여부를 자동 확인한 다음 의미를 사람이 직접 검토하는 것입니다. 이렇게 하면 AI가 만든 비교표의 편리함을 활용하면서도 완성된 표를 검증된 사실로 오인하는 것을 줄일 수 있습니다.

실행·검증 기록

2026-09-21 · hand-checked example · Python 3.12

  • 이 글의 세 초록은 모두 실제 논문이 아니라 합성 예제입니다.
  • P1은 손으로 확인했습니다. 방법은 linear regression, 데이터 규모는 120 finite-element samples, MAE는 30-sample test set에서 0.18 mm이며, 명시된 한계는 linear-elastic cases만 다룬다는 것입니다.
  • P2는 손으로 확인했습니다. 방법은 random forest, 데이터 규모는 500 simulated bracket designs, 입력은 thickness와 hole diameter이며, validation cases의 90%에서 error가 4% 미만이라고 명시되어 있습니다.
  • P2 합성 초록에는 한계가 명시되지 않았으므로 비교표에서 Not stated를 사용한 것이 맞습니다.
  • P3은 손으로 확인했습니다. 200 simulation cases에서 Gaussian process regression과 neural network를 비교하고, Gaussian process regression이 더 낮은 RMSE를 보였으며, 데이터셋이 커질수록 training time이 증가했다고 명시되어 있습니다.
  • 제시된 Python 로직은 해당 초록 안에 근거 문구가 문자 그대로 존재하는지 확인하고 기존 출력 파일을 덮어쓰지 않도록 구성되어 있습니다.
검증 범위의 한계
  • 이 글의 Python 코드는 직접 실행하지 않았으며 동작은 수동으로 검토했습니다.
  • 문자열 근거가 존재한다고 해서 요약된 표 셀이 원문의 정확한 의미와 모든 조건을 보존했다는 사실까지 증명되지는 않습니다.
  • 초록에는 논문 전체에 있는 중요한 세부사항이 빠질 수 있으므로 이 방법은 완전한 논문 평가가 아니라 초기 비교와 선별에 적합합니다.

사이트 전체의 작성·검증 원칙

참고 출처

설명과 예제는 직접 작성했습니다. 관련 동작과 개념은 아래 공식 자료에서 확인할 수 있습니다.