Skip to content

About

한국어 학습자 발화의 발음 정확성·유창성(0~4점)을 평정하는 평정자 캘리브레이션 과제와 응답 수집 서버, 음성 전처리 스크립트. 코드만 공개하며 음성 파일은 포함하지 않습니다.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

23 Commits

Folders and files

Repository files navigation

KOCCA 발음 · 말하기 평정 캘리브레이션

외국인의 한국어 발음 및 말하기 평정을 위한 채점자 보정(calibration) 시스템과, 응답을 수집·분석하는 서버 코드입니다. (과제: 외국인의 효율적인 한국어 말하기 학습을 위한 AI 활용 한국어 진단 시스템 개발)

평정자는 기준 음성으로 척도를 익힌 뒤 본 시행을 수행하고, 전문가 기준 점수와 비교한 보정 지표(편향, MAE, 상관)를 얻습니다.

두 보정 시스템이 하나의 진입점을 공유합니다.

시스템 채점 구인 상태
발음 평정 보정 발음 정확성 · 유창성 (0~4점) 운영 중
말하기 평정 보정 내용 · 언어 사용 · 전달 (0~4점, 문항 유형 6종) 구현 완료, 자극 음성 대기 중

문서

문서 내용
Readme_speaking.md 말하기 보정 시스템의 설계와 채점 기준 전문
README_Speaking_waves.md 말하기 자료 연동 안내 — 자극 음원 · 전문가 기준 점수 · 문항 지문의 위치와 규칙
server/README.md 응답 수집 서버 운영과 DB 스키마
server/README_development.md 서버 개발 메모
audio/README.md 음성 전처리와 화자별 기준 점수

화면

진입점 — web/kocca_speaking_diagnosis.html

참여자 정보(ID·참가 코드·소속·연령·성별·평정 경험)를 한 번 입력받아 참가 코드를 확인한 뒤, 발음 / 말하기 보정 시스템을 선택하는 화면으로 넘어갑니다. 입력한 정보는 브라우저의 localStorage 에 저장되어 각 과제에서 다시 입력하지 않습니다. 진입점을 거치지 않고 과제 주소로 바로 들어간 경우에는 그 화면에서 직접 입력할 수도 있습니다.

평정자들이 공용 PC 를 쓰는 경우가 있어, 두 보정 과제를 모두 마치면 완료 화면에서 안내와 함께 참여자 정보를 자동으로 삭제합니다. 「참여자 정보 지우기」로 언제든 즉시 삭제할 수도 있습니다. 삭제된 뒤에도 정보를 다시 입력하면 그대로 참여할 수 있습니다.

평정 과제 — web/kocca_pronunciation_calibration.html

과제 안내와 참가자 정보 입력을 거쳐, 음량 조절 → 연습 3시행 → 본 시행 17시행으로 진행됩니다.

평정 과제 시작 화면

루브릭 가이드 — web/kocca_pronunciation_calibration_guide.html

목표 지문, 0~4점 루브릭 요약표, 그리고 평가요소별로 각 등급의 기준 음성을 들어볼 수 있는 예시 카드로 구성됩니다.

루브릭 가이드 전체

말하기 평정 과제 — web/kocca_speaking_calibration.html

문항 유형 6종 안내 → 음량 조절 → 평가 기준(문항을 골라 확인) → 연습·본 시행 → 완료로 진행됩니다. 시행마다 문항 유형과 그 화자가 실제로 받은 지시문 · 문항 지문(문항 4는 그림 자료 포함)을 함께 제시하고 응답을 최대 3회까지 들려주며, 내용 · 언어 사용 · 전달을 각각 0~4점으로 평정합니다. 등급 기술이 문항마다 다르므로 점수 버튼에 뜨는 설명도 그 문항의 기준으로 바뀌고, 「이 문항의 채점 기준 보기」로 표 전체를 펼칠 수 있습니다.

평정 자극은 문항 6 × 화자 급 6 × 화자 10 = 360개이고, 전문가 기준 점수(ref)는 360개 전부 assets/kocca_speaking_data.js 의 REF_RAW 에 들어 있습니다. 연습 시행 3개는 낮음 · 중간 · 높음 앵커로 고정되어 평정 직후 기준 점수와의 차이를 알려 줍니다.

