{"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/sato-contextual-semantic-type-detection-in","title":"Sato: Contextual Semantic Type Detection in Tables","arxiv_id":"1911.06311","date":"2019-11-14","proceeding":null,"authors":["Dan Zhang","Yoshihiko Suhara","Jinfeng Li","Madelon Hulsebos","Çağatay Demiralp","Wang-Chiew Tan"],"abstract":"Detecting the semantic types of data columns in relational tables is important for various data preparation and information retrieval tasks such as data cleaning, schema matching, data discovery, and semantic search. However, existing detection approaches either perform poorly with dirty data, support only a limited number of semantic types, fail to incorporate the table context of columns or rely on large sample sizes for training data. We introduce Sato, a hybrid machine learning model to automatically detect the semantic types of columns in tables, exploiting the signals from the context as well as the column values. Sato combines a deep learning model trained on a large-scale table corpus with topic modeling and structured prediction to achieve support-weighted and macro average F1 scores of 0.925 and 0.735, respectively, exceeding the state-of-the-art performance by a significant margin. We extensively analyze the overall and per-type performance of Sato, discussing how individual modeling components, as well as feature categories, contribute to its performance.","url_abs":"https://arxiv.org/abs/1911.06311v3","url_pdf":"https://arxiv.org/pdf/1911.06311v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"sato-contextual-semantic-type-detection-in","repo_url":"https://github.com/megagonlabs/sato","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"column-type-annotation","task_name":"Column Type Annotation"},{"task_slug":"hybrid-machine-learning","task_name":"Hybrid Machine Learning"},{"task_slug":"information-retrieval","task_name":"Information Retrieval"},{"task_slug":"retrieval","task_name":"Retrieval"},{"task_slug":"structured-prediction","task_name":"Structured Prediction"},{"task_slug":"type","task_name":"Vocal Bursts Type Prediction"}],"methods":[],"datasets_introduced":[{"slug":"viznet-sato","name":"VizNet-Sato","full_name":""}],"methods_introduced":[],"results":[{"leaderboard":"/sota/column-type-annotation-on-viznet-sato-full","task":"Column Type Annotation","dataset":"VizNet-Sato-Full","model":"Sato","rank_in_archive_order":3,"of":4,"metrics":{"Macro-F1":"75.6","Weighted-F1":"90.2"},"uses_additional_data":false},{"leaderboard":"/sota/column-type-annotation-on-viznet-sato-1","task":"Column Type Annotation","dataset":"VizNet-Sato-MultiColumn","model":"Sato","rank_in_archive_order":2,"of":2,"metrics":{"Macro-F1":"73.5","Weighted-F1":"92.5"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1911.06311","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1911.06311"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/megagonlabs/sato","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_violates":1,"unverified":9},"by_repo_kind":{"official":{"samples":10,"ran":1,"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":"8605dc8a088f3db8","entry":"str2bool","repo":"megagonlabs/sato","repo_kind":"official","path":"utils.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/utils.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8605dc8a088f3db8"}},{"code_sha256_prefix":"1f0d035e3c70964f","entry":"allowed_file","repo":"megagonlabs/sato","repo_kind":"official","path":"demo/server.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/demo/server.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1f0d035e3c70964f"}},{"code_sha256_prefix":"815cc360b42ebf2f","entry":"build_sherlock","repo":"megagonlabs/sato","repo_kind":"official","path":"model/models_sherlock.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/model/models_sherlock.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"815cc360b42ebf2f"}},{"code_sha256_prefix":"993b8bc93804d3dd","entry":"clean","repo":"megagonlabs/sato","repo_kind":"official","path":"topic_model/train_LDA.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/topic_model/train_LDA.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"993b8bc93804d3dd"}},{"code_sha256_prefix":"26f0659d5a39b69d","entry":"dic2name","repo":"megagonlabs/sato","repo_kind":"official","path":"utils.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"26f0659d5a39b69d"}},{"code_sha256_prefix":"fb15c7324ef503bc","entry":"expand","repo":"megagonlabs/sato","repo_kind":"official","path":"topic_model/LDA_cluster.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/topic_model/LDA_cluster.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"fb15c7324ef503bc"}},{"code_sha256_prefix":"daab58301f8224f7","entry":"overlap","repo":"megagonlabs/sato","repo_kind":"official","path":"topic_model/LDA_cluster.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/topic_model/LDA_cluster.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"daab58301f8224f7"}},{"code_sha256_prefix":"c87a21b8671acad0","entry":"process_col","repo":"megagonlabs/sato","repo_kind":"official","path":"topic_model/train_LDA.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/topic_model/train_LDA.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c87a21b8671acad0"}},{"code_sha256_prefix":"de3cec9d172b9736","entry":"str_or_none","repo":"megagonlabs/sato","repo_kind":"official","path":"utils.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"de3cec9d172b9736"}},{"code_sha256_prefix":"b8dfe1a304802343","entry":"tokenize","repo":"megagonlabs/sato","repo_kind":"official","path":"topic_model/train_LDA.py","file_url":"https://github.com/megagonlabs/sato/blob/HEAD/topic_model/train_LDA.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b8dfe1a304802343"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}