diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f5377520..f8a45a23 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,7 +21,7 @@ android { applicationId = "com.gamss.android" // CD에서 fastlane이 -PversionCode= 로 CI 빌드 번호(GITHUB_RUN_NUMBER 기반)를 주입한다. versionCode = (project.findProperty("versionCode") as String?)?.toIntOrNull() ?: 1 - versionName = "0.1.0" + versionName = "1.0.0" ndk { abiFilters += "arm64-v8a" @@ -33,24 +33,6 @@ android { // 애셋팩은 다운로드 후 로컬 파일로 추출되므로(APK zip 엔트리가 아님) noCompress 설정이 필요 없다. assetPacks += setOf(":models:emotion-pack", ":models:summary-pack") - packaging { - resources { - excludes += setOf( - "native/lib/win-x86_64/**", - "native/lib/osx-aarch64/**", - "native/lib/osx-x86_64/**", - "native/lib/linux-x86_64/**", - "com/sun/jna/aix-ppc/**", - "com/sun/jna/aix-ppc64/**", - "com/sun/jna/win32-x86/**", - "com/sun/jna/win32-x86-64/**", - "com/sun/jna/darwin-aarch64/**", - "com/sun/jna/darwin-x86-64/**", - "META-INF/INDEX.LIST", - ) - } - } - val releaseKeystorePath = providers.environmentVariable("RELEASE_KEYSTORE_PATH").orNull val releaseKeystorePassword = providers.environmentVariable("RELEASE_KEYSTORE_PASSWORD").orNull val releaseKeyAlias = providers.environmentVariable("RELEASE_KEY_ALIAS").orNull @@ -136,4 +118,5 @@ dependencies { androidTestImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.test.runner) } diff --git a/data/src/androidTest/assets/emotion_testset.json b/app/src/androidTest/assets/emotion_testset.json similarity index 100% rename from data/src/androidTest/assets/emotion_testset.json rename to app/src/androidTest/assets/emotion_testset.json diff --git a/app/src/androidTest/kotlin/com/gamss/android/OnDeviceModelEvalTest.kt b/app/src/androidTest/kotlin/com/gamss/android/OnDeviceModelEvalTest.kt new file mode 100644 index 00000000..2d7db29f --- /dev/null +++ b/app/src/androidTest/kotlin/com/gamss/android/OnDeviceModelEvalTest.kt @@ -0,0 +1,125 @@ +package com.gamss.android + +import android.util.Log +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import com.gamss.android.data.emotion.AndroidEmotionClassifier +import com.gamss.android.data.summary.AndroidDiarySummarizer +import kotlinx.coroutines.runBlocking +import org.json.JSONObject +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import java.util.Locale + +/** + * 온디바이스 감정 분류·원문 요약 검증. 애셋팩 패키지와 일치해야 Play Core 가 로컬 팩을 받아주므로 + * :data 가 아니라 :app 에 둔다. :app 은 abiFilters 가 arm64-v8a 하나라 arm64 기기/AVD 에서만 돈다. + * + * ``` + * ./gradlew :app:bundleDebug :app:assembleDebug :app:assembleDebugAndroidTest + * bundletool build-apks --bundle=app/build/outputs/bundle/debug/app-debug.aab \ + * --output=/tmp/app.apks --local-testing --connected-device \ + * --ks=~/.android/debug.keystore --ks-pass=pass:android \ + * --ks-key-alias=androiddebugkey --key-pass=pass:android + * unzip -o /tmp/app.apks -d /tmp/apks + * adb install -r app/build/outputs/apk/debug/app-debug.apk + * adb install -r app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk + * + * # files 디렉터리는 앱이 먼저 만들게 둔다. shell 이 만들면 앱이 못 읽는 기기가 있다. + * adb shell am instrument -w com.gamss.android.dev.test/androidx.test.runner.AndroidJUnitRunner + * DIR=/sdcard/Android/data/com.gamss.android.dev/files/local_testing + * adb shell mkdir -p $DIR + * adb push /tmp/apks/asset-slices/emotion_pack-master.apk $DIR/ + * adb push /tmp/apks/asset-slices/summary_pack-master.apk $DIR/ + * + * # connectedAndroidTest 는 재설치하며 위 디렉터리를 지우므로 쓰지 않는다. + * adb shell am instrument -w -e class com.gamss.android.OnDeviceModelEvalTest \ + * com.gamss.android.dev.test/androidx.test.runner.AndroidJUnitRunner + * adb logcat -d -s ONDEVICE_EVAL + * ``` + */ +@RunWith(AndroidJUnit4::class) +class OnDeviceModelEvalTest { + + private val diaries = listOf( + "오늘 회사에서 부장님한테 사람들 앞에서 크게 혼났다. 딱히 내 잘못도 아니었는데 억울하고 " + + "하루종일 기분이 안 좋았다. 집에 와서도 계속 그 생각만 났다.", + "드디어 몇 달간 준비하던 자격증 시험에 합격했다. 밤새 공부한 게 헛되지 않은 것 같아 너무 " + + "뿌듯하고 기뻤다. 엄마한테 전화했더니 엄마도 같이 좋아서 울었다.", + "15년을 함께한 강아지가 오늘 무지개다리를 건넜다. 이제 곁에 없다는 게 아직 실감이 안 난다. " + + "빈 밥그릇을 치우다가 한참을 울었다.", + "내일 중요한 발표가 있는데 준비를 제대로 못 한 것 같아 너무 불안하다. 자려고 누워도 자꾸 " + + "실수하는 장면만 떠올라서 잠이 오지 않는다.", + ) + + @Test + fun summarizeOnDevice(): Unit = runBlocking { + val context = InstrumentationRegistry.getInstrumentation().targetContext + val summarizer = AndroidDiarySummarizer(context) + Log.i(TAG, "===SUMMARY_START=== total=${diaries.size}") + diaries.forEachIndexed { index, diary -> + val started = System.nanoTime() + val summary = summarizer.summarize(diary) + val ms = (System.nanoTime() - started) / 1_000_000 + Log.i(TAG, "SUMMARY|$index|${ms}ms|입력=$diary") + Log.i(TAG, "SUMMARY|$index|출력=$summary") + // 품질까지는 로그로 눈으로 본다. + assertTrue("요약이 비었습니다(index=$index)", summary.isNotBlank()) + } + Log.i(TAG, "===SUMMARY_END===") + } + + @Test + fun classifyOnDevice(): Unit = runBlocking { + val instrumentation = InstrumentationRegistry.getInstrumentation() + val testSet = JSONObject( + instrumentation.context.assets.open(TEST_SET).bufferedReader().use { it.readText() }, + ) + val samples = testSet.getJSONArray("samples") + // 모델은 한국어 라벨, 테스트셋은 영문 라벨을 쓴다. + val labelKo = testSet.getJSONObject("label_ko") + val koToEn = labelKo.keys().asSequence().associateBy { labelKo.getString(it) } + + val classifier = AndroidEmotionClassifier(instrumentation.targetContext) + val perLabel = HashMap() // 라벨 → [정답, 전체] + var correct = 0 + Log.i(TAG, "===EMOTION_START=== total=${samples.length()}") + for (index in 0 until samples.length()) { + val sample = samples.getJSONObject(index) + val text = sample.getString("text") + val gold = sample.getString("label") + val result = classifier.classify(text) + // 폴백을 두면 매핑 파손이 정확도 저하로 위장된다. + val predicted = koToEn[result.topLabel] + ?: error("테스트셋 label_ko 에 없는 모델 라벨: ${result.topLabel}") + + val bucket = perLabel.getOrPut(gold) { IntArray(2) } + bucket[1]++ + if (predicted == gold) { + correct++ + bucket[0]++ + } + val confidence = String.format(Locale.ROOT, "%.4f", result.confidence) + Log.i(TAG, "EMOTION|$index|$gold|$predicted|$confidence|$text") + } + + val total = samples.length() + val percent = String.format(Locale.ROOT, "%.1f", correct * PERCENT / total) + Log.i(TAG, "===EMOTION_END=== accuracy=$correct/$total ($percent%)") + perLabel.toSortedMap().forEach { (label, bucket) -> + Log.i(TAG, "PERLABEL|$label|${bucket[0]}/${bucket[1]}") + } + + assertTrue("정확도 회귀: $correct/$total (하한 $ACCURACY_FLOOR)", correct >= ACCURACY_FLOOR) + } + + private companion object { + const val TAG = "ONDEVICE_EVAL" + const val TEST_SET = "emotion_testset.json" + const val PERCENT = 100.0 + + /** 교체 시점 실측 44/60. 흔들리면 모델이나 추론 런타임이 바뀐 것이다. */ + const val ACCURACY_FLOOR = 40 + } +} diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index f740c8f9..99056138 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -3,6 +3,14 @@ + + + + + + + + diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 1ed582ba..6d5db2ef 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -61,18 +61,15 @@ dependencies { implementation(libs.firebase.config) implementation(libs.kotlinx.coroutines.play.services) - // 온디바이스 감정 분류(KoELECTRA INT8) — LiteRT 추론 + DJL WordPiece 토크나이저 + // 온디바이스 감정 분류(KoELECTRA INT8). LiteRT 추론, 토크나이저는 순수 Kotlin. implementation(libs.litert) { // 모델은 Play Asset Delivery(범용 on-demand 애셋팩)로 내려받는다. // LiteRT 자체 모델 배포 API(ai-delivery)는 쓰지 않는다 — 콜드스타트마다 WorkManager 를 // 초기화시켜서 제외하고, 대신 asset-delivery 로 직접 다운로드 상태를 제어한다. exclude(group = "com.google.android.play", module = "ai-delivery") } - implementation(platform(libs.djl.bom)) - implementation(libs.djl.huggingface.tokenizers) - runtimeOnly(libs.djl.android.tokenizer.native) - // 온디바이스 원문 요약(kobart INT8) — ONNX Runtime Mobile (토크나이저는 DJL 재사용) + // 온디바이스 원문 요약(kobart INT8). ONNX Runtime Mobile, 토크나이저는 순수 Kotlin. implementation(libs.onnxruntime.android) // 감정/요약 모델(.tflite, .onnx)을 담은 on-demand 애셋팩(:models:emotion-pack, :models:summary-pack)을 diff --git a/data/src/androidTest/kotlin/com/gamss/android/data/NativeLibraryLoadTest.kt b/data/src/androidTest/kotlin/com/gamss/android/data/NativeLibraryLoadTest.kt new file mode 100644 index 00000000..da6b70a0 --- /dev/null +++ b/data/src/androidTest/kotlin/com/gamss/android/data/NativeLibraryLoadTest.kt @@ -0,0 +1,37 @@ +package com.gamss.android.data + +import ai.onnxruntime.OrtEnvironment +import android.os.Build +import android.system.Os +import android.system.OsConstants +import android.util.Log +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Assume.assumeTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.tensorflow.lite.TensorFlowLite + +/** + * 4KB 정렬된 .so 는 16KB 페이지 기기에서 dlopen 자체가 실패한다. APK 정적 검사의 최종 확인용. + * 16KB 환경은 `google_apis_playstore_ps16k` 시스템 이미지 AVD 로 만든다. + */ +@RunWith(AndroidJUnit4::class) +class NativeLibraryLoadTest { + + @Test + fun nativeLibrariesLoadOn16kPageDevice() { + val pageSize = Os.sysconf(OsConstants._SC_PAGESIZE) + Log.i(TAG, "pageSize=$pageSize model=${Build.MODEL} api=${Build.VERSION.SDK_INT}") + assumeTrue("16KB 페이지 기기가 아니라 건너뜁니다(pageSize=$pageSize)", pageSize == PAGE_SIZE_16KB) + + assertNotNull(OrtEnvironment.getEnvironment()) + assertTrue("LiteRT 런타임 버전이 비어 있습니다", TensorFlowLite.runtimeVersion().isNotEmpty()) + } + + private companion object { + const val TAG = "NativeLibraryLoadTest" + const val PAGE_SIZE_16KB = 16384L + } +} diff --git a/data/src/androidTest/kotlin/com/gamss/android/data/emotion/EmotionOnDeviceEvalTest.kt b/data/src/androidTest/kotlin/com/gamss/android/data/emotion/EmotionOnDeviceEvalTest.kt deleted file mode 100644 index 464a3ddf..00000000 --- a/data/src/androidTest/kotlin/com/gamss/android/data/emotion/EmotionOnDeviceEvalTest.kt +++ /dev/null @@ -1,74 +0,0 @@ -package com.gamss.android.data.emotion - -import android.util.Log -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry -import kotlinx.coroutines.runBlocking -import org.json.JSONObject -import org.junit.Test -import org.junit.runner.RunWith - -/** - * 온디바이스 감정 분류 정량 평가. - * androidTest assets 의 라벨된 문장 세트를 실기기에서 KoELECTRA INT8(LiteRT)로 분류하고, - * 각 예측을 "EMO_EVAL" 태그로 로그에 남긴다. (원본 HF 모델 결과와 오프라인 비교용) - * - * 모델은 이제 :models:emotion-pack(on-demand 애셋팩)에서 내려받는다. 실제 Play 배포 없이 - * 로컬에서 돌리려면 `bundletool build-apks --local-testing` 으로 만든 로컬 테스트 APK 를 설치해야 - * 애셋팩이 채워진다(그냥 :data:connectedAndroidTest 만으로는 팩이 비어 있어 실패한다). - */ -@RunWith(AndroidJUnit4::class) -class EmotionOnDeviceEvalTest { - - @Test - fun evaluateTestSetOnDevice() = runBlocking { - val instr = InstrumentationRegistry.getInstrumentation() - // 테스트 세트: 테스트 APK(자기 자신) assets 에서 로드 - val json = instr.context.assets.open("emotion_testset.json") - .bufferedReader().use { it.readText() } - val root = JSONObject(json) - val samples = root.getJSONArray("samples") - - // 모델: :models:emotion-pack 애셋팩에서 emotion_int8.tflite 를 내려받아 로드. - // 네이티브 Interpreter/토크나이저 핸들을 쥐므로, 예외가 나도 닫히게 use 로 감싼다. - LiteRtClassifier.load(instr.targetContext, EmotionModelSpec.SPEC).use { classifier -> - var correct = 0 - val perGold = HashMap() // [correct, total] - Log.i(TAG, "===EMO_EVAL_START=== total=${samples.length()}") - for (i in 0 until samples.length()) { - val s = samples.getJSONObject(i) - val text = s.getString("text") - val gold = s.getString("label") - val result = classifier.classify(text) - val pred = LABEL_EN[result.topLabel] ?: result.topLabel - val conf = result.confidence - if (pred == gold) correct++ - val bucket = perGold.getOrPut(gold) { IntArray(2) } - bucket[1]++ - if (pred == gold) bucket[0]++ - // 파싱 가능한 한 줄 (RESULT|idx|gold|pred|conf|text) - Log.i(TAG, "RESULT|$i|$gold|$pred|${"%.4f".format(conf)}|$text") - } - val n = samples.length() - Log.i(TAG, "===EMO_EVAL_SUMMARY=== accuracy=$correct/$n (${"%.1f".format(correct * 100.0 / n)}%)") - for ((gold, b) in perGold) { - Log.i(TAG, "PERLABEL|$gold|${b[0]}/${b[1]}") - } - Log.i(TAG, "===EMO_EVAL_END===") - } - } - - companion object { - private const val TAG = "EMO_EVAL" - - /** 한글 라벨 → 원본 모델 영문 라벨(id2label). 평가 로그를 gold 라벨과 대조하기 위한 테스트 전용 매핑. */ - private val LABEL_EN = mapOf( - "분노" to "angry", - "불안" to "anxious", - "당황" to "embarrassed", - "기쁨" to "happy", - "상처" to "heartache", - "슬픔" to "sad", - ) - } -} diff --git a/data/src/androidTest/kotlin/com/gamss/android/data/summary/SummaryOnDeviceEvalTest.kt b/data/src/androidTest/kotlin/com/gamss/android/data/summary/SummaryOnDeviceEvalTest.kt deleted file mode 100644 index 63533ad8..00000000 --- a/data/src/androidTest/kotlin/com/gamss/android/data/summary/SummaryOnDeviceEvalTest.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.gamss.android.data.summary - -import android.util.Log -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry -import com.gamss.android.core.common.getOrNull -import com.gamss.android.domain.summary.SummarizeDiaryUseCase -import kotlinx.coroutines.runBlocking -import org.junit.Test -import org.junit.runner.RunWith - -/** - * 온디바이스 원문 요약 검증. 실기기에서 kobart INT8(ONNX Runtime Mobile)로 한국어 일기를 요약하고 - * 각 결과를 "SUMMARY_EVAL" 태그로 로그에 남긴다. (Python 레퍼런스 출력과 품질 비교용) - * - * 모델은 이제 :models:summary-pack(on-demand 애셋팩)에서 내려받는다. 실제 Play 배포 없이 - * 로컬에서 돌리려면 `bundletool build-apks --local-testing` 으로 만든 로컬 테스트 APK 를 설치해야 - * 애셋팩이 채워진다(그냥 :data:connectedAndroidTest 만으로는 팩이 비어 있어 실패한다). - */ -@RunWith(AndroidJUnit4::class) -class SummaryOnDeviceEvalTest { - - private val diaries = listOf( - "오늘 회사에서 부장님한테 사람들 앞에서 크게 혼났다. 딱히 내 잘못도 아니었는데 억울하고 하루종일 기분이 안 좋았다. 집에 와서도 계속 그 생각만 났다.", - "드디어 몇 달간 준비하던 자격증 시험에 합격했다. 밤새 공부한 게 헛되지 않은 것 같아 너무 뿌듯하고 기뻤다. 엄마한테 전화했더니 엄마도 같이 좋아서 울었다.", - "15년을 함께한 강아지가 오늘 무지개다리를 건넜다. 이제 곁에 없다는 게 아직 실감이 안 난다. 빈 밥그릇을 치우다가 한참을 울었다.", - "내일 중요한 발표가 있는데 준비를 제대로 못 한 것 같아 너무 불안하다. 자려고 누워도 자꾸 실수하는 장면만 떠올라서 잠이 오지 않는다.", - ) - - @Test - fun summarizeOnDevice() = runBlocking { - val context = InstrumentationRegistry.getInstrumentation().targetContext - OnnxKobartSummarizer.load(context).use { summarizer -> - Log.i(TAG, "===SUMMARY_EVAL_START=== total=${diaries.size}") - diaries.forEachIndexed { i, diary -> - val started = System.nanoTime() - val summary = summarizer.summarize(diary) - val ms = (System.nanoTime() - started) / 1_000_000 - Log.i(TAG, "RESULT|$i|${ms}ms|입력=$diary") - Log.i(TAG, "RESULT|$i|요약=$summary") - } - Log.i(TAG, "===SUMMARY_EVAL_END===") - } - } - - /** - * 게이팅 검증: 짧은 대화 입력은 요약기를 태우지 않고 원문 그대로(반복 루프 없음), - * 긴 일기는 요약된다. 실제 대화방 USER 발화(짧음) vs 일기(김)로 확인. - */ - @Test - fun gatingShortVsLong() { - val context = InstrumentationRegistry.getInstrumentation().targetContext - val useCase = SummarizeDiaryUseCase(AndroidDiarySummarizer(context)) - runBlocking { - val short = useCase(listOf("오늘 억울한 일이 있었어", "그러게 그냥 맛있는거 먹고 쉬려고")).getOrNull() - val long = useCase(listOf(diaries[0])).getOrNull() - Log.i(TAG, "GATING|short(원문 유지 기대)|$short") - Log.i(TAG, "GATING|long(요약 기대)|$long") - } - } - - companion object { - private const val TAG = "SUMMARY_EVAL" - } -} diff --git a/data/src/main/java/com/gamss/android/data/emotion/LiteRtClassifier.kt b/data/src/main/java/com/gamss/android/data/emotion/LiteRtClassifier.kt index 7a3027ce..b710c155 100644 --- a/data/src/main/java/com/gamss/android/data/emotion/LiteRtClassifier.kt +++ b/data/src/main/java/com/gamss/android/data/emotion/LiteRtClassifier.kt @@ -56,10 +56,8 @@ internal class LiteRtClassifier private constructor( ) } - override fun close() { - model.close() - tokenizer.close() - } + // 토크나이저는 순수 Kotlin 이라 닫을 네이티브 핸들이 없다. 여기서 닫을 것은 Interpreter 뿐이다. + override fun close() = model.close() private fun toInputBuffer(values: LongArray, dataType: DataType, numBytes: Int): ByteBuffer { val buffer = ByteBuffer.allocateDirect(numBytes).order(ByteOrder.nativeOrder()) diff --git a/data/src/main/java/com/gamss/android/data/emotion/WordPieceTokenizer.kt b/data/src/main/java/com/gamss/android/data/emotion/WordPieceTokenizer.kt index d6b16bf0..8b43c4a4 100644 --- a/data/src/main/java/com/gamss/android/data/emotion/WordPieceTokenizer.kt +++ b/data/src/main/java/com/gamss/android/data/emotion/WordPieceTokenizer.kt @@ -1,20 +1,40 @@ package com.gamss.android.data.emotion -import ai.djl.huggingface.tokenizers.HuggingFaceTokenizer import android.content.Context import com.gamss.android.data.model.OnDemandModelAssets import com.gamss.android.data.model.readBytes -import java.io.ByteArrayInputStream -import java.io.Closeable +import com.gamss.android.data.tokenizer.AddedVocabulary +import com.gamss.android.data.tokenizer.REPLACEMENT_CODE_POINT +import com.gamss.android.data.tokenizer.forEachCodePoint +import com.gamss.android.data.tokenizer.isBertPunctuation +import com.gamss.android.data.tokenizer.isChineseChar +import com.gamss.android.data.tokenizer.isControlCodePoint +import com.gamss.android.data.tokenizer.isUnicodeWhitespace +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import java.text.Normalizer /** - * HuggingFace tokenizer.json 을 그대로 로드해 학습 토크나이저와 동일하게 인코딩하는 래퍼. - * 고정 길이(seqLen)로 자르거나 0 패딩해 LiteRT 입력에 맞춘다. + * HuggingFace WordPiece 파이프라인 이식. 네이티브 토크나이저는 .so 가 4KB 정렬이라 쓸 수 없다. + * 출력이 원본과 어긋나면 분류가 조용히 틀어지므로 tokenizer_golden.json 대조가 계약이다. */ internal class WordPieceTokenizer private constructor( - private val tokenizer: HuggingFaceTokenizer, + private val model: Model, + private val normalizer: BertNormalizer, + private val addedVocabulary: AddedVocabulary, + private val specialTokens: SpecialTokens, private val seqLen: Int, -) : Closeable { +) { + + class Model( + val vocab: Map, + val unkId: Int, + val continuingPrefix: String, + val maxInputCharsPerWord: Int, + ) + + class SpecialTokens(val clsId: Int, val sepId: Int) // LongArray 필드라 data class 의 참조기반 equals/hashCode 는 부적절 → 일반 class. class Encoded( @@ -24,35 +44,223 @@ internal class WordPieceTokenizer private constructor( ) fun encode(text: String): Encoded { - val enc = tokenizer.encode(text) - return Encoded( - ids = toFixedLength(enc.ids), - attentionMask = toFixedLength(enc.attentionMask), - typeIds = toFixedLength(enc.typeIds), - ) + // maxLength 는 특수 토큰을 포함한 길이다. + val budget = seqLen - SPECIAL_TOKEN_COUNT + val pieces = ArrayList(minOf(budget, INITIAL_PIECE_CAPACITY)) + + outer@ for (segment in addedVocabulary.split(text)) { + val ids = when (segment) { + is AddedVocabulary.Segment.Added -> listOf(segment.id) + is AddedVocabulary.Segment.Plain -> + preTokenize(normalizer.normalize(segment.text)).flatMap(::tokenizeWord) + } + for (id in ids) { + if (pieces.size == budget) break@outer + pieces.add(id) + } + } + + val ids = LongArray(seqLen) + ids[0] = specialTokens.clsId.toLong() + pieces.forEachIndexed { index, id -> ids[index + 1] = id.toLong() } + ids[pieces.size + 1] = specialTokens.sepId.toLong() + + val length = pieces.size + SPECIAL_TOKEN_COUNT + val attentionMask = LongArray(seqLen) { if (it < length) 1L else 0L } + // 단일 시퀀스라 type_id 는 전부 0. + return Encoded(ids = ids, attentionMask = attentionMask, typeIds = LongArray(seqLen)) + } + + /** 스페이스만 구분자로 보는 것은 앞선 clean_text 가 모든 공백류를 스페이스로 바꾸기 때문이다. */ + private fun preTokenize(text: String): List { + val words = mutableListOf() + val current = StringBuilder() + fun flush() { + if (current.isNotEmpty()) { + words.add(current.toString()) + current.setLength(0) + } + } + + forEachCodePoint(text) { codePoint -> + when { + codePoint == ' '.code -> flush() + isBertPunctuation(codePoint) -> { + flush() + words.add(String(Character.toChars(codePoint))) + } + + else -> current.appendCodePoint(codePoint) + } + } + flush() + return words } - override fun close() = tokenizer.close() + /** 한 조각이라도 사전에 없으면 단어 전체가 UNK 다. */ + private fun tokenizeWord(word: String): List { + if (word.codePointCount(0, word.length) > model.maxInputCharsPerWord) return listOf(model.unkId) + return matchGreedily(word) ?: listOf(model.unkId) + } - private fun toFixedLength(src: LongArray): LongArray = - LongArray(seqLen).also { src.copyInto(it, endIndex = minOf(seqLen, src.size)) } + /** greedy longest-match-first. 맞출 수 없으면 null. */ + private fun matchGreedily(word: String): List? { + val ids = mutableListOf() + var start = 0 + while (start < word.length) { + var end = word.length + var matched: Int? = null + while (start < end) { + val piece = word.substring(start, end) + matched = model.vocab[if (start > 0) model.continuingPrefix + piece else piece] + if (matched != null) break + end = word.offsetByCodePoints(end, -1) + } + ids.add(matched ?: return null) + start = end + } + return ids + } + + /** strip_accents 가 비어 있으면 lowercase 값을 따른다(HuggingFace 규칙). */ + class BertNormalizer( + private val cleanText: Boolean, + private val handleChineseChars: Boolean, + private val stripAccents: Boolean, + private val lowercase: Boolean, + ) { + fun normalize(text: String): String { + var result = text + if (cleanText) result = cleanText(result) + if (handleChineseChars) result = padChineseChars(result) + if (stripAccents) result = stripAccents(result) + if (lowercase) result = result.lowercase() + return result + } + + /** 공백류를 스페이스 하나로 통일한다. 뒤의 preTokenize 가 이에 의존한다. */ + private fun cleanText(text: String): String = buildString(text.length) { + forEachCodePoint(text) { codePoint -> + when { + codePoint == 0 || codePoint == REPLACEMENT_CODE_POINT -> Unit + isControlCodePoint(codePoint) -> Unit + isUnicodeWhitespace(codePoint) -> append(' ') + else -> appendCodePoint(codePoint) + } + } + } + + private fun padChineseChars(text: String): String = buildString(text.length) { + forEachCodePoint(text) { codePoint -> + if (isChineseChar(codePoint)) { + append(' ').appendCodePoint(codePoint).append(' ') + } else { + appendCodePoint(codePoint) + } + } + } + + /** 결합 문자는 보조 평면에도 있어 코드포인트 단위로 걸러야 한다. */ + private fun stripAccents(text: String): String = + buildString(text.length) { + forEachCodePoint(Normalizer.normalize(text, Normalizer.Form.NFD)) { codePoint -> + if (Character.getType(codePoint) != Character.NON_SPACING_MARK.toInt()) { + appendCodePoint(codePoint) + } + } + } + } companion object { - private const val OPT_SPECIAL_TOKENS = "addSpecialTokens" - private const val OPT_TRUNCATION = "truncation" - private const val OPT_MAX_LENGTH = "maxLength" - - suspend fun load(context: Context, packName: String, tokenizerAsset: String, seqLen: Int): WordPieceTokenizer { - val options = mapOf( - OPT_SPECIAL_TOKENS to "true", - OPT_TRUNCATION to "true", - OPT_MAX_LENGTH to seqLen.toString(), - ) + private const val SPECIAL_TOKEN_COUNT = 2 + private const val INITIAL_PIECE_CAPACITY = 64 + private const val CLS_TOKEN = "[CLS]" + private const val SEP_TOKEN = "[SEP]" + + private const val MODEL_TYPE = "WordPiece" + private const val NORMALIZER_TYPE = "BertNormalizer" + private const val PRE_TOKENIZER_TYPE = "BertPreTokenizer" + + private val TOKENIZER_JSON = Json { ignoreUnknownKeys = true } + + suspend fun load( + context: Context, + packName: String, + tokenizerAsset: String, + seqLen: Int, + ): WordPieceTokenizer { val bytes = OnDemandModelAssets(context).resolve(packName, tokenizerAsset).readBytes() - val tokenizer = ByteArrayInputStream(bytes).use { stream -> - HuggingFaceTokenizer.newInstance(stream, options) + return fromJson(bytes, seqLen) + } + + /** Context 없이 tokenizer.json 을 직접 먹이는 경로. 골든 대조 단위 테스트가 쓴다. */ + fun fromJson(bytes: ByteArray, seqLen: Int): WordPieceTokenizer { + require(seqLen > SPECIAL_TOKEN_COUNT) { "seqLen 은 특수 토큰 수보다 커야 합니다: $seqLen" } + + val file = TOKENIZER_JSON.decodeFromString(TokenizerFile.serializer(), bytes.decodeToString()) + // 재export 로 파이프라인이 바뀌면 조용히 틀어지므로 로드 시점에 끊는다. + require(file.model.type == MODEL_TYPE) { "지원하지 않는 model.type: ${file.model.type}" } + require(file.normalizer?.type == NORMALIZER_TYPE) { + "지원하지 않는 normalizer.type: ${file.normalizer?.type}" } - return WordPieceTokenizer(tokenizer, seqLen) + require(file.preTokenizer?.type == PRE_TOKENIZER_TYPE) { + "지원하지 않는 pre_tokenizer.type: ${file.preTokenizer?.type}" + } + + val vocab = file.model.vocab + fun idOf(token: String): Int = + requireNotNull(vocab[token]) { "tokenizer.json vocab 에 $token 이 없습니다." } + + val lowercase = file.normalizer.lowercase == true + return WordPieceTokenizer( + model = Model( + vocab = vocab, + unkId = idOf(file.model.unkToken), + continuingPrefix = file.model.continuingSubwordPrefix, + maxInputCharsPerWord = file.model.maxInputCharsPerWord, + ), + normalizer = BertNormalizer( + cleanText = file.normalizer.cleanText != false, + handleChineseChars = file.normalizer.handleChineseChars != false, + stripAccents = file.normalizer.stripAccents ?: lowercase, + lowercase = lowercase, + ), + addedVocabulary = AddedVocabulary.of(file.addedTokens.associate { it.content to it.id }), + specialTokens = SpecialTokens(clsId = idOf(CLS_TOKEN), sepId = idOf(SEP_TOKEN)), + seqLen = seqLen, + ) } } + + @Serializable + private data class TokenizerFile( + @SerialName("added_tokens") val addedTokens: List = emptyList(), + val normalizer: NormalizerConfig? = null, + @SerialName("pre_tokenizer") val preTokenizer: TypeOnly? = null, + val model: ModelConfig, + ) + + @Serializable + private data class AddedToken(val id: Int, val content: String) + + @Serializable + private data class TypeOnly(val type: String? = null) + + @Serializable + private data class NormalizerConfig( + val type: String? = null, + @SerialName("clean_text") val cleanText: Boolean? = null, + @SerialName("handle_chinese_chars") val handleChineseChars: Boolean? = null, + @SerialName("strip_accents") val stripAccents: Boolean? = null, + val lowercase: Boolean? = null, + ) + + @Serializable + private data class ModelConfig( + val type: String? = null, + val vocab: Map, + @SerialName("unk_token") val unkToken: String, + @SerialName("continuing_subword_prefix") val continuingSubwordPrefix: String, + @SerialName("max_input_chars_per_word") val maxInputCharsPerWord: Int, + ) } diff --git a/data/src/main/java/com/gamss/android/data/summary/KobartTokenizer.kt b/data/src/main/java/com/gamss/android/data/summary/KobartTokenizer.kt index 10420fc8..0c8c4309 100644 --- a/data/src/main/java/com/gamss/android/data/summary/KobartTokenizer.kt +++ b/data/src/main/java/com/gamss/android/data/summary/KobartTokenizer.kt @@ -1,70 +1,283 @@ package com.gamss.android.data.summary -import ai.djl.huggingface.tokenizers.HuggingFaceTokenizer import android.content.Context import com.gamss.android.data.model.OnDemandModelAssets import com.gamss.android.data.model.readBytes -import java.io.ByteArrayInputStream -import java.io.Closeable +import com.gamss.android.data.tokenizer.AddedVocabulary +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.boolean +import kotlinx.serialization.json.int +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import java.text.Normalizer /** - * kobart tokenizer.json 을 로드해 요약 인코더 입력을 만들고, 디코더 출력 토큰을 문자열로 되돌린다. - * 감정용 WordPieceTokenizer 와 달리 고정 길이 패딩 없이 실제 길이를 그대로 쓰고(seq2seq 인코더는 - * 가변 길이 입력을 받음), decode 를 제공한다. + * HuggingFace BPE 파이프라인 이식. seq2seq 인코더라 고정 길이 패딩 없이 실제 길이를 쓴다. + * 네이티브를 안 쓰는 이유와 골든 대조가 계약인 이유는 [WordPieceTokenizer] 와 같다. */ internal class KobartTokenizer private constructor( - private val tokenizer: HuggingFaceTokenizer, -) : Closeable { + private val model: BpeModel, + private val addedVocabulary: AddedVocabulary, + private val specialTokens: SpecialTokens, + private val replacement: Char, + /** null 이면 절단하지 않는다. */ + private val maxInput: Int?, +) { + + class BpeModel( + val vocab: Map, + val tokenById: Array, + val mergeRules: Map, + val unkId: Int, + ) + + class MergeRule(val rank: Int, val mergedId: Int) + + class SpecialTokens(val bosId: Int, val eosId: Int, val skipOnDecodeIds: Set) class Encoded(val ids: LongArray, val attentionMask: LongArray) fun encode(text: String): Encoded { - val enc = tokenizer.encode(text) - return Encoded(enc.ids, enc.attentionMask) + val budget = maxInput?.minus(SPECIAL_TOKEN_COUNT) ?: Int.MAX_VALUE + val body = ArrayList() + + outer@ for (segment in addedVocabulary.split(text)) { + val ids = when (segment) { + is AddedVocabulary.Segment.Added -> listOf(segment.id) + is AddedVocabulary.Segment.Plain -> + preTokenize(normalize(segment.text)).flatMap(::encodePiece) + } + for (id in ids) { + if (body.size == budget) break@outer + body.add(id) + } + } + + val ids = LongArray(body.size + SPECIAL_TOKEN_COUNT) + ids[0] = specialTokens.bosId.toLong() + body.forEachIndexed { index, id -> ids[index + 1] = id.toLong() } + ids[ids.lastIndex] = specialTokens.eosId.toLong() + return Encoded(ids = ids, attentionMask = LongArray(ids.size) { 1L }) } - /** decode 의 true = skipSpecialTokens: ·pad 등을 건너뛴다. */ - fun decode(ids: LongArray): String = tokenizer.decode(ids, true).trim() + /** skipSpecialTokens 고정. */ + fun decode(ids: LongArray): String { + val decoded = StringBuilder() + var emitted = 0 + for (rawId in ids) { + val token = decodableToken(rawId.toInt()) ?: continue + // 첫 토큰의 구분자만 버린다(Metaspace 규칙). + for (char in token) { + when { + char != replacement -> decoded.append(char) + emitted > 0 -> decoded.append(' ') + } + } + emitted++ + } + return decoded.toString().trim() + } - override fun close() = tokenizer.close() + private fun decodableToken(id: Int): String? = + if (id in specialTokens.skipOnDecodeIds) null else model.tokenById.getOrNull(id) - companion object { - private const val OPT_SPECIAL_TOKENS = "addSpecialTokens" - private const val OPT_TRUNCATION = "truncation" - private const val OPT_MAX_LENGTH = "maxLength" - - suspend fun load(context: Context, packName: String, tokenizerAsset: String, maxInput: Int): KobartTokenizer { - val options = mapOf( - OPT_SPECIAL_TOKENS to "true", - OPT_TRUNCATION to "true", - OPT_MAX_LENGTH to maxInput.toString(), - ) - return newInstance(context, packName, tokenizerAsset, options) + /** 함께 걸린 BertNormalizer 는 모든 플래그가 꺼져 있어 NFKC 만 유효하다. */ + private fun normalize(text: String): String = Normalizer.normalize(text, Normalizer.Form.NFKC) + + /** Metaspace(prepend_scheme=always). */ + private fun preTokenize(text: String): List { + val replaced = text.replace(' ', replacement) + val prefixed = if (replaced.startsWith(replacement)) replaced else replacement + replaced + + val pieces = mutableListOf() + var start = 0 + for (index in 1 until prefixed.length) { + if (prefixed[index] == replacement) { + pieces.add(prefixed.substring(start, index)) + start = index + } } + pieces.add(prefixed.substring(start)) + return pieces + } + + /** 코드포인트 단위로 쪼갠 뒤 순위가 낮은 병합부터 적용한다. */ + private fun encodePiece(piece: String): List { + val symbols = mutableListOf() + var index = 0 + while (index < piece.length) { + val codePoint = piece.codePointAt(index) + index += Character.charCount(codePoint) + symbols.add(model.vocab[String(Character.toChars(codePoint))] ?: model.unkId) + } + + while (symbols.size > 1) { + var bestRank = Int.MAX_VALUE + var bestKey = NO_KEY + for (position in 0 until symbols.size - 1) { + val key = pairKey(symbols[position], symbols[position + 1]) + val rule = model.mergeRules[key] ?: continue + if (rule.rank < bestRank) { + bestRank = rule.rank + bestKey = key + } + } + if (bestKey == NO_KEY) break + mergeAllOccurrences(symbols, bestKey) + } + return symbols + } + + /** + * 한 번에 병합해도 HuggingFace 의 힙 방식과 결과가 같은 근거: 병합으로 새로 생기는 쌍의 rank 는 + * 방금 적용한 rank 보다 항상 크다(학습 BPE 의 성질). 이 성질이 깨진 merges 에서는 달라진다. + */ + private fun mergeAllOccurrences(symbols: MutableList, mergeKey: Long) { + val mergedId = model.mergeRules.getValue(mergeKey).mergedId + val merged = ArrayList(symbols.size) + var position = 0 + while (position < symbols.size) { + val isMergeSite = position < symbols.size - 1 && + pairKey(symbols[position], symbols[position + 1]) == mergeKey + if (isMergeSite) { + merged.add(mergedId) + position += 2 + } else { + merged.add(symbols[position]) + position++ + } + } + symbols.clear() + symbols.addAll(merged) + } + + companion object { + private const val SPECIAL_TOKEN_COUNT = 2 + private const val BOS_TOKEN = "" + private const val EOS_TOKEN = "" + private const val DEFAULT_REPLACEMENT = '▁' + private const val NO_KEY = -1L + private const val UNSIGNED_INT_MASK = 0xFFFFFFFFL + + private const val MODEL_TYPE = "BPE" + private const val PRE_TOKENIZER_TYPE = "Metaspace" + private const val PREPEND_SCHEME_ALWAYS = "always" + + private val TOKENIZER_JSON = Json { ignoreUnknownKeys = true } + + suspend fun load( + context: Context, + packName: String, + tokenizerAsset: String, + maxInput: Int, + ): KobartTokenizer = fromJson(readTokenizer(context, packName, tokenizerAsset), maxInput) /** 토큰 수를 재려면 절단이 없어야 한다. 절단하면 한계 이상은 전부 같은 값으로 보인다. */ - suspend fun loadWithoutTruncation(context: Context, packName: String, tokenizerAsset: String): KobartTokenizer = - newInstance( - context = context, - packName = packName, - tokenizerAsset = tokenizerAsset, - options = mapOf( - OPT_SPECIAL_TOKENS to "true", - OPT_TRUNCATION to "false", - ), - ) + suspend fun loadWithoutTruncation( + context: Context, + packName: String, + tokenizerAsset: String, + ): KobartTokenizer = fromJson(readTokenizer(context, packName, tokenizerAsset), maxInput = null) - private suspend fun newInstance( + private suspend fun readTokenizer( context: Context, packName: String, tokenizerAsset: String, - options: Map, - ): KobartTokenizer { - val bytes = OnDemandModelAssets(context).resolve(packName, tokenizerAsset).readBytes() - val tokenizer = ByteArrayInputStream(bytes).use { stream -> - HuggingFaceTokenizer.newInstance(stream, options) + ): ByteArray = OnDemandModelAssets(context).resolve(packName, tokenizerAsset).readBytes() + + /** Context 없이 tokenizer.json 을 직접 먹이는 경로. 골든 대조 단위 테스트가 쓴다. */ + fun fromJson(bytes: ByteArray, maxInput: Int?): KobartTokenizer { + require(maxInput == null || maxInput > SPECIAL_TOKEN_COUNT) { + "maxInput 은 특수 토큰 수보다 커야 합니다: $maxInput" + } + + val root = TOKENIZER_JSON.parseToJsonElement(bytes.decodeToString()).jsonObject + val model = root.getValue("model").jsonObject + // 재export 로 파이프라인이 바뀌면 조용히 틀어지므로 로드 시점에 끊는다. + require(model["type"]?.jsonPrimitive?.content == MODEL_TYPE) { + "지원하지 않는 model.type: ${model["type"]}" } - return KobartTokenizer(tokenizer) + + val vocab = model.getValue("vocab").jsonObject + .mapValues { (_, value) -> value.jsonPrimitive.int } + + fun idOf(token: String): Int = + requireNotNull(vocab[token]) { "tokenizer.json vocab 에 $token 이 없습니다." } + + val tokenById = arrayOfNulls((vocab.values.maxOrNull() ?: -1) + 1) + vocab.forEach { (token, id) -> tokenById[id] = token } + + val addedTokens = parseAddedTokens(root) + return KobartTokenizer( + model = BpeModel( + vocab = vocab, + tokenById = tokenById, + mergeRules = parseMerges(model.getValue("merges").jsonArray, vocab), + unkId = idOf(model.getValue("unk_token").jsonPrimitive.content), + ), + addedVocabulary = AddedVocabulary.of(addedTokens.associate { it.content to it.id }), + specialTokens = SpecialTokens( + bosId = idOf(BOS_TOKEN), + eosId = idOf(EOS_TOKEN), + skipOnDecodeIds = addedTokens.filter { it.special }.map { it.id }.toSet(), + ), + replacement = parseReplacement(root), + maxInput = maxInput, + ) + } + + /** vocab 으로 옮길 수 없는 규칙은 버린다(현재 파일에는 해당 없음). */ + private fun parseMerges(merges: JsonArray, vocab: Map): Map { + val rules = HashMap(merges.size) + merges.forEachIndexed { rank, element -> + // 신형 ["a","b"], 구형 "a b". + val (left, right) = when (element) { + is JsonArray -> element[0].jsonPrimitive.content to element[1].jsonPrimitive.content + is JsonPrimitive -> element.content.split(' ', limit = 2).let { it.first() to it.last() } + else -> error("merges 항목 형식을 알 수 없습니다: $element") + } + val leftId = vocab[left] ?: return@forEachIndexed + val rightId = vocab[right] ?: return@forEachIndexed + val mergedId = vocab[left + right] ?: return@forEachIndexed + rules[pairKey(leftId, rightId)] = MergeRule(rank, mergedId) + } + return rules } + + private fun parseAddedTokens(root: JsonObject): List = + root["added_tokens"]?.jsonArray.orEmpty().map { element -> + val token = element.jsonObject + AddedToken( + content = token.getValue("content").jsonPrimitive.content, + id = token.getValue("id").jsonPrimitive.int, + special = token["special"]?.jsonPrimitive?.boolean == true, + ) + } + + private fun parseReplacement(root: JsonObject): Char { + val preTokenizer = root.getValue("pre_tokenizer").jsonObject + require(preTokenizer["type"]?.jsonPrimitive?.content == PRE_TOKENIZER_TYPE) { + "지원하지 않는 pre_tokenizer.type: ${preTokenizer["type"]}" + } + // always/true 로 고정 구현이라 다르면 결과가 달라진다. + require(preTokenizer["prepend_scheme"]?.jsonPrimitive?.content == PREPEND_SCHEME_ALWAYS) { + "지원하지 않는 prepend_scheme: ${preTokenizer["prepend_scheme"]}. " + + "구버전 tokenizers 로 export 하면 prepend_scheme 대신 add_prefix_space 가 들어간다." + } + require(preTokenizer["split"]?.jsonPrimitive?.boolean != false) { "split=false 는 지원하지 않습니다." } + + val configured = preTokenizer["replacement"]?.jsonPrimitive?.content ?: return DEFAULT_REPLACEMENT + require(configured.length == 1) { "Metaspace replacement 는 한 글자여야 합니다: $configured" } + return configured.first() + } + + private fun pairKey(left: Int, right: Int): Long = + (left.toLong() shl Int.SIZE_BITS) or (right.toLong() and UNSIGNED_INT_MASK) } + + private class AddedToken(val content: String, val id: Int, val special: Boolean) } diff --git a/data/src/main/java/com/gamss/android/data/summary/OnnxKobartSummarizer.kt b/data/src/main/java/com/gamss/android/data/summary/OnnxKobartSummarizer.kt index 4bed1ea1..d376c1da 100644 --- a/data/src/main/java/com/gamss/android/data/summary/OnnxKobartSummarizer.kt +++ b/data/src/main/java/com/gamss/android/data/summary/OnnxKobartSummarizer.kt @@ -122,10 +122,10 @@ internal class OnnxKobartSummarizer private constructor( return banned } + // 토크나이저는 순수 Kotlin 이라 닫을 네이티브 핸들이 없다. 여기서 닫을 것은 OrtSession 뿐이다. override fun close() { encoder.close() decoder.close() - tokenizer.close() } companion object { diff --git a/data/src/main/java/com/gamss/android/data/tokenizer/AddedVocabulary.kt b/data/src/main/java/com/gamss/android/data/tokenizer/AddedVocabulary.kt new file mode 100644 index 00000000..c17b362b --- /dev/null +++ b/data/src/main/java/com/gamss/android/data/tokenizer/AddedVocabulary.kt @@ -0,0 +1,68 @@ +package com.gamss.android.data.tokenizer + +/** + * tokenizer.json 의 added_tokens 를 정규화 이전에 원문에서 떼어낸다. kobart 는 이모티콘·이모지가 + * 122개 들어 있어 이 단계를 빼면 일기 본문이 통째로 다르게 토큰화된다. + * + * 두 tokenizer.json 모두 추가 토큰이 single_word·lstrip·rstrip·normalized 전부 false 라 + * 원문을 leftmost-longest 로 훑는 것으로 충분하다. + */ +internal class AddedVocabulary private constructor( + private val candidatesByFirstChar: Map>, +) { + + private class Candidate(val content: String, val id: Int) + + sealed interface Segment { + /** 추가 토큰 사이에 남은 구간. 일반 파이프라인을 거친다. */ + class Plain(val text: String) : Segment + + /** 추가 토큰. 더 쪼개지 않는다. */ + class Added(val id: Int) : Segment + } + + /** leftmost-longest. */ + fun split(text: String): List { + if (text.isEmpty()) return emptyList() + + val segments = mutableListOf() + val pending = StringBuilder() + fun flushPending() { + if (pending.isNotEmpty()) { + segments.add(Segment.Plain(pending.toString())) + pending.setLength(0) + } + } + + var index = 0 + while (index < text.length) { + val matched = longestMatchAt(text, index) + if (matched == null) { + val codePoint = text.codePointAt(index) + val width = Character.charCount(codePoint) + pending.append(text, index, index + width) + index += width + } else { + flushPending() + segments.add(Segment.Added(matched.id)) + index += matched.content.length + } + } + flushPending() + return segments + } + + private fun longestMatchAt(text: String, index: Int): Candidate? = + // 후보가 길이 내림차순이라 처음 걸리는 것이 가장 길다. + candidatesByFirstChar[text[index]]?.firstOrNull { text.startsWith(it.content, index) } + + companion object { + fun of(tokens: Map): AddedVocabulary = AddedVocabulary( + tokens.asSequence() + .filter { it.key.isNotEmpty() } + .map { Candidate(it.key, it.value) } + .groupBy { it.content.first() } + .mapValues { (_, candidates) -> candidates.sortedByDescending { it.content.length } }, + ) + } +} diff --git a/data/src/main/java/com/gamss/android/data/tokenizer/TextRules.kt b/data/src/main/java/com/gamss/android/data/tokenizer/TextRules.kt new file mode 100644 index 00000000..e7f17d7a --- /dev/null +++ b/data/src/main/java/com/gamss/android/data/tokenizer/TextRules.kt @@ -0,0 +1,71 @@ +package com.gamss.android.data.tokenizer + +/** + * HuggingFace tokenizers 의 문자 분류 규칙 이식. + * 서로게이트 쌍을 쪼개면 이모지가 깨지므로 이 파일의 함수는 전부 코드포인트를 받는다. + */ + +internal const val REPLACEMENT_CODE_POINT = 0xFFFD + +internal inline fun forEachCodePoint(text: String, action: (Int) -> Unit) { + var index = 0 + while (index < text.length) { + val codePoint = text.codePointAt(index) + index += Character.charCount(codePoint) + action(codePoint) + } +} + +/** 탭·개행·캐리지리턴은 제어문자로 치지 않는다(HuggingFace 와 동일). */ +internal fun isControlCodePoint(codePoint: Int): Boolean { + if (codePoint == '\t'.code || codePoint == '\n'.code || codePoint == '\r'.code) return false + return when (Character.getType(codePoint)) { + Character.CONTROL.toInt(), + Character.FORMAT.toInt(), + Character.PRIVATE_USE.toInt(), + Character.SURROGATE.toInt(), + Character.UNASSIGNED.toInt(), + -> true + + else -> false + } +} + +/** Character.isWhitespace 는 U+00A0 등을 빼서 Rust 와 결과가 달라지므로 직접 나열한다. */ +internal fun isUnicodeWhitespace(codePoint: Int): Boolean = when (codePoint) { + in 0x09..0x0D, 0x20, 0x85, 0xA0, 0x1680, in 0x2000..0x200A, + 0x2028, 0x2029, 0x202F, 0x205F, 0x3000, + -> true + + else -> false +} + +/** BertNormalizer 가 한 글자씩 떼어내는 CJK 범위. */ +internal fun isChineseChar(codePoint: Int): Boolean = when (codePoint) { + in 0x4E00..0x9FFF, in 0x3400..0x4DBF, in 0x20000..0x2A6DF, in 0x2A700..0x2B73F, + in 0x2B740..0x2B81F, in 0x2B920..0x2CEAF, in 0xF900..0xFAFF, in 0x2F800..0x2FA1F, + -> true + + else -> false +} + +/** ASCII 구두점 전체 + 유니코드 P* 카테고리. */ +internal fun isBertPunctuation(codePoint: Int): Boolean { + val isAsciiPunctuation = codePoint in 0x21..0x2F || + codePoint in 0x3A..0x40 || + codePoint in 0x5B..0x60 || + codePoint in 0x7B..0x7E + if (isAsciiPunctuation) return true + return when (Character.getType(codePoint)) { + Character.CONNECTOR_PUNCTUATION.toInt(), + Character.DASH_PUNCTUATION.toInt(), + Character.START_PUNCTUATION.toInt(), + Character.END_PUNCTUATION.toInt(), + Character.INITIAL_QUOTE_PUNCTUATION.toInt(), + Character.FINAL_QUOTE_PUNCTUATION.toInt(), + Character.OTHER_PUNCTUATION.toInt(), + -> true + + else -> false + } +} diff --git a/data/src/main/jniLibs/arm64-v8a/libc++_shared.so b/data/src/main/jniLibs/arm64-v8a/libc++_shared.so deleted file mode 100755 index 5f3cc327..00000000 --- a/data/src/main/jniLibs/arm64-v8a/libc++_shared.so +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:259e897588d798546fb5721eec1983c98a6a46358a5fa864b170d95c7d77fec3 -size 9248800 diff --git a/data/src/test/kotlin/com/gamss/android/data/tokenizer/TokenizerGoldenTest.kt b/data/src/test/kotlin/com/gamss/android/data/tokenizer/TokenizerGoldenTest.kt new file mode 100644 index 00000000..32871710 --- /dev/null +++ b/data/src/test/kotlin/com/gamss/android/data/tokenizer/TokenizerGoldenTest.kt @@ -0,0 +1,116 @@ +package com.gamss.android.data.tokenizer + +import com.gamss.android.data.emotion.WordPieceTokenizer +import com.gamss.android.data.summary.KobartTokenizer +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.int +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import kotlinx.serialization.json.long +import org.junit.Assert.assertEquals +import org.junit.Test +import java.io.File + +/** + * 순수 Kotlin 토크나이저가 교체 이전 DJL 0.33.0 출력과 한 글자도 다르지 않은지 검증한다. + * + * tokenizer.json 을 재export 하면 골든도 다시 만들어야 한다. DJL 을 testImplementation 으로 잠시 + * 붙여 `HuggingFaceTokenizer` 로 같은 케이스를 돌린 뒤 tokenizer_golden.json 을 덮어쓴다. + * 옵션은 addSpecialTokens=true, truncation=true/false, decode 는 skipSpecialTokens=true + trim. + */ +class TokenizerGoldenTest { + + @Test + fun `WordPiece 인코딩이 골든과 일치한다`() { + val golden = GOLDEN.getValue("wordpiece").jsonObject + val tokenizer = WordPieceTokenizer.fromJson( + bytes = File(EMOTION_TOKENIZER).readBytes(), + seqLen = golden.getValue("seqLen").jsonPrimitive.int, + ) + + golden.getValue("cases").jsonArray.forEach { element -> + val case = element.jsonObject + val text = case.getValue("text").jsonPrimitive.content + val encoded = tokenizer.encode(text) + + assertEquals(label("ids", text), case.longs("ids"), encoded.ids.toList()) + assertEquals(label("attentionMask", text), case.longs("attentionMask"), encoded.attentionMask.toList()) + assertEquals(label("typeIds", text), case.longs("typeIds"), encoded.typeIds.toList()) + } + } + + @Test + fun `kobart 인코딩과 라운드트립 디코딩이 골든과 일치한다`() { + val golden = GOLDEN.getValue("kobart").jsonObject + val tokenizer = KobartTokenizer.fromJson( + bytes = File(KOBART_TOKENIZER).readBytes(), + maxInput = golden.getValue("maxInput").jsonPrimitive.int, + ) + + golden.getValue("cases").jsonArray.forEach { element -> + val case = element.jsonObject + val text = case.getValue("text").jsonPrimitive.content + val encoded = tokenizer.encode(text) + + assertEquals(label("ids", text), case.longs("ids"), encoded.ids.toList()) + assertEquals(label("attentionMask", text), case.longs("attentionMask"), encoded.attentionMask.toList()) + assertEquals( + label("decoded", text), + case.getValue("decoded").jsonPrimitive.content, + tokenizer.decode(encoded.ids), + ) + } + } + + @Test + fun `kobart 절단 없는 인코딩이 골든과 일치한다`() { + val golden = GOLDEN.getValue("kobart").jsonObject + val tokenizer = KobartTokenizer.fromJson(File(KOBART_TOKENIZER).readBytes(), maxInput = null) + + golden.getValue("noTruncationCases").jsonArray.forEach { element -> + val case = element.jsonObject + val text = case.getValue("text").jsonPrimitive.content + assertEquals(label("ids", text), case.longs("ids"), tokenizer.encode(text).ids.toList()) + } + } + + @Test + fun `kobart 디코딩이 특수 토큰 섞인 시퀀스에서도 골든과 일치한다`() { + val golden = GOLDEN.getValue("kobart").jsonObject + val tokenizer = KobartTokenizer.fromJson( + bytes = File(KOBART_TOKENIZER).readBytes(), + maxInput = golden.getValue("maxInput").jsonPrimitive.int, + ) + + golden.getValue("decodeCases").jsonArray.forEach { element -> + val case = element.jsonObject + val ids = case.longs("ids") + assertEquals( + label("decoded", ids.toString()), + case.getValue("decoded").jsonPrimitive.content, + tokenizer.decode(ids.toLongArray()), + ) + } + } + + private fun JsonObject.longs(key: String): List = + getValue(key).jsonArray.map { it.jsonPrimitive.long } + + private fun label(field: String, input: String): String = + "$field 불일치 (입력: ${input.take(LABEL_MAX_LENGTH)})" + + companion object { + private const val LABEL_MAX_LENGTH = 40 + private const val EMOTION_TOKENIZER = "../models/emotion-pack/src/main/assets/models/emotion_tokenizer.json" + private const val KOBART_TOKENIZER = "../models/summary-pack/src/main/assets/models/kobart_tokenizer.json" + + private val GOLDEN: JsonObject by lazy { + val stream = requireNotNull(TokenizerGoldenTest::class.java.getResourceAsStream("/tokenizer_golden.json")) { + "tokenizer_golden.json 이 테스트 리소스에 없습니다." + } + Json.parseToJsonElement(stream.use { it.readBytes().decodeToString() }).jsonObject + } + } +} diff --git a/data/src/test/resources/tokenizer_golden.json b/data/src/test/resources/tokenizer_golden.json new file mode 100644 index 00000000..eb4129ce --- /dev/null +++ b/data/src/test/resources/tokenizer_golden.json @@ -0,0 +1 @@ +{"wordpiece":{"seqLen":128,"cases":[{"text":"부장이 사람들 앞에서 소리를 질러서 정말 화가 치밀어 올랐다.","ids":[2,7844,4007,6226,4006,3092,4073,4129,6563,4110,17053,4129,6595,9151,13768,4025,7690,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"약속 시간에 또 늦게 나타나서 짜증이 확 났어.","ids":[2,7381,6251,4073,2489,2336,4325,7319,4129,13215,4007,3812,2246,4025,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"내 물건을 허락도 없이 함부로 쓰다니 화가 나서 참을 수가 없다.","ids":[2,2252,7869,4292,11103,4086,6419,13766,3063,8810,9151,7974,3425,4292,6919,3123,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"말도 안 되는 이유로 나한테 책임을 떠넘기니 분통이 터진다.","ids":[2,2633,4086,3081,2411,4034,7478,2236,4283,4064,6583,4292,22784,4155,24322,4007,16600,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"새치기하는 사람을 보니 열이 받아서 한마디 하고 싶었다.","ids":[2,2897,12613,4279,4034,6226,4292,2780,4155,3142,4007,29895,4129,9498,14227,3018,4480,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"몇 번을 말해도 안 고치니까 진짜 화가 난다.","ids":[2,2676,2755,4292,2633,4151,4086,3081,13085,6390,7082,9151,10375,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"거짓말한 걸 뻔뻔하게 발뺌하는 게 너무 괘씸하다.","ids":[2,9688,4283,2045,21874,4279,4325,2735,6079,4279,4034,2054,6395,2093,5908,4279,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"내 노력을 무시하는 태도에 부아가 치밀었다.","ids":[2,2252,6607,4292,7976,4279,4034,7647,4073,2799,7728,13768,4480,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"왜 자꾸 나만 가지고 트집을 잡는지 성질이 난다.","ids":[2,3178,9210,2236,4172,6274,4219,3663,4557,4292,3260,24758,12372,4007,10375,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"그 사람 말투가 너무 무례해서 화가 가라앉질 않는다.","ids":[2,2126,6226,14643,4070,6395,20890,9448,9151,12676,4152,3083,4034,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"내일 중요한 발표가 있는데 잘 해낼 수 있을지 너무 걱정된다.","ids":[2,8258,6397,4283,6447,4070,3249,18781,3258,18370,2967,3249,4292,4200,6395,7168,4880,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"검사 결과가 나올 때까지 마음이 계속 조마조마하다.","ids":[2,6911,6331,4070,8074,2468,4149,4200,6365,4007,6437,3301,4177,4084,4177,4279,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"연락이 안 돼서 무슨 일이 생긴 건 아닌지 불안하다.","ids":[2,8224,4007,3081,10764,7008,3243,4007,8189,2043,12740,7439,4279,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"면접 결과를 기다리는 동안 초조해서 아무것도 손에 안 잡힌다.","ids":[2,9354,6331,4110,7799,4034,6350,18254,9448,9343,4086,2949,4073,3081,14708,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"빚을 어떻게 갚아야 할지 막막하고 두렵다.","ids":[2,2826,4292,13177,2025,4153,4474,7883,20146,4279,4219,17737,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"혹시 실수한 게 있을까 봐 자꾸 마음이 쓰인다.","ids":[2,8863,8332,4283,2054,3249,11649,2789,9210,6365,4007,15654,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"밤이 되면 미래가 걱정돼서 잠이 잘 안 온다.","ids":[2,2738,4007,2411,4181,6706,4070,7168,5368,4129,3259,4007,3258,3081,11959,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"시험을 망칠까 봐 가슴이 두근거리고 안절부절못한다.","ids":[2,7065,4292,2638,5131,4149,2789,7352,4007,20069,6670,4219,3081,4821,4258,4821,5073,7796,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"큰 수술을 앞두고 있어서 마음이 너무 불안하다.","ids":[2,3583,7567,4292,7697,4219,3249,4025,4129,6365,4007,6395,7439,4279,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"일이 잘못될까 봐 계속 신경이 곤두선다.","ids":[2,3243,4007,6997,4587,4149,2789,6437,7340,4007,16546,4207,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"갑자기 이름이 불려서 어떻게 해야 할지 몰라 당황했다.","ids":[2,7549,6479,4007,17311,4129,13177,6256,7883,9576,10227,4398,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"사람들 앞에서 넘어져서 얼굴이 화끈거리고 어쩔 줄 몰랐다.","ids":[2,6226,4006,3092,4073,4129,32898,4129,6683,4007,20424,6670,4219,9461,3326,8927,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"예상치 못한 질문에 머릿속이 하얘졌다.","ids":[2,6612,4332,2684,4283,7039,4073,12768,4007,3755,5934,4753,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"친구인 줄 알고 인사했는데 모르는 사람이라 민망했다.","ids":[2,6554,4139,3326,20981,6596,4398,18781,6600,4034,6226,4007,4118,19659,4398,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"발표 중에 자료가 갑자기 안 열려서 진땀이 났다.","ids":[2,6447,3330,4073,6812,4070,7549,3081,12688,4129,33113,4007,2246,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"계산하려는데 지갑을 안 가져와서 당혹스러웠다.","ids":[2,8165,4279,4228,18781,13594,4292,3081,20314,4129,17773,4063,4498,5133,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"엉뚱한 사람에게 메시지를 잘못 보내서 크게 당황했다.","ids":[2,13850,4283,6226,4073,4325,7866,4110,6997,6823,4129,3581,4325,10227,4398,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"갑작스러운 상황에 뭐라고 대답해야 할지 몰라 얼떨떨했다.","ids":[2,21261,6313,4073,2702,9809,7774,18991,7883,9576,31668,5468,4398,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"회의에서 내 차례인 줄 몰라서 허둥지둥했다.","ids":[2,6356,4073,4129,2252,7035,4139,3326,19997,28856,4200,4524,4398,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"예상과 전혀 다른 반응이 돌아와서 순간 멍해졌다.","ids":[2,6612,4047,7023,6254,7143,4007,19991,6978,2659,32309,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"드디어 합격 소식을 들어서 정말 기쁘고 날아갈 것 같다.","ids":[2,10457,9032,7437,4292,10244,6595,12336,4219,30169,2048,2024,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"오랜만에 친구들을 만나 실컷 웃어서 하루가 즐거웠다.","ids":[2,10953,4073,6554,4006,4292,6654,23497,3197,4025,4129,6674,4070,24889,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"열심히 준비한 일이 잘 풀려서 뿌듯하고 행복하다.","ids":[2,7839,6513,4283,3243,4007,3258,13587,4129,17379,4279,4219,7003,4279,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"가족과 함께한 여행이 너무 좋아서 마음이 따뜻해졌다.","ids":[2,6507,4047,6261,4283,6677,4007,6395,3311,4153,4129,6365,4007,8315,32309,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"생각지도 못한 선물을 받아서 기분이 정말 좋다.","ids":[2,6243,16862,2684,4283,7304,4292,29895,4129,7665,4007,6595,3311,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"원하던 물건을 드디어 사서 신이 난다.","ids":[2,3201,4279,4820,7869,4292,10457,27826,12466,10375,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"칭찬을 들으니 하루 종일 기분이 들뜬다.","ids":[2,10169,4292,32722,6674,11526,7665,4007,30008,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"맛있는 음식을 먹으니 행복이 밀려온다.","ids":[2,7461,4034,6871,4292,2654,8762,7003,4007,9735,12087,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"오랜 목표를 이뤄내서 성취감에 가슴이 벅차다.","ids":[2,7781,6748,4110,6896,4338,4129,31750,4073,7352,4007,32907,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"좋아하는 사람과 함께 있어서 너무 설레고 즐겁다.","ids":[2,3311,4153,4279,4034,6226,4047,6261,3249,4025,4129,6395,16456,4219,10991,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"믿었던 친구에게 배신을 당해서 마음이 너무 아프다.","ids":[2,2721,4480,4820,6554,4073,4325,12245,4292,32584,6365,4007,6395,7405,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"사랑하는 사람에게 상처 주는 말을 들어서 가슴이 미어진다.","ids":[2,6470,4279,4034,6226,4073,4325,8243,3323,4034,2633,4292,10244,7352,4007,2718,11043,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"오랜 연인과 헤어져서 마음 한구석이 텅 빈 것 같다.","ids":[2,7781,10795,4047,31438,4129,6365,31451,4007,3624,2820,2048,2024,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"가까운 사람이 나를 이용했다는 걸 알고 크게 상처받았다.","ids":[2,7960,6226,4007,2236,4110,6361,4398,6913,2045,20981,3581,4325,8243,4736,4494,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"무심코 던진 말에 마음을 크게 다쳤다.","ids":[2,24668,14492,2633,4073,6365,4292,3581,4325,17317,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"진심을 몰라주는 것 같아 서운하고 상처가 된다.","ids":[2,10304,4292,9576,4076,4034,2048,2024,4153,18584,4279,4219,8243,4070,6236,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"믿었던 만큼 실망이 커서 마음이 쓰라리다.","ids":[2,2721,4480,4820,6456,9837,4007,15124,6365,4007,32920,4108,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"가족에게 외면당한 것 같아 마음이 아프다.","ids":[2,6507,4073,4325,10645,4403,4283,2048,2024,4153,6365,4007,7405,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"약속을 저버린 그 사람 때문에 마음의 상처가 깊다.","ids":[2,7381,4292,3278,18915,2126,6226,6234,4073,6365,4234,8243,4070,2146,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"오래 함께한 사이인데 헌신짝처럼 버려져서 가슴이 아리다.","ids":[2,7176,6261,4283,6314,4139,4244,12808,5145,11318,10663,11789,7352,4007,11566,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"키우던 강아지가 무지개다리를 건너서 너무 슬프다.","ids":[2,8485,4820,12274,4070,20102,9841,4110,8620,4129,6395,16459,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"혼자 남겨진 것 같아 눈물이 계속 흐른다.","ids":[2,7422,25985,2048,2024,4153,7908,4007,6437,24983,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"그리운 사람이 떠올라 마음이 가라앉고 우울하다.","ids":[2,28332,6226,4007,24398,6365,4007,12676,4219,9899,4279,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"아무리 노력해도 나아지지 않아서 무기력하고 슬프다.","ids":[2,8002,6607,4151,4086,19858,4200,3083,4153,4129,25969,4279,4219,16459,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"텅 빈 방에 혼자 있으니 외롭고 서글프다.","ids":[2,3624,2820,2741,4073,7422,3249,8762,19716,4219,26708,4230,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"좋은 시절이 다 지나간 것 같아 서글퍼진다.","ids":[2,3311,4112,7111,4007,2348,18358,2048,2024,4153,26708,4432,6689,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"소중한 것을 잃어버려서 마음이 한없이 가라앉는다.","ids":[2,9133,4283,2048,4292,11816,9197,6365,4007,19275,12676,4034,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"아무도 내 마음을 알아주지 않는 것 같아 쓸쓸하다.","ids":[2,6439,4086,2252,6365,4292,24014,4200,3083,4034,2048,2024,4153,17425,4279,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"지난 일들이 후회돼서 밤새 눈물이 났다.","ids":[2,6232,3243,10728,11342,5368,4129,15339,7908,4007,2246,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"이별 후 매일이 잿빛처럼 느껴지고 슬프기만 하다.","ids":[2,16321,3826,7465,4007,31918,11318,7831,4200,4219,16459,4031,4172,3755,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"","ids":[2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":" ","ids":[2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"\n\t \n","ids":[2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"a","ids":[2,69,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"가","ids":[2,2010,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"😀😀 이모지가 섞인 문장이다 🎉","ids":[2,3963,5208,10920,24899,15685,9611,24387,3929,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"漢字와 한글이 섞인 文章입니다","ids":[2,1268,732,3170,10351,4007,15685,1043,1457,6286,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"2026년 8월 14일, 온도는 36.5도였고 가격은 1,200원이었다.","ids":[2,10666,4096,4556,28,4501,6461,4366,16,9551,4034,7540,18,25,4086,4737,4219,6452,4112,21,16,6250,4005,4007,4480,4176,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"!!!???...,,,---___","ids":[2,5,5,5,35,35,35,18,18,18,16,16,16,17,17,17,67,67,67,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"https://example.com/path?query=1&other=2 링크가 들어간 문장","ids":[2,20391,30,19,19,14402,18292,6976,18,7906,19,32662,4078,35,21906,20214,33,21,10,24311,33,22,11424,4070,9116,9611,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"email@example.com 으로 연락 주세요","ids":[2,20189,12160,36,14402,18292,6976,18,7906,6214,8224,11992,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"ㅋㅋㅋㅋㅋ ㅠㅠㅠ ㅎㅎ 자모만 있는 경우","ids":[2,7056,16780,12329,7921,3254,4117,4172,3249,4034,6245,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"MiXeD CaSe English Sentence With CAPS","ids":[2,49,4037,4163,4010,4090,39,4012,4130,4010,26218,27984,22020,12831,13499,28811,9056,18695,11899,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"탭\t과 개행\n이 중간에 들어간다","ids":[2,3611,2087,2027,4045,3240,7686,4073,13166,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":" 앞뒤에 공백이 많은 문장 ","ids":[2,15576,4073,12731,4007,2631,4112,9611,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"한글가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사","ids":[2,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. ","ids":[2,8706,21906,12463,11243,19496,74,16950,78,8677,14703,32729,7773,19533,4115,4121,23215,4060,18,8706,21906,12463,11243,19496,74,16950,78,8677,14703,32729,7773,19533,4115,4121,23215,4060,18,8706,21906,12463,11243,19496,74,16950,78,8677,14703,32729,7773,19533,4115,4121,23215,4060,18,8706,21906,12463,11243,19496,74,16950,78,8677,14703,32729,7773,19533,4115,4121,23215,4060,18,8706,21906,12463,11243,19496,74,16950,78,8677,14703,32729,7773,19533,4115,4121,23215,4060,18,8706,21906,12463,11243,19496,74,16950,78,8677,14703,32729,7773,19533,4115,4121,23215,4060,18,8706,21906,12463,11243,19496,74,16950,78,8677,14703,32729,7773,19533,4115,4121,23215,4060,18,3],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"café naïve résumé 악센트 포함","ids":[2,71,12824,4436,1,86,4436,4021,8677,4436,3080,9086,6469,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"fi fl ½ ² 호환 문자 NFKC 대상","ids":[2,1,1,1,104,17302,8314,50,4399,4170,4091,6391,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":":-)8< 오늘도 힘들었다","ids":[2,30,17,13,28,32,6451,4086,7048,4480,4176,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":":-(=) 그리고 :-( 두 개","ids":[2,30,17,12,33,13,6291,30,17,12,2419,2027,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":":-(*) 별표 버전","ids":[2,30,17,12,14,13,2773,4376,8833,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":":-{} 와 :-{ 비교","ids":[2,30,17,95,97,3170,30,17,95,6894,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"^^ 오늘 기분이 좋았다","ids":[2,66,66,6451,7665,4007,3311,4494,4176,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":":) 반가워 :( 슬퍼","ids":[2,30,13,31090,30,12,16792,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"ㅜㅜ 힘들다 ㅡㅡ 짜증나","ids":[2,14198,7048,4176,25875,13215,4065,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":":-):-):-) 연속 배치","ids":[2,30,17,13,30,17,13,30,17,13,7477,7558,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"😍 다른 이모지라 매칭에 실패한다","ids":[2,3974,6254,10920,4200,4118,20860,4073,7351,7796,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"😀😍😀 섞어 쓰기","ids":[2,3963,4892,5208,2916,4025,3063,4031,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"끝에 추가 토큰 :-)","ids":[2,2227,4073,6565,32436,30,17,13,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"[CLS] 로 시작하는 문장","ids":[2,2,2575,6273,4279,4034,9611,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"[UNK] 와 [SEP] 와 [MASK] 가 본문에","ids":[2,1,3170,3,3170,4,2010,13765,4073,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"[PAD]","ids":[2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},{"text":"오늘 [MASK] 였다","ids":[2,6451,4,3148,4176,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"attentionMask":[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"typeIds":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}]},"kobart":{"maxInput":512,"cases":[{"text":"부장이 사람들 앞에서 소리를 질러서 정말 화가 치밀어 올랐다.","ids":[0,14062,14416,17015,16479,18390,14549,10277,11264,15416,20879,14349,10751,11763,19360,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"부장이 사람들 앞에서 소리를 질러서 정말 화가 치밀어 올랐다."},{"text":"약속 시간에 또 늦게 나타나서 짜증이 확 났어.","ids":[0,16034,20395,14153,23322,16840,11264,17345,18754,14181,20218,20838,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"약속 시간에 또 늦게 나타나서 짜증이 확 났어."},{"text":"내 물건을 허락도 없이 함부로 쓰다니 화가 나서 참을 수가 없다.","ids":[0,14067,22152,24314,9866,14807,29037,14612,17530,20879,15306,14214,12007,15764,21088,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"내 물건을 허락도 없이 함부로 쓰다니 화가 나서 참을 수가 없다."},{"text":"말도 안 되는 이유로 나한테 책임을 떠넘기니 분통이 터진다.","ids":[0,20016,14105,14829,16454,14054,16427,17264,14619,9557,9264,9735,14142,25441,29501,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"말도 안 되는 이유로 나한테 책임을 떠넘기니 분통이 터진다."},{"text":"새치기하는 사람을 보니 열이 받아서 한마디 하고 싶었다.","ids":[0,14206,20833,14049,16591,16201,14189,12034,14732,11264,19658,14432,14548,16367,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"새치기하는 사람을 보니 열이 받아서 한마디 하고 싶었다."},{"text":"몇 번을 말해도 안 고치니까 진짜 화가 난다.","ids":[0,15030,14415,12007,14070,16662,14105,14068,12863,14495,17240,20879,14784,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"몇 번을 말해도 안 고치니까 진짜 화가 난다."},{"text":"거짓말한 걸 뻔뻔하게 발뺌하는 게 너무 괘씸하다.","ids":[0,23618,13590,14366,20204,11092,14159,14103,11070,14049,14262,14877,1700,9138,11689,22564,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"거짓말한 걸 뻔뻔하게 발뺌하는 게 너무 괘씸하다."},{"text":"내 노력을 무시하는 태도에 부아가 치밀었다.","ids":[0,14067,17939,18114,14049,14438,16075,14062,16013,14349,10751,16367,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"내 노력을 무시하는 태도에 부아가 치밀었다."},{"text":"왜 자꾸 나만 가지고 트집을 잡는지 성질이 난다.","ids":[0,14851,20716,14054,10500,15292,14701,18753,14568,15965,14127,17653,14784,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"왜 자꾸 나만 가지고 트집을 잡는지 성질이 난다."},{"text":"그 사람 말투가 너무 무례해서 화가 가라앉질 않는다.","ids":[0,14028,14168,14070,13282,8981,14877,14113,10329,14668,20879,25437,12338,14449,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"그 사람 말투가 너무 무례해서 화가 가라앉질 않는다."},{"text":"내일 중요한 발표가 있는데 잘 해낼 수 있을지 너무 걱정된다.","ids":[0,18683,15259,14615,8981,15332,14334,14088,9521,14032,21446,14877,16894,9908,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"내일 중요한 발표가 있는데 잘 해낼 수 있을지 너무 걱정된다."},{"text":"검사 결과가 나올 때까지 마음이 계속 조마조마하다.","ids":[0,17535,18642,17809,17476,17348,14755,14077,10496,12178,10496,22564,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"검사 결과가 나올 때까지 마음이 계속 조마조마하다."},{"text":"연락이 안 돼서 무슨 일이 생긴 건 아닌지 불안하다.","ids":[0,19481,12034,14105,15118,11264,16046,15029,18075,14205,14837,12332,16147,22564,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"연락이 안 돼서 무슨 일이 생긴 건 아닌지 불안하다."},{"text":"면접 결과를 기다리는 동안 초조해서 아무것도 손에 안 잡힌다.","ids":[0,20091,16579,25392,14652,14272,12178,14668,20980,19131,14105,14568,13845,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"면접 결과를 기다리는 동안 초조해서 아무것도 손에 안 잡힌다."},{"text":"빚을 어떻게 갚아야 할지 막막하고 두렵다.","ids":[0,26282,14792,20685,16402,21445,14570,10497,14058,14196,10322,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"빚을 어떻게 갚아야 할지 막막하고 두렵다."},{"text":"혹시 실수한 게 있을까 봐 자꾸 마음이 쓰인다.","ids":[0,20604,14131,18126,14262,22860,16070,20716,17348,14612,12037,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"혹시 실수한 게 있을까 봐 자꾸 마음이 쓰인다."},{"text":"밤이 되면 미래가 걱정돼서 잠이 잘 안 온다.","ids":[0,15294,12034,16001,15093,8981,16894,9895,11264,29911,14334,14105,14488,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"밤이 되면 미래가 걱정돼서 잠이 잘 안 온다."},{"text":"시험을 망칠까 봐 가슴이 두근거리고 안절부절못한다.","ids":[0,28046,15777,12869,9286,16070,23264,14196,9233,29593,14105,12130,10948,12130,10619,21158,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"시험을 망칠까 봐 가슴이 두근거리고 안절부절못한다."},{"text":"큰 수술을 앞두고 있어서 마음이 너무 불안하다.","ids":[0,14417,22383,16016,16269,17348,14877,16147,22564,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1],"decoded":"큰 수술을 앞두고 있어서 마음이 너무 불안하다."},{"text":"일이 잘못될까 봐 계속 신경이 곤두선다.","ids":[0,15029,15838,9910,9286,16070,14755,17219,12034,17297,9925,11268,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"일이 잘못될까 봐 계속 신경이 곤두선다."},{"text":"갑자기 이름이 불려서 어떻게 해야 할지 몰라 당황했다.","ids":[0,16938,20301,14135,29378,14792,15286,21445,21879,20935,15615,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"갑자기 이름이 불려서 어떻게 해야 할지 몰라 당황했다."},{"text":"사람들 앞에서 넘어져서 얼굴이 화끈거리고 어쩔 줄 몰랐다.","ids":[0,17015,16479,15409,25904,20784,14267,9468,29593,20732,14390,20486,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"사람들 앞에서 넘어져서 얼굴이 화끈거리고 어쩔 줄 몰랐다."},{"text":"예상치 못한 질문에 머릿속이 하얘졌다.","ids":[0,28993,15291,18145,24736,11320,12034,14042,11751,24002,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1],"decoded":"예상치 못한 질문에 머릿속이 하얘졌다."},{"text":"친구인 줄 알고 인사했는데 모르는 사람이라 민망했다.","ids":[0,15230,12037,14390,15331,15196,17718,17989,14168,14096,14231,10512,15615,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"친구인 줄 알고 인사했는데 모르는 사람이라 민망했다."},{"text":"발표 중에 자료가 갑자기 안 열려서 진땀이 났다.","ids":[0,14615,17003,16345,8981,16938,14105,23346,11264,14132,10038,12034,20218,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"발표 중에 자료가 갑자기 안 열려서 진땀이 났다."},{"text":"계산하려는데 지갑을 안 가져와서 당혹스러웠다.","ids":[0,18559,14932,14304,14034,26156,14105,15950,11863,11264,14138,13700,15512,11950,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"계산하려는데 지갑을 안 가져와서 당혹스러웠다."},{"text":"엉뚱한 사람에게 메시지를 잘못 보내서 크게 당황했다.","ids":[0,27219,13590,19977,20476,15838,15756,11264,15003,20935,15615,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"엉뚱한 사람에게 메시지를 잘못 보내서 크게 당황했다."},{"text":"갑작스러운 상황에 뭐라고 대답해야 할지 몰라 얼떨떨했다.","ids":[0,22745,16380,18368,27669,16930,14368,21445,21879,14479,10081,10081,15615,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"갑작스러운 상황에 뭐라고 대답해야 할지 몰라 얼떨떨했다."},{"text":"회의에서 내 차례인 줄 몰라서 허둥지둥했다.","ids":[0,23131,14067,16023,12037,14390,21879,11264,14486,9935,12332,9935,15615,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"회의에서 내 차례인 줄 몰라서 허둥지둥했다."},{"text":"예상과 전혀 다른 반응이 돌아와서 순간 멍해졌다.","ids":[0,14791,9120,15860,14355,24273,23078,11264,15780,22817,19845,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"예상과 전혀 다른 반응이 돌아와서 순간 멍해졌다."},{"text":"드디어 합격 소식을 들어서 정말 기쁘고 날아갈 것 같다.","ids":[0,23608,18778,19022,18492,15416,21908,9102,20148,8989,14033,14163,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"드디어 합격 소식을 들어서 정말 기쁘고 날아갈 것 같다."},{"text":"오랜만에 친구들을 만나 실컷 웃어서 하루가 즐거웠다.","ids":[0,26909,15230,14282,15166,14131,12929,15032,14996,15210,8981,19527,11950,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"오랜만에 친구들을 만나 실컷 웃어서 하루가 즐거웠다."},{"text":"열심히 준비한 일이 잘 풀려서 뿌듯하고 행복하다.","ids":[0,17367,25906,15029,14334,27825,11264,16647,10000,14058,15664,22564,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"열심히 준비한 일이 잘 풀려서 뿌듯하고 행복하다."},{"text":"가족과 함께한 여행이 너무 좋아서 마음이 따뜻해졌다.","ids":[0,24616,14270,13590,15941,12034,14877,15339,11264,17348,18021,19845,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"가족과 함께한 여행이 너무 좋아서 마음이 따뜻해졌다."},{"text":"생각지도 못한 선물을 받아서 기분이 정말 좋다.","ids":[0,14246,14931,15291,25513,14732,11264,21853,15416,14271,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"생각지도 못한 선물을 받아서 기분이 정말 좋다."},{"text":"원하던 물건을 드디어 사서 신이 난다.","ids":[0,14145,15492,22152,23608,14031,11264,27381,14784,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1],"decoded":"원하던 물건을 드디어 사서 신이 난다."},{"text":"칭찬을 들으니 하루 종일 기분이 들뜬다.","ids":[0,20624,12007,14172,15698,15210,29061,21853,14172,10178,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"칭찬을 들으니 하루 종일 기분이 들뜬다."},{"text":"맛있는 음식을 먹으니 행복이 밀려온다.","ids":[0,29068,20505,14630,15698,15664,12034,20187,11843,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1],"decoded":"맛있는 음식을 먹으니 행복이 밀려온다."},{"text":"오랜 목표를 이뤄내서 성취감에 가슴이 벅차다.","ids":[0,17313,19612,15168,9517,11264,24449,21041,23264,1700,10831,12612,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"오랜 목표를 이뤄내서 성취감에 가슴이 벅차다."},{"text":"좋아하는 사람과 함께 있어서 너무 설레고 즐겁다.","ids":[0,19471,21864,14270,16269,14877,14193,10298,9102,14999,9040,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"좋아하는 사람과 함께 있어서 너무 설레고 즐겁다."},{"text":"믿었던 친구에게 배신을 당해서 마음이 너무 아프다.","ids":[0,15325,15912,15230,14120,14203,16187,14138,14668,17348,14877,16873,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"믿었던 친구에게 배신을 당해서 마음이 너무 아프다."},{"text":"사랑하는 사람에게 상처 주는 말을 들어서 가슴이 미어진다.","ids":[0,20058,19977,17689,15855,15080,18492,23264,14097,15712,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"사랑하는 사람에게 상처 주는 말을 들어서 가슴이 미어진다."},{"text":"오랜 연인과 헤어져서 마음 한구석이 텅 빈 것 같다.","ids":[0,17313,14091,16369,15338,18619,11264,14571,14036,9170,17920,1700,13185,15692,14033,14163,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"오랜 연인과 헤어져서 마음 한구석이 텅 빈 것 같다."},{"text":"가까운 사람이 나를 이용했다는 걸 알고 크게 상처받았다.","ids":[0,17573,14959,16389,14533,15441,14366,15331,15003,17689,10775,18332,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"가까운 사람이 나를 이용했다는 걸 알고 크게 상처받았다."},{"text":"무심코 던진 말에 마음을 크게 다쳤다.","ids":[0,14113,11477,12972,25718,18380,16138,15003,14056,12710,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"무심코 던진 말에 마음을 크게 다쳤다."},{"text":"진심을 몰라주는 것 같아 서운하고 상처가 된다.","ids":[0,14132,15790,21879,14785,14033,17054,14092,11914,14058,17689,8981,25529,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"진심을 몰라주는 것 같아 서운하고 상처가 된다."},{"text":"믿었던 만큼 실망이 커서 마음이 쓰라리다.","ids":[0,15325,15912,14933,14131,20494,14600,11264,17348,14612,22084,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"믿었던 만큼 실망이 커서 마음이 쓰라리다."},{"text":"가족에게 외면당한 것 같아 마음이 아프다.","ids":[0,14978,14120,21644,17029,14033,17054,17348,16873,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1],"decoded":"가족에게 외면당한 것 같아 마음이 아프다."},{"text":"약속을 저버린 그 사람 때문에 마음의 상처가 깊다.","ids":[0,22124,14209,20860,14028,14168,14362,22983,17689,8981,15397,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"약속을 저버린 그 사람 때문에 마음의 상처가 깊다."},{"text":"오래 함께한 사이인데 헌신짝처럼 버려져서 가슴이 아리다.","ids":[0,16294,14270,13590,14563,15094,27534,12354,14400,25432,25904,23264,14041,10476,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"오래 함께한 사이인데 헌신짝처럼 버려져서 가슴이 아리다."},{"text":"키우던 강아지가 무지개다리를 건너서 너무 슬프다.","ids":[0,22679,9810,14119,11696,14824,28715,9006,9754,14321,18800,11264,14877,15815,13547,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"키우던 강아지가 무지개다리를 건너서 너무 슬프다."},{"text":"혼자 남겨진 것 같아 눈물이 계속 흐른다.","ids":[0,16814,20296,12335,14033,17054,26129,14755,15437,10441,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"혼자 남겨진 것 같아 눈물이 계속 흐른다."},{"text":"그리운 사람이 떠올라 마음이 가라앉고 우울하다.","ids":[0,16080,11914,14959,17697,10213,17348,25437,9102,21400,22564,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"그리운 사람이 떠올라 마음이 가라앉고 우울하다."},{"text":"아무리 노력해도 나아지지 않아서 무기력하고 슬프다.","ids":[0,17882,15278,16662,19545,15594,28585,18868,10314,14058,15815,13547,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"아무리 노력해도 나아지지 않아서 무기력하고 슬프다."},{"text":"텅 빈 방에 혼자 있으니 외롭고 서글프다.","ids":[0,1700,13185,15692,28878,16814,20287,14226,24524,14092,9237,13547,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"텅 빈 방에 혼자 있으니 외롭고 서글프다."},{"text":"좋은 시절이 다 지나간 것 같아 서글퍼진다.","ids":[0,14765,15908,12034,14056,15140,8985,14033,17054,14092,9237,13417,12335,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"좋은 시절이 다 지나간 것 같아 서글퍼진다."},{"text":"소중한 것을 잃어버려서 마음이 한없이 가라앉는다.","ids":[0,20392,14374,23304,29378,17348,14036,14997,25437,9698,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"소중한 것을 잃어버려서 마음이 한없이 가라앉는다."},{"text":"아무도 내 마음을 알아주지 않는 것 같아 쓸쓸하다.","ids":[0,20118,14067,16138,15706,21210,14449,14033,17054,16775,11664,22564,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"아무도 내 마음을 알아주지 않는 것 같아 쓸쓸하다."},{"text":"지난 일들이 후회돼서 밤새 눈물이 났다.","ids":[0,14141,14055,14108,24053,9895,11264,15294,11229,26129,20218,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"지난 일들이 후회돼서 밤새 눈물이 났다."},{"text":"이별 후 매일이 잿빛처럼 느껴지고 슬프기만 하다.","ids":[0,27029,14140,14174,16306,1700,12088,11044,14400,17404,14429,15815,13547,20302,14042,14130,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"이별 후 매일이 잿빛처럼 느껴지고 슬프기만 하다."},{"text":"","ids":[0,1],"attentionMask":[1,1],"decoded":""},{"text":" ","ids":[0,1700,1700,1700,1],"attentionMask":[1,1,1,1,1],"decoded":""},{"text":"\n\t \n","ids":[0,14095,229,1700,14095,1],"attentionMask":[1,1,1,1,1,1],"decoded":""},{"text":"a","ids":[0,22911,1],"attentionMask":[1,1,1],"decoded":"a"},{"text":"가","ids":[0,14039,1],"attentionMask":[1,1,1],"decoded":"가"},{"text":"😀😀 이모지가 섞인 문장이다 🎉","ids":[0,216,216,20607,14824,19274,12037,14111,14416,9754,1700,5,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"이모지가 섞인 문장이다"},{"text":"漢字와 한글이 섞인 文章입니다","ids":[0,1700,5295,3374,11863,21204,12034,19274,12037,1700,4361,6291,12049,20211,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"漢字와 한글이 섞인 文章입니다"},{"text":"2026년 8월 14일, 온도는 36.5도였고 가격은 1,200원이었다.","ids":[0,19250,15203,15639,16535,243,14488,15374,18265,15318,9866,25083,20576,17423,18604,11936,19249,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"2026년 8월 14일, 온도는 36.5도였고 가격은 1,200원이었다."},{"text":"!!!???...,,,---___","ids":[0,1700,19178,232,262,262,262,14476,243,243,243,15552,244,294,294,294,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"!!!???...,,,---___"},{"text":"https://example.com/path?query=1&other=2 링크가 들어간 문장","ids":[0,1700,25467,314,26010,23795,17941,311,16203,16738,246,311,296,16160,262,23988,14879,320,260,248,237,310,16160,14879,260,249,23602,26739,19421,26729,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"https://example.com/path?query=1&other=2 링크가 들어간 문장"},{"text":"email@example.com 으로 연락 주세요","ids":[0,20041,308,296,17761,263,23795,17941,311,16203,16738,18806,19481,14053,17275,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"email@example.com 으로 연락 주세요"},{"text":"ㅋㅋㅋㅋㅋ ㅠㅠㅠ ㅎㅎ 자모만 있는 경우","ids":[0,1700,1223,1223,1223,1223,1223,1700,214,1700,1275,1700,1226,1226,14047,10607,10500,14082,14269,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"ᄏᄏᄏᄏᄏ ᅲ ᄒᄒ 자모만 있는 경우"},{"text":"MiXeD CaSe English Sentence With CAPS","ids":[0,14759,304,287,300,267,14664,296,282,300,15516,309,302,307,15868,303,14470,16884,15265,22038,16996,304,16160,14664,264,24899,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"MiXeD CaSe English Sentence With CAPS"},{"text":"탭\t과 개행\n이 중간에 들어간다","ids":[0,1700,13153,229,9120,14100,13619,230,12034,29071,19421,9754,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"탭\t과 개행\n이 중간에 들어간다"},{"text":" 앞뒤에 공백이 많은 문장 ","ids":[0,1700,14221,9967,11786,1700,1700,28065,12034,1700,1700,14467,1700,1700,26729,1700,1700,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"앞뒤에 공백이 많은 문장"},{"text":"한글가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사","ids":[0,21204,8981,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"한글가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가"},{"text":"The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. ","ids":[0,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps"},{"text":"café naïve résumé 악센트 포함","ids":[0,16637,296,301,413,21514,296,419,21518,25614,413,314,22549,413,14850,22602,14740,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"café naïve résumé 악센트 포함"},{"text":"fi fl ½ ² 호환 문자 NFKC 대상","ids":[0,17254,304,17254,307,14035,1563,249,14043,14347,13716,19959,15366,269,274,266,14576,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"fi fl 1⁄2 2 호환 문자 NFKC 대상"},{"text":":-)8< 오늘도 힘들었다","ids":[0,134,28595,15994,22145,1],"attentionMask":[1,1,1,1,1,1],"decoded":"오늘도 힘들었다"},{"text":":-(=) 그리고 :-( 두 개","ids":[0,162,14487,1700,181,14196,14100,1],"attentionMask":[1,1,1,1,1,1,1,1],"decoded":"그리고 두 개"},{"text":":-(*) 별표 버전","ids":[0,176,14815,13497,14536,12126,1],"attentionMask":[1,1,1,1,1,1,1],"decoded":"별표 버전"},{"text":":-{} 와 :-{ 비교","ids":[0,147,14950,1700,146,15603,1],"attentionMask":[1,1,1,1,1,1,1],"decoded":"와 비교"},{"text":"^^ 오늘 기분이 좋았다","ids":[0,212,14864,21853,27793,9754,1],"attentionMask":[1,1,1,1,1,1,1],"decoded":"오늘 기분이 좋았다"},{"text":":) 반가워 :( 슬퍼","ids":[0,108,27571,11933,1700,179,15815,13417,1],"attentionMask":[1,1,1,1,1,1,1,1,1],"decoded":"반가워 슬퍼"},{"text":"ㅜㅜ 힘들다 ㅡㅡ 짜증나","ids":[0,213,15994,9754,1700,215,17345,12325,9495,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1],"decoded":"힘들다 짜증나"},{"text":":-):-):-) 연속 배치","ids":[0,107,107,107,15772,17217,1],"attentionMask":[1,1,1,1,1,1,1],"decoded":"연속 배치"},{"text":"😍 다른 이모지라 매칭에 실패한다","ids":[0,1700,5,14355,20607,12332,10213,14174,12879,11786,16207,16728,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"다른 이모지라 매칭에 실패한다"},{"text":"😀😍😀 섞어 쓰기","ids":[0,216,1700,5,216,19274,11763,28776,1],"attentionMask":[1,1,1,1,1,1,1,1,1],"decoded":"섞어 쓰기"},{"text":"끝에 추가 토큰 :-)","ids":[0,17126,14927,14521,13092,1700,107,1],"attentionMask":[1,1,1,1,1,1,1,1],"decoded":"끝에 추가 토큰"},{"text":"[CLS] 로 시작하는 문장","ids":[0,14552,266,23991,292,14524,23858,26729,1],"attentionMask":[1,1,1,1,1,1,1,1,1],"decoded":"[CLS] 로 시작하는 문장"},{"text":"[UNK] 와 [SEP] 와 [MASK] 가 본문에","ids":[0,14552,284,277,274,292,14950,14552,282,268,279,292,14950,14552,28027,24514,292,14039,14285,19141,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"decoded":"[UNK] 와 [SEP] 와 [MASK] 가 본문에"},{"text":"[PAD]","ids":[0,14552,28867,267,292,1],"attentionMask":[1,1,1,1,1,1],"decoded":"[PAD]"},{"text":"오늘 [MASK] 였다","ids":[0,14864,14552,28027,24514,292,1700,11820,9754,1],"attentionMask":[1,1,1,1,1,1,1,1,1,1],"decoded":"오늘 [MASK] 였다"}],"noTruncationCases":[{"text":"부장이 사람들 앞에서 소리를 질러서 정말 화가 치밀어 올랐다.","ids":[0,14062,14416,17015,16479,18390,14549,10277,11264,15416,20879,14349,10751,11763,19360,14130,1]},{"text":"약속 시간에 또 늦게 나타나서 짜증이 확 났어.","ids":[0,16034,20395,14153,23322,16840,11264,17345,18754,14181,20218,20838,1]},{"text":"내 물건을 허락도 없이 함부로 쓰다니 화가 나서 참을 수가 없다.","ids":[0,14067,22152,24314,9866,14807,29037,14612,17530,20879,15306,14214,12007,15764,21088,1]},{"text":"말도 안 되는 이유로 나한테 책임을 떠넘기니 분통이 터진다.","ids":[0,20016,14105,14829,16454,14054,16427,17264,14619,9557,9264,9735,14142,25441,29501,14130,1]},{"text":"새치기하는 사람을 보니 열이 받아서 한마디 하고 싶었다.","ids":[0,14206,20833,14049,16591,16201,14189,12034,14732,11264,19658,14432,14548,16367,1]},{"text":"몇 번을 말해도 안 고치니까 진짜 화가 난다.","ids":[0,15030,14415,12007,14070,16662,14105,14068,12863,14495,17240,20879,14784,14130,1]},{"text":"거짓말한 걸 뻔뻔하게 발뺌하는 게 너무 괘씸하다.","ids":[0,23618,13590,14366,20204,11092,14159,14103,11070,14049,14262,14877,1700,9138,11689,22564,1]},{"text":"내 노력을 무시하는 태도에 부아가 치밀었다.","ids":[0,14067,17939,18114,14049,14438,16075,14062,16013,14349,10751,16367,1]},{"text":"왜 자꾸 나만 가지고 트집을 잡는지 성질이 난다.","ids":[0,14851,20716,14054,10500,15292,14701,18753,14568,15965,14127,17653,14784,14130,1]},{"text":"그 사람 말투가 너무 무례해서 화가 가라앉질 않는다.","ids":[0,14028,14168,14070,13282,8981,14877,14113,10329,14668,20879,25437,12338,14449,14130,1]},{"text":"내일 중요한 발표가 있는데 잘 해낼 수 있을지 너무 걱정된다.","ids":[0,18683,15259,14615,8981,15332,14334,14088,9521,14032,21446,14877,16894,9908,14130,1]},{"text":"검사 결과가 나올 때까지 마음이 계속 조마조마하다.","ids":[0,17535,18642,17809,17476,17348,14755,14077,10496,12178,10496,22564,1]},{"text":"연락이 안 돼서 무슨 일이 생긴 건 아닌지 불안하다.","ids":[0,19481,12034,14105,15118,11264,16046,15029,18075,14205,14837,12332,16147,22564,1]},{"text":"면접 결과를 기다리는 동안 초조해서 아무것도 손에 안 잡힌다.","ids":[0,20091,16579,25392,14652,14272,12178,14668,20980,19131,14105,14568,13845,14130,1]},{"text":"빚을 어떻게 갚아야 할지 막막하고 두렵다.","ids":[0,26282,14792,20685,16402,21445,14570,10497,14058,14196,10322,14130,1]},{"text":"혹시 실수한 게 있을까 봐 자꾸 마음이 쓰인다.","ids":[0,20604,14131,18126,14262,22860,16070,20716,17348,14612,12037,14130,1]},{"text":"밤이 되면 미래가 걱정돼서 잠이 잘 안 온다.","ids":[0,15294,12034,16001,15093,8981,16894,9895,11264,29911,14334,14105,14488,14130,1]},{"text":"시험을 망칠까 봐 가슴이 두근거리고 안절부절못한다.","ids":[0,28046,15777,12869,9286,16070,23264,14196,9233,29593,14105,12130,10948,12130,10619,21158,1]},{"text":"큰 수술을 앞두고 있어서 마음이 너무 불안하다.","ids":[0,14417,22383,16016,16269,17348,14877,16147,22564,1]},{"text":"일이 잘못될까 봐 계속 신경이 곤두선다.","ids":[0,15029,15838,9910,9286,16070,14755,17219,12034,17297,9925,11268,14130,1]},{"text":"갑자기 이름이 불려서 어떻게 해야 할지 몰라 당황했다.","ids":[0,16938,20301,14135,29378,14792,15286,21445,21879,20935,15615,1]},{"text":"사람들 앞에서 넘어져서 얼굴이 화끈거리고 어쩔 줄 몰랐다.","ids":[0,17015,16479,15409,25904,20784,14267,9468,29593,20732,14390,20486,14130,1]},{"text":"예상치 못한 질문에 머릿속이 하얘졌다.","ids":[0,28993,15291,18145,24736,11320,12034,14042,11751,24002,1]},{"text":"친구인 줄 알고 인사했는데 모르는 사람이라 민망했다.","ids":[0,15230,12037,14390,15331,15196,17718,17989,14168,14096,14231,10512,15615,1]},{"text":"발표 중에 자료가 갑자기 안 열려서 진땀이 났다.","ids":[0,14615,17003,16345,8981,16938,14105,23346,11264,14132,10038,12034,20218,14130,1]},{"text":"계산하려는데 지갑을 안 가져와서 당혹스러웠다.","ids":[0,18559,14932,14304,14034,26156,14105,15950,11863,11264,14138,13700,15512,11950,14130,1]},{"text":"엉뚱한 사람에게 메시지를 잘못 보내서 크게 당황했다.","ids":[0,27219,13590,19977,20476,15838,15756,11264,15003,20935,15615,1]},{"text":"갑작스러운 상황에 뭐라고 대답해야 할지 몰라 얼떨떨했다.","ids":[0,22745,16380,18368,27669,16930,14368,21445,21879,14479,10081,10081,15615,1]},{"text":"회의에서 내 차례인 줄 몰라서 허둥지둥했다.","ids":[0,23131,14067,16023,12037,14390,21879,11264,14486,9935,12332,9935,15615,1]},{"text":"예상과 전혀 다른 반응이 돌아와서 순간 멍해졌다.","ids":[0,14791,9120,15860,14355,24273,23078,11264,15780,22817,19845,14130,1]},{"text":"드디어 합격 소식을 들어서 정말 기쁘고 날아갈 것 같다.","ids":[0,23608,18778,19022,18492,15416,21908,9102,20148,8989,14033,14163,14130,1]},{"text":"오랜만에 친구들을 만나 실컷 웃어서 하루가 즐거웠다.","ids":[0,26909,15230,14282,15166,14131,12929,15032,14996,15210,8981,19527,11950,14130,1]},{"text":"열심히 준비한 일이 잘 풀려서 뿌듯하고 행복하다.","ids":[0,17367,25906,15029,14334,27825,11264,16647,10000,14058,15664,22564,1]},{"text":"가족과 함께한 여행이 너무 좋아서 마음이 따뜻해졌다.","ids":[0,24616,14270,13590,15941,12034,14877,15339,11264,17348,18021,19845,14130,1]},{"text":"생각지도 못한 선물을 받아서 기분이 정말 좋다.","ids":[0,14246,14931,15291,25513,14732,11264,21853,15416,14271,14130,1]},{"text":"원하던 물건을 드디어 사서 신이 난다.","ids":[0,14145,15492,22152,23608,14031,11264,27381,14784,14130,1]},{"text":"칭찬을 들으니 하루 종일 기분이 들뜬다.","ids":[0,20624,12007,14172,15698,15210,29061,21853,14172,10178,14130,1]},{"text":"맛있는 음식을 먹으니 행복이 밀려온다.","ids":[0,29068,20505,14630,15698,15664,12034,20187,11843,14130,1]},{"text":"오랜 목표를 이뤄내서 성취감에 가슴이 벅차다.","ids":[0,17313,19612,15168,9517,11264,24449,21041,23264,1700,10831,12612,14130,1]},{"text":"좋아하는 사람과 함께 있어서 너무 설레고 즐겁다.","ids":[0,19471,21864,14270,16269,14877,14193,10298,9102,14999,9040,14130,1]},{"text":"믿었던 친구에게 배신을 당해서 마음이 너무 아프다.","ids":[0,15325,15912,15230,14120,14203,16187,14138,14668,17348,14877,16873,14130,1]},{"text":"사랑하는 사람에게 상처 주는 말을 들어서 가슴이 미어진다.","ids":[0,20058,19977,17689,15855,15080,18492,23264,14097,15712,14130,1]},{"text":"오랜 연인과 헤어져서 마음 한구석이 텅 빈 것 같다.","ids":[0,17313,14091,16369,15338,18619,11264,14571,14036,9170,17920,1700,13185,15692,14033,14163,14130,1]},{"text":"가까운 사람이 나를 이용했다는 걸 알고 크게 상처받았다.","ids":[0,17573,14959,16389,14533,15441,14366,15331,15003,17689,10775,18332,1]},{"text":"무심코 던진 말에 마음을 크게 다쳤다.","ids":[0,14113,11477,12972,25718,18380,16138,15003,14056,12710,14130,1]},{"text":"진심을 몰라주는 것 같아 서운하고 상처가 된다.","ids":[0,14132,15790,21879,14785,14033,17054,14092,11914,14058,17689,8981,25529,1]},{"text":"믿었던 만큼 실망이 커서 마음이 쓰라리다.","ids":[0,15325,15912,14933,14131,20494,14600,11264,17348,14612,22084,14130,1]},{"text":"가족에게 외면당한 것 같아 마음이 아프다.","ids":[0,14978,14120,21644,17029,14033,17054,17348,16873,14130,1]},{"text":"약속을 저버린 그 사람 때문에 마음의 상처가 깊다.","ids":[0,22124,14209,20860,14028,14168,14362,22983,17689,8981,15397,14130,1]},{"text":"오래 함께한 사이인데 헌신짝처럼 버려져서 가슴이 아리다.","ids":[0,16294,14270,13590,14563,15094,27534,12354,14400,25432,25904,23264,14041,10476,14130,1]},{"text":"키우던 강아지가 무지개다리를 건너서 너무 슬프다.","ids":[0,22679,9810,14119,11696,14824,28715,9006,9754,14321,18800,11264,14877,15815,13547,14130,1]},{"text":"혼자 남겨진 것 같아 눈물이 계속 흐른다.","ids":[0,16814,20296,12335,14033,17054,26129,14755,15437,10441,14130,1]},{"text":"그리운 사람이 떠올라 마음이 가라앉고 우울하다.","ids":[0,16080,11914,14959,17697,10213,17348,25437,9102,21400,22564,1]},{"text":"아무리 노력해도 나아지지 않아서 무기력하고 슬프다.","ids":[0,17882,15278,16662,19545,15594,28585,18868,10314,14058,15815,13547,14130,1]},{"text":"텅 빈 방에 혼자 있으니 외롭고 서글프다.","ids":[0,1700,13185,15692,28878,16814,20287,14226,24524,14092,9237,13547,14130,1]},{"text":"좋은 시절이 다 지나간 것 같아 서글퍼진다.","ids":[0,14765,15908,12034,14056,15140,8985,14033,17054,14092,9237,13417,12335,14130,1]},{"text":"소중한 것을 잃어버려서 마음이 한없이 가라앉는다.","ids":[0,20392,14374,23304,29378,17348,14036,14997,25437,9698,14130,1]},{"text":"아무도 내 마음을 알아주지 않는 것 같아 쓸쓸하다.","ids":[0,20118,14067,16138,15706,21210,14449,14033,17054,16775,11664,22564,1]},{"text":"지난 일들이 후회돼서 밤새 눈물이 났다.","ids":[0,14141,14055,14108,24053,9895,11264,15294,11229,26129,20218,14130,1]},{"text":"이별 후 매일이 잿빛처럼 느껴지고 슬프기만 하다.","ids":[0,27029,14140,14174,16306,1700,12088,11044,14400,17404,14429,15815,13547,20302,14042,14130,1]},{"text":"","ids":[0,1]},{"text":" ","ids":[0,1700,1700,1700,1]},{"text":"\n\t \n","ids":[0,14095,229,1700,14095,1]},{"text":"a","ids":[0,22911,1]},{"text":"가","ids":[0,14039,1]},{"text":"😀😀 이모지가 섞인 문장이다 🎉","ids":[0,216,216,20607,14824,19274,12037,14111,14416,9754,1700,5,1]},{"text":"漢字와 한글이 섞인 文章입니다","ids":[0,1700,5295,3374,11863,21204,12034,19274,12037,1700,4361,6291,12049,20211,1]},{"text":"2026년 8월 14일, 온도는 36.5도였고 가격은 1,200원이었다.","ids":[0,19250,15203,15639,16535,243,14488,15374,18265,15318,9866,25083,20576,17423,18604,11936,19249,1]},{"text":"!!!???...,,,---___","ids":[0,1700,19178,232,262,262,262,14476,243,243,243,15552,244,294,294,294,1]},{"text":"https://example.com/path?query=1&other=2 링크가 들어간 문장","ids":[0,1700,25467,314,26010,23795,17941,311,16203,16738,246,311,296,16160,262,23988,14879,320,260,248,237,310,16160,14879,260,249,23602,26739,19421,26729,1]},{"text":"email@example.com 으로 연락 주세요","ids":[0,20041,308,296,17761,263,23795,17941,311,16203,16738,18806,19481,14053,17275,1]},{"text":"ㅋㅋㅋㅋㅋ ㅠㅠㅠ ㅎㅎ 자모만 있는 경우","ids":[0,1700,1223,1223,1223,1223,1223,1700,214,1700,1275,1700,1226,1226,14047,10607,10500,14082,14269,1]},{"text":"MiXeD CaSe English Sentence With CAPS","ids":[0,14759,304,287,300,267,14664,296,282,300,15516,309,302,307,15868,303,14470,16884,15265,22038,16996,304,16160,14664,264,24899,1]},{"text":"탭\t과 개행\n이 중간에 들어간다","ids":[0,1700,13153,229,9120,14100,13619,230,12034,29071,19421,9754,1]},{"text":" 앞뒤에 공백이 많은 문장 ","ids":[0,1700,14221,9967,11786,1700,1700,28065,12034,1700,1700,14467,1700,1700,26729,1700,1700,1]},{"text":"한글가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사가나다라마바사","ids":[0,21204,8981,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,14517,19137,15356,10769,11207,1]},{"text":"The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. ","ids":[0,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,29672,1700,23988,16968,306,19306,18716,318,309,17254,310,319,23439,22549,311,314,18317,22363,21235,1700,17422,321,320,18785,25873,245,1700,1]},{"text":"café naïve résumé 악센트 포함","ids":[0,16637,296,301,413,21514,296,419,21518,25614,413,314,22549,413,14850,22602,14740,1]},{"text":"fi fl ½ ² 호환 문자 NFKC 대상","ids":[0,17254,304,17254,307,14035,1563,249,14043,14347,13716,19959,15366,269,274,266,14576,1]},{"text":":-)8< 오늘도 힘들었다","ids":[0,134,28595,15994,22145,1]},{"text":":-(=) 그리고 :-( 두 개","ids":[0,162,14487,1700,181,14196,14100,1]},{"text":":-(*) 별표 버전","ids":[0,176,14815,13497,14536,12126,1]},{"text":":-{} 와 :-{ 비교","ids":[0,147,14950,1700,146,15603,1]},{"text":"^^ 오늘 기분이 좋았다","ids":[0,212,14864,21853,27793,9754,1]},{"text":":) 반가워 :( 슬퍼","ids":[0,108,27571,11933,1700,179,15815,13417,1]},{"text":"ㅜㅜ 힘들다 ㅡㅡ 짜증나","ids":[0,213,15994,9754,1700,215,17345,12325,9495,1]},{"text":":-):-):-) 연속 배치","ids":[0,107,107,107,15772,17217,1]},{"text":"😍 다른 이모지라 매칭에 실패한다","ids":[0,1700,5,14355,20607,12332,10213,14174,12879,11786,16207,16728,1]},{"text":"😀😍😀 섞어 쓰기","ids":[0,216,1700,5,216,19274,11763,28776,1]},{"text":"끝에 추가 토큰 :-)","ids":[0,17126,14927,14521,13092,1700,107,1]},{"text":"[CLS] 로 시작하는 문장","ids":[0,14552,266,23991,292,14524,23858,26729,1]},{"text":"[UNK] 와 [SEP] 와 [MASK] 가 본문에","ids":[0,14552,284,277,274,292,14950,14552,282,268,279,292,14950,14552,28027,24514,292,14039,14285,19141,1]},{"text":"[PAD]","ids":[0,14552,28867,267,292,1]},{"text":"오늘 [MASK] 였다","ids":[0,14864,14552,28027,24514,292,1700,11820,9754,1]}],"decodeCases":[{"ids":[0,100,200,300,1],"decoded":"e"},{"ids":[0,1],"decoded":""},{"ids":[1],"decoded":""},{"ids":[0,5,6,3,3,1],"decoded":""},{"ids":[14000,15000,16000,17000],"decoded":"𤇜 삶건을 디자인"},{"ids":[0,9999,3,20000,1,3,3,3],"decoded":"듭 '그"}]}} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 57869dee..b4ee30df 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,8 +17,8 @@ detekt = "1.23.8" kotlinx-serialization = "1.11.0" coroutines = "1.10.2" litert = "2.1.5" -djl = "0.33.0" -onnxruntime = "1.20.0" +# 1.21.1 부터 libonnxruntime4j_jni.so 가 16KB 페이지에 맞춰 정렬된다(1.20.0, 1.21.0 은 4KB). +onnxruntime = "1.21.1" orbit-mvi = "11.0.0" retrofit = "3.0.0" okhttp = "5.4.0" @@ -76,9 +76,6 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t javax-inject = { module = "javax.inject:javax.inject", version = "1" } litert = { module = "com.google.ai.edge.litert:litert", version.ref = "litert" } -djl-bom = { module = "ai.djl:bom", version.ref = "djl" } -djl-huggingface-tokenizers = { module = "ai.djl.huggingface:tokenizers" } -djl-android-tokenizer-native = { module = "ai.djl.android:tokenizer-native", version.ref = "djl" } onnxruntime-android = { module = "com.microsoft.onnxruntime:onnxruntime-android", version.ref = "onnxruntime" } orbit-core = { module = "org.orbit-mvi:orbit-core", version.ref = "orbit-mvi" }