Semantic_Embedding_Reverse_Dictionary
daveshap/Semantic_Embedding_Reverse_Dictionary加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这种经历:脑子里明明清楚那个词是什么意思,却怎么也想不起它怎么拼、怎么写?
比如,你记得"形容人说话时故意拖长音调、带着嘲讽意味的语调"这个描述,但绞尽脑汁也找不到对应词汇——去百度百科、搜狗词库都无功而返,LLM 也没能直接命中。这种"词在嘴边却叫不出名字"的感觉,语言学上叫舌尖现象(Tip of the Tongue),每个文字工作者、翻译、创作者大概都经历过。
David Shapiro 给我们提供了一个另辟蹊径的工具:语义向量反向查词器(Semantic Embedding Reverse Dictionary)。它的核心思路是:不从词查义,而是从义查词——用户输入一段描述,系统在 Wiktionary 的百万词条中,通过向量相似度匹配找到最贴合的词汇。
传统词典和同义词库(Thesaurus)解决的是"已知词、查近义"的问题,但前提是用户已经知道那个词。比如你知道"讽刺"这个词,想找近义词,同义词库很好用。
反向词典(Reverse Dictionary)的思路正好相反——用户给出描述,系统来匹配词。这不是新概念,Dict.cc、OneLook 等早期工具已经尝试过,但它们本质上是"规则匹配",依赖人工编纂的同义词关系网络,一旦用户描述的角度稍有偏差,结果就离题万里。
真正的转折点来自语义向量搜索的成熟。当词条和用户查询都被转为高维向量后,系统可以做"语义最近邻检索"——不在词典里找完全匹配的定义,而是找向量空间中距离最近的词。这让"fumfer"(故意拖长嘲讽语调的行为)这种连 GPT-4 都可能"盲区"的冷门词汇,也能被准确命中。
项目的数据来源是 Wiktionary 2023年10月 dump(enwiktionary-20231020-pages-articles-multistream.xml.bz2),这是一份覆盖多语言的开放词库,包含超过百万个词条的原始定义文本。
处理流程大致分为以下几个阶段:
数据预处理:解析 Wiktionary XML dump,提取每个词条的词性、定义文本、语言标签等结构化信息。对每个词条的英文定义进行清洗,去除维基标记语言和 HTML 残留。
向量编码:将每条定义通过 OpenAI 的 text-embedding-ada-002 模型,编码为 1536 维向量。同一语义的内容在向量空间中彼此接近。
用户查询处理:用户输入自然语言描述,同样通过 embedding 模型转为向量。
最近邻检索:在已构建好的词条向量库中,通过余弦相似度(cosine similarity)找到与查询向量最接近的 Top-N 词条候选。
后处理排序:对候选词条进行二次过滤和排序,最终呈现最贴合用户描述的结果。
数据驱动,冷门词覆盖能力强。传统同义词库依赖人工维护,冷门词汇容易被忽略;Wiktionary 作为社区驱动的开放词库,每月更新、覆盖小众术语的能力远超前两者。
基于真实定义,而非同义词表。大多数同义词工具告诉你"近义词是什么",而反向词典告诉你"这个描述对应哪个词"——两者解决的是不同层次的问题。
调用 OpenAI API,成本可控。向量化阶段需要一次批量处理(百万级词条),但之后每次查询只是单次 embedding 加向量检索,计算成本极低。
纯研究导向,非生产级应用。项目目前仅有 38 颗星、2 次提交,更像一个概念验证(Proof of Concept)而非成熟产品。缺乏容器化、一键部署脚本,数据预处理流程也未完全自动化。
由于项目尚无 Web UI,直接使用需要具备以下条件:
数据质量参差不齐:Wiktionary 由全球志愿者编辑,词条定义质量差异显著,同一词可能有多个含义版本。如何选择最优定义文本喂给 embedding 模型,直接影响检索质量。
多语言支持尚未验证:数据源是多语言 Wiktionary,但项目 README 和 system01 文件只提及英文场景,中文或其他语言的反向查询能力未经测试。
工程化程度低:无 Dockerfile、无 docker-compose、无安装脚本,数据预处理需要手动执行命令。开发者 David Shapiro 的主业是 AI 哲学与系统性思维教育,这个项目更像是个人兴趣探索,而非持续维护的开源产品。
向量检索精度依赖 embedding 模型:OpenAI 的 text-embedding-ada-002 对英文效果良好,但跨语言场景(如用中文描述查英文词)可能失效。
反向词典是 RAG(检索增强生成)和语义搜索技术的典型应用场景。随着 embedding 模型能力提升(如 text-embedding-3 系列支持 256 维以上的多语言编码),类似的工具可以扩展为多语言互查、跨语言学术术语检索等专业用途。
GitHub 上已有多个类似项目,但大多停留在 demo 阶段。这个项目最有意思的地方在于它的问题意识——从"词在嘴边"的真实痛点出发,用最简单的技术路径解决,而不是堆砌复杂的模型。
如果你是 NLP 研究者、词典应用开发者或对语义搜索感兴趣的工程师,这个项目值得 fork 并在本地跑通;如果你期望开箱即用的生产工具,可能还需要等待项目进一步成熟。
# 1. 克隆仓库
git clone https://github.com/daveshap/Semantic_Embedding_Reverse_Dictionary.git
cd Semantic_Embedding_Reverse_Dictionary
# 2. 下载 Wiktionary 数据
# https://dumps.wikimedia.org/enwiktionary/20231020/
# 下载 enwiktionary-20231020-pages-articles-multistream.xml.bz2
# 3. 配置 OpenAI API Key
export OPENAI_API_KEY=your_key_here
# 4. 构建向量索引(需自行实现)
# 读取 README.md 获取详细步骤