c_NlpCharGraph: 分析一篇文章,建立字与字的关系
c_NlpNgramGraph: 基于 n 个已经出现的词,预估后续可能出现的词 c_NlpLanguageModel: 如果有的词组合形式没有出现过,找到之前学习过最长类似的词句进行预测
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
#include "c_NlpNgramGraph.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define RUN_TEST(test_case, name) \
|
||||
do { \
|
||||
printf("[RUN] %s... ", name); \
|
||||
if (test_case) { \
|
||||
printf("\033[32mPASSED\033[0m\n"); \
|
||||
} else { \
|
||||
printf("\033[31mFAILED\033[0m (%s:%d)\n", __FILE__, __LINE__); \
|
||||
return C_ERR_FAIL; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
static c_err_t test(void) {
|
||||
/* 33. 多元馬爾可夫鏈(Trigram)核心通路驗證 */
|
||||
c_NlpNgramGraph_t trigram;
|
||||
// 建立 3元 模型:需要根據 2 个字的历史預測第 3 个字
|
||||
c_err_t err = c_NlpNgramGraph_Init(&trigram, 3, 512, 8);
|
||||
RUN_TEST(err == C_ERR_OK, "Trigram Graph initialized cleanly");
|
||||
|
||||
// 載入預測語料:"自然语言、自然界、自然语言"
|
||||
// 當已知歷史短语是 "自然" 时,"语" 出现了 2 次,"界" 出现了 1 次
|
||||
c_ucs4_t corpus_stream[] = {
|
||||
0x81EA, 0x7136, 0x8BED, 0x8A00, // 自然语言
|
||||
0x81EA, 0x7136, 0x754C, // 自然界
|
||||
0x81EA, 0x7136, 0x8BED, 0x8A00 // 自然语言
|
||||
};
|
||||
err = c_NlpNgramGraph_Process(&trigram, corpus_stream, 11);
|
||||
RUN_TEST(err == C_ERR_OK && trigram.total_states > 0, "Trigram processed training data stream");
|
||||
|
||||
// 構建查詢歷史:[0x81EA, 0x7136] ➔ 代表 "自然"
|
||||
c_ucs4_t query_history[] = { 0x81EA, 0x7136 };
|
||||
c_ucs4_t pred_res = 0;
|
||||
double pred_conf = 0.0;
|
||||
|
||||
err = c_NlpNgramGraph_PredictNext(&trigram, query_history, &pred_res, &pred_conf);
|
||||
RUN_TEST(err == C_ERR_OK, "PredictNext completed high-order context traversal paths");
|
||||
|
||||
// 預期:準確命中 "语" (0x8BED),置信度為 2 / 3 = 66.67%
|
||||
RUN_TEST(pred_res == 0x8BED, "Trigram language model predicts '语' given advanced context '自然'");
|
||||
RUN_TEST(pred_conf > 0.66 && pred_conf < 0.67, "Context-bound model confidence targets 66.67%% correctly");
|
||||
|
||||
c_NlpNgramGraph_Destroy(&trigram);
|
||||
|
||||
return C_ERR_OK;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv){
|
||||
return test();
|
||||
}
|
||||
Reference in New Issue
Block a user