다만 자극 음성과 문항 지문은 이 저장소에 없습니다(아래 두 절 참조). 없어도 흐름은 그대로 동작하며 — 재생만 실패하고 지문 칸은 숨겨집니다 — 평정과 저장은 정상적으로 이루어집니다. 음원을 넣는 방법은 README_Speaking_waves.md 에 있습니다.

말하기 평가 기준 안내 — web/kocca_speaking_calibration_guide.html

채점 구인 정의, 문항 유형표, 평정 시 유의사항, 그리고 문항 6종의 채점 기준 (배점 4~0 × 구인 3종)을 모두 펼쳐 싣습니다. 각 칸에는 해당 문항 · 구인 · 배점의 예시 음성을 들을 수 있는 자리가 마련되어 있습니다.

구성

디렉터리 내용
web/ 평정 과제와 루브릭 가이드 (정적 HTML, 의존성 없음)
server/ 응답 수집 백엔드 (Python 표준 라이브러리만 사용)
audio/ 음성 전처리·검증·음향 지표 산출 스크립트

web/

파일 설명
kocca_speaking_diagnosis.html 진입점. 참여자 정보 입력 → 보정 시스템 선택
kocca_pronunciation_calibration.html 발음 평정 과제. 연습 3시행(피드백 제공) + 본 시행 17시행
kocca_pronunciation_calibration_guide.html 발음 루브릭과 등급별 기준 음성 안내
kocca_speaking_calibration.html 말하기 평정 과제
kocca_speaking_calibration_guide.html 말하기 평가 기준 안내
assets/kocca_speaking_data.js 말하기 문항 유형 · 채점 구인 · 문항별 채점 기준 · 평정 자극 · 예시 음성 목록
assets/kocca_calib_participant.js 참여자 정보 저장소와 과제 완료 추적 (발음 · 말하기 공용)
assets/kocca_speaking_calibration/items/ 화자별 문항 지문 자료(assets/kocca_speaking_prompts.js)를 만드는 스크립트와 설명. 지문 자료 자체는 포함하지 않습니다

외부 라이브러리를 쓰지 않는 정적 파일입니다. 웹 루트에 그대로 두면 동작합니다.

발음 쪽 평정 척도와 화자별 전문가 기준 점수는 과제와 가이드 두 파일의 DIMENSIONS·SPEAKERS 상수에 있으며, 두 파일의 값은 항상 같아야 합니다.

말하기 쪽은 같은 실수를 막기 위해 자료를 assets/kocca_speaking_data.js 한 곳에 모았고, 과제와 안내 페이지가 이 파일을 함께 읽습니다. 이 파일을 고칠 때는 두 HTML 의 ?v= 쿼리 번호도 함께 올려 주십시오 — 브라우저가 예전 버전을 캐시하면 화면이 어긋납니다.

server/

응답을 SQLite 에 저장하는 작은 HTTP 서버입니다. 설치는 install.sh, nginx 리버스 프록시 설정은 nginx-snippet.conf, systemd 유닛은 kocca-calib.service 를 참고하십시오. 운영 방법과 DB 스키마는 server/README.md, 개발 메모는 server/README_development.md에 있습니다.

두 과제를 한 서버에서 받습니다. 페이로드의 task 로 구분하며, 과제마다 채점 구인 수가 달라(발음 2종, 말하기 3종) 구인 점수는 열이 아니라 response_scores 에 구인 하나당 한 행으로 저장합니다. 새 과제는 server.py 의 TASKS 에 구인 목록만 추가하면 검증 · 저장 · 내보내기가 함께 따라갑니다.

시작하려면 설정 파일을 만듭니다.

cd server
cp config.example.json config.json
# config.json 을 열어 participant_code 와 ip_hash_salt 를 채웁니다

audio/

원본 녹음은 40초 고정 길이라 무음이 최대 19초 붙어 있고 파일 간 음량 차가 24dB에 달해 평정 자극으로 쓸 수 없었습니다. process_audio.py 가 무음을 제거하고 음량을 정규화하며, verify_audio.py 가 그 결과를 독립적인 방법으로 재검증합니다 (처리 코드의 판단을 그대로 믿지 않기 위해서입니다 — 이 검증으로 실제 버그 두 개를 찾았습니다). 자세한 내용은 audio/README.md를 보십시오.

음성 파일은 포함되어 있지 않습니다

