{"id":29024544,"url":"https://github.com/nangong918/smartmedicine-app","last_synced_at":"2025-06-26T04:02:25.490Z","repository":{"id":293632382,"uuid":"984633583","full_name":"nangong918/SmartMedicine-App","owner":"nangong918","description":"智能医疗推荐问答App 推荐算法：协同过滤，基于内容，神经网络  搜索引擎：ElasticSearch、word2vec/IK分词搜索、知识图谱  IM系统：SpringCloud系列，Netty 终端：Android、JNI 大数据：Hadoop、Spark、Flink、Hive、HBase 爬虫：selenium、lxml 后台：JS，Vue，ElementUI","archived":false,"fork":false,"pushed_at":"2025-06-21T02:54:49.000Z","size":41482,"stargazers_count":10,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2025-06-21T03:38:34.147Z","etag":null,"topics":["android","bert","cpp","flink","hive","instant-messaging","java","jni","kotlin","nlp","python","recommender-systems","rtmp","spark","spring-boot","spring-cloud","tensorflow","webrtc"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mulanpsl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nangong918.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-16T08:50:03.000Z","updated_at":"2025-06-21T02:54:56.000Z","dependencies_parsed_at":"2025-06-21T03:48:54.263Z","dependency_job_id":null,"html_url":"https://github.com/nangong918/SmartMedicine-App","commit_stats":null,"previous_names":["nangong918/smartmedicine--app","nangong918/smartmedicine-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nangong918/SmartMedicine-App","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nangong918%2FSmartMedicine-App","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nangong918%2FSmartMedicine-App/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nangong918%2FSmartMedicine-App/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nangong918%2FSmartMedicine-App/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nangong918","download_url":"https://codeload.github.com/nangong918/SmartMedicine-App/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nangong918%2FSmartMedicine-App/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261997411,"owners_count":23242250,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","bert","cpp","flink","hive","instant-messaging","java","jni","kotlin","nlp","python","recommender-systems","rtmp","spark","spring-boot","spring-cloud","tensorflow","webrtc"],"created_at":"2025-06-26T04:02:23.450Z","updated_at":"2025-06-26T04:02:25.482Z","avatar_url":"https://github.com/nangong918.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"**SmartMedicine-智能医疗App**\n=============================\n\n# 项目介绍\n\n#### 智能医疗App:\n\n##### 项目功能\n\n文章推荐,医疗社区,动态发布,在线问诊,AI问答,疾病预测,便捷搜索等功能\n\n##### 环境配置\n\n[项目环境配置介绍](环境配置.md)\n\n##### 模块及其技术栈\n\n* 推荐算法：协同过滤，基于内容，神经网络\n* 搜索引擎：ElasticSearch、word2vec/IK分词搜索、知识图谱\n* IM系统：SpringCloud系列，Netty\n* 网关：spring-cloud-gateway + Nginx\n* 终端：Android、JNI/NDK\n* 大数据：Hadoop、Spark、Flink、Hive、HBase\n* 爬虫：selenium、lxml\n* 后台：JS，Vue，ElementUI\n\n[Spring项目](spring-server/README.md)\n[Android项目](android-frontend/README.md)\n\n## 设计思路\n\n(下面内容包含UML图,要查看UML需要下载IDEA的插件:PlantUML):[PlantUML插件](https://plugins.jetbrains.com/plugin/7017-plantuml-integration)\n\n[项目设计思路](项目设计思路.md)\n\n### 项目基本功能\n* 推荐系统\n  * 用户特征提取：\n    * 最近浏览记录\n    * 搜索记录\n    * 聊天记录分词\n  * 搜索推荐\n    * Bert意图分类 + 知识图谱获取获取实体\n  * 文章推荐\n    * 召回\n    * 粗排精排、重排、曝光去重\n    * 数据分析：Flink、Hive、Spark，Hadoop\n* 医疗社区\n    * 发布帖子 [发布帖子UML时序图](spring-server/business/post-service/docs/发布帖子.puml)\n* AI问诊\n* 搜索\n  * 搜索用户\n    * 模糊匹配用户Account(MySQL的like)\n    * 模糊分词匹配用户的Name(ElasticSearch的IK分词搜索)\n  * 搜索帖子\n      * 分词搜索帖子（ElasticSearch的IK分词搜索）\n      * 相关性关键词/帖子推荐（推荐系统(搜索模块)：知识图谱 + NLP）\n* 个人\n  * 疾病预测（多层感知机 + 全连接层）\n  * 用药提醒（Netty实现IM）\n  * 好友聊天（Netty实现IM）\n  * 点赞收藏记录\n\n## ⚠注意\n\n此项目为个人2024年天津科技大学本科毕业设计论文，仅供开源学习参考。禁止用于其他用途。/\n\n[项目论文-本人本科毕业设计论文](20201220-陈治宇-基于机器学习的智能医疗对话APP的设计.pdf)\n\n## 内容介绍\n\n##### 文章推荐\n\n基于nlp的内容推荐(Bert模型推荐分类 + 知识图谱) + 基于协同过滤\\矩阵推荐(User CF,Item CF,MF,ALS,SVD) + 神经网络推荐(NCF)\n\n![.png](assets/推荐系统结果.png)\n推荐系统结果\n\n根据用户行为，搜索内容，留存时间等进行推荐\n\n![.png](assets/推荐模块文章.png)\n\n推荐模块文章\n\n![.png](assets/矩阵分解.png)\n\n矩阵分解\n\n矩阵分解是为了从用户-item 矩阵中提取潜在因素，以便更好地预测用户对未见过物品的偏好，解决系数矩阵问题\n\n![NCF.png](assets/NCF框架.png)\n\nNCF算法框架\n\n传统的矩阵分解方法（如 SVD）通常假设用户和物品之间的关系是线性的，而 NCF 通过使用深度学习模型，可以捕捉到更复杂的非线性关系，从而提高推荐的准确性。\n\n![NeuMF_test.png](assets/NeuMF_test.png)\n\nNeuMF张量图\n\n![NeuMF_acc.png](assets/NeuMF_acc.png)\n\nNeuMF_acc\n\n![NeuMF_loss.png](assets/NeuMF_loss.png)\n\nNeuMF_loss\n\n![.png](assets/知识图谱.png)\n\n知识图谱\n\n推荐系统中：知识图谱通过结构化的形式组织了大量的实体及其之间的关系，使推荐系统能够更好地理解用户的兴趣和偏好。\n\n自然语言理解中：用于自然语言理解之后生成cql语句查询数据然后槽填充回答问题。\n\n关系查询\n\n```sql\nSELECT r.relationship, e2.name\nFROM entities AS e1\nJOIN relationships AS r ON e1.id = r.entity1_id\nJOIN entities AS e2 ON r.entity2_id = e2.id\nWHERE e1.name = 'Entity A';\n```\n\nMysql关系查询\n\n```sql\nMATCH (e:Entity {name: 'Entity A'})-[r]-\u003e(related)\nRETURN r, related;\n```\n\n知识图谱查询关系\n\n##### 搜索引擎\n\n搜索引擎采用：ElasticSearch + word2vec/IK分词搜索 + 知识图谱\n\n###### 词语相似关系模糊搜索\n\n![.png](assets/图路径.png)\n知识图谱-图路径\n用于实体相似度功能,实现搜索引擎中的模糊搜索。\n例如:搜索`\"感冒\"`会推荐`\"鼻塞\"`；其本质就是推荐。\n\n###### 词语分词模糊搜索\n\nElasticSearch:倒排索引,用IK活着word2vec分词，实现搜索引擎中的分词模糊搜索。\n例如搜索`\"感冒症状\"`若无,则会分词为`\"感冒\"` + \"症状\"搜索,如果存在`\"感冒发烧的症状\"`类似`\"感冒\" + \"*\" + \"症状\"`则会返回\n\n##### AI问诊\n\n基于nlp的自然语言理解(Bert意图分类) + 基于知识图谱的问答(知识图谱实体索引 + 槽填充)\n\n查询意图分为:\n\n![_.png](assets/对话_病因.png)\n\n对话_病因\n\n![_.png](assets/对话_问诊.png)\n\n对话_问诊\n\n![_.png](assets/对话_治疗.png)\n\n对话_治疗\n\n![Attention.png](assets/Attention.png)\n\nAttention注意力机制\n\n**Attention机制**是一种模仿人类注意力的机制，用于在处理信息时选择性地聚焦于特定部分。其主要思想是：在输入序列中，不同的词对输出的影响是不同的。Attention 机制通过计算输入序列中每个词的权重，决定哪些词在生成输出时更重要。\n\nBert是基于Transformer的，Transformer又是基于Attention机制的。\n\n![Bert_Enbedding.png](assets/Bert_Enbedding.png)\n\nBert词嵌入\n\nBERT 接受输入时，会将每个词转换为向量，并加入位置编码和分段编码，以保留词序信息和句子信息。\n\n![Textcnn.png](assets/Text-cnn的网络结构.png)\n\nText-CNN\n\nText-CNN通过卷积层捕捉短语和词组的局部特征，能够有效识别文本中的重要模式和结构，相比于传统的 RNN 或 LSTM，CNN 在处理长文本时具有更高的计算效率。\n\nText-CNN 在自然语言分类中的作用：特征提取，提高分类性能。\n\n![BERT_acc.png](assets/BERT_acc.png)\n\nBert模型意图分类准确度acc\n\n![BERT_loss.png](assets/BERT_loss.png)\n\nBert loss函数损失值梯度下降\n\n##### 医疗预测\n\n数据源：Kaggle开源数据平台:[心脏病预测 --- Heart Disease Predictions](https://www.kaggle.com/code/desalegngeb/heart-disease-predictions)\n\n使用多层感知机 + 全连接层实现预测：\n\n![.png](assets/用户健康信息查看.png)\n\n用户健康信息查看\n\n![good1.png](assets/医疗预测good1.png)\n\n健康预测\n\n![acc.png](assets/所有对比acc.png)\n\n各种方法进行对比的acc准确度与训练轮次的关系\n\n![loss.png](assets/所有对比loss.png)\n\n各种方法的loss与训练轮次的对比（其中MSE是均方误差，由于计算公式的原因，其loss远低于其他函数，但是并不代表其模型效果最好）\n\n## 项目环境\n\n### Spring Cloud 微服务架构\n* JDK 11\n* Spring Boot：2.3.12.RELEASE\n* Spring Cloud：Hoxton.SR1\n* Spring Alibab：2.2.0.RELEASE\n* Nacos\n* Nginx\n* ElasticSearch 7.6.2\n* MongoDB\n* MySQL\n* Redis\n* RabbitMq\n\n### ElasticSearch\n* ElasticSearch 7.6.2\n* 分词器：IK分词器\n* 词典：配置在：\\config\\analysis-ik 路径下，将需要的配置写在.dic文件中，然后保存在IKAnalyzer.cfg.xml；例如：\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE properties SYSTEM \"http://java.sun.com/dtd/properties.dtd\"\u003e\n\u003cproperties\u003e\n\t\u003ccomment\u003eIK Analyzer 扩展配置\u003c/comment\u003e\n\t\u003c!--用户可以在这里配置自己的扩展字典 --\u003e\n\t\u003centry key=\"ext_dict\"\u003e\n\t\tsearch_test.dic\n\t\u003c/entry\u003e\n\t \u003c!--用户可以在这里配置自己的扩展停止词字典--\u003e\n\t\u003centry key=\"ext_stopwords\"\u003e\u003c/entry\u003e\n\t\u003c!--用户可以在这里配置远程扩展字典 --\u003e\n\t\u003c!-- \u003centry key=\"remote_ext_dict\"\u003ewords_location\u003c/entry\u003e --\u003e\n\t\u003c!--用户可以在这里配置远程扩展停止词字典--\u003e\n\t\u003c!-- \u003centry key=\"remote_ext_stopwords\"\u003ewords_location\u003c/entry\u003e --\u003e\n\u003c/properties\u003e\n```\n  在添加扩展词典之后需要从新启动ElasticSearch服务器，否则不会生效。\n* \n\n### Android\n* JDK 17\n* Kotlin：ktx:1.8.0\n* C++ 11\n* NDK：21.1.6352462\n\n### 推荐算法\n* Python 3.9\n* Anaconda \n* Tensorflow 2\n* CUDA;CUDNN\n* Pytorch\n\n## 开发工具\n\nSpring后端：\n* IntelliJ IDEA\n* Navicat 16（MySQL）\n* JMeter（压测）\n* Kibana（可视化ElasticSearch）\n\n终端Android：\n* Android Studio\n\n推荐算法\n* Pycharm\n\n## 资源相关\n\n由于Bert模型过大没有放到项目中，可以去Hugging Face下载一个Bert中文模型\n[Hugging Face模型网站](https://huggingface.co/models)\n或者下载我的百度网盘链接：\n[Bert模型百度网盘链接](https://pan.baidu.com/s/137UH7WW44cQysRUTwLLgiA?pwd=smme)\n提取码: smme\n\n下载成功之后将其添加到路径：[Bert路径](python_nlp/nlu/bert_intent_recognition/Bert) 下面","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnangong918%2Fsmartmedicine-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnangong918%2Fsmartmedicine-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnangong918%2Fsmartmedicine-app/lists"}