• 基于Bert模型的中文语义相似度匹配算法(离线模式)


    1、准备中文离线模型

    配置文件夹

    文件获取方法: 

    访问官网:https://huggingface.co/bert-base-chinese/tree/main

    下载以下文件 

    2、测试代码

    1. # -*- coding: utf-8 -*-
    2. #pip install transformers -i https://mirrors.aliyun.com/pypi/simple/
    3. #pip install torch -i https://mirrors.aliyun.com/pypi/simple/
    4. #pip install numpy -i https://mirrors.aliyun.com/pypi/simple/
    5. #from transformers import AutoModel, AutoTokenizer
    6. from transformers import BertModel, BertTokenizer
    7. import torch
    8. import numpy as np
    9. # 加载预训练的中文BERT模型和分词器
    10. # 这里手动下载模型与分词器,根据目录加载使用
    11. vocab_file = 'model/vocab.txt'
    12. tokenizer = BertTokenizer(vocab_file)
    13. model = BertModel.from_pretrained("model/bert-base-chinese/")
    14. # 定义计算相似度的函数
    15. def calc_similarity(s1, s2):
    16. # 对句子进行分词,并添加特殊标记
    17. inputs = tokenizer([s1, s2], return_tensors='pt', padding=True, truncation=True)
    18. # 将输入传递给BERT模型,并获取输出
    19. with torch.no_grad():
    20. outputs = model(**inputs)
    21. embeddings = outputs.last_hidden_state[:, 0, :].cpu().numpy()
    22. # 计算余弦相似度,并返回结果
    23. sim = np.dot(embeddings[0], embeddings[1]) / (np.linalg.norm(embeddings[0]) * np.linalg.norm(embeddings[1]))
    24. return sim
    25. # 测试函数
    26. s1 = "早泄症状早期症状:精神抑郁、头晕、神疲乏力,在接触或刚接触女方外阴,或时间短暂,尚未进入高潮即射精,还伴有长期精神不振,夜寐不安,精薄清冷等情况。晚期症状:射精过快,插入后,在女士尚未达到性高潮,而男性的时间短于2分钟,提早射精而出现的不和谐性障碍。相关症状:器质性早泄男子性功能障碍一、早泄症状早泄的临床表现主要是射精过快。典型症状是指插入后,在女士尚未达到性高潮,而男性的时间短于2分钟,提早射精而出现的不和谐障碍,一般男性30%均有此情况。一般以为,早泄是指男子在勃起之后,未进入之前,或正当纳入、以及刚刚进入而尚未抽动时便已射精,也自然随之疲软并进入不应期的现象。临床上对勃起未进入即射精,诊断为早泄。男性初期早泄症状主要是精神抑郁、头晕、神疲乏力,在接触或刚接触女方外阴,或时间短暂,尚未进入高潮即射精,还伴有长期精神不振,夜寐不安,精薄清冷等情况。二、早泄判断标准早泄的判断标准是什么?早泄可以说是先在社会中男性常见的一种现象,不规律的生活习惯等都可能导致得了早泄。偶尔的一次射精过快很多人就觉得得了早泄,其实不然有时候早泄也是会被男性自身错误判断给误导,因而导致心情闷闷不乐,对生活、工作都套上了阴影开始自惭形愧。早泄的判断标准是什么?专家表示判断早泄的标准主要看以下几方面:1、以时间为标准从阴茎插入阴道至射精的时间,一般认为短于2分钟即为早泄,但严格者认为应短于30秒才能算早泄。2、以抽动次数为标准阴茎插入阴道中抽动次数少于10次至30次为早泄。3、以性伴侣的反应为标准在性活动中,如果有半数以上的性生活机会中,不能使女方达到性高潮亦可称为早泄。4、以控制射精反射的能力为标准在性交时射精过快,可于当晚再次性交,如射精时间相对较长,可不必担忧。这种重复性交亦可作为对待早泄的偶一为之的办法,但不宜常规使用。另有一种情况就是由于男子性激动,尿道口分泌出一些液体,其实是一种尿道球腺等腺体分泌的粘液,不可误认为是早泄的精液。过度度疲劳时性交偶有一次过早射精,新婚或久别重逢第一次性交,男方过于激动,往往射精较快。偶尔一次并不是病态,经常如此,才能说是早泄。所以当男性偶尔出现早泄症状时千万不要着急,要调整好心态相信自己。但是经常如此,那么就是得了早泄了。分居两地的夫妇,相逢第一晚男方偶然发生了早泄,思想负担太重,在大脑皮层里留下了不良刺激痕迹,以后每次久别重逢第一夜过性生活时都会发生早泄,如果二、三晚连续出现,这种特殊现象,就属于病态早泄。一些人入睡前性交容易发生过快射精,而下半夜睡醒之后性交,则射精时间较长,这种情况不应视为早泄,可以因事之宜而为之。国际性医学会(InteRNAtionalSocietyforSexualMedicineISSM)从循证医学的角度上指出早泄的定义应包括以下三点:①射精总是或者几乎总是发生在阴茎插入阴道1分钟以内;②不能全部或几乎全部进入阴道后延迟射精;③消极的个人精神心理因素,比如苦恼、忧虑、挫折感和/或逃避性活动等。三、分类1.原发性早泄原发性早泄少见,难以诊断。特点是:(1)第一次性交出现;(2)对性伴侣,没有选择性;(3)每次性交都发生过早射精。2.继发性早泄继发性早泄是后天获得的早泄,有明确的生理或者心理病因。特点是:(1)过早射精发生在一个明确的时间;(2)发生过早射精前射精时间正常;(3)可能是逐渐出现或者突然出现:(4)可能继发于泌尿外科疾病、甲状腺疾病[9]或者心理疾病等。3.境遇性早泄国内也有学者将此类早泄称为自然变异性早泄。此类患者的射精时间有长有短,过早射精时而出现。这种早泄不一定是都病理过程,具体特点是:(1)过早射精不是持续发生,发生时间没有规律。(2)在将要射精时,控制射精的能力降低,但有时正常,这点不是诊断的必要条件。4.早泄样射精功能障碍此类患者射精潜伏时间往往在正常范围,患者主观上认为自己早泄,此类早泄不能算是真正的病理过程,通常隐藏着心理障碍或者与性伴侣的关系问题。此类早泄的特点是:(1)主观认为持续或者非持续射精过快;(2)患者自己想象中的过早射精或者不能控制射精焦虑;(3)实际插入阴道射精潜伏时间正常甚至很长;(4)在将要射精时,控制射精的能力变低;(5)用其他精神障碍不能解释患者的焦虑。还是勃起功能障碍,当然,也有不少病人既有早泄又有勃起功能障碍。"
    27. s2 = "阳痿症状典型症状:男性在性交开始阶段勃起缓慢或者难以勃起;有时虽然勃起了,但勃起的硬度不够而造成插入困难或者根本不能插入阴道。相关症状:心理性性功能障碍男子性功能障碍雄激素过少阳痿症状主要表现为:男性在性交开始阶段勃起缓慢或者难以勃起;有时虽然勃起了,但勃起的硬度不够而造成插入困难或者根本不能插入阴道。男性朋友如果身体有下面这些表现时,就要注意是否患上ED了。性欲障碍:包括无性欲、性欲低下、性厌恶、性欲亢进等;阴茎勃起障碍:包括阳痿、阴茎勃起不坚、阴茎异常勃起等;性交障碍:包括性交昏厥、性交失语、性交癔病、性交恐惧症等;射精障碍:包括早泄、遗精、不射精、射精延迟、逆行射精、射精疼痛、血精等。上述这几个方面可以单独出现,也可多个同时出现,其中最多见的是阴茎勃起障碍和射精障碍。需要强调的是,正常男性的性功能也存在着生理性的波动。当性功能在精神、情绪不稳定,疲劳,健康状况不佳或女方对性生活冷淡或持反对态度等因素刺激时,均可出现一时性的“阳痿”,这种偶然现象不能视为病态。只有在排除上述诸因素的影响,在正常性刺激下,反复多次出现性交失败,方能认为是阳痿。如果一旦患了阳痿或怀疑自己患了本病,就应该及时到正规医院找专科医生诊治,且勿讳疾忌医,贻误病机。"
    28. similarity = calc_similarity(s1, s2)
    29. print(f"相似度:{similarity:.4f}")
    30. '''
    31. #from transformers import AutoModel, AutoTokenizer
    32. from transformers import BertModel, BertTokenizer
    33. import torch
    34. import numpy as np
    35. # 加载预训练的中文BERT模型和分词器
    36. #model_name = "bert-base-chinese" # 中文BERT模型的名称
    37. #model = AutoModel.from_pretrained(model_name)
    38. #tokenizer = AutoTokenizer.from_pretrained(model_name)
    39. # 输入两个中文句子
    40. sentence1 = "哈哈哈哈哈哈哈哈哈。"
    41. sentence2 = "我没吃呢。"
    42. # 使用分词器对句子进行标记化
    43. tokens = tokenizer(sentence1, sentence2, return_tensors='pt', padding=True, truncation=True)
    44. # 获取模型的输出
    45. with torch.no_grad():
    46. outputs = model(**tokens)
    47. # 提取句子的嵌入向量
    48. embeddings = outputs.last_hidden_state
    49. # 获取句子1和句子2的嵌入向量
    50. embeddings_sentence1 = embeddings[0, 0, :].numpy()
    51. embeddings_sentence2 = embeddings[0, 0, :].numpy()
    52. # 计算余弦相似度
    53. similarity = np.dot(embeddings_sentence1, embeddings_sentence2) / (np.linalg.norm(embeddings_sentence1) * np.linalg.norm(embeddings_sentence2))
    54. print("相似度:", similarity)
    55. '''

  • 相关阅读:
    【MySQL】索引
    JVM内存设置
    VMware使用Ubuntu安装搭建FusionCompute实验平台
    史上最全的Go语言模块(Module)管理详解(基于Go1.19)
    字节携港大南大升级 LLaVA-NeXT:借 LLaMA-3 和 Qwen-1.5 脱胎换骨,轻松追平 GPT-4V
    【STM32+HAL】STM32CubeMX学习目录
    openfoam 智能指针探索
    如何理解CRC循环冗余校验——图解CRC算法模型和C语言实现
    2023衡阳师范学院计算机考研信息汇总
    springboot基于spring boot的在线答题微信小程序
  • 原文地址:https://blog.csdn.net/qq_51701007/article/details/133850674