이 저장소는 코드만 공개합니다. 화자의 목소리는 개인 식별이 가능한 정보이므로 .wav 파일과 여기서 파생된 산출물(전사, 음향 지표, 리포트)은 제외했습니다.

따라서 web/ 의 페이지를 그대로 열면 음성이 재생되지 않습니다. 실행하려면 assets/kocca_pronunciation_calibration/normalized/ 에 다음 규칙으로 음성을 두십시오.

<화자ID>_set31_pronunciation_1.wav   지문 A
<화자ID>_set32_pronunciation_1.wav   지문 B

화자 ID 목록과 각 화자·지문 조합의 전문가 기준 점수는 audio/README.md 의 표에 정리되어 있습니다.

말하기 쪽은 두 가지입니다.

  • 평정 자극 — assets/kocca_speaking_calibration/ 아래에 화자별 폴더로 둡니다.

    <급>급/<급>급-<번호 2자리>/말하기<문항번호>.wav
    예) 4급/4급-06/말하기1.wav
    

    전문가 기준 점수는 이미 kocca_speaking_data.js 의 REF_RAW 에 360개 전부 들어 있으므로, 이 규칙대로 음원만 두면 자료 파일은 손댈 것이 없습니다.

  • 등급별 예시 음성 — 따로 두지 않습니다. 안내 페이지의 (문항 × 구인 × 배점) 칸에 붙는 예시는 위 자극과 기준 점수에서 자동으로 생성됩니다. 그 배점을 받은 응답이 없는 칸은 '예시 없음' 으로 표시됩니다.

자극 목록 · 기준 점수 · 문항 지문이 어디에 어떤 규칙으로 들어가는지는 README_Speaking_waves.md 에 자세히 정리되어 있습니다.

말하기 문항 지문도 포함되어 있지 않습니다

화자별 문항 지문(지시문 · 질문 · 문항 4 그림)은 실제 시험에 쓰인 문항이므로 음성과 같은 이유로 배포하지 않습니다. 화면이 읽는 assets/kocca_speaking_prompts.js 와 그림 (assets/kocca_speaking_calibration/items/img/)이 여기에 없다는 뜻입니다. 지문 자료가 없으면 평정 화면은 지문 칸을 자동으로 숨기고 나머지는 그대로 동작합니다.

지문 자료를 갖고 계시면 assets/kocca_speaking_calibration/items/ 의 스크립트로 직접 만드실 수 있습니다. 형식과 절차는 그 폴더의 Readme.md 에 있습니다.

개인정보 취급 주의

기여하거나 배포할 때 다음 파일이 커밋되지 않도록 하십시오. .gitignore 에 넣어 두었지만, 확인은 직접 하시는 편이 안전합니다.

파일 담긴 정보
config.json ip_hash_salt — 유출되면 저장된 IP 해시를 역산할 수 있습니다
responses.db 참가자 실명·소속·연령·성별·IP 해시
내보낸 *.csv 위와 동일
*.wav 화자 음성

인용

연구에 사용하셨다면 CITATION.cff 를 참고해 인용해 주십시오. GitHub 우측 "Cite this repository" 에서 BibTeX 형식으로 받을 수 있습니다.

라이선스

코드와 문서는 MIT 라이선스를 따릅니다. 자유롭게 사용·수정·재배포하실 수 있으며, 저작권 표시만 유지하시면 됩니다.

다만 MIT 는 이 저장소에 담긴 코드에만 적용됩니다. 다음은 여기에 포함되어 있지 않으며 라이선스 대상이 아닙니다.

대상 사유
화자 음성 (.wav) 개인 식별이 가능한 정보. 원 데이터 이용 조건과 화자 동의 범위가 별도로 적용됩니다
음성 파생 산출물 전사·음향 지표·분석 리포트
말하기 문항 지문·그림 실제 시험에 쓰인 문항. 원 자료의 이용 조건이 별도로 적용됩니다
참가자 응답 데이터 실명·소속 등 개인정보 포함

음성이나 데이터 이용이 필요하시면 저장소 소유자에게 문의하십시오.

About

한국어 학습자 발화의 발음 정확성·유창성(0~4점)을 평정하는 평정자 캘리브레이션 과제와 응답 수집 서버, 음성 전처리 스크립트. 코드만 공개하며 음성 파일은 포함하지 않습니다.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages