Gensim的WMD模型返回无穷大,求适配技术技能场景的预训练模型建议
WMD返回无穷大的问题原因
- 核心原因是
word2vec-google-news-300的训练语料以通用新闻内容为主,技术类专有名词覆盖率极低,只要两个待计算文本序列中存在任意一个不在模型词表内的词汇,WMD计算就会直接返回inf。你可以先执行print("django" in model)验证,大概率返回False,这就是你输入两个相同django仍返回无穷大的原因。 - 你提供的测试代码存在两处拼写错误:导入模块时写的是大写
API,后续调用用的是小写api,会直接报错;词汇列表里"aws" "cli"中间缺少逗号、reddis拼写应为redis,错误拼写的词汇也会无法匹配词表。
技术类文本适配的预训练模型推荐
- Stack Exchange 300维预训练词向量:基于Stack Overflow等技术社区全量内容训练,几乎覆盖所有主流编程语言、开发工具、技术架构专有名词,是技术文本相似度计算的首选方案,技术领域词汇覆盖率比谷歌新闻词向量高出90%以上。
- CodeSearchNet预训练词向量:由GitHub基于千万级代码仓库和配套技术文档训练,同时适配自然语言技术描述和代码标识符,适合同时涉及代码和技术文本的计算场景。
- 中文技术社区预训练词向量:如果你的计算场景涉及中文技术内容,可选用基于国内开发者社区、技术博客语料训练的版本,对中英文混合的技术描述适配性更好。
修正后的测试代码
import gensim.downloader as api # 加载技术领域预训练模型后测试 model = api.load("stack-exchange-300") # 提前验证词汇是否在词表 print("django" in model) print("kafka" in model) distance = model.wmdistance( ["kafka"], ["django","pip","conda","python","django","java","springboot","rest","microservices","microservices","redis","kafka","consumer","publisher","spark","storm","rabbitmq","customer", "service","eventbus","service","aws","aws","cli","azure","google","cloud","shell","bash","script","config","lambda"] ) print(distance)
内容的提问来源于stack exchange,提问作者Vishakha Nagpal
相关产品推荐
相关产品推荐

