萎靡不正:

c++

c语言

你提供的两个文本: - **文本1**: `寒冷, 神情萎靡, 面色暗淡, 口不渴, 声音低微, 大便溏薄,小便清长, 舌淡胖嫩,苔白滑, 脉沉细迟弱,无力` - **文本2**: `冷` 它们的**余弦相似度仅为 0.0302**,这表明模型认为这两个文本几乎**无关**,但显然在语义上它们是高度相关的。 --- ## 🧠 问题分析 ### ✅ 1. 模型训练语料不足或质量不高 - 如果你的模型是基于少量或非医学语料训练的,那么模型对“寒冷”与“冷”的语义关系无法准确捕捉。 - 中医术语(如“舌淡胖嫩”、“脉沉细迟弱”)在通用语料中极少出现,模型对其理解有限。 ### ✅ 2. 使用 `infer_vector` 方法不稳定 - `infer_vector` 是一种**基于随机初始化的推断方法**,它不是训练时使用的向量。 - 即使两个文本语义接近,`infer_vector` 的结果可能差异很大。 ### ✅ 3. 分词方式不适应医学术语 - `jieba.lcut` 默认使用通用词典,可能将“舌淡胖嫩”拆成“舌 / 淡 / 胖 / 嫩”,而不是作为一个整体词处理。 - 这会导致模型无法识别“舌淡胖嫩”是一个完整的中医术语。 --- ## ✅ 解决方案 ### ✅ 1. 使用**词向量平均法**代替 `infer_vector` ```python def get_sentence_vector(self, model, words): vectors = [model.wv[word] for word in words if word in model.wv] if not vectors: return np.zeros(model.vector_size) return np.mean(vectors, axis=0) ``` 替换掉你原来的 `infer_vector`: ```python vec1 = self.get_sentence_vector(self.model, words1) vec2 = self.get_sentence_vector(self.model, words2) ``` ### ✅ 2. 加入医学术语词典 你可以为 `jieba` 添加中医术语词典,提升分词准确性: ```python jieba.load_userdict("medical_terms.txt") # 自定义词典文件 ``` 示例 `medical_terms.txt` 内容: ``` 舌淡胖嫩 苔白滑 脉沉细迟弱 大便溏薄 小便清长 ``` ### ✅ 3. 使用训练时的文档向量(推荐) 如果你在训练时使用了 `TaggedDocument`,你可以使用 `model.docvecs` 来获取训练好的文档向量: ```python doc_vec = model.docvecs[doc_id] # doc_id 是训练时分配的文档标签 ``` ### ✅ 4. 增加中医语料训练 - 使用中医教材、病历、论文等构建训练语料库。 - 更多中医语料 = 更好的中医术语理解能力。 --- ## ✅ 示例修复代码(修改 `evaluate_similarity` 函数) ```python def get_sentence_vector(self, model, words): vectors = [model.wv[word] for word in words if word in model.wv] if not vectors: return np.zeros(model.vector_size) return np.mean(vectors, axis=0) def evaluate_similarity(self): if self.model is None: self.log("请先加载模型!") QMessageBox.warning(self, "警告", "请先加载模型!") return text1 = self.text1.text() text2 = self.text2.text() if not text1 or not text2: self.log("请输入两段文本用于评估。") QMessageBox.warning(self, "警告", "请输入两段文本用于评估。") return words1 = jieba.lcut(text1) words2 = jieba.lcut(text2) vec1 = self.get_sentence_vector(self.model, words1) vec2 = self.get_sentence_vector(self.model, words2) similarity = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2)) self.log(f"文本1: {text1}") self.log(f"文本2: {text2}") self.log(f"余弦相似度: {similarity:.4f}") ``` --- ## ✅ 进阶优化建议 | 优化项 | 建议 | |--------|------| | 使用 `model.docvecs` | 获取训练时的真实文档向量 | | 构建中医语料库 | 提高模型对中医术语的理解 | | 使用 `TF-IDF` 加权平均 | 提高关键词权重 | | 使用 `BERT` 或 `SimCSE` | 更先进的语义相似度模型 | --- ## ✅ 总结 | 方法 | 优点 | 缺点 | |------|------|------| | `infer_vector` | 模型自带 | 不稳定,结果不可靠 | | 词向量平均法 | 简单、稳定 | 忽略语序 | | `docvecs[i]` | 精确匹配训练文档 | 仅限训练时使用的文档 | | 加入中医词典 | 提高分词精度 | 需要手动维护词典 | | 增加中医语料 | 提高模型理解能力 | 需要大量语料 | --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值