{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2608-21365","title":"KSE-Web: An Analysis of Hybrid Retrieval and LLM-Assisted Query Expansion for Low-Resource Khmer Semantic Search","arxiv_id":"2608.21365","date":"2026-06-17","proceeding":null,"authors":["Nimol Thuon"],"abstract":"As a low-resource language, Khmer presents several retrieval challenges, including limited annotated data, ambiguous word boundaries, weak support in multilingual embedding models, and frequent mixed Khmer-English usage. This paper presents KSE-Web, an analysis of hybrid retrieval and LLM-assisted query expansion for Khmer semantic search. We construct the dataset from approximately 17K candidate Khmer titles and retain 3K cleaned full-text Khmer documents after filtering, normalization, deduplication, and document-length control. The dataset includes 300 manually reviewed user-style Khmer search queries and silver relevance labels with partial human verification. We evaluate character n-gram BM25, multilingual dense retrieval, hybrid BM25+dense retrieval, and LLM-assisted query expansion using Qwen2.5 models. Experimental results show that BM25 achieves the strongest overall performance, reaching 0.943 Recall and 0.876 nDCG. Hybrid BM25+dense retrieval performs comparably, achieving 0.929 Recall and 0.871 nDCG, while dense retrieval alone performs lower. LLM-assisted query expansion does not outperform non-expanded retrieval; however, Qwen2.5-3B produces substantially stronger expanded-query results than Qwen2.5-0.5B, suggesting that LLM size and expansion quality matter for low-resource Khmer retrieval. Our analysis further shows that direct LLM expansion can introduce topic drift, generic terms, and noisy reformulations, while simple filtering may remove useful semantic cues. These findings highlight both the potential and limitations of LLM-assisted retrieval for Khmer semantic search and provide a foundation for future Khmer retrieval datasets with stronger human-verified annotations and Khmer-aware retrieval models. The dataset and documentation will be made available at github.com/back-kh/KhmerSemantic-Search.","url_abs":"https://arxiv.org/abs/2608.21365","url_pdf":"https://arxiv.org/pdf/2608.21365","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2608.21365","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2608.21365"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/back-kh/Khmer-Semantic-Search","reach":null}],"summary":{"ran":1,"ran_draft_wrong":9,"ran_fixture":2,"ran_violates":1,"unverified":4},"by_repo_kind":{"found_in_text":{"samples":17,"ran":13,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"e0a2c08bc2b4b791","entry":"BM25Index","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e0a2c08bc2b4b791"}},{"code_sha256_prefix":"866fba16ea7fde14","entry":"build_bm25","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"866fba16ea7fde14"}},{"code_sha256_prefix":"522090e2d514c116","entry":"char_ngrams","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"522090e2d514c116"}},{"code_sha256_prefix":"43bf686d2c6974d7","entry":"dcg_at_k","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"43bf686d2c6974d7"}},{"code_sha256_prefix":"f41f2beff28b0d8b","entry":"dense_encode","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"DEP_MISSING","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f41f2beff28b0d8b"}},{"code_sha256_prefix":"355a807679ab62e5","entry":"evaluate_run","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"355a807679ab62e5"}},{"code_sha256_prefix":"b1a087686a8476e2","entry":"get_first","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b1a087686a8476e2"}},{"code_sha256_prefix":"b9c3618d91912788","entry":"load_documents","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b9c3618d91912788"}},{"code_sha256_prefix":"8772de2956a1a1a4","entry":"load_qrels","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8772de2956a1a1a4"}},{"code_sha256_prefix":"0b8da80a15fb112a","entry":"minmax","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0b8da80a15fb112a"}},{"code_sha256_prefix":"b5c9df74f54329f8","entry":"normalize_khmer_text","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b5c9df74f54329f8"}},{"code_sha256_prefix":"4fc027c853affddb","entry":"read_jsonl","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4fc027c853affddb"}},{"code_sha256_prefix":"5d7210013125669d","entry":"top_docs","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5d7210013125669d"}},{"code_sha256_prefix":"4a54feefd1f8167e","entry":"load_queries","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4a54feefd1f8167e"}},{"code_sha256_prefix":"b84f26eda680ba83","entry":"main","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b84f26eda680ba83"}},{"code_sha256_prefix":"43aa639ab15c4862","entry":"parse_args","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"43aa639ab15c4862"}},{"code_sha256_prefix":"074de82d829145f8","entry":"write_outputs","repo":"back-kh/Khmer-Semantic-Search","repo_kind":"found_in_text","path":"codes/evaluate_retrieval.py","file_url":"https://github.com/back-kh/Khmer-Semantic-Search/blob/HEAD/codes/evaluate_retrieval.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"074de82d829145f8"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CL","source":"arxiv_2026.jsonl"},"syntology_extracted_results":{"kind":"leaderboard_placements","source":"Syntology's leaderboard-shaped extractor over the paper's own arXiv-HTML tables: a model pointed at a cell, the number was read from that cell and checked against the board's metric, dataset, split and scale, and an independent check accepted the entry; not reviewed by the paper's authors or the archive's editors","extractor_model":"global.anthropic.claude-sonnet-4-5-20250929-v1:0","verifier_model":null,"prompt_sha":"fa63d4bb9d755694","coverage":{"sentence":"Syntology has checked 6,264 of the 9,581 papers on this site that are newer than the archive; results from the others appear after they are checked.","papers_newer_than_archive":9581,"papers_checked":6264},"entries":[],"not_placed":{"boards":0,"rejected_by_independent_check":0,"refused_by_a_rule":0,"check_did_not_answer":0,"proposed_without_a_cell":0,"declined_by_site":0}}}