├── src ├── main.py ├── chain_of_density.py ├── chain_of_density │ ├── __init__.py │ ├── chat_completion.py │ └── msg_templates.py ├── a.py ├── ollama_serving.py ├── create_data.py ├── gemini.py ├── read_data.py ├── gemini_summarize.py ├── data.py ├── summarize_cod.py ├── ollama_predict.py ├── phoGPT.py ├── bm25_search.py ├── rerank.py ├── llm.py ├── metrics.py ├── search.py ├── rag.py ├── create_document_DB.py ├── hyde_rag.py ├── predict.py ├── embedding.py ├── predict_rerank.py ├── predict_hyde.py ├── summarize.py ├── utils.py ├── cod.py ├── query_test.py └── hybrid_search.py ├── ollama.sh ├── corpus ├── truyen-mau-song-thai ├── om-nghen-khi-mang-thai ├── phi-dai-tuyen-vu ├── tai-cuc-som ├── u-mem-treo ├── hoi-chung-brugada ├── benh-giun-luon ├── thoat-vi-khe-hoanh ├── viem-loet-giac-mac ├── khong-co-tinh-trung ├── viem-mang-bo-dao ├── roi-loan-nhip-cham ├── ngoai-tam-thu-that ├── benh-tui-thua-dai-trang ├── benh-vong-mac-tieu-duong ├── nhan-tuyen-giap ├── benh-giac-mac-hinh-chop └── xuat-tinh-nguoc-dong ├── .gitattributes ├── imgs ├── LLM.png └── web.png ├── .gitignore ├── data ├── sample_submission.csv └── medical_public_test_label.csv ├── chain_of_density ├── __pycache__ │ ├── __init__.cpython-310.pyc │ ├── __init__.cpython-311.pyc │ ├── chat_completion.cpython-310.pyc │ ├── chat_completion.cpython-311.pyc │ ├── msg_templates.cpython-310.pyc │ └── msg_templates.cpython-311.pyc ├── __init__.py ├── chat_completion.py └── msg_templates.py ├── requirements.txt ├── LICENSE ├── corpus_summarize └── an-khong-tieu ├── submit_gemini2.csv ├── submit_openai.csv ├── README.md ├── app.py └── streamlit_app.py /src/main.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ollama.sh: -------------------------------------------------------------------------------- 1 | ollama serve -------------------------------------------------------------------------------- /src/chain_of_density.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /corpus/truyen-mau-song-thai: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/truyen-mau-song-thai/ 2 | null -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /corpus/om-nghen-khi-mang-thai: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/om-nghen-khi-mang-thai/ 2 | null -------------------------------------------------------------------------------- /imgs/LLM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/imgs/LLM.png -------------------------------------------------------------------------------- /imgs/web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/imgs/web.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | corpus/ 3 | corpus2/ 4 | 5 | processed/ 6 | chroma_db_bge/ 7 | cache 8 | __pycache__/ -------------------------------------------------------------------------------- /data/sample_submission.csv: -------------------------------------------------------------------------------- 1 | id,answer 2 | level3_1,0101 3 | level3_2,0110 4 | level3_5,1000 5 | level3_13,00 -------------------------------------------------------------------------------- /chain_of_density/__pycache__/__init__.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/chain_of_density/__pycache__/__init__.cpython-310.pyc -------------------------------------------------------------------------------- /chain_of_density/__pycache__/__init__.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/chain_of_density/__pycache__/__init__.cpython-311.pyc -------------------------------------------------------------------------------- /chain_of_density/__pycache__/chat_completion.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/chain_of_density/__pycache__/chat_completion.cpython-310.pyc -------------------------------------------------------------------------------- /chain_of_density/__pycache__/chat_completion.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/chain_of_density/__pycache__/chat_completion.cpython-311.pyc -------------------------------------------------------------------------------- /chain_of_density/__pycache__/msg_templates.cpython-310.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/chain_of_density/__pycache__/msg_templates.cpython-310.pyc -------------------------------------------------------------------------------- /chain_of_density/__pycache__/msg_templates.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luongphambao/llm-medical-vietnam/HEAD/chain_of_density/__pycache__/msg_templates.cpython-311.pyc -------------------------------------------------------------------------------- /chain_of_density/__init__.py: -------------------------------------------------------------------------------- 1 | from dotenv import load_dotenv 2 | 3 | 4 | # Initialize chain-of-density module 5 | 6 | __version__ = "0.1.0" 7 | 8 | # Load environment variables from .env file 9 | load_dotenv() 10 | -------------------------------------------------------------------------------- /src/chain_of_density/__init__.py: -------------------------------------------------------------------------------- 1 | from dotenv import load_dotenv 2 | 3 | 4 | # Initialize chain-of-density module 5 | 6 | __version__ = "0.1.0" 7 | 8 | # Load environment variables from .env file 9 | load_dotenv() 10 | -------------------------------------------------------------------------------- /src/a.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | #RMSE 4 | def rmse(y_true, y_pred): 5 | #MSE FOR np.log(y_true) and np.log(y_pred) 6 | return (np.mean((np.log(y_true) - np.log(y_pred))**2)) 7 | print(rmse([106,54.2, 10], [100, 50, 12])) #0.0 -------------------------------------------------------------------------------- /src/ollama_serving.py: -------------------------------------------------------------------------------- 1 | #ollama serve 2 | import ollama 3 | 4 | model_id ="ontocord/vistral" 5 | for i in range(200): 6 | prompt = open("prompt.txt").read() 7 | print(prompt) 8 | respone = ollama.generate(model=model_id, prompt=prompt) 9 | print(respone) 10 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | openai 2 | python-dotenv 3 | requests 4 | tqdm 5 | pandas 6 | numpy 7 | gradio 8 | streamlit 9 | langchain 10 | langchain_community 11 | langchain_google_genai 12 | torch 13 | ollama 14 | beautifulsoup4 15 | sentence-transformers 16 | chromadb 17 | rank_bm25 -------------------------------------------------------------------------------- /src/create_data.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | data =json.loads(open("qa_medical_pairs.json").read()) 4 | 5 | # data_sample =json.load(open("sharegpt_data.json")) 6 | # print(data_sample[0]) 7 | json_final = [] 8 | for i in data: 9 | print(i) 10 | human_question = i["question"] 11 | gpt_answer = i["answer"] 12 | dict_conversation = {} 13 | dict_question={"from":"human","value":human_question} 14 | dict_answer={"from":"gpt","value":gpt_answer} 15 | 16 | dict_conversation["conversation"] = [] 17 | dict_conversation["conversation"].append(dict_question) 18 | dict_conversation["conversation"].append(dict_answer) 19 | #print(dict_conversation) 20 | json_final.append(dict_conversation) 21 | with open("medical_conversation.json","w") as f: 22 | json.dump(json_final,f,indent=4) -------------------------------------------------------------------------------- /src/gemini.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from dotenv import load_dotenv 4 | from langchain_google_genai import ChatGoogleGenerativeAI 5 | from langchain.prompts import PromptTemplate 6 | from langchain.chains import LLMChain 7 | 8 | load_dotenv(".env") 9 | 10 | GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") 11 | 12 | llm = ChatGoogleGenerativeAI(model="gemini-pro", google_api_key=GOOGLE_API_KEY) 13 | 14 | # prompt_template = """Trả lời câu hỏi trắc nghiệm. Nếu không biết, chọn không biết. 15 | # Câu hỏi: {question} 16 | # Trả lời:""" 17 | 18 | #prompt = PromptTemplate.from_template("Trả lời câu hỏi trắc nghiệm. Nếu không biết, chọn không biết.\nCâu hỏi: {question}\nTrả lời:") 19 | 20 | #chain = LLMChain(llm=llm, prompt=prompt, verbose=True) 21 | 22 | if __name__=="__main__": 23 | question = """Thủ đô của Việt Nam là gì? 24 | """ 25 | resp = llm.invoke(question) 26 | print(resp.content) 27 | # resp = chain.run(question) 28 | # print(resp) -------------------------------------------------------------------------------- /src/read_data.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | 4 | testset = 'data/public_test.csv' 5 | df = pd.read_csv(testset) 6 | ans = pd.DataFrame(columns=['id', 'answer']) 7 | 8 | newline = '\n' 9 | labels = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E', 5:'F'} 10 | chars = "ABCDEF" 11 | 12 | question_id =0 13 | for index, row in df.iterrows(): 14 | if index == 35: 15 | break 16 | options = [str(p) for p in row.loc[['option_' + str(i) for i in range(1,7)]] if str(p) != 'nan'] 17 | options = [labels[i] + '. ' + p if not p.startswith(f'{labels[i]}.') else p for i, p in enumerate(options)] 18 | print(options) 19 | query = f"""{row.loc['question']} 20 | {newline.join(options)} 21 | """ 22 | print(query) 23 | #exit() 24 | # # print(sample_query) 25 | # response = qa(query) # only one character 26 | # binary_mask = ['1' if c == response['result'].strip() else '0' for c in chars[:len(options)]] 27 | # row_ans = ''.join(binary_mask) 28 | 29 | # ans.loc[index] = [row['id'], row_ans] 30 | 31 | # ans.to_csv('submission.csv', index=False) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Luong Pham Bao 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /chain_of_density/chat_completion.py: -------------------------------------------------------------------------------- 1 | from openai import OpenAI 2 | 3 | client = OpenAI() 4 | import time 5 | 6 | def make_chat_completion_request( 7 | config, 8 | messages, 9 | temperature=1.0, 10 | top_p=1.0, 11 | n=1, 12 | stream=False, 13 | stop=None, 14 | max_tokens=None, 15 | presence_penalty=0, 16 | frequency_penalty=0, 17 | functions=[], 18 | function_call="auto" 19 | ): 20 | 21 | parameters = { 22 | "model": config["DEFAULT"]["MODEL"], 23 | "messages": messages, 24 | "temperature": temperature, 25 | "top_p": top_p, 26 | "n": n, 27 | "stream": stream, 28 | "stop": stop, 29 | "max_tokens": max_tokens, 30 | "presence_penalty": presence_penalty, 31 | "frequency_penalty": frequency_penalty, 32 | } 33 | 34 | if functions is not None and len(functions) > 0: 35 | parameters["functions"] = functions 36 | parameters["function_call"] = function_call 37 | 38 | 39 | max_attempts = 10 # Maximum number of retry attempts 40 | retry_gap = 3.0 # Initial gap between retries in seconds 41 | 42 | for attempt in range(max_attempts): 43 | try: 44 | completion = client.chat.completions.create(**parameters) 45 | return completion 46 | except Exception as e: 47 | print(f"Request failed on attempt {attempt + 1}. Error: {str(e)}") 48 | if attempt < max_attempts - 1: 49 | retry_gap *= 1.5 # Increase the retry gap exponentially 50 | time.sleep(retry_gap) 51 | 52 | return None # If all retry attempts fail 53 | -------------------------------------------------------------------------------- /corpus_summarize/an-khong-tieu: -------------------------------------------------------------------------------- 1 | **Ăn không tiêu** là tình trạng đau và khó chịu ở bụng sau khi ăn, do quá trình tiêu hóa gặp vấn đề. Nguyên nhân chủ yếu là do axit dạ dày và các yếu tố khác như chế độ ăn uống, tác dụng phụ của thuốc. Trong một số trường hợp nghiêm trọng, đây có thể là dấu hiệu của các bệnh lý tiêu hóa nguy hiểm. 2 | 3 | **Triệu chứng:** 4 | 5 | * Đau bụng sau khi ăn 6 | * Đầy hơi 7 | * Ợ chua 8 | * Buồn nôn 9 | 10 | **Nguyên nhân:** 11 | 12 | * Axit dạ dày 13 | * Ăn quá nhiều hoặc quá nhanh 14 | * Chế độ ăn nhiều chất béo 15 | * Không dung nạp thực phẩm 16 | * Hút thuốc và uống rượu 17 | * Lạm dụng thuốc chống viêm không steroid 18 | 19 | **Phương pháp chẩn đoán:** 20 | 21 | * Khám sức khỏe 22 | * Xét nghiệm máu, phân, hơi thở 23 | * Nội soi 24 | * Chụp X-quang, CT 25 | 26 | **Cách điều trị:** 27 | 28 | * Thuốc kháng axit không kê đơn 29 | * Thuốc chẹn H2 30 | * Thuốc ức chế bơm proton (PPI) 31 | * Thay đổi chế độ ăn uống, sinh hoạt 32 | 33 | **Phòng ngừa:** 34 | 35 | * Ăn thành nhiều bữa nhỏ 36 | * Nhai chậm, nhai kỹ 37 | * Tránh thực phẩm gây khó tiêu 38 | * Giảm caffeine, rượu bia 39 | * Kiểm soát căng thẳng 40 | * Duy trì cân nặng hợp lý 41 | * Không nằm ngay sau khi ăn 42 | * Tránh mặc quần áo bó sát 43 | 44 | **Các thắc mắc thường gặp:** 45 | 46 | * **Ăn không tiêu uống gì?** Nước lọc, trà thảo dược 47 | * **Ăn không tiêu nên làm gì?** Ăn bữa nhỏ, nhai kỹ, tránh thực phẩm gây kích ứng, bỏ hút thuốc, tập thể dục thường xuyên, kiểm soát căng thẳng 48 | * **Ăn không tiêu có gây ảnh hưởng gì không?** Có thể gây khó chịu, chán ăn, nếu kéo dài có thể là dấu hiệu của bệnh lý tiềm ẩn 49 | * **Ăn gì cho dễ tiêu hóa?** Bánh mì nướng, cơm trắng, chuối, trứng, khoai lang, rau xanh ít chất béo -------------------------------------------------------------------------------- /src/gemini_summarize.py: -------------------------------------------------------------------------------- 1 | # Run this cell and paste the API key in the prompt 2 | import os 3 | from dotenv import load_dotenv 4 | from langchain import PromptTemplate 5 | from langchain.document_loaders import WebBaseLoader 6 | from langchain.schema import StrOutputParser 7 | from langchain.schema.prompt_template import format_document 8 | from langchain_google_genai import ChatGoogleGenerativeAI 9 | load_dotenv(".env") 10 | os.environ['GOOGLE_API_KEY'] = os.getenv("GOOGLE_API_KEY") 11 | llm = ChatGoogleGenerativeAI(model="gemini-pro", 12 | temperature=0.7, top_p=0.85) 13 | def load_content(file_path): 14 | """Load content from a file""" 15 | with open(file_path, "r") as f: 16 | return f.read() 17 | llm_prompt_template = """Viết một bản tóm tắt đầy đủ thông tin về những điều sau đây: 18 | "{text}" 19 | Tóm tắt :""" 20 | llm_prompt = PromptTemplate.from_template(llm_prompt_template) 21 | 22 | print(llm_prompt) 23 | for file in os.listdir("corpus"): 24 | path = os.path.join("corpus", file) 25 | #path = "corpus/benh-dau-mua" 26 | doc =load_content(path) 27 | new_path =os.path.join("corpus_summarize",os.path.basename(path)) 28 | if os.path.exists(new_path)==True: 29 | continue 30 | stuff_chain = ( 31 | # Extract data from the documents and add to the key `text`. 32 | { 33 | "text": lambda doc: doc 34 | } 35 | | llm_prompt # Prompt for Gemini 36 | | llm # Gemini function 37 | | StrOutputParser() # output parser 38 | ) 39 | #print(doc) 40 | summarize_doc =stuff_chain.invoke(doc) 41 | print(summarize_doc) 42 | with open(new_path, "w") as f: 43 | f.write(summarize_doc) -------------------------------------------------------------------------------- /src/chain_of_density/chat_completion.py: -------------------------------------------------------------------------------- 1 | from openai import OpenAI 2 | # import os 3 | # from dotenv import load_dotenv 4 | # load_dotenv("../.env") 5 | client = OpenAI() 6 | import time 7 | 8 | def make_chat_completion_request( 9 | config, 10 | messages, 11 | temperature=1.0, 12 | top_p=1.0, 13 | n=1, 14 | stream=False, 15 | stop=None, 16 | max_tokens=None, 17 | presence_penalty=0, 18 | frequency_penalty=0, 19 | functions=[], 20 | function_call="auto" 21 | ): 22 | 23 | parameters = { 24 | "model": config["DEFAULT"]["MODEL"], 25 | "messages": messages, 26 | "temperature": temperature, 27 | "top_p": top_p, 28 | "n": n, 29 | "stream": stream, 30 | "stop": stop, 31 | "max_tokens": max_tokens, 32 | "presence_penalty": presence_penalty, 33 | "frequency_penalty": frequency_penalty, 34 | } 35 | 36 | if functions is not None and len(functions) > 0: 37 | parameters["functions"] = functions 38 | parameters["function_call"] = function_call 39 | 40 | 41 | max_attempts = 10 # Maximum number of retry attempts 42 | retry_gap = 3.0 # Initial gap between retries in seconds 43 | 44 | for attempt in range(max_attempts): 45 | try: 46 | completion = client.chat.completions.create(**parameters) 47 | return completion 48 | except Exception as e: 49 | print(f"Request failed on attempt {attempt + 1}. Error: {str(e)}") 50 | if attempt < max_attempts - 1: 51 | retry_gap *= 1.5 # Increase the retry gap exponentially 52 | time.sleep(retry_gap) 53 | 54 | return None # If all retry attempts fail 55 | -------------------------------------------------------------------------------- /src/data.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | 4 | class Medical_Data: 5 | def __init__(self, data_path): 6 | self.data_path = data_path 7 | self.public_test = pd.read_csv(data_path + 'public_test.csv') 8 | self.private_test = pd.read_csv(data_path + 'private_test.csv') 9 | self.gt_public_test = pd.read_csv(data_path + 'medical_public_test_label.csv') 10 | self.gt_private_test = pd.read_csv(data_path + 'medical_private_test_label.csv') 11 | self.prompt_template = """Sử dụng các trích đoạn sau đây để trả lời câu hỏi trắc nghiệm. Nếu không biết, chọn không biết, nếu có nhiều hơn 1 đáp án đúng thì liệt kê các đáp án đúng. 12 | {context} 13 | Câu hỏi: {question} 14 | Trả lời:""" 15 | def load_public_data(self): 16 | df_public = self.public_test 17 | df_public['answer'] = self.gt_public_test['answer'] 18 | return df_public 19 | def load_private_data(self): 20 | df_private = self.private_test 21 | df_private['answer'] = self.gt_private_test['answer'] 22 | return df_private 23 | def final_data(self): 24 | df_public = self.load_public_data() 25 | df_private = self.load_private_data() 26 | df = pd.concat([df_public, df_private], axis=0) 27 | return df 28 | 29 | if __name__ == "__main__": 30 | data_class = Medical_Data('data/') 31 | public_data = data_class.load_public_data() 32 | private_data = data_class.load_private_data() 33 | public_data.to_csv("data/public_test_ans.csv", index=False) 34 | private_data.to_csv("data/private_test_ans.csv", index=False) 35 | final_data = data_class.final_data() 36 | final_data.to_csv("data/final_test_ans.csv", index=False) -------------------------------------------------------------------------------- /submit_gemini2.csv: -------------------------------------------------------------------------------- 1 | id,answer 2 | level3_1,0100 3 | level3_2,0100 4 | level3_5,1000 5 | level3_13,01 6 | level3_14,1010 7 | level3_17,1000 8 | level3_22,0101 9 | level3_27,10 10 | level3_35,010 11 | level3_42,01 12 | level3_53,11000 13 | level3_55,010 14 | level3_76,011 15 | level3_93,111 16 | level3_96,100 17 | level1_88,111 18 | level1_120,0010 19 | level1_94,1000 20 | level1_37,100 21 | level1_116,001 22 | level1_38,110 23 | level1_65,111 24 | level1_110,111 25 | level1_11,110 26 | level1_118,0100 27 | level1_41,10 28 | level1_104,010 29 | level1_92,111 30 | level1_25,0100 31 | level1_44,0100 32 | level1_95,1010 33 | level1_121,0100 34 | level1_91,011 35 | level1_107,100 36 | level1_84,001 37 | level1_21,110 38 | level1_122,0100 39 | level1_19,11 40 | level1_98,011 41 | level1_74,11 42 | level1_83,100 43 | level1_111,110 44 | level1_72,010 45 | level1_123,0010 46 | level1_54,00111 47 | level1_73,001 48 | level1_64,100 49 | level1_43,01 50 | level1_97,001 51 | level1_102,010 52 | level1_26,10 53 | level1_33,100 54 | level1_86,110 55 | level1_90,110 56 | level1_100,001 57 | level1_48,1000 58 | level1_18,10 59 | level1_113,110 60 | level1_106,110 61 | level1_7,110 62 | level1_24,110 63 | level1_79,1001 64 | level1_40,110 65 | level1_62,1000 66 | level1_23,110 67 | level1_10,011 68 | level1_103,001 69 | level1_105,111 70 | level1_59,1000 71 | level1_46,1100 72 | level2_1,100 73 | level2_2,001 74 | level2_3,110 75 | level2_10,1000 76 | level2_11,100 77 | level2_12,100 78 | level2_16,1000 79 | level2_17,0101 80 | level2_18,1100 81 | level2_23,101 82 | level2_24,11111 83 | level2_25,110 84 | level2_29,0001 85 | level2_30,1000 86 | level2_31,001 87 | level2_32,11000 88 | level2_33,100 89 | level2_34,1001 90 | level2_35,110 91 | level2_36,110 92 | level2_36,0111 93 | level2_37,1100 94 | level2_38,1001 95 | level2_39,1100 96 | level2_40,0110 97 | level4_4,1000 98 | level4_9,0001 99 | level4_27,0001 100 | level4_28,1010 101 | level4_35,110 102 | -------------------------------------------------------------------------------- /submit_openai.csv: -------------------------------------------------------------------------------- 1 | id,answer 2 | level3_1,0101 3 | level3_2,0100 4 | level3_5,1000 5 | level3_13,01 6 | level3_14,0011 7 | level3_17,1000 8 | level3_22,0110 9 | level3_27,01 10 | level3_35,011 11 | level3_42,01 12 | level3_53,01001 13 | level3_55,010 14 | level3_76,001 15 | level3_93,011 16 | level3_96,100 17 | level1_88,111 18 | level1_120,1010 19 | level1_94,1000 20 | level1_37,100 21 | level1_116,001 22 | level1_38,110 23 | level1_65,111 24 | level1_110,111 25 | level1_11,110 26 | level1_118,0010 27 | level1_41,10 28 | level1_104,010 29 | level1_92,111 30 | level1_25,0100 31 | level1_44,0100 32 | level1_95,1000 33 | level1_121,0100 34 | level1_91,011 35 | level1_107,100 36 | level1_84,001 37 | level1_21,111 38 | level1_122,0100 39 | level1_19,11 40 | level1_98,110 41 | level1_74,11 42 | level1_83,100 43 | level1_111,111 44 | level1_72,011 45 | level1_123,0010 46 | level1_54,10111 47 | level1_73,001 48 | level1_64,100 49 | level1_43,10 50 | level1_97,001 51 | level1_102,010 52 | level1_26,11 53 | level1_33,100 54 | level1_86,110 55 | level1_90,110 56 | level1_100,101 57 | level1_48,1000 58 | level1_18,10 59 | level1_113,110 60 | level1_106,110 61 | level1_7,110 62 | level1_24,110 63 | level1_79,1100 64 | level1_40,111 65 | level1_62,1001 66 | level1_23,110 67 | level1_10,011 68 | level1_103,001 69 | level1_105,111 70 | level1_59,1000 71 | level1_46,1100 72 | level2_1,100 73 | level2_2,101 74 | level2_3,110 75 | level2_10,0100 76 | level2_11,100 77 | level2_12,100 78 | level2_16,1000 79 | level2_17,0100 80 | level2_18,1101 81 | level2_23,101 82 | level2_24,00001 83 | level2_25,101 84 | level2_29,1010 85 | level2_30,1111 86 | level2_31,010 87 | level2_32,11100 88 | level2_33,110 89 | level2_34,1001 90 | level2_35,110 91 | level2_36,111 92 | level2_36,1001 93 | level2_37,1100 94 | level2_38,1001 95 | level2_39,1100 96 | level2_40,0101 97 | level4_4,0010 98 | level4_9,0101 99 | level4_27,1010 100 | level4_28,1001 101 | level4_35,111 102 | -------------------------------------------------------------------------------- /data/medical_public_test_label.csv: -------------------------------------------------------------------------------- 1 | id,answer 2 | level3_1,0100 3 | level3_2,0100 4 | level3_5,0001 5 | level3_13,01 6 | level3_14,0001 7 | level3_17,1000 8 | level3_22,0100 9 | level3_27,10 10 | level3_35,111 11 | level3_42,01 12 | level3_53,11111 13 | level3_55,010 14 | level3_76,001 15 | level3_93,111 16 | level3_96,100 17 | level1_88,111 18 | level1_120,0010 19 | level1_94,1000 20 | level1_37,100 21 | level1_116,001 22 | level1_38,111 23 | level1_65,111 24 | level1_110,111 25 | level1_11,111 26 | level1_118,0100 27 | level1_41,10 28 | level1_104,010 29 | level1_92,111 30 | level1_25,0100 31 | level1_44,0100 32 | level1_95,1000 33 | level1_121,0100 34 | level1_91,111 35 | level1_107,111 36 | level1_84,001 37 | level1_21,111 38 | level1_122,0100 39 | level1_19,11 40 | level1_98,010 41 | level1_74,11 42 | level1_83,111 43 | level1_111,111 44 | level1_72,010 45 | level1_123,0010 46 | level1_54,11111 47 | level1_73,001 48 | level1_64,111 49 | level1_43,10 50 | level1_97,001 51 | level1_102,010 52 | level1_26,10 53 | level1_33,100 54 | level1_86,110 55 | level1_90,111 56 | level1_100,001 57 | level1_48,1000 58 | level1_18,11 59 | level1_113,100 60 | level1_106,111 61 | level1_7,110 62 | level1_24,111 63 | level1_79,1000 64 | level1_40,111 65 | level1_62,1000 66 | level1_23,111 67 | level1_10,111 68 | level1_103,001 69 | level1_105,111 70 | level1_59,1000 71 | level1_46,1000 72 | level2_1,100 73 | level2_2,001 74 | level2_3,100 75 | level2_10,0101 76 | level2_11,100 77 | level2_12,111 78 | level2_16,1000 79 | level2_17,0100 80 | level2_18,1101 81 | level2_23,101 82 | level2_24,11111 83 | level2_25,101 84 | level2_29,0011 85 | level2_30,1100 86 | level2_31,100 87 | level2_32,11100 88 | level2_33,100 89 | level2_34,1001 90 | level2_35,110 91 | level2_36,110 92 | level2_36,1110 93 | level2_37,0110 94 | level2_38,0001 95 | level2_39,1100 96 | level2_40,0110 97 | level4_4,1010 98 | level4_9,0111 99 | level4_27,0011 100 | level4_28,1011 101 | level4_35,110 102 | -------------------------------------------------------------------------------- /src/summarize_cod.py: -------------------------------------------------------------------------------- 1 | import os, openai, logging, configparser 2 | from chain_of_density.chat_completion import make_chat_completion_request 3 | from chain_of_density.msg_templates import create_system_message 4 | 5 | # Load config file and setup variables 6 | here = os.path.abspath(os.path.dirname(__file__)) 7 | config = configparser.ConfigParser() 8 | config.read("config.ini") 9 | 10 | 11 | def perform_checks(): 12 | #logger.info("being checks") 13 | # Check if OPENAI_API_KEY is set 14 | if "OPENAI_API_KEY" not in os.environ: 15 | raise EnvironmentError("OPENAI_API_KEY environment variable is not set.") 16 | 17 | 18 | #logger.info("Checks passed") 19 | 20 | 21 | def load_file(input_file_path): 22 | if os.path.exists(input_file_path): 23 | # Load input file 24 | with open(input_file_path, "r") as f: 25 | return f.read() 26 | elif os.path.exists(os.path.join(here, input_file_path)): 27 | # Load input file from main folder 28 | with open(f"{os.path.join(here, input_file_path)}", "r") as f: 29 | return f.read() 30 | else: 31 | raise FileNotFoundError(f"Input file not found at path: {input_file_path}") 32 | 33 | 34 | def main(): 35 | #logger.info("main() starting") 36 | 37 | # Perform sense checks 38 | perform_checks() 39 | 40 | # Get system message 41 | msg = create_system_message(config) 42 | 43 | # Load input file 44 | input_text = load_file("prompt_sample.txt") 45 | 46 | msg.append( 47 | { 48 | "role": "user", 49 | "content": f"Đây là văn bản đầu vào để bạn tóm tắt bằng cách sử dụng phương pháp 'Missing_Entities' và 'Denser_Summary':\n\n{input_text}", 50 | } 51 | ) 52 | 53 | completion = make_chat_completion_request(config, msg, n=1) 54 | # print(completion) 55 | # print() 56 | content = completion.choices[0].message.content 57 | 58 | # Write the output to file 59 | with open(config["DEFAULT"]["OUTPUT_FILE"], "w") as f: 60 | f.write(content) 61 | 62 | return content 63 | 64 | 65 | if __name__ == "__main__": 66 | #logger.info("triggering main() execution") 67 | print(main()) 68 | -------------------------------------------------------------------------------- /chain_of_density/msg_templates.py: -------------------------------------------------------------------------------- 1 | def create_system_message(config): 2 | wc = int(config["DEFAULT"]["MAX_WORD_COUNT"]) 3 | sc = int(config["DEFAULT"]["MAX_SENTENCE_COUNT"]) 4 | if sc > 1: 5 | sc = f"{sc-1} - {sc}" 6 | 7 | message = [{ 8 | "role": "system", 9 | "content": f"""Tôi sẽ cung cấp cho bạn một phần nội dung (ví dụ: bài viết, giấy tờ, tài liệu, v.v.) 10 | 11 | Bạn sẽ tạo ra các bản tóm tắt nội dung ngày càng ngắn gọn, chi tiết hơn. 12 | 13 | Lặp lại 2 bước sau 5 lần. 14 | 15 | Bước 1. Xác định 1-3 Thực thể thông tin (";" được phân cách) từ Bài viết còn thiếu trong bản tóm tắt được tạo trước đó. 16 | 17 | Bước 2. Viết một bản tóm tắt mới, dày đặc hơn có độ dài giống hệt nhau, bao gồm mọi thực thể và chi tiết từ bản tóm tắt trước đó cộng với các Thực thể còn thiếu. 18 | 19 | Một thực thể bị thiếu là: 20 | 21 | Có liên quan: đến câu chuyện chính. 22 | Cụ thể: mô tả nhưng ngắn gọn (5 từ trở xuống). 23 | Tiểu thuyết: không có trong bản tóm tắt trước đó. 24 | Trung thành: có mặt trong phần nội dung. 25 | Anywhere: nằm ở bất cứ đâu trong Article. 26 | 27 | Hướng dẫn: 28 | 29 | Bản tóm tắt đầu tiên phải dài ({sc} câu, -{wc} từ) nhưng rất không cụ thể, chứa ít thông tin ngoài các mục được đánh dấu là thiếu. Sử dụng ngôn ngữ quá dài dòng và các từ đệm (ví dụ: "bài viết này thảo luận") để tiếp cận các từ -{wc}. 30 | Đếm từng từ: viết lại bản tóm tắt trước đó để cải thiện dòng chảy và tạo khoảng trống cho các nội dung bổ sung. 31 | Tạo không gian bằng cách kết hợp, nén và loại bỏ các cụm từ không mang tính thông tin như “bài viết thảo luận”. 32 | Các bản tóm tắt phải trở nên rất dày đặc và ngắn gọn nhưng vẫn khép kín, ví dụ: dễ hiểu mà không cần có Điều khoản. 33 | Các thực thể bị thiếu có thể xuất hiện ở bất kỳ đâu trong bản tóm tắt mới. 34 | Không bao giờ loại bỏ các thực thể khỏi bản tóm tắt trước đó. Nếu không thể tạo được không gian, hãy thêm ít thực thể mới hơn. 35 | Hãy nhớ rằng, hãy sử dụng cùng một số lượng từ cho mỗi bản tóm tắt. 36 | Trả lời bằng JSON. JSON phải là danh sách (độ dài 5) từ điển có khóa là "Missing_Entities" và "Denser_Summary"."""}] 37 | return message -------------------------------------------------------------------------------- /src/chain_of_density/msg_templates.py: -------------------------------------------------------------------------------- 1 | def create_system_message(config): 2 | wc = int(config["DEFAULT"]["MAX_WORD_COUNT"]) 3 | sc = int(config["DEFAULT"]["MAX_SENTENCE_COUNT"]) 4 | if sc > 1: 5 | sc = f"{sc-1} - {sc}" 6 | 7 | message = [{ 8 | "role": "system", 9 | "content": f"""Tôi sẽ cung cấp cho bạn một phần nội dung (ví dụ: bài viết, giấy tờ, tài liệu, v.v.) 10 | 11 | Bạn sẽ tạo ra các bản tóm tắt nội dung ngày càng ngắn gọn, chi tiết hơn. 12 | 13 | Lặp lại 2 bước sau 5 lần. 14 | 15 | Bước 1. Xác định 1-3 Thực thể thông tin (";" được phân cách) từ Bài viết còn thiếu trong bản tóm tắt được tạo trước đó. 16 | 17 | Bước 2. Viết một bản tóm tắt mới, dày đặc hơn có độ dài giống hệt nhau, bao gồm mọi thực thể và chi tiết từ bản tóm tắt trước đó cộng với các Thực thể còn thiếu. 18 | 19 | Một thực thể bị thiếu là: 20 | 21 | Có liên quan: đến câu chuyện chính. 22 | Cụ thể: mô tả nhưng ngắn gọn (5 từ trở xuống). 23 | Tiểu thuyết: không có trong bản tóm tắt trước đó. 24 | Trung thành: có mặt trong phần nội dung. 25 | Anywhere: nằm ở bất cứ đâu trong Article. 26 | 27 | Hướng dẫn: 28 | 29 | Bản tóm tắt đầu tiên phải dài ({sc} câu, -{wc} từ) nhưng rất không cụ thể, chứa ít thông tin ngoài các mục được đánh dấu là thiếu. Sử dụng ngôn ngữ quá dài dòng và các từ đệm (ví dụ: "bài viết này thảo luận") để tiếp cận các từ -{wc}. 30 | Đếm từng từ: viết lại bản tóm tắt trước đó để cải thiện dòng chảy và tạo khoảng trống cho các nội dung bổ sung. 31 | Tạo không gian bằng cách kết hợp, nén và loại bỏ các cụm từ không mang tính thông tin như “bài viết thảo luận”. 32 | Các bản tóm tắt phải trở nên rất dày đặc và ngắn gọn nhưng vẫn khép kín, ví dụ: dễ hiểu mà không cần có Điều khoản. 33 | Các thực thể bị thiếu có thể xuất hiện ở bất kỳ đâu trong bản tóm tắt mới. 34 | Không bao giờ loại bỏ các thực thể khỏi bản tóm tắt trước đó. Nếu không thể tạo được không gian, hãy thêm ít thực thể mới hơn. 35 | Hãy nhớ rằng, hãy sử dụng cùng một số lượng từ cho mỗi bản tóm tắt. 36 | Trả lời bằng JSON. JSON phải là danh sách (độ dài 5) từ điển có khóa là "Missing_Entities" và "Denser_Summary"."""}] 37 | return message -------------------------------------------------------------------------------- /src/ollama_predict.py: -------------------------------------------------------------------------------- 1 | from langchain.vectorstores import FAISS 2 | from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings 3 | from langchain.chat_models import ChatOpenAI 4 | from langchain.prompts import PromptTemplate 5 | import torch, accelerate,transformers, einops 6 | from transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer,pipeline,BitsAndBytesConfig, TextStreamer 7 | import os 8 | import ollama 9 | device = 'cpu' 10 | embed_model_id = 'BAAI/bge-m3' 11 | cache_dir = "cache/" 12 | embed_model = SentenceTransformerEmbeddings( 13 | model_name=embed_model_id, 14 | model_kwargs={'device': device}, 15 | encode_kwargs={'batch_size': 16, "normalize_embeddings": True, "device": device }, 16 | cache_folder=cache_dir 17 | ) 18 | DB_SAVE_NAME = f"endoc_{embed_model_id.split('/')[-1].replace('.','-')}" 19 | 20 | loaded_db = FAISS.load_local( 21 | DB_SAVE_NAME, 22 | embeddings=embed_model 23 | ) 24 | # level3_1,Hương đang mang thai và lo lắng mình có thể gặp phải rau tiền đạo. Hương có thể kiểm tra phát hiện bệnh này từ tuần thứ mấy của thai kỳ?,A. Tuần 10,B.Tuần 20,C. Tuần 30,D. Tuần 40,, 25 | question = """Cúm là một trong những bệnh phổ biến nhất trên thế giới, định nghĩa bệnh này thế nào cho đúng? 26 | A. Một dạng bệnh nhiễm vi rút cấp tính 27 | B.Một loại bệnh truyền nhiễm qua đường tình dục 28 | C. Một bệnh lây truyền qua thực phẩm 29 | """ 30 | 31 | prompt_template = """Sử dụng các trích đoạn sau đây để trả lời câu hỏi trắc nghiệm. Nếu không biết, chọn không biết. 32 | {context} 33 | Câu hỏi: {question} 34 | Trả lời:""" 35 | # query = """ 36 | # Đâu là triệu chứng của bệnh van tim? 37 | # A. Khó thở 38 | # B. Tăng cân nhanh chóng 39 | # C. Vàng da 40 | # D. Rụng tóc 41 | # """ 42 | 43 | result = loaded_db.similarity_search(query=question, k=1) 44 | print(result) 45 | context = result[0].page_content 46 | #system_prompt = """""" 47 | PROMPT = PromptTemplate( 48 | template=prompt_template, input_variables=["context", "question"] 49 | ) 50 | input_prompt = prompt_template.format_map({"context": context, "question": question}) 51 | print(input_prompt) 52 | with open("prompt.txt", "w") as f: 53 | f.write(input_prompt ) 54 | 55 | 56 | 57 | with open("context.txt", "w") as f: 58 | f.write(context) 59 | 60 | model_id ="ontocord/vistral" 61 | prompt = open("prompt.txt").read() 62 | print(prompt) 63 | response = ollama.generate(model=model_id, prompt=prompt) 64 | print(response["response"]) 65 | -------------------------------------------------------------------------------- /src/phoGPT.py: -------------------------------------------------------------------------------- 1 | # coding: utf8 2 | import torch, accelerate,transformers, einops 3 | from transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer 4 | 5 | model_path = "PhoGPT-4B-Chat-v0.1" 6 | #model_path = "vinai/PhoGPT-4B-Chat" 7 | 8 | config = AutoConfig.from_pretrained(model_path, trust_remote_code=True) 9 | config.init_device = "cuda" 10 | 11 | model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16, trust_remote_code=True, use_auth_token=None,config=config) 12 | # If your GPU does not support bfloat16: 13 | # model = AutoModelForCausalLM.from_pretrained(model_path, config=config, torch_dtype=torch.float16, trust_remote_code=True) 14 | model.eval() 15 | 16 | tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) 17 | 18 | PROMPT_TEMPLATE = "### Câu hỏi: {instruction}\n### Trả lời:" 19 | def model_generator(model, instruction): 20 | input_prompt = PROMPT_TEMPLATE.format_map({"instruction": instruction}) 21 | input_ids = tokenizer(input_prompt, return_tensors="pt") 22 | 23 | outputs = model.generate( 24 | inputs=input_ids["input_ids"].to("cuda"), 25 | # attention_mask=input_ids["attention_mask"].to("cuda"), 26 | do_sample=True, 27 | temperature=1.0, 28 | top_k=50, 29 | top_p=0.9, 30 | max_new_tokens=1024, 31 | eos_token_id=tokenizer.eos_token_id, 32 | pad_token_id=tokenizer.pad_token_id, 33 | # return_dict_in_generate=True, output_scores=True 34 | # output_hidden_states = True, 35 | ) 36 | 37 | response = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0] 38 | response = response.split("### Trả lời:")[1] 39 | return response 40 | 41 | 42 | # Some instruction examples 43 | # instruction = "Viết bài văn nghị luận xã hội về {topic}" 44 | # instruction = "Viết bản mô tả công việc cho vị trí {job_title}" 45 | # instruction = "Sửa lỗi chính tả:\n{sentence_or_paragraph}" 46 | # instruction = "Dựa vào văn bản sau đây:\n{text}\nHãy trả lời câu hỏi: {question}" 47 | # instruction = "Tóm tắt văn bản:\n{text}" 48 | 49 | #instruction = "Viết bài văn nghị luận xã hội về an toàn giao thông" 50 | # instruction = "Sửa lỗi chính tả:\nTriệt phá băng nhóm kướp ô tô, sử dụng \"vũ khí nóng\"" 51 | 52 | instruction = "Hãy đưa ra 10 ý tưởng về marketing bán hàng và các bước để thực hiện những ý tưởng đó" 53 | 54 | 55 | # model_path = "PhoGPT-4B-Chat-v0.1" 56 | #instruction = "em tên là gì? em nhà ở đâu thế? sở thích của em là gì?" 57 | print(model_generator(model, instruction)) -------------------------------------------------------------------------------- /src/bm25_search.py: -------------------------------------------------------------------------------- 1 | import os 2 | from getpass import getpass 3 | import time 4 | # langchain packages 5 | from langchain.chains import RetrievalQA 6 | from langchain.chat_models import ChatOpenAI 7 | from langchain.document_loaders import TextLoader 8 | from langchain.text_splitter import RecursiveCharacterTextSplitter 9 | from langchain.embeddings import OpenAIEmbeddings 10 | from langchain.vectorstores import Chroma, FAISS 11 | from langchain import HuggingFaceHub 12 | from langchain.llms import OpenAI 13 | from langchain.chains.question_answering import load_qa_chain 14 | from langchain.retrievers import ParentDocumentRetriever 15 | from langchain.embeddings import HuggingFaceEmbeddings 16 | from langchain.storage import InMemoryStore 17 | from langchain.retrievers import BM25Retriever, EnsembleRetriever 18 | from langchain.document_loaders import DirectoryLoader 19 | from langchain.prompts import PromptTemplate 20 | path = 'corpus/' 21 | text_loader_kwargs={'autodetect_encoding': True} 22 | loader = DirectoryLoader(path, loader_cls = TextLoader, loader_kwargs=text_loader_kwargs) 23 | docs = loader.load() 24 | from bs4 import BeautifulSoup 25 | 26 | def load 27 | for doc in docs: 28 | soup = BeautifulSoup(doc.page_content, 'html.parser') 29 | doc.page_content = soup.get_text() 30 | text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) 31 | texts = text_splitter.split_documents(docs) 32 | bm25_retriever = BM25Retriever.from_documents(texts) 33 | bm25_retriever.k = 3 34 | snippet = """Phương pháp phòng ngừa bệnh viêm cầu thận cấp tính nào được khuyến khích thực hiện?. 35 | A. Sử dụng thuốc kháng sinh 36 | B. Sử dụng thuốc giảm đau 37 | C. Tăng cường hệ miễn dịch và giảm thiểu tối đa nguy cơ bị các bệnh viêm nhiễm 38 | """ 39 | docs = bm25_retriever.get_relevant_documents(snippet) 40 | import ollama 41 | 42 | model_id ="ontocord/vistral" 43 | prompt_template = """Sử dụng các trích đoạn sau đây để trả lời câu hỏi trắc nghiệm. Nếu không biết, chọn không biết, nếu có nhiều hơn 1 đáp án đúng thì liệt kê các đáp án đúng. 44 | {context} 45 | Câu hỏi: {question} 46 | Trả lời:""" 47 | PROMPT = PromptTemplate( 48 | template=prompt_template, input_variables=["context", "question"] 49 | ) 50 | #get all doc to context 51 | context = "" 52 | for doc in docs: 53 | context += doc.page_content + "\n" 54 | 55 | prompt = prompt_template.format_map({"context": context, "question": snippet}) 56 | #prompt = open("prompt.txt").read()x`` 57 | print(prompt) 58 | respone = ollama.generate(model=model_id, prompt=prompt,options={"temperature":0.5}) 59 | print(respone) 60 | print(respone["response"]) 61 | -------------------------------------------------------------------------------- /src/rerank.py: -------------------------------------------------------------------------------- 1 | from FlagEmbedding import FlagReranker 2 | from langchain.retrievers import ContextualCompressionRetriever, CohereRagRetriever 3 | from langchain.retrievers.document_compressors import CohereRerank 4 | from langchain_community.vectorstores import Chroma 5 | from dotenv import load_dotenv 6 | load_dotenv(".env") 7 | import os 8 | import cohere 9 | cohere_api_key = os.getenv("COHERE_API_KEY") 10 | print("cohere_api_key:",cohere_api_key) 11 | class Rerank(): 12 | def __init__(self,model_name="BAAI/bge-reranker-v2-m3"): 13 | self.model_name = model_name 14 | if self.model_name =="cohere": 15 | self.reranker = cohere.Client(cohere_api_key) 16 | else: 17 | self.reranker = FlagReranker('BAAI/bge-reranker-v2-m3', use_fp16=True) 18 | 19 | def rerank(self, query, passage_list): 20 | """ 21 | query: str 22 | passage_list: List[str] 23 | Rank the passages based on the query""" 24 | if self.model_name == "cohere": 25 | reranker_results = self.reranker.rerank(query=query, documents=passage_list, top_n=3, model="rerank-multilingual-v3.0").results 26 | relevance_score = [result.relevance_score for result in reranker_results] 27 | print("relevance_score:",relevance_score) 28 | reranked_passages = [passage_list[result.index] for result in reranker_results] 29 | return reranked_passages 30 | 31 | 32 | else: 33 | reranked_score = self.reranker.compute_score([[query,passage] for passage in passage_list],normalize=True) 34 | print("reranked_score:",reranked_score) 35 | #sort the passages based on the reranked_score 36 | reranked_passages = [passage for _,passage in sorted(zip(reranked_score,passage_list),reverse=True)] 37 | return reranked_passages 38 | 39 | if __name__ == "__main__": 40 | #rerank = Rerank() 41 | co = cohere.Client(cohere_api_key) 42 | query = "Thủ đô" 43 | passage_list = ["trung tâm","capital","kinh đô"] 44 | rerank = Rerank(model_name="cohere") 45 | reranked_passages = rerank.rerank(query, passage_list) 46 | print("reranked_passages:",reranked_passages) 47 | # #reranked_passages = rerank.rerank(query, passage_list) 48 | # rerank_results = co.rerank(query=query, documents=passage_list, top_n=3, model="rerank-multilingual-v3.0").results 49 | # print("rerank_results:",rerank_results) 50 | # relevance_score = [result.relevance_score for result in rerank_results] 51 | # print("relevance_score:",relevance_score) 52 | # #print("rerank_results:",rerank_results) 53 | 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vietnamese Healthcare Chatbot 2 | 3 | Project for starting LLM on medical data. 4 | 5 | ## 1. Introduction 6 | 7 | This project aims to build a Vietnamese healthcare chatbot leveraging advanced Retrieve-Augment-Generate (RAG) capabilities, such as Hybrid Search, Density Chain, and Re-ranking. The chatbot is designed to provide accurate and helpful health-related information and support. 8 | ## Overall data architecture 9 | 10 | ![](imgs/LLM.png) 11 | 12 | ## Demo 13 | 14 | ![](imgs/web.png) 15 | ### Key features: 16 | 17 | **🌟 Advanced RAG Capabilities:** Utilizing Hybrid Search, Density Chain, and Re-ranking to enhance information retrieval and generation. 18 | 19 | **🌟 Model Experimentation:** Testing various LLM models, including GPT, Gemini, Vistral,Vinallama etc., to find the best fit for different use case 20 | 21 | **🌟 Model and Embedding Selection** : Allowing users to choose the most appropriate model and embeddings to create a personalized assistant. 22 | 23 | **🌟 User-Friendly Interface:** Using Gradio to create an intuitive and easy-to-use interface for beginners. 24 | 25 | ## 2. How to use? 26 | ### Getting Started 27 | ``` 28 | git clone https://github.com/luongphambao/medical_llm.git 29 | cd medical_llm 30 | ``` 31 | ``` 32 | conda create -n medical_llm python=3.10 33 | conda activate medical_llm 34 | ``` 35 | ``` 36 | pip install -r requirements.txt 37 | ``` 38 | Add the OpenAI API KEY and GOOGLE API key in the **.env** file. 39 | ```python 40 | OPENAI_API_KEY=sk-... 41 | GOOGLE_API_KEY=AI-... 42 | ``` 43 | ### Create Embedding 44 | 45 | ``` 46 | python src/embedding.py --model_name="BAAI/bge-m3" --cache_dir="cache/" --persist_directory="chroma_db_bge" --corpus_path="corpus_summarize" 47 | ``` 48 | ### Predict (generate answer for Kalapa competition) 49 | 50 | if you predict with opensource model, you can use the following command to start ollama server for serving the model. 51 | 52 | ``` 53 | ollama serve (you can install ollama based on the instruction in the following link: https://github.com/ollama/ollama) 54 | ``` 55 | 56 | Predict with the model 57 | ``` 58 | python3 src/predict.py --model_embedding_name="BAAI/bge-m3" --cache_dir="cache/" --persist_directory="chroma_db_bge" --corpus_path="corpus_summarize" --csv_path="data/public_test.csv" --output_path="submit.csv" --corpus_path="corpus_summarize" --model_name="BAAI/bge-m3" 59 | ``` 60 | ### Demo Web 61 | 62 | you can run the **streamlit_app.py** file and a Streamlit interface will appear. 63 | ``` 64 | streamlit run streamlit_app.py 65 | ``` 66 | you can run the **app.py** file and a Gradio interface will appear. 67 | ``` 68 | python -m run app.py 69 | ``` 70 | -------------------------------------------------------------------------------- /src/llm.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | from dotenv import load_dotenv 4 | from langchain.chat_models import ChatOpenAI 5 | from langchain_google_genai import ChatGoogleGenerativeAI 6 | import ollama 7 | try: 8 | from src.prompt import * 9 | except: 10 | from prompt import * 11 | load_dotenv(".env") 12 | class LLM(): 13 | def __init__(self,openai_api_key=None,google_api_key=None,temperature=0.4,model_name=None,ollama_use=False): 14 | self.openai_api_key = openai_api_key 15 | self.google_api_key = google_api_key 16 | self.temperature = temperature 17 | self.model_name = model_name 18 | self.ollama_use = ollama_use 19 | if ollama_use: 20 | self.llm = None 21 | if model_name =="openai" and openai_api_key is not None: 22 | self.llm = ChatOpenAI(temperature=temperature,openai_api_key=openai_api_key) 23 | if google_api_key is not None and model_name =="google": 24 | self.llm = ChatGoogleGenerativeAI(model="gemini-pro", google_api_key=google_api_key, temperature=temperature, max_tokens=4096) 25 | def preprocess_prompt(self, question, choices=None, context=None): 26 | 27 | user_message_ = USER_MESSAGE.format(question=question, answer_choices=choices) 28 | if context is not None: 29 | user_message_ = USER_MESSAGE_WITH_CONTEXT_VER_3.format(context=context, question=question, 30 | answer_choices=choices) 31 | if choices is None: 32 | user_message_ = USER_MESSAGE_WITH_CONTEXT_QA.format(context=context, question=question) 33 | if self.ollama_use ==True: 34 | prompt = DEFAULT_PROMPT_VN.format(user_message=user_message_) 35 | else: 36 | 37 | prompt = DEFAULT_PROMPT.format(user_message=user_message_) 38 | return prompt 39 | def generate(self,prompt): 40 | if self.openai_api_key is not None: 41 | return self.llm.predict(text=prompt) 42 | if self.google_api_key is not None: 43 | return self.llm.invoke(prompt).content 44 | if self.ollama_use: 45 | return ollama.generate(model=self.model_name, prompt=prompt)["response"] 46 | if __name__ == "__main__": 47 | openai_api_key = os.getenv("OPENAI_API_KEY") 48 | google_api_key = os.getenv("GOOGLE_API_KEY") 49 | llm = LLM(openai_api_key=openai_api_key) 50 | #llm =LLM(model_name="bdx0/vietcuna",ollama_use=True) 51 | prompt ="""Việc sử dụng thuốc kháng sinh một cách tự tiện, quá liều lượng, không theo đơn có thể gây ra vấn đề nào?""" 52 | result = llm.generate(prompt) 53 | print(result) 54 | -------------------------------------------------------------------------------- /src/metrics.py: -------------------------------------------------------------------------------- 1 | import os 2 | import numpy as np 3 | import pandas as pd 4 | 5 | def calc_score(pred,gt): 6 | """calculate score""" 7 | score = 0 8 | #count "1" in gt 9 | gt =str(gt) 10 | pred = str(pred) 11 | if len(gt) > len(pred): 12 | pred = pred + "0"*(len(gt)-len(pred)) 13 | print("gt:",gt) 14 | print("pred:",pred) 15 | num_correct_answer = 0 16 | for i in range(len(gt)): 17 | 18 | if gt[i] == "1": 19 | num_correct_answer += 1 20 | if pred[i] == gt[i] and pred[i] == "1": 21 | score += 1 22 | else: 23 | if gt[i]=="0" and pred[i]!="0": 24 | return 0 25 | return score/num_correct_answer 26 | 27 | class Metrics(): 28 | def __init__(self,type="public"): 29 | self.data_public = pd.read_csv("data/public_test_ans.csv") 30 | self.data_private = pd.read_csv("data/private_test_ans.csv") 31 | self.type = type 32 | if type == "public": 33 | self.data = self.data_public 34 | else: 35 | self.data = self.data_private 36 | def get_score(self,df_submision): 37 | df_submision = df_submision.sort_values(by="id") 38 | df_gt = self.data.sort_values(by="id") 39 | #print("df_submision:",df_submision) 40 | #print("df_gt:",df_gt) 41 | for i in range(len(df_submision)): 42 | 43 | gt = df_gt.iloc[i]["answer"] 44 | pred = df_submision.iloc[i]["answer"] 45 | score = calc_score(pred,gt) 46 | #round to 3 decimal places 47 | df_submision.loc[i,"score"] = np.round(score,3) 48 | return df_submision 49 | def get_accuracy(self,df_submision): 50 | df_submision = df_submision.sort_values(by="id") 51 | df_gt = self.data.sort_values(by="id") 52 | for i in range(len(df_submision)): 53 | gt = df_gt.iloc[i]["answer"] 54 | pred = df_submision.iloc[i]["answer"] 55 | if gt == pred: 56 | df_submision.loc[i,"accuracy"] = 1 57 | else: 58 | df_submision.loc[i,"accuracy"] = 0 59 | return df_submision 60 | def get_result(self,df_submision): 61 | """get score and accuracy""" 62 | df_submision = self.get_score(df_submision) 63 | df_submision = self.get_accuracy(df_submision) 64 | accuracy = df_submision["accuracy"].mean() 65 | score = df_submision["score"].mean() 66 | return accuracy,score 67 | if __name__ == "__main__": 68 | metrics = Metrics(type ="public") 69 | df_submision = pd.read_csv("submit_80.csv") 70 | accuracy,score = metrics.get_result(df_submision) 71 | print("accuracy:",accuracy) 72 | print("score:",score) -------------------------------------------------------------------------------- /src/search.py: -------------------------------------------------------------------------------- 1 | 2 | from langchain.document_loaders import DirectoryLoader 3 | from langchain.text_splitter import RecursiveCharacterTextSplitter 4 | from langchain.document_loaders import TextLoader 5 | from langchain.document_loaders import DirectoryLoader 6 | from langchain.embeddings.openai import OpenAIEmbeddings 7 | from langchain.text_splitter import RecursiveCharacterTextSplitter 8 | from langchain.vectorstores import Chroma 9 | import os 10 | from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings 11 | from langchain.retrievers import BM25Retriever, EnsembleRetriever 12 | from langchain.prompts import PromptTemplate 13 | from langchain.chat_models import ChatOpenAI 14 | from dotenv import load_dotenv 15 | from langchain_community.embeddings import HuggingFaceBgeEmbeddings 16 | load_dotenv(".env") 17 | openai_api_key = os.getenv('OPENAI_API_KEY') 18 | import ollama 19 | try: 20 | from src.utils import get_text_from_html_file, get_text_chunks,load_corpus 21 | from src.embedding import Embedding 22 | except: 23 | from utils import get_text_from_html_file, get_text_chunks,load_corpus 24 | from embedding import Embedding 25 | model_id ="ontocord/vistral" 26 | 27 | class Searching: 28 | def __init__(self,k1,k2,vectordb,splits): 29 | self.k1 = k1 30 | self.k2 = k2 31 | self.retriever = vectordb.as_retriever(search_kwargs={"k": k1}) 32 | self.bm25_retriever = BM25Retriever.from_documents(splits) 33 | self.bm25_retriever.k = k2 34 | self.ensemble_retriever = EnsembleRetriever(retrievers=[self.bm25_retriever, self.retriever], weights=[0.7, 0.3]) 35 | def hybrid_search(self,query): 36 | ensemble_docs = self.ensemble_retriever.get_relevant_documents(query) 37 | return ensemble_docs 38 | def bm25_search(self,query): 39 | bm25_docs = self.bm25_retriever.get_relevant_documents(query) 40 | return bm25_docs 41 | def vector_search(self,query): 42 | vector_docs = self.retriever.get_relevant_documents(query) 43 | return vector_docs 44 | def get_context(self,docs): 45 | context = [] 46 | for doc in docs: 47 | context.append(doc.page_content) 48 | return context 49 | # def main(): 50 | # corpus_path = 'corpus/' 51 | # docs,texts = load_corpus(corpus_path) 52 | # print("Loaded corpus") 53 | # splits =texts 54 | # embedding = Embedding(model_name="google", device='cpu', cache_dir="cache/", persist_directory="chroma_db_google") 55 | # vectordb = embedding.load_embedding() 56 | # print("Loaded embedding") 57 | # search = Searching(1,1,vectordb,splits) 58 | # print("Loaded search") 59 | # query ="Triệu chứng bệnh guts" 60 | # vertor_result_docs = search.vector_search(query) 61 | # print(vertor_result_docs[0].page_content) 62 | # if __name__ ==__main__() 63 | # main() -------------------------------------------------------------------------------- /src/rag.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pandas as pd 3 | import numpy as np 4 | from tqdm import tqdm 5 | from dotenv import load_dotenv 6 | from langchain_core.output_parsers import StrOutputParser 7 | from langchain_core.runnables import RunnablePassthrough 8 | from utils import * 9 | from data import Medical_Data 10 | from llm import LLM 11 | from prompt import * 12 | from metrics import Metrics 13 | from embedding import Embedding 14 | from search import Searching 15 | from langchain_core.prompts import PromptTemplate 16 | 17 | load_dotenv(".env") 18 | def format_docs(docs): 19 | return "\n\n".join(doc.page_content for doc in docs) 20 | def rag(): 21 | prompt = hub.pull("rlm/rag-prompt") 22 | template = USER_MESSAGE_WITH_CONTEXT_VER_3 23 | custom_rag_prompt = PromptTemplate(template) 24 | rag_chain =( 25 | { 26 | "context": retriever |format_docs, 27 | "question": RunnablePassthrough(), 28 | "choices": RunnablePassthrough(), 29 | } 30 | 31 | ) 32 | return rag_chain 33 | def main(): 34 | google_api_key = os.getenv("GOOGLE_API_KEY") 35 | openai_api_key = os.getenv("OPENAI_API_KEY") 36 | corpus_path = 'corpus/' 37 | docs,texts = load_corpus(corpus_path) 38 | print("Loaded corpus") 39 | splits =texts 40 | embedding = Embedding(model_name="BAAI/bge-m3", device='cpu', cache_dir="cache/", persist_directory="chroma_db_bge") 41 | vectordb = embedding.load_embedding() 42 | print("Loaded embedding") 43 | search = Searching(5,5,vectordb,splits) 44 | print("Loaded search") 45 | df = pd.read_csv("data/public_test.csv") 46 | result = {"id": [], "answer": []} 47 | model = LLM(google_api_key=google_api_key) 48 | #model = LLM(openai_api_key=openai_api_key) 49 | #model_name ="bdx0/vietcuna" 50 | #model = LLM(model_name=model_name,ollama_use=True) 51 | print("Loaded model") 52 | for index, row in tqdm(df.iterrows()): 53 | result["id"].append(row["id"].strip()) 54 | question, choices, num_choices = process_single_row(row) 55 | docs = search.hybrid_search(question) 56 | context = search.get_context(docs) 57 | question = preprocess_question(question) 58 | rag_chain = rag(question,choices,context,question) 59 | 60 | # prompt = model.preprocess_prompt(question, choices, context) 61 | # with open("prompt_sample.txt", "w") as f: 62 | # f.write(prompt) 63 | # answer = model.generate(prompt) 64 | # output_json = process_output(answer, num_choices) 65 | # print(output_json) 66 | # result["answer"].append(output_json) 67 | break 68 | newdf = pd.DataFrame(result, dtype=str) 69 | newdf.to_csv("submit_vietcuna.csv", index=False) 70 | # query ="Đàn ông có thể bị mắc ung thư vú không?" 71 | # vertor_result_docs = search.hybrid_search(query) 72 | # print(vertor_result_docs[0].page_content) 73 | if __name__ == "__main__": 74 | main() -------------------------------------------------------------------------------- /src/create_document_DB.py: -------------------------------------------------------------------------------- 1 | import os 2 | os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' 3 | import json 4 | from torch import cuda 5 | from pyvi.ViTokenizer import tokenize 6 | from langchain.embeddings.huggingface import HuggingFaceEmbeddings 7 | #embed_model_id = 'sentence-transformers/all-MiniLM-L6-v2' 8 | embed_model_id = 'BAAI/bge-m3' 9 | embed_model_id = 'VoVanPhuc/sup-SimCSE-VietNamese-phobert-base' 10 | device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' 11 | #device = 'cpu' 12 | cache_dir = "cache/" 13 | 14 | DB_SAVE_NAME = f"endoc_{embed_model_id.split('/')[-1].replace('.','-')}" 15 | DOCUMENT_DIR = "processed/" 16 | 17 | embed_model = HuggingFaceEmbeddings( 18 | model_name=embed_model_id, 19 | model_kwargs={'device': device}, 20 | encode_kwargs={'batch_size': 1, "normalize_embeddings": True, "device": device}, 21 | cache_folder=cache_dir 22 | ) 23 | print("Load embeddings model successfully!") 24 | 25 | # docs = [ 26 | # "this is one document", 27 | # "and another document" 28 | # ] 29 | 30 | # embeddings = embed_model.embed_documents(docs) 31 | 32 | # print( 33 | # f"We have {len(embeddings)} doc embeddings, each with " 34 | # f"a dimensionality of {len(embeddings[0])}." 35 | # ) 36 | from langchain.schema import Document 37 | from langchain.vectorstores import FAISS 38 | from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings 39 | 40 | faiss_docs = [] 41 | for filename in sorted(os.listdir(DOCUMENT_DIR)): 42 | filepath = os.path.join(DOCUMENT_DIR, filename) 43 | with open(filepath, "r", encoding="utf-8") as f: 44 | file_data = json.load(f) 45 | 46 | faiss_docs.append(Document( 47 | page_content=file_data["content"], 48 | metadata={"filename": filename, "path": filepath, "title": file_data["title"], "category": file_data["category"], "abstract": file_data["abstract"], "subsections": file_data["subsections"]} 49 | )) 50 | 51 | embed_model = HuggingFaceEmbeddings( 52 | model_name=embed_model_id, 53 | model_kwargs={'device': device}, 54 | encode_kwargs={'batch_size': 1, "normalize_embeddings": True, "device": device }, 55 | cache_folder=cache_dir 56 | ) 57 | 58 | db = FAISS.from_documents( 59 | documents=faiss_docs, 60 | embedding=embed_model, 61 | ) 62 | db.save_local(DB_SAVE_NAME) 63 | from langchain.vectorstores import FAISS 64 | from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings 65 | 66 | device = 'cpu' 67 | embed_model = SentenceTransformerEmbeddings( 68 | model_name=embed_model_id, 69 | model_kwargs={'device': device}, 70 | encode_kwargs={'batch_size': 1, "normalize_embeddings": True, "device": device }, 71 | cache_folder=cache_dir 72 | ) 73 | 74 | loaded_db = FAISS.load_local( 75 | DB_SAVE_NAME, 76 | embeddings=embed_model 77 | ) 78 | query = """ 79 | Đâu là triệu chứng của bệnh van tim? 80 | A. Khó thở 81 | B. Tăng cân nhanh chóng 82 | C. Vàng da 83 | D. Rụng tóc 84 | """ 85 | 86 | result = loaded_db.similarity_search(query=query, k=1) 87 | print(result) 88 | context = result[0].page_content 89 | with open("context_sample.txt", "w") as f: 90 | f.write(context) 91 | print(context) -------------------------------------------------------------------------------- /src/hyde_rag.py: -------------------------------------------------------------------------------- 1 | # --- Setting API KEY --- 2 | import os 3 | 4 | os.environ['GOOGLE_API_KEY']='A-' 5 | 6 | # --- Model Loading --- 7 | # Import the necessary modules from the langchain_google_genai package. 8 | from langchain_google_genai import GoogleGenerativeAIEmbeddings 9 | from langchain_google_genai import ChatGoogleGenerativeAI 10 | 11 | # Create a ChatGoogleGenerativeAI Object and convert system messages to human-readable format. 12 | llm = ChatGoogleGenerativeAI(model="gemini-pro", convert_system_message_to_human=True) 13 | 14 | # Create a GoogleGenerativeAIEmbeddings object for embedding our Prompts and documents 15 | Embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001") 16 | # --- Data Loading --- 17 | # Import the WebBaseLoader class from the langchain_community.document_loaders module. 18 | from langchain_community.document_loaders import WebBaseLoader 19 | 20 | # Create a WebBaseLoader object with the URL of the blog post to load. 21 | loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/") 22 | 23 | # Load the blog post and store the documents in the `docs` variable. 24 | docs = loader.load() 25 | # --- Splitting / Creating Chunks --- 26 | # Import the RecursiveCharacterTextSplitter class from the 27 | # langchain.text_splitter module. 28 | from langchain.text_splitter import RecursiveCharacterTextSplitter 29 | 30 | 31 | # Create a RecursiveCharacterTextSplitter object using the provided 32 | # chunk size and overlap. 33 | text_splitter = RecursiveCharacterTextSplitter(chunk_size=300, 34 | chunk_overlap=50) 35 | 36 | 37 | # Split the documents in the `docs` variable into smaller chunks and 38 | #store the resulting splits in the `splits` variable. 39 | splits = text_splitter.split_documents(docs) 40 | # --- Creating Embeddings by Passing Hyde Embeddings to Vector Store --- 41 | from langchain_community.vectorstores import Chroma 42 | 43 | 44 | # passing the hyde embeddings to create and store embeddings 45 | vectorstore = Chroma.from_documents(documents=splits, 46 | collection_name='my-collection', 47 | embedding=Embeddings) 48 | 49 | 50 | # Creating Retriever 51 | retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 4}) 52 | # Importing the Prompt Template 53 | from langchain.prompts import ChatPromptTemplate 54 | # Creating the Prompt Template 55 | template = """For the given question try to generate a hypothetical answer\ 56 | Only generate the answer and nothing else: 57 | Question: {question} 58 | """ 59 | 60 | Prompt = ChatPromptTemplate.from_template(template) 61 | query = Prompt.format(question = 'What are different Chain of Thought(CoT) Prompting?') 62 | 63 | hypothetical_answer = llm.invoke(query).content 64 | print(hypothetical_answer) 65 | # retrieval with hypothetical answer/document 66 | similar_docs = retriever.get_relevant_documents(hypothetical_answer) 67 | for doc in similar_docs: 68 | print(doc.page_content) 69 | print() 70 | # retrieval with original query 71 | similar_docs = retriever.get_relevant_documents('What are different \ 72 | Chain of Thought(CoT) Prompting?') 73 | 74 | for doc in similar_docs: 75 | print(doc.page_content) 76 | print() 77 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from langchain_core.messages import HumanMessage, SystemMessage, AIMessage 2 | from langchain_core.prompts.chat import ( 3 | ChatPromptTemplate, 4 | HumanMessagePromptTemplate, 5 | SystemMessagePromptTemplate, 6 | ) 7 | from openai import OpenAI 8 | import gradio as gr 9 | from dotenv import load_dotenv 10 | import os 11 | import pandas as pd 12 | import numpy as np 13 | from tqdm import tqdm 14 | from dotenv import load_dotenv 15 | from src.utils import * 16 | from src.llm import LLM 17 | from src.embedding import Embedding 18 | from src.search import Searching 19 | from langchain_openai import ChatOpenAI 20 | load_dotenv(".env") 21 | api_key =os.getenv("OPENAI_API_KEY") 22 | google_api_key = os.getenv("GOOGLE_API_KEY") 23 | openai_api_key = os.getenv("OPENAI_API_KEY") 24 | def preproces_context(context:list): 25 | """Preprocess context""" 26 | context = " ".join(context) 27 | context = context.replace("\n","") 28 | #replace ** with "" 29 | context = context.replace("*","") 30 | 31 | return context 32 | 33 | 34 | client = OpenAI(api_key=api_key) 35 | #drop down menu llm model gradio 36 | model_list= ["gpt-3.5-turbo","gpt-3.5-turbo-davinci","gpt-3.5-turbo-curie","gpt-3.5-turbo-babbage","gpt-3.5-turbo-ada","gpt-3.5-turbo-codex","gpt-3.5-turbo-cushman","gpt-3.5-turbo-davinci-codex","gpt-3.5-turbo-davinci-cushman","gpt-3.5-turbo-davinci-codex-cushman"] 37 | 38 | corpus_path = 'corpus_summarize/' 39 | docs,texts = load_corpus(corpus_path) 40 | print("Loaded corpus") 41 | splits =texts 42 | embedding = Embedding(model_name="BAAI/bge-m3", device='cpu', cache_dir="cache/", persist_directory="chroma_db_bge_v4") 43 | #embedding = Embedding(model_name="google", device='cpu', cache_dir="cache/", persist_directory="chroma_db_google") 44 | #embedding = Embedding(model_name="openai", device='cpu', cache_dir="cache/", persist_directory="chroma_db_openai",openai_api_key=openai_api_key) 45 | print(embedding.model_name) 46 | vectordb = embedding.load_embedding() 47 | print("Loaded embedding") 48 | search = Searching(1,1,vectordb,splits) 49 | print("Loaded search") 50 | model = LLM(google_api_key=google_api_key) 51 | # model_name ="ontocord/vistral" 52 | # model = LLM(model_name=model_name,ollama_use=True) 53 | print("Loaded model") 54 | def RAG(question): 55 | """RAG for human message""" 56 | docs = search.hybrid_search(question) 57 | context = search.get_context(docs) 58 | #print(context) 59 | context = preproces_context(context) 60 | 61 | question = preprocess_question(question) 62 | prompt = model.preprocess_prompt(question=question,context= context) 63 | answer = model.generate(prompt) 64 | respone = f"{answer} \n\n\n Tài liệu tham khảo:\n\n {context}" 65 | return respone 66 | 67 | def predict(message, history): 68 | history_langchain_format = [] 69 | # for human, ai in history: 70 | # history_langchain_format.append(HumanMessage(content=human)) 71 | # history_langchain_format.append(AIMessage(content=ai)) 72 | history_langchain_format.append(HumanMessage(content=message)) 73 | respone = RAG(message) 74 | #print(respone) 75 | return respone 76 | gr.ChatInterface( 77 | predict, 78 | chatbot=gr.Chatbot(height=300), 79 | title="Tư vấn y tế", 80 | theme="soft", 81 | examples=["Hello", "Am I cool?", "Are tomatoes vegetables?"],).launch(share = True) -------------------------------------------------------------------------------- /src/predict.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pandas as pd 3 | import numpy as np 4 | from tqdm import tqdm 5 | from dotenv import load_dotenv 6 | import argparse 7 | try: 8 | from src.cod import get_summarize 9 | from src.utils import * 10 | from src.data import Medical_Data 11 | from src.llm import LLM 12 | from src.metrics import Metrics 13 | from src.embedding import Embedding 14 | from src.search import Searching 15 | except: 16 | from cod import get_summarize 17 | from utils import * 18 | from data import Medical_Data 19 | from llm import LLM 20 | from metrics import Metrics 21 | from embedding import Embedding 22 | from search import Searching 23 | 24 | 25 | load_dotenv(".env") 26 | def parse_args(): 27 | parser = argparse.ArgumentParser(description="Embedding") 28 | parser.add_argument("--model_embedding_name", type=str, default="BAAI/bge-m3", help="model name") 29 | parser.add_argument("--cache_dir", type=str, default="cache/", help="cache directory") 30 | parser.add_argument("--persist_directory", type=str, default="chroma_db_bge", help="persist directory") 31 | parser.add_argument("--corpus_path", type=str, default="corpus_summarize", help="corpus path") 32 | parser.add_argument("--csv_path", type=str, default="data/public_test.csv", help="csv path") 33 | parser.add_argument("--output_path", type=str, default="submit_openai.csv", help="output path") 34 | parser.add_argument("--model_name", type=str, default="openai", help="model name") 35 | parser.add_argument("--k1", type=int, default=5, help="k1") 36 | parser.add_argument("--k2", type=int, default=5, help="k2") 37 | return parser.parse_args() 38 | def main(): 39 | args = parse_args() 40 | google_api_key = os.getenv("GOOGLE_API_KEY") 41 | openai_api_key = os.getenv("OPENAI_API_KEY") 42 | corpus_path = args.corpus_path 43 | docs,texts = load_corpus(corpus_path) 44 | print("Loaded corpus") 45 | splits =texts 46 | embedding = Embedding(model_name=args.model_embedding_name, cache_dir=args.cache_dir, persist_directory=args.persist_directory,openai_api_key=openai_api_key) 47 | vectordb = embedding.load_embedding() 48 | print("Loaded embedding") 49 | k1 = args.k1 50 | k2 = args.k2 51 | search = Searching(k1,k2,vectordb,splits) 52 | print("Loaded search") 53 | df = pd.read_csv(args.csv_path) 54 | result = {"id": [], "answer": []} 55 | model = LLM(openai_api_key=openai_api_key,google_api_key=google_api_key,model_name =args.model_name) 56 | 57 | print("Loaded model") 58 | for index, row in tqdm(df.iterrows()): 59 | result["id"].append(row["id"].strip()) 60 | question, choices, num_choices = process_single_row(row) 61 | docs = search.hybrid_search(question) 62 | context = search.get_context(docs) 63 | question = preprocess_question(question) 64 | prompt = model.preprocess_prompt(question, choices, context) 65 | answer = model.generate(prompt) 66 | output_json = process_output(answer, num_choices) 67 | result["answer"].append(output_json) 68 | newdf = pd.DataFrame(result, dtype=str) 69 | newdf.to_csv(args.output_path, index=False) 70 | if __name__ == "__main__": 71 | #python3 src/predict.py --model_embedding_name="BAAI/bge-m3" --cache_dir="cache/" --persist_directory="chroma_db_bge" --corpus_path="corpus_summarize" --csv_path="data/public_test.csv" --output_path="submit.csv" --corpus_path="corpus_summarize" --model_name="BAAI/bge-m3" 72 | main() -------------------------------------------------------------------------------- /src/embedding.py: -------------------------------------------------------------------------------- 1 | from langchain.document_loaders import DirectoryLoader 2 | from langchain.text_splitter import RecursiveCharacterTextSplitter 3 | from langchain.document_loaders import TextLoader 4 | from langchain.document_loaders import DirectoryLoader 5 | from langchain.embeddings.openai import OpenAIEmbeddings 6 | from langchain_google_genai import GoogleGenerativeAIEmbeddings 7 | from langchain.text_splitter import RecursiveCharacterTextSplitter 8 | from langchain.vectorstores import Chroma 9 | import os 10 | import torch 11 | from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings 12 | from dotenv import load_dotenv 13 | import argparse 14 | from dotenv import load_dotenv 15 | load_dotenv(".env") 16 | openai_api_key = os.getenv("OPENAI_API_KEY") 17 | google_api_key = os.getenv("GOOGLE_API_KEY") 18 | try: 19 | from src.utils import get_text_from_html_file, get_text_chunks,load_corpus 20 | except: 21 | from utils import get_text_from_html_file, get_text_chunks,load_corpus 22 | load_dotenv(".env") 23 | os.environ['GOOGLE_API_KEY'] = os.getenv("GOOGLE_API_KEY") 24 | class Embedding: 25 | def __init__(self, model_name=None, device="cpu", cache_dir=None, persist_directory="openai",openai_api_key=None): 26 | self.model_name = model_name 27 | self.device = device 28 | self.cache_dir = cache_dir 29 | self.persist_directory = persist_directory 30 | self.openai_api_key = openai_api_key 31 | if self.model_name == "openai" and openai_api_key is not None: 32 | self.embed_model = OpenAIEmbeddings(api_key=openai_api_key) 33 | elif self.model_name == "google": 34 | self.embed_model = GoogleGenerativeAIEmbeddings(model="models/embedding-001") 35 | else: 36 | self.embed_model = SentenceTransformerEmbeddings( 37 | model_name=model_name, 38 | model_kwargs={'device': device}, 39 | encode_kwargs={'batch_size': 16, "normalize_embeddings": True, "device": device}, 40 | cache_folder=cache_dir 41 | ) 42 | print(self.embed_model) 43 | def create_embedding(self,splits): 44 | vectordb = Chroma.from_documents(documents=splits, embedding=self.embed_model,persist_directory=self.persist_directory) 45 | vectordb.persist() 46 | return vectordb 47 | def add_embedding(self, vectordb, splits): 48 | vectordb.add_documents(splits) 49 | vectordb.persist() 50 | return vectordb 51 | def load_embedding(self): 52 | vectordb = Chroma(persist_directory=self.persist_directory, embedding_function=self.embed_model) 53 | return vectordb 54 | def similarity_search(self, vectordb, query, k): 55 | results = vectordb.similarity_search(query=query, k=k) 56 | return results 57 | def parse_args(): 58 | parser = argparse.ArgumentParser(description="Embedding") 59 | parser.add_argument("--model_name", type=str, default="BAAI/bge-m3", help="model name") 60 | parser.add_argument("--cache_dir", type=str, default="cache/", help="cache directory") 61 | parser.add_argument("--persist_directory", type=str, default="chroma_db_bge", help="persist directory") 62 | parser.add_argument("--corpus_path", type=str, default="corpus_summarize", help="corpus path") 63 | return parser.parse_args() 64 | def main(): 65 | args = parse_args() 66 | corpus_path = args.corpus_path 67 | docs,splits = load_corpus(corpus_path) 68 | model_name = args.model_name 69 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 70 | cache_dir = args.cache_dir 71 | persist_directory = args.persist_directory 72 | embedding = Embedding(model_name, device, cache_dir, persist_directory) 73 | vectordb = embedding.create_embedding(splits) 74 | # query ="Các triệu chứng của bệnh cúm là gì?" 75 | # k=3 76 | # results = embedding.similarity_search(vectordb, query, k) 77 | # print(results) 78 | if __name__ == "__main__": 79 | main() 80 | -------------------------------------------------------------------------------- /src/predict_rerank.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pandas as pd 3 | import numpy as np 4 | from tqdm import tqdm 5 | from dotenv import load_dotenv 6 | import argparse 7 | import torch 8 | try: 9 | from src.cod import get_summarize 10 | from src.utils import * 11 | from src.data import Medical_Data 12 | from src.llm import LLM 13 | from src.metrics import Metrics 14 | from src.embedding import Embedding 15 | from src.search import Searching 16 | from src.rerank import Rerank 17 | except: 18 | from cod import get_summarize 19 | from utils import * 20 | from data import Medical_Data 21 | from llm import LLM 22 | from metrics import Metrics 23 | from embedding import Embedding 24 | from search import Searching 25 | from rerank import Rerank 26 | 27 | 28 | load_dotenv(".env") 29 | def parse_args(): 30 | parser = argparse.ArgumentParser(description="Embedding") 31 | parser.add_argument("--model_embedding_name", type=str, default="BAAI/bge-m3", help="model name") 32 | parser.add_argument("--cache_dir", type=str, default="cache/", help="cache directory") 33 | parser.add_argument("--persist_directory", type=str, default="chroma_db_bge", help="persist directory") 34 | parser.add_argument("--corpus_path", type=str, default="corpus_summarize", help="corpus path") 35 | parser.add_argument("--csv_path", type=str, default="data/public_test.csv", help="csv path") 36 | parser.add_argument("--output_path", type=str, default="submit_openai_rerank.csv", help="output path") 37 | parser.add_argument("--model_name", type=str, default="openai", help="model name") 38 | parser.add_argument("--k1", type=int, default=5, help="k1") 39 | parser.add_argument("--k2", type=int, default=5, help="k2") 40 | return parser.parse_args() 41 | def main(): 42 | args = parse_args() 43 | google_api_key = os.getenv("GOOGLE_API_KEY") 44 | openai_api_key = os.getenv("OPENAI_API_KEY") 45 | corpus_path = args.corpus_path 46 | docs,texts = load_corpus(corpus_path) 47 | print("Loaded corpus") 48 | splits =texts 49 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 50 | embedding = Embedding(model_name=args.model_embedding_name, cache_dir=args.cache_dir, persist_directory=args.persist_directory,openai_api_key=openai_api_key,device=device) 51 | vectordb = embedding.load_embedding() 52 | print("Loaded embedding") 53 | k1 = args.k1 54 | k2 = args.k2 55 | search = Searching(k1,k2,vectordb,splits) 56 | rerank = Rerank(model_name="bge-reranker-v2-m3") 57 | print("Loaded search") 58 | print("Loaded rerank") 59 | df = pd.read_csv(args.csv_path) 60 | result = {"id": [], "answer": []} 61 | 62 | model = LLM(openai_api_key=openai_api_key,google_api_key=google_api_key,model_name =args.model_name) 63 | import random 64 | index = random.randint(0,df.shape[0]) 65 | for index, row in tqdm(df.iterrows()): 66 | result["id"].append(row["id"].strip()) 67 | question, choices, num_choices = process_single_row(row) 68 | print("question:",question) 69 | docs = search.hybrid_search(question) 70 | context = search.get_context(docs) 71 | print(len(context)) 72 | context_rerank = rerank.rerank(question,context) 73 | question = preprocess_question(question) 74 | prompt = model.preprocess_prompt(question, choices, context_rerank) 75 | answer = model.generate(prompt) 76 | #print("answer:",answer) 77 | output_json = process_output(answer, num_choices) 78 | result["answer"].append(output_json) 79 | print("output_json:",output_json) 80 | #result["id"].append(df.iloc[index]["id"].strip()) 81 | result_df = pd.DataFrame(result) 82 | result_df.to_csv(args.output_path,index=False) 83 | if __name__ == "__main__": 84 | #python3 src/predict.py --model_embedding_name="BAAI/bge-m3" --cache_dir="cache/" --persist_directory="chroma_db_bge" --corpus_path="corpus_summarize" --csv_path="data/public_test.csv" --output_path="submit.csv" --corpus_path="corpus_summarize" --model_name="BAAI/bge-m3" 85 | main() -------------------------------------------------------------------------------- /src/predict_hyde.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pandas as pd 3 | import numpy as np 4 | from tqdm import tqdm 5 | from dotenv import load_dotenv 6 | import argparse 7 | from langchain_google_genai import ChatGoogleGenerativeAI 8 | load_dotenv(".env") 9 | os.environ['GOOGLE_API_KEY']= os.getenv("GOOGLE_API_KEY") 10 | from langchain.prompts import ChatPromptTemplate 11 | try: 12 | from src.cod import get_summarize 13 | from src.utils import * 14 | from src.data import Medical_Data 15 | from src.llm import LLM 16 | from src.metrics import Metrics 17 | from src.embedding import Embedding 18 | from src.search import Searching 19 | except: 20 | from cod import get_summarize 21 | from utils import * 22 | from data import Medical_Data 23 | from llm import LLM 24 | from metrics import Metrics 25 | from embedding import Embedding 26 | from search import Searching 27 | 28 | def hyde_rag(model,question): 29 | """ 30 | Generate hypothetical answer for the given question 31 | model: LLM model 32 | question: str: question 33 | """ 34 | template_hyde = """Đối với câu hỏi đã cho, hãy thử tạo ra một câu trả lời giả định\ 35 | Chỉ tạo ra câu trả lời và không có gì khác: 36 | Câu hỏi: {question} 37 | """ 38 | Prompt = ChatPromptTemplate.from_template(template_hyde) 39 | query = Prompt.format(question = question) 40 | hypothetical_answer = model.generate(query) 41 | return hypothetical_answer 42 | load_dotenv(".env") 43 | def parse_args(): 44 | parser = argparse.ArgumentParser(description="Embedding") 45 | parser.add_argument("--model_embedding_name", type=str, default="BAAI/bge-m3", help="model name") 46 | parser.add_argument("--cache_dir", type=str, default="cache/", help="cache directory") 47 | parser.add_argument("--persist_directory", type=str, default="chroma_db_bge", help="persist directory") 48 | parser.add_argument("--corpus_path", type=str, default="corpus_summarize", help="corpus path") 49 | parser.add_argument("--csv_path", type=str, default="data/public_test.csv", help="csv path") 50 | parser.add_argument("--output_path", type=str, default="submit_hyde.csv", help="output path") 51 | parser.add_argument("--model_name", type=str, default="google", help="model name") 52 | parser.add_argument("--k1", type=int, default=3, help="k1") 53 | parser.add_argument("--k2", type=int, default=3, help="k2") 54 | return parser.parse_args() 55 | def main(): 56 | args = parse_args() 57 | google_api_key = os.getenv("GOOGLE_API_KEY") 58 | openai_api_key = os.getenv("OPENAI_API_KEY") 59 | corpus_path = args.corpus_path 60 | docs,texts = load_corpus(corpus_path) 61 | print("Loaded corpus") 62 | splits =texts 63 | embedding = Embedding(model_name=args.model_embedding_name, cache_dir=args.cache_dir, persist_directory=args.persist_directory,openai_api_key=openai_api_key) 64 | vectordb = embedding.load_embedding() 65 | print("Loaded embedding") 66 | k1 = args.k1 67 | k2 = args.k2 68 | search = Searching(k1,k2,vectordb,splits) 69 | print("Loaded search") 70 | df = pd.read_csv(args.csv_path) 71 | result = {"id": [], "answer": []} 72 | model = LLM(openai_api_key=openai_api_key,google_api_key=google_api_key,model_name =args.model_name) 73 | 74 | print("Loaded model") 75 | for index, row in tqdm(df.iterrows()): 76 | result["id"].append(row["id"].strip()) 77 | question, choices, num_choices = process_single_row(row) 78 | hypothetical_answer = hyde_rag(model,question) 79 | docs = search.hybrid_search(hypothetical_answer) 80 | context = search.get_context(docs) 81 | question = preprocess_question(question) 82 | prompt = model.preprocess_prompt(question, choices, context) 83 | answer = model.generate(prompt) 84 | output_json = process_output(answer, num_choices) 85 | result["answer"].append(output_json) 86 | newdf = pd.DataFrame(result, dtype=str) 87 | newdf.to_csv(args.output_path, index=False) 88 | if __name__ == "__main__": 89 | #python3 src/predict.py --model_embedding_name="BAAI/bge-m3" --cache_dir="cache/" --persist_directory="chroma_db_bge" --corpus_path="corpus_summarize" --csv_path="data/public_test.csv" --output_path="submit.csv" --corpus_path="corpus_summarize" --model_name="BAAI/bge-m3" 90 | main() -------------------------------------------------------------------------------- /src/summarize.py: -------------------------------------------------------------------------------- 1 | from openai import OpenAI 2 | from dotenv import load_dotenv 3 | import os 4 | load_dotenv() 5 | openai_api_key = os.getenv('OPENAI_API_KEY') 6 | llm = OpenAI(api_key=openai_api_key) 7 | def build_final_context(chunks): 8 | context = "" 9 | for index, chunk in enumerate(chunks): 10 | context += f"Context {index + 1}: " + chunk + "\n" 11 | return context 12 | def split_file(file_path): 13 | with open(file_path, 'r') as file: 14 | content = file.read() 15 | 16 | # Remove leading/trailing whitespace and split the content into sentences 17 | sentences = content.strip().split('.') 18 | 19 | # Remove empty sentences 20 | sentences = [sentence.strip() for sentence in sentences if sentence.strip()] 21 | 22 | # Calculate the number of sentences per chunk 23 | total_sentences = len(sentences) 24 | chunk_size = total_sentences // 10 25 | 26 | chunks = [] 27 | start = 0 28 | for i in range(9): 29 | end = start + chunk_size 30 | chunk = sentences[start:end] 31 | chunks.append('. '.join(chunk) + '.') 32 | start = end 33 | 34 | # Add the remaining sentences to the last chunk 35 | last_chunk = sentences[start:] 36 | chunks.append('. '.join(last_chunk) + '.') 37 | 38 | return chunks 39 | class Prompts: 40 | 41 | @staticmethod 42 | def summarize_prompt(context): 43 | return f""" 44 | Sau đây là một nội dung được trích xuất của một văn bản, nhiệm vụ của bạn là hãy tóm tắt nó 45 | ---CONTEXT--- 46 | {context} 47 | ---END CONTEXT--- 48 | Hãy đưa ra tóm tắt của văn bản trên. Tôi chỉ cần phần tóm tắt, và không cần thêm bất kì thứ gì khác. 49 | Tóm Tắt: 50 | """ 51 | 52 | @staticmethod 53 | def final_ans_prompt(context): 54 | return f""" 55 | Dưới đây là các đoạn tóm tắt của từng đoạn nhỏ của một văn bản lớn. 56 | ---CONTEXT--- 57 | {context} 58 | ---END CONTEXT--- 59 | Dựa trên các đoạn trên, hãy đưa ra tóm tắt tổng của tất cả các đoạn trên. Tôi chỉ cần tóm tắt tổng, không cần thêm bất kì thứ gì khác. 60 | Tóm tắt tổng: 61 | """ 62 | 63 | 64 | def summarize_chunk(chunk, results_queue, llm): 65 | message = [{"role": "user", "content": Prompts.summarize_prompt(chunk)}] 66 | response = llm.chat.completions.create( 67 | model='gpt-3.5-turbo', 68 | messages=message, 69 | temperature=0.1, 70 | max_tokens=4096 71 | ) 72 | summarized_chunk = response.choices[0].message.content 73 | results_queue.put(summarized_chunk) 74 | if __name__ == "__main__": 75 | data_path = "corpus/benh-cum" 76 | chunks = split_file(data_path) 77 | summarize_chunks = [] 78 | question = """ 79 | Hãy tóm tắt văn bản: {context} 80 | """ 81 | 82 | summarize_prompt = """ 83 | Sau đây là một nội dung được trích xuất của một văn bản, nhiệm vụ của bạn là hãy tóm tắt nó 84 | ---CONTEXT--- 85 | {context} 86 | ---END CONTEXT--- 87 | Hãy đưa ra tóm tắt của văn bản trên. Tôi chỉ cần phần tóm tắt, và không cần thêm bất kì thứ gì khác. 88 | Tóm Tắt: 89 | """ 90 | 91 | final_ans_prompt = """ 92 | Dưới đây là các đoạn tóm tắt của từng đoạn nhỏ của một văn bản lớn. 93 | ---CONTEXT--- 94 | {context} 95 | ---END CONTEXT--- 96 | Dựa trên các đoạn trên, hãy đưa ra tóm tắt tổng của tất cả các đoạn trên. Tôi chỉ cần tóm tắt tổng, không cần thêm bất kì thứ gì khác. 97 | Tóm tắt tổng: 98 | """ 99 | for chunk in chunks: 100 | message = [{"role": "user", "content": summarize_prompt.format(context=chunk)}] 101 | response = llm.chat.completions.create(model='gpt-3.5-turbo', 102 | messages= message, 103 | temperature=0.1, 104 | max_tokens=4096) 105 | summarize_chunks.append(response.choices[0].message.content) 106 | 107 | context = build_final_context(summarize_chunks) 108 | message = [{"role": "user", "content": final_ans_prompt.format(context=context)}] 109 | 110 | final_response = llm.chat.completions.create(model='gpt-3.5-turbo', 111 | messages= message, 112 | temperature=0.1, 113 | max_tokens=4096) 114 | print(final_response) 115 | with open("benh-cum-summary.txt", "w") as file: 116 | file.write(final_response.choices[0].message.content) -------------------------------------------------------------------------------- /corpus/phi-dai-tuyen-vu: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/phi-dai-tuyen-vu/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Vú - Nhũ > 6 | Phì đại tuyến vú: Nguyên nhân, triệu chứng và cách điều trị 7 |

Phì đại tuyến vú: Nguyên nhân, triệu chứng và cách điều trị

8 | Phì đại tuyến vú là tình trạng vú to bất thường do các sợi mô tuyến vú phát triển to nhanh và vượt mức thông thường, có thể xảy ra 1 hoặc 2 bên ngực. Đa phần các khối u sợi này đều khá lành tính, không gây đau đớn, tổn thương cho người bệnh, nhưng lại khiến vóc dáng mất cân đối và tiềm ẩn nhiều nguy hại cho sức khỏe. Hiểu được nguyên nhân, triệu chứng cũng như cách điều trị để bảo vệ sức khỏe, lấy lại diện mạo cân đối cho bản thân. 9 |

Mục lục

10 | Phì đại tuyến vú là gì? 11 | Có bao nhiêu loại phì đại chính? 12 | Triệu chứng của phì đại tuyến vú 13 | Nguyên nhân của phì đại tuyến vú 14 | Phì đại tuyến vú có nguy hiểm không? 15 | Điều trị chứng phì đại tuyến vú như thế nào? 16 |

Phì đại tuyến vú là gì?

Phì đại tuyến vú là tình trạng khi các sợi mô tuyến vú phát triển to nhanh và nặng vượt quá mức bình thường (>3% trọng lượng cơ thể), có thể xảy ra 1 bên hoặc cả 2 bên ngực. Đa phần các khối u sợi này đều khá lành tính, nhưng lại khiến vóc dáng mất cân đối và tiềm ẩn nhiều nguy hại. 17 | Phì đại tuyến vú được xem là bệnh lành tính, thường gặp ở phụ nữ 18 |

Có bao nhiêu loại phì đại chính?

Tùy vào kích thước của tuyến vú mà chia ra 2 mức độ phì đại khác nhau: Ngực phì đại (macromastia): khối lượng bầu vú <2,5kg, ở cả nam và nữ trong độ tuổi từ 6-25. Ngực khổng lồ (gigantomastia): khối lượng bầu vú >2,5kg, tỷ lệ cao ở nữ giới sau mang thai hoặc nam giới béo phì. 19 |

Triệu chứng của phì đại tuyến vú

Phì đại tuyến vú thường có những triệu chứng sau đây: Ban đầu núm vú to ra, sờ núm vú cảm giác chính giữa có thể có nhân to, chắc, rắn. Nhân này càng ngày lan ra thành một quầng mà ta có thể di chuyển được, sờ được như một tấm đệm lót ở trong vú. Thể tích bầu ngực lớn gấp nhiều lần. Ngực bị xệ, mức độ phì đại càng lớn thì độ sa trễ càng nặng. Làn da vùng ngực bị rạn và nhão. Đau vú. Đau ở lưng, vai, cổ. Nhiễm trùng hoặc áp xe. Mất cảm giác núm vú. Đỏ, ngứa, ấm trên hoặc dưới vú. 20 |

Nguyên nhân của phì đại tuyến vú

Nguyên nhân chính xác vẫn chưa được khẳng định, có một số giả thuyết bao gồm: Tăng lượng hormone bất thường (Estrogen, Prolactin) hoặc cơ thể bị tăng độ nhạy cảm với tuyến nội tiết. Nồng độ hormone tăng trưởng tiết ra quá ngưỡng cần thiết, làm kích thích phát triển mô biểu bì ở vú. Tăng sinh mô mỡ, mô đệm ngực hoặc mô tuyến vú do thói quen sống hoặc di truyền. Các yếu tố khác: mang thai, stress, béo phì, tiền mãn kinh… 21 |

Phì đại tuyến vú có nguy hiểm không?

Đây là câu hỏi quan tâm của chị em khi gặp chứng bệnh này, liệu chứng phì đại tuyến vú có ảnh hưởng đến sức khỏe và biến chứng gì không? Thực tế, 80% tình trạng phì đại vú không gây ra đau đớn hay tổn thương gì cho người bệnh. Tuy nhiên, phì đại tuyến vú lại có nhiều hệ quả xấu, ảnh hưởng đến thẩm mỹ và tiềm ẩn nhiều nguy hại cho sức khỏe. Mất thẩm mỹ: Bầu ngực to, chảy xệ Cơ thể mất cân đối khiến chị em mất tự ti, mặc cảm Đau mỏi vai và cổ, mỏi lưng, tê nhức tay, đau đầu… Xương sống lưng có xu hướng cong về phía trước Chọn trang phục và chọn áo ngực phù hợp rất khó Khó khăn bất tiện trong sinh hoạt Cảm giác khó thở Dễ bị mất cảm giác ở đầu núm vú Núm vú thường bị phì đại Viêm loét nếp vú… Da vú bị rạn và nhão Phát ban vùng da quanh vú 22 | Phì đại tuyến vú gây mất thẩm mỹ và tiềm ẩn nhiều mối nguy hại cho sức khỏe 23 |

Điều trị chứng phì đại tuyến vú như thế nào?

Do sự phì đại có liên quan đến cấu trúc mô mềm bên trong bầu vú nên cách xử lý triệt để nhất chính là tiến hành phẫu thuật: Cắt bỏ giảm phần mô tuyến vú Lấy đi da vùng vú dư thừa Treo và kéo núm vú về vị trí thích hợp Thu nhỏ quầng vú Thay đổi nếp gấp dưới vú Toàn bộ cuống nuôi núm vú, ống tuyến vú và đầu núm sẽ được giữ lại để bảo toàn chức năng nuôi con, giảm nguy cơ bị rối loạn cảm giác, hạn chế ảnh hưởng tới sinh lý. Dựa vào mức độ mắc phải, bác sĩ sẽ lựa chọn phương pháp phù hợp: 24 | Hình ảnh trước và sau của một ca phẫu thuật phì đại tuyến vú Khoa Ngoại vú, Hệ thống Bệnh viện Đa khoa Tâm Anh với đội ngũ các chuyên gia, bác sĩ giỏi chuyên môn, tận tâm, nhiệt tình, tự tin làm chủ những kỹ thuật tiến bộ nhất. Bên cạnh đó, đội ngũ chuyên gia bệnh viện Tâm Anh còn có sự hỗ trợ của hệ thống máy móc, trang thiết bị chẩn đoán hình ảnh hiện đại như: hệ thống máy nhũ ảnh kỹ thuật số 3D (DBT) Mammomat Inspiration; Máy siêu âm GE Logiq E10S, với đầu dò có hỗ trợ siêu âm đàn hồi vú, khảo sát vi mạch và hỗ trợ định hướng sinh thiết dưới siêu âm; Máy MRI 1.5 tesla thế hệ mới Magnetom Amira BioMatrix…sẽ giúp phát hiện sớm và có phương án điều trị một cách an toàn, hiệu quả với các bệnh lý tuyến vú. -------------------------------------------------------------------------------- /src/utils.py: -------------------------------------------------------------------------------- 1 | import os 2 | from dotenv import load_dotenv 3 | import streamlit as st 4 | from PyPDF2 import PdfReader 5 | from langchain.document_loaders import DirectoryLoader,TextLoader 6 | from langchain.text_splitter import RecursiveCharacterTextSplitter 7 | from langchain.embeddings import OpenAIEmbeddings 8 | from langchain.chat_models import ChatOpenAI 9 | from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder 10 | from bs4 import BeautifulSoup 11 | import re 12 | import random 13 | load_dotenv() 14 | openai_api_key = os.getenv('OPENAI_API_KEY') 15 | 16 | def load_corpus(corpus_path,chunk_size=800,chunk_overlap=200): 17 | """load corpus from a directory of text files""" 18 | text_loader_kwargs={'autodetect_encoding': True} 19 | loader = DirectoryLoader(corpus_path, loader_cls = TextLoader, loader_kwargs=text_loader_kwargs) 20 | docs = loader.load() 21 | for doc in docs: 22 | soup = BeautifulSoup(doc.page_content, 'html.parser') 23 | doc.page_content = soup.get_text() 24 | text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap,separators=["\n", "."]) 25 | texts = text_splitter.split_documents(docs) 26 | return docs,texts 27 | def get_text_from_html_file(html_path): 28 | with open(html_path, "r") as f: 29 | html_text = f.read() 30 | soup = BeautifulSoup(html_text, "html.parser") 31 | return soup.get_text() 32 | def get_text_chunks(raw_text,chunk_size=1000,chunk_overlap=200): 33 | text_splitter = RecursiveCharacterTextSplitter( 34 | chunk_size=chunk_size, 35 | chunk_overlap=chunk_overlap, 36 | ) 37 | chunks = text_splitter.split_text(raw_text) 38 | 39 | return chunks 40 | def process_single_row(row): 41 | question = row["question"].strip() 42 | list_answer = [str(row["option_1"]), str(row["option_2"]), str(row["option_3"]), str(row["option_4"]), 43 | str(row["option_5"]), str(row["option_6"])] 44 | tmp_ans = [] 45 | for c, a in zip(["A", "B", "C", "D", "E", "F"], list_answer): 46 | if a in ["nan", "", "NaN"]: 47 | continue 48 | if a.startswith(c): 49 | tmp_ans.append(a) 50 | continue 51 | tmp_ans.append(f"{c} {a}") 52 | answer_choices = "\n".join(tmp_ans) 53 | return question, answer_choices, len(tmp_ans) 54 | 55 | def preprocess_question(question): 56 | question = question.replace("?.", "?") 57 | if question[-1] != "?": 58 | question += "?" 59 | type_predict = 0 60 | if "là gì" in question.lower() and not any(word in question.lower() for word in ["các", "những"]): 61 | type_predict = 1 62 | if "cách gì" in question.lower() and not any(word in question.lower() for word in ["các", "những"]): 63 | type_predict = 1 64 | if 'bệnh gì' in question.lower() and not any(word in question.lower() for word in ["các", "những"]): 65 | type_predict = 1 66 | if 'bệnh nào' in question.lower() and not any(word in question.lower() for word in ["các", "những"]): 67 | type_predict = 1 68 | if 'bệnh lý nào' in question.lower(): 69 | type_predict = 1 70 | if 'bao nhiêu' in question.lower(): 71 | type_predict = 1 72 | if 'nhất' in question.lower(): 73 | type_predict = 1 74 | if 'định nghĩa' in question.lower(): 75 | type_predict = 1 76 | if "đúng hay sai" in question.lower(): 77 | type_predict = 2 78 | if "có phải" in question.lower(): 79 | type_predict = 2 80 | if "hay không" in question.lower(): 81 | type_predict = 2 82 | if type_predict == 1 or type_predict == 2: 83 | question += " (仅选择 1 个正确答案。)" 84 | else: 85 | question += " (您必须选择 2 个或更多答案。)" 86 | return question 87 | def extract_letters(line): 88 | matches = re.findall(r'\b([A-F])\b', line) 89 | return matches 90 | def process_output(output, num_ans): 91 | res = "" 92 | MAP_ANS = {0:"a", 1:"b", 2:"c", 3:"d", 4:"e", 5:"f"} 93 | # output = re.split(r"[.,、]", output) 94 | # output = [c.strip().lower() for c in output if len(c)] 95 | output = [c.lower() for c in extract_letters(output)] 96 | print("OUTPUT: ", output) 97 | for i in range(num_ans): 98 | if MAP_ANS[i] in output: 99 | res += "1" 100 | else: 101 | res += "0" 102 | if all(c == "0" for c in res): 103 | # Randomly select an index to change to 1 104 | index_to_change = random.randint(0, num_ans - 1) 105 | res = res[:index_to_change] + "1" + res[index_to_change + 1:] 106 | print(res) 107 | return res 108 | 109 | if __name__== "__main__": 110 | corpus_path = "corpus_summarize" 111 | docs,texts = load_corpus(corpus_path) 112 | print("len(docs):",len(docs)) 113 | print("len(texts):",len(texts)) 114 | print("texts[0]:",texts[0]) -------------------------------------------------------------------------------- /corpus/tai-cuc-som: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/tai-cuc-som/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Tim mạch > 6 | Tái cực sớm: Nguyên nhân, triệu chứng, chẩn đoán và điều trị 7 |

Tái cực sớm: Nguyên nhân, triệu chứng, chẩn đoán và điều trị

8 | Ngày càng có nhiều người trẻ được chẩn đoán tái cực sớm. Bệnh nhân không có nguy cơ phát triển rối loạn nhịp tim nguy hiểm tính mạng. Ngược lại, người bệnh cần được can thiệp điều trị sớm để phòng ngừa nguy cơ tử vong. 9 |

Mục lục

10 | Tổng quan tái cực sớm 11 | Hình điện tâm đồ tái cực sớm 12 | Triệu chứng tái cực sớm ở tim 13 | Nguyên nhân và các yếu tố nguy cơ 14 | Chẩn đoán 15 | Điều trị tái cực sớm 16 |

Tổng quan tái cực sớm

Cơ tim hoạt động nhờ các tín hiệu điện phát nhịp và dẫn truyền xung động giúp cơ tim co bóp và bơm máu đi nuôi các cơ quan trong cơ thể. Hoạt động điện của tim đơn giản chia thành 2 giai đoạn là khử cực (tim co bóp) và tái cực (tim nghỉ ngơi sau co bóp xong). Khi hệ thống điện của tim không hoạt động như bình thường, quá trình tái cực sớm có thể xảy ra. Tái cực sớm có thể được phát hiện nhờ vào những hình ảnh gợi ý trên điện tâm đồ (ECG) là những sóng dạng khấc nhỏ đi liền cuối sóng khử cực thất bình thường. 17 |

Hình điện tâm đồ tái cực sớm

Trước đây, tình trạng tái cực sớm thường quan sát thấy ở những người trẻ tuổi khỏe mạnh và vận động viên. Vì thế, nó từng được xem là lành tính và không phải tình trạng bệnh lý. Tuy nhiên, các nghiên cứu gần đây đã chỉ ra rằng, bệnh tái cực có thể tiến triển thành những loạn nhịp tim nguy hiểm có nguy cơ ảnh hưởng tính mạng. 18 |

Triệu chứng tái cực sớm ở tim

Đa số bệnh nhân bị tái cực sớm không có bất kỳ triệu chứng đáng chú ý nào. Bệnh thường được phát hiện một cách tình cờ nhờ đo điện tim khi khám tổng quát. Bệnh nhân bị tái cực sớm thường có nhịp tim cơ bản thấp. Một số bệnh nhân bị tái cực sớm có thể gặp biến cố loạn nhịp tim nặng (nhịp nhanh thất, rung thất). Lúc này, người bệnh xuất hiện triệu chứng ngất, gần ngất, choáng váng từng cơn. Đây là những dấu hiệu đầu tiên cảnh báo và gợi ý bệnh nặng. Do đó, cần lưu ý đi khám ngay khi có các triệu chứng này. 19 |

Nguyên nhân và các yếu tố nguy cơ

Tái cực sớm có khả năng xảy ra ở bất kỳ bệnh nhân nào và ở mọi lứa tuổi. Tuy nhiên, bệnh thường gặp ở các nhóm đối tượng sau: Người trẻ tuổi Nam giới Người Mỹ gốc Phi Vận động viên 20 |

Chẩn đoán

Tái cực sớm thường được chẩn đoán tình cờ dựa vào điện tâm đồ (ECG) khi bệnh nhân đến khám vì những vấn đề sức khỏe khác. Nếu thấy các dấu hiệu gợi ý bất thường trên điện tâm đồ, bác sĩ sẽ tiến hành khai thác kỹ bệnh sử và triệu chứng liên quan đến loạn nhịp tim. Bác sĩ cũng sẽ khám lâm sàng và cho một số chỉ định cận lâm sàng như siêu âm tim, Holter ECG, ECG gắng sức, MRI tim, xét nghiệm di truyền… Việc làm này giúp chẩn đoán bệnh cũng như chẩn đoán phân biệt các bệnh lý gây ra triệu chứng tương tự. 21 | Hình đo ecg Các bác sĩ chuyên về loạn nhịp tim có thể tiến hành khảo sát, thăm dò hoạt động điện trong tim của bệnh nhân, giúp đánh giá phân tầng nguy cơ của bệnh nhân để đưa ra hướng theo dõi và điều trị thích hợp. 22 |

Điều trị tái cực sớm

Nếu bệnh nhân được bác sĩ chuyên về loạn nhịp tim đánh giá là không có nguy cơ hoặc nguy cơ thấp thì bệnh nhân đó thường không cần điều trị gì đặc hiệu. Nếu bệnh nhân được phân tầng có nguy cơ cao thì bệnh nhân đó cần được điều trị đặc hiệu, các phương pháp đó bao gồm: Cấy máy khử rung tim (ICD) dưới da. Phương pháp này thường được sử dụng, máy được cấy vào ngực vùng gần tim để kiểm soát các xung điện bất thường. Dùng thuốc. Một số loại thuốc có tác dụng giảm bớt các hoạt động điện bất thường trong tim gây ra loạn nhịp. Triệt phá loạn nhịp bằng sóng cao tần.Trong một số trường hợp, thủ thuật đạt hiệu quả cao trong việc loại bỏ hoặc giảm các vùng bất thường về điện học trong tim. Việc lựa chọn phương pháp nào tùy thuộc vào bệnh cảnh riêng biệt của mỗi bệnh nhân. Là nơi tiếp nhận và điều trị cho bệnh nhân bị tái cực sớm cũng như các bệnh lý tim mạch (tăng huyết áp, bệnh mạch vành, suy tim, thiếu máu cơ tim…), Trung tâm tim mạch, Hệ thống BVĐK Tâm Anh quy tụ đội ngũ chuyên gia là các y bác sĩ đầu ngành, được trang bị hệ thống máy móc tiên tiến. Phác đồ điều trị được xây dựng cá thể hóa cho từng bệnh nhân, đem lại hiệu quả cao trong việc cải thiện triệu chứng và ngăn ngừa biến chứng nguy hiểm của bệnh. 23 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 24 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 25 | Hotline: 024 3872 3872 – 024 7106 6858 26 | TP.HCM: 27 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 28 | Hotline: 093 180 6858 – 0287 102 6789 29 | Fanpage: 30 | https://www.facebook.com/benhvientamanh Website: 31 | https://tamanhhospital.vn Tỷ lệ tái cực sớm trong dân số nói chung dao động từ 5% đến 15%; phạm vi rộng phản ánh sự khác biệt trong định nghĩa cũng như sự thay đổi trong mô hình tái cực sớm theo thời gian. 32 | -------------------------------------------------------------------------------- /src/cod.py: -------------------------------------------------------------------------------- 1 | import os, openai, logging, configparser,json,re 2 | from chain_of_density.chat_completion import make_chat_completion_request 3 | from chain_of_density.msg_templates import create_system_message 4 | 5 | # # Load config file and setup variables 6 | # here = os.path.abspath(os.path.dirname(__file__)) 7 | # config = configparser.ConfigParser() 8 | # config.read("config.ini") 9 | 10 | def load_config(): 11 | """Load config file and setup variables""" 12 | #here = os.path.abspath(os.path.dirname(__file__)) 13 | config = configparser.ConfigParser() 14 | config.read("config.ini") 15 | #print(config) 16 | #exit() 17 | return config 18 | def perform_checks(): 19 | #logger.info("being checks") 20 | # Check if OPENAI_API_KEY is set 21 | if "OPENAI_API_KEY" not in os.environ: 22 | raise EnvironmentError("OPENAI_API_KEY environment variable is not set.") 23 | 24 | 25 | #logger.info("Checks passed") 26 | 27 | 28 | def load_file(input_file_path): 29 | if os.path.exists(input_file_path): 30 | # Load input file 31 | with open(input_file_path, "r") as f: 32 | return f.read() 33 | elif os.path.exists(os.path.join(here, input_file_path)): 34 | # Load input file from main folder 35 | with open(f"{os.path.join(here, input_file_path)}", "r") as f: 36 | return f.read() 37 | else: 38 | raise FileNotFoundError(f"Input file not found at path: {input_file_path}") 39 | 40 | def clean_json_string(json_string): 41 | pattern = r'^```json\s*(.*?)\s*```$' 42 | cleaned_string = re.sub(pattern, r'\1', json_string, flags=re.DOTALL) 43 | return cleaned_string.strip() 44 | def get_final_summarize(json_data): 45 | """Get the final summarize from the json data 46 | Json data is list of dictionaries 47 | "Missing_Entities": 48 | "Denser_Summary": 49 | Returns: 50 | str: final summarize (Combination of last Missing_Entities and Denser_Summary) 51 | """ 52 | final_summarize = "" 53 | last_item = json_data[-1] 54 | # if "Missing_Entities" in last_item: 55 | # final_summarize += last_item["Missing_Entities"] 56 | if "Denser_Summary" in last_item: 57 | final_summarize += last_item["Denser_Summary"] 58 | return final_summarize 59 | def get_summarize(input_text): 60 | """Get the summarize from the given document""" 61 | config = load_config() 62 | msg = create_system_message(config) 63 | #input_text = load_file(doc) 64 | msg.append( 65 | { 66 | "role": "user", 67 | "content": f"Đây là văn bản đầu vào để bạn tóm tắt bằng cách sử dụng phương pháp 'Missing_Entities' và 'Denser_Summary':\n\n{input_text}", 68 | } 69 | ) 70 | completion = make_chat_completion_request(config, msg, n=1) 71 | content = completion.choices[0].message.content 72 | content = clean_json_string(content) 73 | json_data = json.loads(content) 74 | #print(json_data[-1]) 75 | return get_final_summarize(json_data) 76 | def main(): 77 | #logger.info("main() starting") 78 | 79 | # Perform sense checks 80 | perform_checks() 81 | 82 | # Get system message 83 | msg = create_system_message(config) 84 | 85 | # Load input file 86 | input_text = load_file("corpus/benh-gout") 87 | 88 | msg.append( 89 | { 90 | "role": "user", 91 | "content": f"Đây là văn bản đầu vào để bạn tóm tắt bằng cách sử dụng phương pháp 'Missing_Entities' và 'Denser_Summary':\n\n{input_text}", 92 | } 93 | ) 94 | 95 | completion = make_chat_completion_request(config, msg, n=1) 96 | # print(completion) 97 | # print() 98 | content = completion.choices[0].message.content 99 | content = clean_json_string(content) 100 | json_data = json.loads(content) 101 | # with open("output.json", "w") as f: 102 | # json.dump(json_data, f, indent=4) 103 | # Write the output to file 104 | content_final = get_final_summarize(json_data) 105 | with open(config["DEFAULT"]["OUTPUT_FILE"], "w") as f: 106 | f.write(content_final) 107 | 108 | return content_final 109 | 110 | 111 | if __name__ == "__main__": 112 | #logger.info("triggering main() execution") 113 | config = load_config() 114 | #print(main()) 115 | for file in os.listdir("corpus"): 116 | path = os.path.join("corpus", file) 117 | 118 | try: 119 | input_text = load_file(path) 120 | 121 | new_path =os.path.join("corpus_summarize",os.path.basename(path)) 122 | if os.path.exists(new_path)==True: 123 | continue 124 | else: 125 | summarize_doc = get_summarize(input_text) 126 | print(file) 127 | with open(new_path, "w") as f: 128 | f.write(summarize_doc) 129 | except: 130 | print("Error at path: ", path) 131 | continue 132 | print(get_summarize(input_text)) 133 | -------------------------------------------------------------------------------- /src/query_test.py: -------------------------------------------------------------------------------- 1 | from langchain.vectorstores import FAISS 2 | from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings 3 | from langchain.chat_models import ChatOpenAI 4 | from langchain.prompts import PromptTemplate 5 | import torch, accelerate,transformers, einops 6 | from transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer,pipeline,BitsAndBytesConfig, TextStreamer 7 | 8 | def load_phogpt(): 9 | model_path = "../PhoGPT-4B-Chat-v01" 10 | config = AutoConfig.from_pretrained(model_path, trust_remote_code=True) 11 | config.init_device = "cuda" 12 | model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16, trust_remote_code=True, use_auth_token=None,config=config) 13 | # If your GPU does not support bfloat16: 14 | # model = AutoModelForCausalLM.from_pretrained(model_path, config=config, torch_dtype=torch.float16, trust_remote_code=True) 15 | model.eval() 16 | tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) 17 | return model, tokenizer 18 | def load_vinallama(): 19 | model_path = "vilm/vinallama-7b-chat" 20 | # Setup tokenizer 21 | tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) 22 | # Seting config 23 | config = AutoConfig.from_pretrained(model_path, trust_remote_code=True) 24 | config.init_device = "cuda" 25 | config.temperature = 0.1 26 | compute_dtype = getattr(torch, "float16") 27 | bnb_config = BitsAndBytesConfig( 28 | load_in_4bit=True, 29 | bnb_4bit_quant_type="nf4", 30 | bnb_4bit_compute_dtype=compute_dtype, 31 | bnb_4bit_use_double_quant=True, 32 | ) 33 | model = AutoModelForCausalLM.from_pretrained( 34 | model_path,quantization_config=bnb_config, 35 | config=config, 36 | trust_remote_code=True 37 | ) 38 | model.eval() 39 | return model, tokenizer 40 | def load_vistral(): 41 | model_path = "Viet-Mistral/Vistral-7B-Chat" 42 | config = AutoConfig.from_pretrained(model_path, trust_remote_code=True) 43 | config.init_device = "cuda" 44 | model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16, trust_remote_code=True, use_auth_token=None,config=config) 45 | # If your GPU does not support bfloat16: 46 | # model = AutoModelForCausalLM.from_pretrained(model_path, config=config, torch_dtype=torch.float16, trust_remote_code=True) 47 | model.eval() 48 | tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) 49 | return model, tokenizer 50 | def model_generator(model, question, context): 51 | prompt_template = """Sử dụng các trích đoạn sau đây để trả lời câu hỏi trắc nghiệm. Nếu không biết, chọn không biết. 52 | {context} 53 | Câu hỏi: {question} 54 | Trả lời:""" 55 | input_prompt = prompt_template.format_map({"context": context, "question": question}) 56 | input_ids = tokenizer(input_prompt, return_tensors="pt").to("cuda") 57 | outputs = model.generate( 58 | inputs=input_ids["input_ids"].to("cuda"), 59 | # attention_mask=input_ids["attention_mask"].to("cuda"), 60 | do_sample=True, 61 | temperature=0.1, 62 | top_k=50, 63 | top_p=0.9, 64 | max_new_tokens=4096, 65 | eos_token_id=tokenizer.eos_token_id, 66 | pad_token_id=tokenizer.pad_token_id, 67 | # return_dict_in_generate=True, output_scores=True 68 | # output_hidden_states = True, 69 | ) 70 | response = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0] 71 | print(response) 72 | #response = response.split("### Trả lời:")[1] 73 | return response 74 | device = 'cpu' 75 | embed_model_id = 'BAAI/bge-m3' 76 | cache_dir = "cache/" 77 | embed_model = SentenceTransformerEmbeddings( 78 | model_name=embed_model_id, 79 | model_kwargs={'device': device}, 80 | encode_kwargs={'batch_size': 16, "normalize_embeddings": True, "device": device }, 81 | cache_folder=cache_dir 82 | ) 83 | DB_SAVE_NAME = f"endoc_{embed_model_id.split('/')[-1].replace('.','-')}" 84 | 85 | loaded_db = FAISS.load_local( 86 | DB_SAVE_NAME, 87 | embeddings=embed_model 88 | ) 89 | # level3_1,Hương đang mang thai và lo lắng mình có thể gặp phải rau tiền đạo. Hương có thể kiểm tra phát hiện bệnh này từ tuần thứ mấy của thai kỳ?,A. Tuần 10,B.Tuần 20,C. Tuần 30,D. Tuần 40,, 90 | question = """Hương đang mang thai tuần thứ 5 và lo lắng mình có thể gặp phải rau tiền đạo. Hương có thể kiểm tra phát hiện bệnh này sau bao nhiêu tuần nữa? 91 | A. 5 tuần 92 | B. 15 tuần 93 | C. 25 tuần 94 | D. 35 tuần 95 | """ 96 | 97 | prompt_template = """Sử dụng các trích đoạn sau đây để trả lời câu hỏi trắc nghiệm. Nếu không biết, chọn không biết. 98 | {context} 99 | Câu hỏi: {question} 100 | Trả lời:""" 101 | # query = """ 102 | # Đâu là triệu chứng của bệnh van tim? 103 | # A. Khó thở 104 | # B. Tăng cân nhanh chóng 105 | # C. Vàng da 106 | # D. Rụng tóc 107 | # """ 108 | 109 | result = loaded_db.similarity_search(query=question, k=1) 110 | print(result) 111 | context = result[0].page_content 112 | #system_prompt = """""" 113 | PROMPT = PromptTemplate( 114 | template=prompt_template, input_variables=["context", "question"] 115 | ) 116 | input_prompt = prompt_template.format_map({"context": context, "question": question}) 117 | print(input_prompt) 118 | with open("prompt.txt", "w") as f: 119 | f.write(input_prompt ) 120 | 121 | import os 122 | 123 | #load_dotenv() 124 | with open("context.txt", "w") as f: 125 | f.write(context) 126 | # model_phogpt, tokenizer = load_phogpt() 127 | # result = model_generator(model_phogpt, question, context) 128 | model_vinallama, tokenizer = load_vinallama() 129 | result = model_generator(model_vinallama, question, context) 130 | print(result) 131 | # openai_api_key=os.getenv('OPENAI_API_KEY', 'sk-proj-aQI7CfOG3adLxGpE4zfKT3BlbkFJh3fnuL9nEPhU9HH3T2tj') 132 | # llm = ChatOpenAI(temperature=0,openai_api_key=openai_api_key) 133 | # result=llm.predict(text=PROMPT.format_prompt( 134 | # context=context, 135 | # question=question 136 | # ).text) 137 | 138 | print(result) -------------------------------------------------------------------------------- /corpus/u-mem-treo: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/u-mem-treo/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Da liễu > 6 | U mềm treo (mụn thịt dư): Nguyên nhân, dấu hiệu và cách điều trị 7 |

U mềm treo (mụn thịt dư): Nguyên nhân, dấu hiệu và cách điều trị

8 | Những nốt u mềm treo hay thịt dư da màu đen, nâu… theo thời gian dần tăng kích thước. Mặc dù không ảnh hưởng nghiêm trọng đến sức khỏe nhưng lại gây mất thẩm mỹ, giảm tự tin nếu xuất hiện ở những vị trí dễ nhìn như mặt, cổ… 9 |

Mục lục

10 | U mềm treo là gì? 11 | Nguyên nhân gây u mềm treo 12 | Dấu hiệu nhận biết u mềm treo 13 | U mềm treo có gây biến chứng không? 14 | Khi nào cần gặp bác sĩ? 15 | Phương pháp chẩn đoán và điều trị u mềm treo 16 | Biện pháp phòng ngừa 17 |

U mềm treo là gì?

U mềm treo hay còn gọi là thịt dư da, mụn thịt dư (skin tags) là tình trạng tăng sinh lành tính của da bình thường. Khối u mềm có bề mặt trơn láng, thường mọc ra từ một cái cuống hoặc nhú, trồi lên hẳn so với bề mặt da, có màu sắc đen, vàng, nâu hoặc trùng màu da. Những cục u mềm này thường hình thành ở những vị trí da tiếp xúc nhiều với ánh nắng như mặt, cổ…; hay vùng da cọ xát nhiều với nhau như cổ, nách, dưới vú, mi mắt, bẹn, hậu môn. (1) Những nốt mụn thịt dư này thường có kích thước từ 1-10mm, tuy nhiên không ít trường hợp kích thước lên đến 3cm, thậm chí lớn hơn. Một người có thể xuất hiện nhiều u mềm treo vào cùng một thời điểm, có thể là 3 – 4 hoặc nhiều hơn 10 thịt dư da. Bệnh thường xuất hiện ở người trên 50 tuổi. Sau thăm khám, bác sĩ chỉ định bà H. điều trị thịt dư da bằng nitơ lỏng, phẫu thuật không “đụng dao kéo”. Sau 2 tuần tái khám, cục u mềm ở mắt và ở mũi tiêu biến. Bà H. không còn cảm giác ngứa ngáy, khó chịu, đặc biệt bước chân đã vững chắc hơn vì tầm nhìn không còn hạn chế. 18 |

Nguyên nhân gây u mềm treo

Theo BS Bích, bệnh u mềm treo xảy ra gồm 2 yếu tố: chủ quan và khách quan: (2) Yếu tố chủ quan do da tiếp xúc quá lâu, trong thời gian dài với nắng mà không có các biện pháp chống nắng thích hợp. Ở nữ, những phần da phơi ra ngoài ánh nắng nhiều như cổ, ngực…; còn nam giới là lưng, vai và nhiều chỗ khác do thói quen ở trần đi nắng, sẽ có nguy cơ xuất hiện mụn thịt dư nhiều hơn. Những người hay tắm nắng, đi biển, làm việc ngoài trời quá nhiều như đánh cá, bán hàng rong… không sử dụng phụ kiện che nắng là nhóm có nguy cơ cao. Yếu tố khách quan đến từ đặc điểm khí hậu nhiệt đới gió mùa, ánh nắng chói chang nhiều giờ trong ngày của nước ta. Đây là nguyên nhân chính gây tình trạng lão hóa da ở người lớn tuổi. Thống kê cho thấy khoảng 80%-90% người Việt bị các tổn thương da do nguyên nhân từ ánh nắng. Ngoài ra, tuổi cao cũng là yếu tố gây lão hóa da. Nếu người trẻ mắc phải tình trạng này thì gọi là lão hóa da sớm. Quá trình hình thành những khối u mềm diễn ra khoảng 3-4 năm. 19 |

Dấu hiệu nhận biết u mềm treo

Dù bệnh lành tính nhưng lại ảnh hưởng lớn đến tính thẩm mỹ, nhất là khi người bệnh còn trẻ tuổi. Theo đó, các biểu hiện của bệnh u mềm treo: Những nốt sần tròn, chắc, bề mặt nhẵn, gồ cao trên da. Nốt sần có thể tập trung thành nhóm, khu trú hoặc lan rộng trên da/ bề mặt niêm mạc. Với trẻ nhỏ, nốt u mềm treo thường xuất hiện ở mặt, ngực, cổ, tay, chân. Với người lớn, thịt dư da có ở những vị trí tiếp xúc với nắng nhiều như mặt, cổ, tay… hay vùng sinh dục. Ngoài ra, tùy vào vị trí u xuất hiện sẽ gây ra những hệ lụy tại bộ phận đó. Cụ thể, mụn thịt dư xuất hiện ở trên mi mắt thì làm sụp mi; ở dương vật thì ảnh hưởng nhu cầu sinh lý; ở hậu môn thì gây đau, ảnh hưởng đến nhu cầu đi tiêu… 20 | Tiếp xúc nắng quá lâu là nguyên nhân gây bệnh 21 |

U mềm treo có gây biến chứng không?

U mềm treo sẽ gây biến chứng nếu người bệnh xem nhẹ và chữa bệnh kiểu truyền miệng dân gian như đốt, lấy chỉ cắt… sẽ gây nhiễm trùng, chảy máu, tạo sẹo xấu. Ước tính có khoảng 50 – 60% người trưởng thành sẽ phát triển ít nhất một nốt sần trên da trong cuộc đời. Tần suất xuất hiện của những nốt sần này tăng lên sau độ tuổi 40. Bệnh xảy ra phổ biến hơn ở những người bị béo phì, tiểu đường, hội chứng chuyển hóa và ở những người có tiền sử gia đình mắc bệnh về da. Mức độ ảnh hưởng của bệnh đến nam và nữ đều như nhau. (3) Trong nhiều trường hợp, những người béo phì có nguy cơ xảy ra biến chứng cao hơn: Xuất hiện sẹo sau khi phẫu thuật u mềm treo. Gây xoắn hoặc nhồi máu tự phát ở những nốt mụn thịt dư có cuống gây thiếu máu mô, gây đau, thậm chí hoại tử/ nhiễm trùng thứ phát. Lúc này cần phải tìm kiếm sự hỗ trợ từ bác sĩ lâm sàng. Kích ứng nhẹ, thậm chí xảy ra tình trạng viêm da kích ứng ở vùng da phẫu thuật. Hiếm khi u thần kinh có thể xuất hiện nếu một dây thần kinh phát triển trong khối thịt dư da bị cắt, gây đau mãn tính trong vài tuần, thậm chí vài tháng. 22 |

Khi nào cần gặp bác sĩ?

Người bệnh nên đi khám ngay tại các chuyên khoa Da liễu để có cách xử trí kịp thời khi thấy các triệu chứng sau: Xuất hiện các khối u bất thường ở các vị trí khác nhau trên cơ thể và nghi ngờ những nốt đó là u mềm treo Cảm giác kích thích, ngứa ngáy hoặc đau đớn tại vị trí nốt u; gây ảnh hưởng đến giao tiếp và các yếu tố về thẩm mỹ… . 23 |

Phương pháp chẩn đoán và điều trị u mềm treo

Theo bác sĩ Bích, điều trị u mềm treo là một thủ thuật thẩm mỹ đơn giản. Có nhiều phương pháp điều trị thẩm mỹ nhất là dùng nitơ lạnh để đốt bằng cách chấm, bắn hay kẹp nitơ vào sang thương. Ưu điểm của phương pháp này là không cần phải gây tê hay gây mê, không gây đau, không chảy máu và không để lại sẹo. Sau điều trị đúng y khoa, u mềm không tái xuất hiện ở vị trí đã được xử lý. (4) Ngoài ra, phẫu thuật cắt bỏ, đốt điện tổn thương, đốt laser… cũng là những phương pháp được lựa chọn để điều trị căn bệnh này. 24 |

Biện pháp phòng ngừa

Phòng tránh u mềm treo bằng cách đội nón, che nắng, đeo kính, bôi kem chống nắng… khi đi ra ngoài nhất là khi đi biển vào mùa hè. Ngoài ra, bổ sung vitamin E để làm chậm quá trình lão hóa da, ngăn các vấn đề về da liễu phát sinh. Đặc biệt, người bệnh nên đi khám khi u mềm treo xuất hiện ở những vị trí quan trọng như mắt, khuôn mặt, những vùng nhạy cảm hay khi sang thương có kích thước lớn hơn 2cm. Tiến sĩ bác sĩ Đặng Thị Ngọc Bích là người đặt viên gạch đầu tiên, xây dựng và đẩy mạnh công tác vừa khám chữa bệnh về da và thẩm mỹ da tại hệ thống BVĐK Tâm Anh TP.HCM. Đặc biệt, BVĐK Tâm Anh TP.HCM với lợi thế trang thiết bị máy móc hiện đại, đội ngũ y bác sĩ, kỹ thuật viên có tay nghề cao cùng địa điểm thuận lợi để người dân khám các bệnh về da và thẩm mỹ da an toàn, hiệu quả. -------------------------------------------------------------------------------- /corpus/hoi-chung-brugada: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/hoi-chung-brugada/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Tim mạch > 6 | Hội chứng Brugada: Nguyên nhân, chẩn đoán và điều trị 7 |

Hội chứng Brugada: Nguyên nhân, chẩn đoán và điều trị

8 | Hội chứng Brugada được biết đến là tình trạng rối loạn nhịp tim hiếm gặp nhưng vô cùng nguy hiểm, có thể đe dọa tính mạng người bệnh. Bài viết được tư vấn chuyên môn bởi BS.CKI Phạm Thanh Bình, Bác sĩ Trung tâm Tim mạch, Bệnh viện Đa khoa Tâm Anh TP.HCM. 9 |

Mục lục

10 | Hội chứng Brugada là gì? 11 | Các triệu chứng của bệnh Brugada 12 | Nguyên nhân gây ra hội chứng Brugada 13 | Tầm soát bệnh Brugada như thế nào? 14 | Chẩn đoán hội chứng Brugada 15 | Phương pháp điều trị Hội chứng Brugada 16 | Những đối tượng nguy cơ mắc hội chứng Brugada 17 | Chăm sóc cho bệnh nhân Hội chứng Brugada 18 |

Hội chứng Brugada là gì?

Hội chứng Brugada là tình trạng gây ra loạn nhịp tim nguy hiểm ở các ngăn dưới của tim (tâm thất) gọi là loạn nhịp thất. Loạn nhịp thất ở bệnh nhân bị hội chứng Brugada thường gặp là rung thất, trong đó tâm thất đập rất nhanh và hỗn loạn có thể gây ngất và dẫn đến đột tử. Hội chứng Brugada là một trong những nguyên nhân gây đột tử ở người trẻ tuổi, đặc biệt ở vùng Đông Nam Á, châu Á. (1) Hội chứng Brugada là một bệnh hiếm gặp do đột biến gen di truyền từ cha hoặc mẹ. Bệnh được phát hiện lần đầu tiên vào năm 1992. Từ đó, người ta đã tìm hiểu rất nhiều về tình trạng bệnh này, tuy nhiên vẫn còn nhiều vấn đề đang được nghiên cứu để tìm các phương pháp điều trị mới. 19 |

Các triệu chứng của bệnh Brugada

Các triệu chứng của hội chứng Brugada có thể bao gồm: (2) Hồi hộp do rối loạn nhịp; Ngất hoặc gần ngất; Ngưng tim được cứu sống; Đột tử ở người trẻ tuổi không rõ nguyên nhân. Các triệu chứng của hội chứng Brugada tương tự như nhiều bệnh lý về rối loạn nhịp khác. Nhiều người mắc bệnh Brugada không có bất kỳ triệu chứng nào, đa số bệnh nhân chỉ được phát hiện tình cờ do khám sức khỏe tổng quát hoặc đi khám vì bệnh lý khác. 20 |

Nguyên nhân gây ra hội chứng Brugada

Hội chứng Brugada thường do đột biến gen. Đột biến này có thể di truyền lại cho các thế hệ sau. Khi đột biến gen tích tụ đủ sẽ biểu hiện thành hội chứng Brugada. Các yếu tố nguy cơ của hội chứng Brugada bao gồm: (3) Tiền sử gia đình mắc hội chứng Brugada: Nếu các thành viên khác trong gia đình từng mắc hội chứng Brugada, bạn cũng có nhiều nguy cơ mắc hội chứng này hơn. Nam giới: Nam giới thường được chẩn đoán mắc hội chứng Brugada nhiều hơn nữ giới.. Chủng tộc: Hội chứng Brugada xảy ra ở người châu Á nhiều hơn các chủng tộc khác. Sốt: Sốt không gây ra hội chứng Brugada, nhưng nó có thể kích thích tim và gây ngất xỉu hoặc ngừng tim đột ngột ở người mắc hội chứng Brugada, đặc biệt là ở trẻ em. 21 |

Tầm soát bệnh Brugada như thế nào?

Khi có những triệu chứng nghi ngờ về loạn nhịp, đặc biệt người mà trong gia đình có người trực hệ trẻ bị đột tử, những người này đều nên đo điện tâm đồ (ECG) để kiểm tra xem có bị Brugada không. Vì hội chứng Brugada là một tình trạng bệnh lý di truyền từ thế hệ này sang thế hệ khác, do đó nếu gia đình có người đã bị Brugada, bạn nên tầm soát để xem có mắc bệnh không (gia đình bao gồm cha mẹ, anh chị em ruột và con cái của bạn). Nếu trong gia đình đã có người được phát hiện bệnh Brugada, bạn nên đến gặp bác sĩ chuyên về loạn nhịp tim để được tư vấn. Bạn có thể được làm một số kiểm tra tầm soát giúp bác sĩ đánh giá nguy cơ của bệnh và tư vấn về việc điều trị thích hợp. 22 |

Chẩn đoán hội chứng Brugada

Bác sĩ chuyên loạn nhịp tim sẽ khám lâm sàng và chỉ định các kiểm tra cận lâm sàng cho bạn, bao gồm: Điện tâm đồ (ECG): giúp tầm soát, có thể phát hiện các dấu hiệu bất thường trên ECG gợi ý bệnh Brugada. Điện tâm đồ với thuốc: Một số trường hợp đo ECG không rõ các dấu hiệu bất thường, bác sĩ đo điện tâm đồ với thuốc hoặc làm các nghiệm pháp giúp tăng khả năng bộc lộ bệnh để làm rõ chẩn đoán. Bạn cũng có thể được làm thêm các xét nghiệm về di truyền để phục phụ chẩn đoán và tiên lượng bệnh một phần. Xét nghiệm di truyền này cũng nên được chỉ định cho các thành viên khác trong gia đình của bệnh nhân. Thăm dò điện sinh lý tim: bác sĩ chuyên về loạn nhịp tim sẽ dùng điện cực đưa vào buồng tim để khảo sát và kiểm tra xem có khởi phát được cơn loạn nhịp thất nguy hiểm nào không. Tùy vào kết quả khảo sát mà bác sĩ sẽ đưa ra hướng điều trị phù hợp tiếp theo cho bạn. 23 | Thăm dò điện sinh lý tim là một trong những phương pháp chẩn đoán Hội chứng Brugada. 24 |

Phương pháp điều trị Hội chứng Brugada

Nếu được chẩn đoán bị hội chứng Brugada, có tiền sử rối loạn nhịp thất nguy hiểm, tiền căn ngưng tim được cứu sống hoặc khảo sát điện sinh lý ghi nhận có cơn rối loạn nhịp nguy hiểm thì bệnh được xem là nguy cơ đột tử cao. Lúc này bác sĩ của bạn có thể sẽ đề nghị cấy máy khử rung tim (ICD) để phòng ngừa đột tử. Cho đến nay, chỉ có việc cấy máy ICD là phương pháp hữu hiệu nhất để phòng ngừa đột tử do loạn nhịp tim ở bệnh nhân bị hội chứng Brugada. 25 |

Những đối tượng nguy cơ mắc hội chứng Brugada

Hội chứng Brugada thường gặp ở nam nhiều hơn nữ. Trên thực tế, nam giới có nguy cơ mắc bệnh này cao hơn nữ giới từ 8-10 lần. Tất cả bệnh nhân có tiền sử gia đình bị đột tử do tim hoặc đã có người trực hệ bị Brugada nên được tầm soát bệnh. 26 |

Chăm sóc cho bệnh nhân Hội chứng Brugada

Nếu đã được chẩn đoán bị hội chứng Brugada, bạn nên được đánh giá và điều trị bởi các bác sĩ chuyên khoa Loạn nhịp tim giàu kinh nghiệm. Cách tiếp cận này giúp đảm bảo rằng bạn được chăm sóc tốt nhất có thể bởi nhóm các bác sĩ: (4) Bác sĩ tim mạch; Bác sĩ chuyên loạn nhịp tim; Bác sĩ di truyền; Bác sĩ gia đình thường xuyên chăm sóc sức khỏe của bạn. Liên hệ ngay để được tư vấn và đặt lịch khám với các chuyên gia tim mạch hàng đầu tại Hệ thống Bệnh viện Đa khoa Tâm Anh: 27 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 28 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 29 | Hotline: 024 3872 3872 – 024 7106 6858 30 | TP.HCM: 31 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 32 | Hotline: 093 180 6858 – 0287 102 6789 33 | Fanpage: 34 | https://www.facebook.com/benhvientamanh Website: 35 | https://tamanhhospital.vn Các biến chứng của hội chứng Brugada cần được chăm sóc y tế khẩn cấp, bao gồm ngất xỉu hoặc ngừng tim đột ngột. Nếu không được điều trị ngay lập tức, tình trạng mất chức năng tim, hô hấp và ý thức đột ngột (thường xảy ra trong khi ngủ) xảy ra, có thể gây tử vong. Với sự chăm sóc y tế nhanh chóng, phù hợp sẽ cứu được người bệnh. 36 | -------------------------------------------------------------------------------- /corpus/benh-giun-luon: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/benh-giun-luon/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Tiêu hóa - Gan mật > 6 | Bệnh giun lươn là gì? Nguyên nhân, triệu chứng và cách điều trị 7 |

Bệnh giun lươn là gì? Nguyên nhân, triệu chứng và cách điều trị

8 | Giun lươn là ký sinh trùng nguy hiểm trong đường tiêu hóa. Loại ký sinh trùng này có thể tồn tại rất lâu trong cơ thể con người, gây ra nhiều biến chứng nguy hiểm. Phát hiện sớm tình trạng nhiễm giun và điều trị kịp thời sẽ giúp giảm nguy cơ xuất hiện biến chứng nặng. 9 |

Mục lục

10 | Bệnh giun lươn là gì? 11 | Triệu chứng nhiễm giun lươn 12 | 1. Lâm sàng 13 | 2. Cận lâm sàng 14 | Điều trị bệnh giun lươn 15 |

Bệnh giun lươn là gì?

Bệnh giun lươn (strongyloides stercoralis) được phát hiện đầu tiên ở Nam Bộ, Việt Nam vào năm 1876. Tần suất bệnh thực sự khó xác định vì phần lớn thường là nhiễm trùng tiềm ẩn (2- 20%). Biểu hiện có thể thay đổi từ không triệu chứng đến suy đa cơ quan. Tử suất của người bệnh nhiễm giun lươn nhập 3viện 16,7%. Trên người suy giảm miễn dịch có thể gây bệnh lý nhiễm giun lươn lan tỏa gây tử vong. Bệnh có hai loại hình thái gồm giun lươn ký sinhgiun lươn sống tự do trong môi trường ngoài cơ thể ký chủ. Ấu trùng xâm nhập qua da vào hệ bạch huyết và hệ tĩnh mạch vào vòng tuần hoàn đến phổi, khí quản, thực quản, dạ dày và phần đầu ruột non định vị tại đó. Ấu trùng khi đến phổi có thể không vào phế nang mà luân chuyển trong máu và đến các cơ quan khác. Trong quá trình di chuyển, ấu trùng phải trải qua hai lần lột xác để trưởng thành. Giun trưởng thành thường sống ở tá hỗng tràng. Những trường hợp nhiễm nặng có thể gặp ở dạ dày, môn vị, đại tràng, đường mật… Mỗi giun trưởng thành có thể sống tới 5 năm và tiếp tục chu trình sinh sản. Trứng giun xuất hiện sau 28 ngày bị nhiễm. Giun lươn là loại ký sinh trùng duy nhất tìm thấy ấu trùng trong phân (không phải trứng). Trứng giun lươn chỉ được tìm thấy khi tiêu chảy ồ ạt trong trường hợp bệnh nặng, trứng không kịp nở ra ấu trùng trong ruột mới theo phân ra ngoài. Trong điều kiện khí hậu thuận lợi, ấu trùng có thể phát triển thành giun lươn tự do sống ở ngoại cảnh. Trong một vài trường hợp như táo bón lâu ngày, giảm nhu động ruột, bệnh túi thừa, ấu trùng không được thải theo phân ra ngoài thì có thể chui qua vách ruột vào hệ tuần hoàn rồi tiếp tục chu trình ký sinh như trên. Hệ thần kinh trung ương, gan và phổi là nơi thường gặp của chu trình tự nhiễm này. Chu trình tự nhiễm này đặc biệt trên người suy giảm miễn dịch là nguyên nhân tái nhiễm kéo dài dù đã ra khỏi vùng dịch tễ, có thể kéo dài tới 36 năm.(2) 16 |

Triệu chứng nhiễm giun lươn

17 |

1. Lâm sàng

Hầu hết nhiễm giun lươn thường không triệu chứng và có thể tồn tại hàng chục năm mà không được chẩn đoán. Có thể biểu hiện triệu chứng qua da, đường tiêu hóa hay hô hấp. Qua da: Ấu trùng xâm nhập thường ở chân hoặc bất kỳ vị trí nào tiếp xúc với đất nhiễm bệnh thường gây phản ứng viêm da tại chỗ như ngứa, nổi mề đay ngoằn ngoèo có thể thay đổi vị trí phù hợp với phản ứng dị ứng khi ấu trùng di chuyển, đôi khi có thể là một nốt xuất huyết thứ phát do vỡ mạch máu. Triệu chứng này có thể kéo dài vài giờ, cả ngày và tái diễn hàng tháng, năm.(1) Đường tiêu hóa: Buồn nôn, nôn, đầy hơi, táo bón hay tiêu chảy mạn, thậm chí có thể gây tắc ruột, đôi khi gây hội chứng kém hấp thu. Nhiễm giun lươn là nguyên nhân biếng ăn, chậm lớn, suy dinh dưỡng ở trẻ em. Đường hô hấp : Trường hợp nhẹ sẽ bị khò khè, hắt hơi. Khi bội nhiễm hoặc chồng lắp lên bệnh khác thường gây ho, khò khè, khó thở, thở nhanh, ho ra máu, đau ngực kiểu màng phổi trường hợp nặng gây ra hội chứng nguy kịch hô hấp cấp ở người lớn (ARDS) cần phải thông khí cơ học. Hội chứng tăng nhiễm: Thường xảy ra trên cơ địa người suy kiệt, suy giảm miễn dịch, bệnh lý ác tính, đái tháo đường, nghiện rượu. Vi khuẩn Gr – đường ruột có thể bám vào ấu trùng di chuyển khắp cơ thể gây nhiễm trùng máu, viêm màng não, sốt kéo dài. 18 |

2. Cận lâm sàng

Phân : Soi phân : Có thể tìm thấy ấu trùng hoặc trứng giun (khi tiêu chảy ồ ạt). Dùng kỹ thuật Baermann để tăng độ nhạy: Mẫu phân tìm ấu trùng được ủ trong nước ấm rồi dùng thạch lỏng li tâm phát hiện. Hút dịch tá tràng để tìm ấu trùng giun lươn. Sự tăng giảm bạch cầu ái toan để theo dõi tiến trình của bệnh và đánh giá khả năng tự nhiễm lại. Xét nghiệm ELISA có độ nhạy và đặc hiệu cao nhưng độ tin cậy lại tùy vào phòng xét nghiệm. Kháng thể vẫn tồn tại nhiều năm sau điều trị thành công và cũng có thể (-) giả ở trường hợp bệnh nhân suy giảm miễn dịch. Chẩn đoán hình ảnh: Tổn thương phổi có thể thâm nhiễm, dạng nốt, viêm phổi hay phù phổi. 19 |

Điều trị bệnh giun lươn

Khi có triệu chứng nghi ngờ người bệnh cần tư vấn và điều trị ở bác sĩ chuyên khoa tiêu hóa có kinh nghiệm. Thuốc được lựa chọn hàng đầu là Ivermectin do hiệu quả cao, ít tác dụng phụ. Thiabendazole hiệu quả cao nhưng khả năng dung nạp kém. Albendazole là thuốc lựa chọn thay thế.(3) Trung tâm Nội soi và Phẫu thuật nội soi tiêu hóa (BVĐK Tâm Anh TP.HCM) và Khoa Tiêu hóa – Gan mật – Tụy (BVĐK Tâm Anh Hà Nội) là những trung tâm y tế chuyên khoa Tiêu hóa uy tín, cung cấp dịch vụ thăm khám và điều trị cao cấp, hiệu quả cho các bệnh nhân mắc các vấn đề về gan từ nhẹ đến nặng (gan nhiễm mỡ, viêm gan cấp tính, mạn tính, xơ gan, ung thư gan…). Hệ thống BVĐK Tâm Anh quy tụ đội ngũ bác sĩ Nội khoa – Ngoại khoa – Nội soi tiêu hóa chuyên môn cao, giàu kinh nghiệm, bên cạnh đó là sự hỗ trợ của hệ thống thiết bị y tế hiện đại, nhập khẩu từ nước ngoài, phục vụ tối đa nhu cầu thăm khám và điều trị của khách hàng. 20 | Để đặt lịch thăm khám và điều trị các bệnh về gan với các chuyên gia bác sĩ về Tiêu hóa của Hệ thống Bệnh viện Đa khoa Tâm Anh, xin vui lòng liên hệ: 21 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 22 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 23 | Hotline: 024 3872 3872 – 024 7106 6858 24 | TP.HCM: 25 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 26 | Hotline: 093 180 6858 – 0287 102 6789 27 | Fanpage: 28 | https://www.facebook.com/benhvientamanh Website: 29 | https://tamanhhospital.vn Những thông tin trên đây là nguyên nhân, triệu chứng và hướng điều trị bệnh giun lươn. Nếu nghi ngờ dấu hiệu nhiễm giun, người bệnh cần nhanh chóng tới các cơ sở y tế uy tín để được tiến hành thực hiện các chẩn đoán để có biện pháp xử trí kịp thời, ngăn ngừa biến chứng nguy hiểm. 30 | -------------------------------------------------------------------------------- /corpus/thoat-vi-khe-hoanh: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/thoat-vi-khe-hoanh/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Tiêu hóa - Gan mật > 6 | Thoát vị khe hoành: Nguyên nhân, triệu chứng, chẩn đoán và điều trị 7 |

Thoát vị khe hoành: Nguyên nhân, triệu chứng, chẩn đoán và điều trị

8 | Thoát vị khe hoành đa phần không có triệu chứng. Người bệnh thường phát hiện bệnh khi có biểu hiện trào ngược dạ dày thực quản hay tình cờ đi thăm khám một vấn đề khác. 9 |

Mục lục

10 | Thoát vị khe hoành là gì? 11 | Nguyên nhân gây thoát vị khe hoành 12 | Các triệu chứng của thoát vị khe hoành 13 | Các phương pháp chẩn đoán thoát vị khe hoành 14 | Bác sĩ điều trị thoát vị khe hoành bằng những phương pháp nào? 15 | 1. Điều trị nội khoa 16 | 2. Điều trị thoát vị khe hoành bằng phẫu thuật 17 | Các biện pháp thay đổi lối sống 18 |

Thoát vị khe hoành là gì?

Thoát vị khe hoành là tình trạng một phần dạ dày chui lên lồng ngực. Bình thường dạ dày nằm dưới cơ hoành, là một cơ mỏng hình vòm ngăn cách giữa các cơ quan trong lồng ngực và ổ bụng. Thực quản là một ống chuyển thức ăn từ miệng xuống dạ dày, và ống này đi qua một lỗ trên cơ hoành xuống bụng. Khi có thoát vị khe hoành thì dạ dày chui qua lỗ đó lên ngực. (2) Bệnh thường được chia thành 4 dạng, bao gồm: Dạng I: thường gọi là thoát vị trượt, xảy ra khi chỗ nối thực quản – dạ dày (tâm vị) trượt lên trên cơ hoành. Đây là dạng phổ biến nhất của thoát vị khe hoành và gây triệu chứng trào ngược dạ dày thực quản. Dạng II: phần cao nhất của dạ dày (đáy vị) trượt lên trên cơ hoành. Dạng III: là sự kết hợp của dạng I và II Dạng IV: lỗ thoát vị lớn, ngoài dạ dày thì các tạng khác như đại tràng, lách, tụy, ruột non cũng có thể chui lên lồng ngực. Dạng II, III, IV là những biến thể của thoát vị cạnh thực quản, chiếm 5-15% trường hợp thoát vị khe hoành. Tình trạng này tuy ít gặp nhưng có thể nghiêm trọng nếu dạ dày bị gập góc. Thoát vị cạnh thực quản có thể gây chảy máu dạ dày hoặc khó thở. 19 | Các dạng thoát vị khe hoành Vietsub:
Hiatal hernia: thoát vị khe hoành
Normal: bình thường
Normal diaphragm: cơ hoành bình thường
Weak diaphragm: cơ hoành yếu
Sliding hiatal hernia: thoát vị trượt
Rolling hiatal hernia: thoát vị kiểu cuốn
Paraesophageal hiatal hernia: thoát vị cạnh thực quản 20 |

Nguyên nhân gây thoát vị khe hoành

Nguyên nhân gây thoát vị khe hoành không phải lúc nào cũng rõ ràng, nhưng có thể kể đến một số yếu tố sau: Những thay đổi của cơ hoành do tuổi tác Tổn thương ở vùng này do chấn thương hay phẫu thuật Bẩm sinh Tăng áp lực ổ bụng thường xuyên, kéo dài do ho, nôn, rặn nhiều khi đi tiêu, tập thể dục, nâng vật nặng.(3) 21 |

Các triệu chứng của thoát vị khe hoành

Những thoát vị nhỏ thường không gây ra triệu chứng. Trường hợp thoát vị to, người bệnh có thể gặp các triệu chứng sau: Nóng rát sau xương ức Trớ đồ ăn hay dịch lên miệng. Đau bụng hoặc đau ngực Khó nuốt Ăn mau no Buồn nôn Khó thở Nôn ra máu hoặc đi cầu phân đen Ho không giải thích được 22 | Thoát vị khe hoành có thể gây ra triệu chứng ho nhiều không rõ nguyên nhân 23 |

Các phương pháp chẩn đoán thoát vị khe hoành

Thoát vị khe hoành có thể được phát hiện tình cờ khi bệnh nhân đi khám vì một bệnh lý khác và được chụp X quang, CT hay MRI vùng ngực-bụng. Các trường hợp bệnh nhân có triệu chứng của trào ngược dạ dày thực quản, khi thực hiện nội soi thì bác sĩ có thể phát hiện thoát vị khe hoành. Ngoài ra, để chẩn đoán thoát vị khe hoành, bác sĩ cũng có thể đề nghị các phương pháp khác như chụp X quang thực quản dạ dày bằng cách cho bệnh nhân uống thuốc cản quang, chụp CT, MRI vùng ngực-bụng. (1) 24 |

Bác sĩ điều trị thoát vị khe hoành bằng những phương pháp nào?

25 |

1. Điều trị nội khoa

Thoát vị khe hoành nếu không gây ra triệu chứng thì thường không cần can thiệp điều trị. Đối với các trường hợp gây ra triệu chứng, bác sĩ sẽ dùng các loại thuốc hay được dùng cho chứng trào ngược dạ dày thực quản. 26 | Thuốc kháng tiết axít thường được sử dụng cho các trường hợp thoát vị khe hoành có trào ngược dạ dày thực quản. 27 |

2. Điều trị thoát vị khe hoành bằng phẫu thuật

Đôi khi, thoát vị khe hoành cần phải phẫu thuật. Phẫu thuật thường được sử dụng cho những bệnh nhân sử dụng thuốc không hiệu quả, hoặc có các biến chứng như viêm nghiêm trọng hoặc bị hẹp thực quản. Phẫu thuật để sửa chữa thoát vị khe hoành có thể gồm kéo dạ dày và các tạng thoát vị xuống bụng, làm cho lỗ mở cơ hoành nhỏ hơn, và có thể tạo van chống trào ngược. Trong một số trường hợp, phẫu thuật thoát vị khe hoành được kết hợp với phẫu thuật giảm cân, chẳng hạn như cắt dạ dày hình ống tay áo. Hiện nay phẫu thuật thoát vị khe hoành thường được thực hiện qua nội soi ổ bụng, là một loại phẫu thuật ít xâm lấn. Trong đó, bác sĩ phẫu thuật sẽ dùng một số vết rạch nhỏ trên bụng để đưa vào ổ bụng các dụng cụ chuyên dụng. Bác sĩ thực hiện thao tác trong khi xem các hình ảnh phóng đại của cơ quan bên trong cơ thể người bệnh hiển thị trên màn hình video. 28 |

Các biện pháp thay đổi lối sống

Một số biện pháp có thể giúp kiểm soát triệu chứng của trào ngược axít như: Ăn nhiều bữa và mỗi bữa ăn ít thức ăn thay vì ăn quá no Tránh dùng một số thức ăn gây trào ngược nặng hơn như đồ béo, đồ chiên, rượu, cà phê, sô cô la, hành, tỏi. Tránh nằm ngay sau khi ăn hoặc ăn muộn buổi tối trước khi ngủ Ngừng hút thuốc Nâng cao đầu giường khi ngủ (khoảng 15cm) Và điều quan trọng nhất là người dân nên khám sức khỏe định kỳ để tầm soát và phát hiện bệnh sớm mới có thể điều trị hiệu quả. Trung tâm Nội soi & Phẫu thuật nội soi tiêu hóa tại Bệnh viện Đa khoa Tâm Anh là đơn vị thăm khám và phẫu thuật điều trị các bệnh về tiêu hóa uy tín, trong đó có các bệnh lý ngoại tiêu hóa như thoát vị khe hoành. Đặc biệt, Trung tâm Nội soi & Phẫu thuật nội soi tiêu hóa là nơi đầu tiên ở Đông Nam Á ứng dụng dụng cụ robot cầm tay cơ học kết hợp với hệ thống phẫu thuật nội soi 3D/4K ICG Rubina trong phẫu thuật nội soi điều trị các bệnh lý đường tiêu hóa đem lại hiệu quả cao và giảm chi phí cho người bệnh. 29 | Để đặt hẹn thăm khám và điều trị, phẫu thuật bệnh thoát vị khe hoành cũng như các bệnh về tiêu hóa khác vui lòng liên hệ: Hệ thống bệnh viện Đa khoa Tâm Anh Hà Nội: 108 Hoàng Như Tiếp, phường Bồ Đề, quận Long Biên, TP.Hà Nội Đặt lịch khám: 024 3872 3872 – 024 7106 6858“>024 3872 3872 – 024 7106 6858 TP.HCM: 2B Phổ Quang, phường 2, quận Tân Bình, TP.HCM Đặt lịch khám: 0287 102 6789 – 093 180 6858“>0287 102 6789 – 093 180 6858 Fanpage: Bệnh viện Đa khoa Tâm Anh Website: https://tamanhhospital.vn 30 | -------------------------------------------------------------------------------- /src/hybrid_search.py: -------------------------------------------------------------------------------- 1 | from utils import get_text_from_html_file, get_text_chunks 2 | from langchain.document_loaders import DirectoryLoader 3 | from langchain.text_splitter import RecursiveCharacterTextSplitter 4 | from langchain.document_loaders import TextLoader 5 | from langchain.document_loaders import DirectoryLoader 6 | from langchain.embeddings.openai import OpenAIEmbeddings 7 | from langchain.text_splitter import RecursiveCharacterTextSplitter 8 | from langchain.vectorstores import Chroma 9 | import os 10 | from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings 11 | from langchain.retrievers import BM25Retriever, EnsembleRetriever 12 | from langchain.prompts import PromptTemplate 13 | from langchain.chat_models import ChatOpenAI 14 | from dotenv import load_dotenv 15 | load_dotenv(".env") 16 | openai_api_key = os.getenv('OPENAI_API_KEY') 17 | import ollama 18 | 19 | model_id ="ontocord/vistral" 20 | 21 | 22 | def load_corpus(corpus_path): 23 | text_loader_kwargs={'autodetect_encoding': True} 24 | loader = DirectoryLoader(corpus_path, loader_cls = TextLoader, loader_kwargs=text_loader_kwargs) 25 | docs = loader.load() 26 | from bs4 import BeautifulSoup 27 | for doc in docs: 28 | soup = BeautifulSoup(doc.page_content, 'html.parser') 29 | doc.page_content = soup.get_text() 30 | text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) 31 | texts = text_splitter.split_documents(docs) 32 | return docs,texts 33 | corpus_path = 'corpus/' 34 | docs,texts = load_corpus(corpus_path) 35 | splits =texts 36 | 37 | print (f"Your {len(docs)} documents have been split into {len(texts)} chunks") 38 | #embedding = OpenAIEmbeddings(openai_api_key) 39 | from langchain_community.embeddings import HuggingFaceBgeEmbeddings 40 | 41 | model_name = "BAAI/bge-m3" 42 | device = 'cuda:0' 43 | model_kwargs = {'device': device} 44 | cache_dir = "cache/" 45 | encode_kwargs = {'normalize_embeddings': True} 46 | embed_model = SentenceTransformerEmbeddings( 47 | model_name=model_name, 48 | model_kwargs=model_kwargs, 49 | encode_kwargs={'batch_size': 16, "normalize_embeddings": True, "device": device }, 50 | cache_folder=cache_dir 51 | ) 52 | # vectordb = Chroma.from_documents(documents=splits, embedding=embed_model,persist_directory="chroma_db_bge") 53 | # vectordb.persist() 54 | persist_directory = "chroma_db_bge" 55 | vectordb = Chroma(persist_directory=persist_directory, embedding_function=embed_model) 56 | print("Done!") 57 | query ="Nam đang phải đối mặt với việc phải cắt bỏ một bướu lành tính trên cơ thể mình, anh muốn biết phương pháp cắt bỏ bướu lành tính thường được sử dụng là gì?" 58 | k=3 59 | # results = vectordb.similarity_search(query=query, k=k) 60 | # print(results) 61 | retriever = vectordb.as_retriever(search_kwargs={"k": 3}) 62 | #retriever.k = k 63 | bm25_retriever = BM25Retriever.from_documents(splits) 64 | bm25_retriever.k = 3 65 | ensemble_retriever = EnsembleRetriever(retrievers=[bm25_retriever, retriever], weights=[0.3, 0.7]) 66 | 67 | prompt_template = """Sử dụng các trích đoạn sau đây để trả lời câu hỏi trắc nghiệm (nếu không biết vui lòng trả về không biết. 68 | {context} 69 | Câu hỏi: {question} 70 | Trả lời: """ 71 | import pandas as pd 72 | import numpy as np 73 | 74 | testset = 'data/public_test.csv' 75 | df = pd.read_csv(testset) 76 | ans = pd.DataFrame(columns=['id', 'answer']) 77 | 78 | newline = '\n' 79 | labels = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E', 5:'F'} 80 | chars = "ABCDEF" 81 | PROMPT = PromptTemplate( 82 | template=prompt_template, input_variables=["context", "question"] 83 | ) 84 | question_id =0 85 | list_result=[] 86 | #llm = ChatOpenAI(temperature=0.1,openai_api_key=openai_api_key) 87 | query= """Hương đang mang thai tuần thứ 5 và lo lắng mình có thể gặp phải rau tiền đạo. Hương có thể kiểm tra phát hiện bệnh này sau bao nhiêu tuần nữa? 88 | A. 5 tuần 89 | B. 15 tuần 90 | C. 25 tuần 91 | D. 35 tuần 92 | """ 93 | ensemble_docs = ensemble_retriever.get_relevant_documents(query) 94 | # prompt = PROMPT.format_prompt( 95 | # context=ensemble_docs, 96 | # question=query 97 | # ) 98 | # result=llm.predict(text=prompt.text) 99 | # print(result) 100 | for file in os.listdir("question"): 101 | with open("question/"+file, "r", encoding="utf-8") as f: 102 | question = f.read() 103 | print(question) 104 | ensemble_docs = ensemble_retriever.get_relevant_documents(question) 105 | prompt = PROMPT.format_prompt( 106 | context=ensemble_docs, 107 | question=question 108 | ) 109 | result = ollama.generate(model=model_id, prompt=prompt.text).get("response")[0] 110 | print(result) 111 | #exit() 112 | 113 | #result=llm.predict(text=prompt.text) 114 | list_result.append(result) 115 | print(result) 116 | print("Câu: ",question_id+1) 117 | question_id+=1 118 | with open("answers/"+file, "w", encoding="utf-8") as f: 119 | f.write(result) 120 | #exit() 121 | # for index, row in df.iterrows(): 122 | # # if index == 35: 123 | # # break 124 | # options = [str(p) for p in row.loc[['option_' + str(i) for i in range(1,7)]] if str(p) != 'nan'] 125 | # options = [labels[i] + '. ' + p if not p.startswith(f'{labels[i]}.') else p for i, p in enumerate(options)] 126 | # #print(options) 127 | # len_options = len(options) 128 | # question = row.loc['question'] 129 | # query = f"""{row.loc['question']} 130 | # {newline.join(options)} 131 | # """ 132 | # #print(query) 133 | # ensemble_docs = ensemble_retriever.get_relevant_documents(query) 134 | # prompt = PROMPT.format_prompt( 135 | # context=ensemble_docs, 136 | # question=question 137 | # ) 138 | # #print(prompt.text) 139 | # result=llm.predict(text=prompt.text) 140 | # print(result) 141 | # print(len(options)) 142 | # print("Câu: ",index+1) 143 | # list_result.append(result) 144 | #exit() 145 | 146 | # question =""""Nam đang phải đối mặt với việc phải cắt bỏ một bướu lành tính trên cơ thể mình, anh muốn biết phương pháp cắt bỏ bướu lành tính thường được sử dụng là gì?", 147 | # A. Cắt bỏ bằng dao, 148 | # B. Cắt bỏ bằng tia laser, 149 | # C. Cắt bỏ bằng tần số sóng vô tuyến, 150 | # D. Tất cả đều sai 151 | # """ 152 | # df['answer_select']=list_result 153 | # df.to_csv("submission.csv",index=False) 154 | # prompt = PROMPT.format_prompt( 155 | # context=ensemble_docs, 156 | # question=question 157 | # ) 158 | # print(prompt.text) 159 | 160 | 161 | 162 | # result=llm.predict(text=PROMPT.format_prompt( 163 | # context=ensemble_docs, 164 | # question=query 165 | # ).text) 166 | # print(result) -------------------------------------------------------------------------------- /corpus/viem-loet-giac-mac: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/viem-loet-giac-mac/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Mắt > 6 | Viêm loét giác mạc: Nguyên nhân, triệu chứng và cách phòng bệnh 7 |

Viêm loét giác mạc: Nguyên nhân, triệu chứng và cách phòng bệnh

8 | Giác mạc là lớp trong suốt bên ngoài, phía trước mắt và cũng là phần dễ bị tổn thương nhất ở vùng mắt. Viêm loét giác mạc xảy ra khi có những tổn thương như vết xước hay rách ở giác mạc do tiếp xúc với bụi, đất, cát… Tình trạng viêm loét giác mạc xảy ra lâu ngày sẽ gây những biến chứng nặng nề cho mắt. 9 |

Mục lục

10 | Loét giác mạc là gì? 11 | Nguyên nhân 12 | Triệu chứng 13 | Biến chứng 14 | Chẩn đoán 15 | Điều trị 16 | Phòng ngừa viêm loét giác mạc 17 | Viêm loét giác mạc có nguy hiểm không? 18 | Có nên nhỏ mắt khi bị viêm loét giác mạc? 19 |

Loét giác mạc là gì?

Loét giác mạc là một bệnh nhiễm trùng mắt gây ra vết loét hở trên giác mạc. 20 | Các biểu hiện và biến chứng thay đổi tùy trường hợp bệnh và tác nhân gây bệnh. 21 | Những tiếp xúc tưởng nhẹ từ bụi, đất, dụi mắt… lại là nguyên nhân gây ra tình trạng viêm loét giác mạc 22 |

Nguyên nhân

Viêm loét giác mạc có thể do nhiễm vi khuẩn, nấm, vi rút hoặc ký sinh trùng như Acanthamoeba (sống trong nước bị ô nhiễm). 23 | Loét có thể bắt đầu với chấn thương giác mạc, chẳng hạn như khô mắt nghiêm trọng, vật lạ làm trầy xước, xâm nhập/ đọng lại trong mắt hoặc nếu mắt bị kích ứng bởi kính áp tròng, đặc biệt là đeo kính áp tròng trong lúc ngủ hoặc không được khử trùng đầy đủ. 24 | Loét giác mạc do virus (thường do herpesvirus) có thể tái phát do căng thẳng về thể chất hoặc có thể tái phát tự phát. 25 | Sự thiếu hụt vitamin A và protein có thể dẫn đến hình thành vết loét giác mạc. 26 | Khi mí mắt không khép lại đúng cách, giác mạc có thể bị khô và kích ứng. Loại kích ứng này có thể dẫn đến thương tích và phát triển thành vết loét giác mạc. 27 | Loét giác mạc cũng có thể là do lông mi mọc vào trong, mi mắt lật vào trong (quặm, lông xiêu) hoặc viêm bờ mi. 28 | Một số bệnh lý như mắc bệnh đái tháo đường kiểm soát không tốt… cũng là yếu tố nguy cơ gây viêm loét giác mạc. 29 |

Triệu chứng

Viêm loét giác mạc gây đỏ, đau, cảm giác như có dị vật trong mắt, đau nhức, nhạy cảm với ánh sáng chói và tăng tiết nước mắt. 30 | Vết loét thường xuất hiện dưới dạng một đốm trắng hoặc mờ và xám trên giác mạc. Đôi khi, vết loét phát triển trên toàn bộ giác mạc và có thể ăn sâu. Mủ có thể tích tụ phía sau giác mạc, đôi khi tạo thành một lớp trắng ở đáy giác mạc (gọi là mủ tiền phòng). 31 | Kết mạc thường đỏ ngầu. 32 | Vết loét càng sâu thì các triệu chứng và biến chứng càng nặng. 33 |

Biến chứng

Viêm giác mạc nếu không được điều trị sớm và đúng cách có thể xảy ra những biến chứng: 34 | Loét giác mạc có thể lành lại sau khi điều trị, nhưng chúng có thể để lại sẹo đục làm giảm thị lực. 35 | Các biến chứng khác có thể bao gồm nhiễm trùng sâu, thủng giác mạc, di lệch mống mắt 36 | Trường hợp giác mạc bị tổn thương nghiêm trọng, thủ thuật cấy ghép giác mạc có thể được áp dụng. Tuy nhiên, cần phải tìm người hiến giác mạc và chi phí cho 1 ca ghép giác mạc khá cao. 37 |

Chẩn đoán

Các bác sĩ đánh giá vết loét bằng cách sử dụng đèn khe (một dụng cụ cho phép bác sĩ kiểm tra mắt dưới độ phóng đại cao). Để nhìn rõ vết loét, bác sĩ có thể nhỏ thuốc nhỏ mắt có chứa chất nhuộm màu gọi là fluorescein. Chất huỳnh quang tạm thời nhuộm các vùng bị tổn thương của giác mạc, giúp bác sĩ có thể nhìn thấy các vùng giác mạc bị tổn thương mà không thể nhìn thấy được. 38 | Máy móc, kỹ thuật hiện đại hỗ trợ kiểm tra những rắc rối về mắt cho người bệnh Trong một số tình huống, bác sĩ sẽ cạo bề mặt của các vết loét lớn để lấy mẫu. Sau đó, mẫu được nuôi cấy để xác định vi khuẩn, nấm, vi rút hoặc kí sinh gây nhiễm trùng. Sau khi xác định được sinh vật, các bác sĩ sẽ chọn loại thuốc tốt nhất để điều trị. 39 |

Điều trị

Loét giác mạc là một trường hợp khẩn cấp cần được điều trị ngay lập tức. 40 | Thuốc nhỏ mắt kháng sinh, kháng vi rút hoặc kháng nấm thường cần thiết ngay lập tức và phải được dùng thường xuyên, đôi khi hàng giờ liên tục trong vài ngày. 41 | Thuốc nhỏ làm giãn mắt, chẳng hạn như atropine hoặc scopolamine, có thể giúp giảm đau và giảm nguy cơ biến chứng. 42 | Ghép giác mạc 43 |

Phòng ngừa viêm loét giác mạc

Để ngăn ngừa hoặc hạn chế nguy cơ viêm giác mạc, đặc biệt với những người thường xuyên đeo kính áp tròng, bạn nên: 44 | Thay kính áp theo đúng thời hạn 45 | Không nên tiếp xúc trực tiếp với ánh nắng mặt trời bằng cách đeo kính bảo vệ mắt khi ra ngoài 46 | Không nằm ngủ khi còn đeo kính áp tròng 47 | Nên tháo kính áp tròng khi bơi 48 | Trước khi đeo, tháo kính áp tròng cần rửa tay sạch sạch sẽ 49 | Sử dụng dung dịch vệ sinh kính, không thay thế bằng nước hoặc pha loãng dung dịch 50 | Điều trị ổn định bệnh lý nền mắc phải 51 |

Viêm loét giác mạc có nguy hiểm không?

Tình trạng viêm loét giác mạc nếu không được điều trị sớm và đúng cách có thể xảy ra những biến chứng như sẹo giác mạc, viêm mãn tính, thủng giác mạc… 52 | Thông qua những hình ảnh thu được, bác sĩ sẽ tư vấn cách thức khắc phục, điều trị phù hợp tình trạng bệnh Do đó, bạn không nên bỏ qua các triệu chứng, hãy đến chuyên khoa mắt để được chẩn đoán chính xác và điều trị kịp thời trước khi phát sinh các biến chứng. 53 |

Có nên nhỏ mắt khi bị viêm loét giác mạc?

Việc sử dụng thuốc nhỏ mắt khi bị loét viêm giác mạc cần xác định rõ nguyên nhân. Nếu nguyên nhân do nhiễm trùng, bác sĩ sẽ chỉ định dùng các loại thuốc nhỏ mắt như thuốc nhỏ mắt kháng sinh, kháng nấm, kháng virus và có thể kèm thêm thuốc nhỏ mắt kháng viêm. 54 | Người bệnh cần tuyệt đối tuân thủ chỉ định của bác sĩ dùng thuốc đúng liều, đúng thời gian và kết hợp đúng thuốc để cho hiệu quả điều trị cao, tránh xảy ra biến chứng. 55 | Phòng khám Mắt tại Hệ thống BVĐK Tâm Anh được trang bị hệ thống máy móc, thiết bị hiện đại cùng đội ngũ bác sĩ, y tá có chuyên môn cao sẽ giúp bảo vệ đôi mắt của bạn, phòng tránh các bệnh về mắt . Để đăng ký khám bệnh, bạn có thể đến khám trực tiếp hoặc liên hệ đặt lịch thông qua tổng đài theo số hotline: 0287 102 6789 (TP.HCM) và 024 3872 3872 (Hà Nội). 56 | Để đặt lịch khám ThS.BS Phạm Huy Vũ Tùng – BVĐK Tâm Anh TP.HCM, bạn đăng ký tại đây. 57 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội Hotline: 024 3872 3872 – 024 7106 6858 TP.HCM: 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh Hotline: 0287 102 6789 – 093 180 6858 Fanpage: https://www.facebook.com/benhvientamanh Website: https://tamanhhospital.vn 58 | -------------------------------------------------------------------------------- /corpus/khong-co-tinh-trung: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/khong-co-tinh-trung/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Nam Học > 6 | Không có tinh trùng: Nguyên nhân, cách chẩn đoán và điều trị 7 |

Không có tinh trùng: Nguyên nhân, cách chẩn đoán và điều trị

8 | Kết quả thống kê cho thấy, khoảng 10-15% trường hợp 9 | không có tinh trùng 10 | trong số nam giới bị vô sinh. Tuy nhiên, các chuyên gia Nam học cho rằng, nếu được thăm khám sớm và điều trị kịp thời, đúng cách, nam giới vẫn không đánh mất hoàn toàn cơ hội làm cha. 11 | 12 |

Mục lục

13 | Tình trạng không có tinh trùng là gì? 14 | Nguyên nhân gây ra tình trạng không có tinh trùng 15 | Nguyên nhân không do tắc nghẽn 16 | Nguyên nhân tắc nghẽn 17 | Các triệu chứng của bệnh không có tinh trùng 18 | Chẩn đoán không có tinh trùng 19 | Các phương pháp điều trị không có tinh trùng 20 | Điều trị nội khoa 21 | Điều trị ngoại khoa khi có chỉ định 22 | Các kỹ thuật hỗ trợ sinh sản 23 | Những điều nên làm để hỗ trợ điều trị không có tinh trùng 24 |

Tình trạng không có tinh trùng là gì?

Không có tinh trùng (tên gọi khác là vô tinh – Azoospermia) là thuật ngữ y tế dùng để diễn tả tình trạng không thấy tinh trùng sau khi ly tâm và xem dưới kính hiển vi có độ phóng đại 400 lần. 25 | Các chuyên gia thường chia tình trạng này thành 2 loại gồm: không có tinh trùng do tắc nghẽn và không có tinh trùng không do tắc nghẽn. Trong đó, tỷ lệ nam giới không tinh trùng không do tắc chiếm chủ yếu, đến 40% trường hợp. 26 |

Nguyên nhân gây ra tình trạng không có tinh trùng

Theo các chuyên gia Nam học, BVĐK Tâm Anh, nguyên nhân gây bệnh 27 | không có tinh trùng 28 | có liên quan trực tiếp đến 2 tình trạng do tắc nghẽn hoặc không tắc nghẽn. 29 |

Nguyên nhân không do tắc nghẽn

Không có tinh trùng do các bệnh lý ở vùng dưới đồi – tuyến yên: Vùng dưới đồi – tuyến yên có vai trò rất quan trọng trong việc kiểm soát nhịp sinh học, nhiệt độ cơ thể, đặc biệt là giải phóng và ức chế các nội tiết tố của tuyến yên. Nếu vùng dưới đồi – tuyến yên bị tổn thương sẽ dẫn đến các rối loạn trong việc giải phóng các nội tiết tố như GnRH, gonadotrophin gây vô tinh. 30 | Không có tinh trùng do vấn đề về di truyền gồm bất thường về số lượng nhiễm sắc thể (Hội chứng Klinefelter, Hội chứng Down, Hội chứng Noonan…) hoặc cấu trúc nhiễm sắc thể (như Hội chứng Kallmann, mất đoạn nhiễm sắc thể Y, nhiễm sắc thể Y có 2 tâm động…) 31 | Không có tinh trùng do nguyên nhân từ tinh hoàn gồm không có tinh hoàn (Anorchia), tinh hoàn ẩn (tinh hoàn chưa tụt xuống bìu), Hội chứng Sertoli (tinh hoàn không sản xuất được tinh trùng sống), ngưng sinh tinh (tinh hoàn không sản xuất được tinh trùng trưởng thành hoàn toàn), teo tinh hoàn sau bệnh quai bị… 32 |

Nguyên nhân tắc nghẽn

Nhóm nguyên nhân thứ hai là sự xuất hiện các bế tắc ở nhiều vị trí như ống dẫn tinh, mào tinh, ống phóng tinh khiến cho tinh trùng bị nghẽn lại. 33 |

Các triệu chứng của bệnh không có tinh trùng

Người bệnh có thể không có bất kỳ triệu chứng nào hoặc thậm chí không biết mình bị bệnh 34 | không có tinh trùng 35 | cho đến khi nỗ lực thụ thai không thành công. Các dấu hiệu khác thường liên quan đến sự mất cân bằng nội tiết tố hoặc tình trạng bất thường nhiễm sắc thể di truyền. 36 | Nếu không, bạn có thể dựa vào các triệu chứng sau đây: 37 | Ít có ham muốn tình dục 38 | Rối loạn cương dương 39 | Có khối u, sưng tấy hoặc khó chịu xung quanh tinh hoàn 40 | Râu, lông ít hoặc không có 41 |

Chẩn đoán không có tinh trùng

Việc chẩn đoán tình trạng 42 | không có tinh trùng 43 | rất khó được phát hiện thông qua các triệu chứng bên ngoài. Do đó, để chẩn đoán bệnh, các bác sĩ sẽ chủ yếu dựa vào các phương pháp xét nghiệm tinh dịch đồ. 44 | Mẫu tinh dịch của nam giới sẽ được kiểm tra bằng máy ly tâm hoặc soi dưới kính hiển vi. Trong trường hợp thể tích tinh dịch ít, các bác sĩ phải tiến hành tìm thêm tinh trùng trong nước tiểu sau khi xuất tinh. Việc không có tinh trùng và tế bào mầm chưa trưởng thành trong tinh dịch gợi ý tình trạng tắc đường dẫn tinh hoàn toàn. 45 | Ngoài ra, các bác sĩ sẽ chỉ định thêm một số xét nghiệm: 46 | Thử các nội tiết tố sinh dục, đặc biệt testosterone 47 | Xét nghiệm nhiễm sắc thể 48 | Chụp cắt lớp vi tính (CT scan) hoặc siêu âm để kiểm tra hình dạng và các bất thường (nếu có) của các cơ quan sinh sản. 49 |

Các phương pháp điều trị không có tinh trùng

Việc điều trị bệnh 50 | không có tinh trùng 51 | tùy thuộc vào nguyên nhân gây bệnh. Theo đó, các chuyên gia Nam học có thể thực hiện các phương pháp sau đây. 52 |

Điều trị nội khoa

Người bệnh không có tinh trùng do nguyên nhân suy tuyến yên (tức là nguyên nhân không do tắc nghẽn) có thể được điều trị bằng thuốc nội tiết. Các thuốc nội tiết bao gồm hormone kích thích tạo nang trứng (FSH), Gonadotropin màng đệm người (HCG), clomiphene, anastrazole và letrozole. 53 |

Điều trị ngoại khoa khi có chỉ định

Việc can thiệp bằng các phương pháp phẫu thuật sẽ được áp dụng để giải quyết một số vấn đề của người bệnh gây 54 | không có tinh trùng 55 | do các nguyên nhân như: 56 | Giãn tĩnh mạch thừng tinh 57 | Vô tinh do bế tắc trong tinh hoàn 58 | Vô tinh do bế tắc trong mào tinh 59 | Ống dẫn tinh bị tắc 60 | Mở rộng lồi tinh hoặc cổ túi tinh 61 |

Các kỹ thuật hỗ trợ sinh sản

Để phục vụ cho các biện pháp hỗ trợ sinh sản như bơm tinh trùng, thụ tinh trong ống nghiệm, bác sĩ tiến hành c 62 | ác phương pháp hỗ trợ sinh sản như sau: 63 | Chọc hút lấy tinh trùng từ mào tinh qua da (PESA) 64 | Phẫu thuật vi phẫu lấy tinh trùng từ mào tinh (MESA) 65 | Phẫu thuật lấy tinh trùng từ tinh hoàn (TESE) 66 | Phẫu thuật vi phẫu lấy tinh trùng từ tinh hoàn (Micro-TESE) 67 | Nếu nguyên nhân của tình trạng 68 | không có tinh trùng 69 | xuất phát từ yếu tố di truyền và có thể truyền sang con cái, bác sĩ có thể đề nghị người bệnh phân tích yếu tố di truyền của tinh trùng trước khi thực hiện các biện pháp hỗ trợ thụ tinh. 70 |

Những điều nên làm để hỗ trợ điều trị không có tinh trùng

Để việc điều trị không tinh trùng đạt hiệu quả, các chuyên gia Nam học khuyến cáo người bệnh nên: 71 | Tuân thủ chỉ định dùng thuốc đúng thời gian và liều lượng 72 | Tái khám theo lịch hẹn để được theo dõi sát sao 73 | Quan tâm đến biểu hiện của cơ thể và thông báo lại với bác sĩ khi cầ 74 | Xây dựng lối sống lành mạnh, cân bằng dinh dưỡng, vận động phù hợp 75 | 76 | Khoa Nam học, Hệ thống BVĐK Tâm Anh với đội ngũ các chuyên gia, bác sĩ giỏi chuyên môn, tận tâm, nhiệt tình, tự tin làm chủ những kỹ thuật tiến bộ nhất cùng sự hỗ trợ của hệ thống máy móc, trang thiết bị chẩn đoán hình ảnh hiện đại như: máy chụp CT 768 lát cắt Somatom Drive, máy cộng hưởng từ thế hệ mới Magnetom Amira BioMatrix, máy siêu âm; hệ thống kính vi phẫu thuật Opmi Vario 700 Zeiss, bàn mổ Meera-Maquet; cơ sở vật chất khang trang… sẽ giúp phát hiện sớm và có phương án điều trị bệnh 77 | không có tinh trùng 78 | một hiệu quả, nhanh chóng. 79 | -------------------------------------------------------------------------------- /corpus/viem-mang-bo-dao: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/viem-mang-bo-dao/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Mắt > 6 | Viêm màng bồ đào: Nguyên nhân, triệu chứng và cách điều trị 7 |

Viêm màng bồ đào: Nguyên nhân, triệu chứng và cách điều trị

8 | Với những đặc tính như có thể gây biến chứng mù lòa, bệnh gặp ở mọi lứa tuổi và đặc biệt không rõ nguyên nhân gây bệnh đã khiến viêm màng bồ đào trở thành căn bệnh nguy hiểm đe dọa trực tiếp đến thị lực của bất cứ ai. 9 |

Mục lục

10 | Viêm màng bồ đào là gì? 11 | Cấu tạo màng bồ đào 12 | Phân loại viêm màng bồ đào 13 | Nguyên nhân gây bệnh viêm màng bồ đào ở mắt 14 | Triệu chứng mắt bị viêm màng bồ đào 15 | Cách điều trị viêm màng bồ đào 16 |

Viêm màng bồ đào là gì?

Theo cấu tạo của mắt, màng bồ đào gồm ba phần đó là mống mắt, thể mi và hắc mạch. Đây cũng là nơi chứa nhiều mạch máu, bao gồm các tĩnh mạch và động mạch đưa máu nuôi dưỡng mắt. 17 | Bệnh viêm màng bổ đào xảy ra ở mọi lứa tuổi Viêm màng bồ đào là tình trạng viêm ở bất kỳ vị trí nào trong lớp có sắc tố bên trong mắt (màng bồ đào). 18 | Bệnh có thể gây ảnh hưởng đến thủy tinh thể, võng mạc, các dây thần kinh thị giác. (1) 19 |

Cấu tạo màng bồ đào

Màng bồ đào bao gồm 3 cấu trúc: mống mắt, thể mi và hắc mạc. 20 | Mống mắt 21 | : vòng màu xung quanh con ngươi đen, mở ra và đóng lại để cho nhiều hoặc ít ánh sáng vào mắt, giống như cửa trập trong máy ảnh. 22 | Thể mi: 23 | là tập hợp các cơ, bằng cách co lại, cho phép thủy tinh thể trở nên dày hơn để mắt có thể tập trung vào các vật thể ở gần. Khi giãn, cơ thể mi giúp thủy tinh thể mỏng hơn để mắt có thể tập trung vào các vật thể ở xa. Quá trình này được gọi là điều tiết. 24 | Hắc mạc 25 | : kéo dài từ rìa thể mi đến dây thần kinh thị giác ở phía sau của mắt. Hắc mạc nằm giữa võng mạc ở bên trong và củng mạc ở bên ngoài. Hắc mạc chứa cả tế bào sắc tố và mạch máu nuôi dưỡng các bộ phận bên trong mắt, đặc biệt là võng mạc. 26 |

Phân loại viêm màng bồ đào

Một phần hoặc toàn bộ màng bồ đào có thể bị viêm. Viêm giới hạn ở một phần của màng bồ đào được đặt tên theo vị trí của nó: 27 | Viêm màng bồ đào trước là tình trạng viêm ở phía trước của màng bồ đào, bao gồm cả mống mắt. 28 | Viêm màng bồ đào trung gian là tình trạng viêm ở giữa màng bồ đào và thường liên quan đến chất giống như lòng trắng trứng lấp đầy nhãn cầu (được gọi là pha lê thể). 29 | Viêm màng bồ đào sau là tình trạng viêm ở phía sau của màng bồ đào và có thể liên quan đến võng mạc và hắc mạc. 30 | Viêm toàn màng bồ đào là tình trạng viêm ảnh hưởng đến toàn bộ màng bồ đào. 31 | Trong số 4 loại viêm màng bồ đào, 3 loại viêm là viêm màng bồ đào giữa, sau và toàn phần có thể gây những biến chứng nguy hiểm hơn so với viêm màng bồ đào trước. 32 | Đôi khi viêm màng bồ đào được gọi bằng tên của bộ phận cụ thể bị viêm chằng hạn viêm mống mắt, viêm hắc mạc… Viêm màng bồ đào chỉ giới hạn trên một mắt ở nhiều người, nhưng có thể liên quan đến cả hai mắt. 33 |

Nguyên nhân gây bệnh viêm màng bồ đào ở mắt

Nguyên nhân gây viêm màng bồ đào có thể chỉ giới hạn ở mắt hoặc do các rối loạn ảnh hưởng đến toàn bộ cơ thể trong đó có mắt. Đa phần người mắc bệnh đều không xác định được nguyên nhân (gọi là viêm màng bồ đào vô căn hoặc viêm màng bồ đào không rõ nguyên nhân). 34 | Mắt đỏ do viêm màng bồ đào khác với đau mắt đỏ là có vùng rìa của lòng đen cũng bị đỏ Nhiều người bị viêm màng bồ đào kèm theo rối loạn các cơ quan ở những nơi khác trong cơ thể. Chúng bao gồm các bệnh viêm nhiễm, chẳng hạn như hội chứng Behçet, viêm cột sống dính khớp, viêm khớp tự phát ở trẻ vị thành niên, bệnh sarcoidosis, viêm khớp phản ứng, bệnh viêm ruột (bệnh Crohn và viêm loét đại tràng), bệnh Vogt-Koyanagi-Harada. 35 | Một số người bị nhiễm trùng lan rộng, chẳng hạn như bệnh lao, bệnh giang mai hoặc bệnh Lyme. 36 | Các nguyên nhân có thể khác bao gồm nhiễm trùng có thể chỉ ảnh hưởng đến mắt, chẳng hạn như nhiễm trùng herpes (do virus herpes simplex), bệnh zona (do virus varicella-zoster), bệnh toxoplasmosis và cytomegalovirus. Cytomegalovirus chủ yếu xảy ra ở những người có hệ thống miễn dịch bị tổn thương, chẳng hạn như những người bị nhiễm vi rút HIV hoặc những người dùng thuốc ức chế hệ thống miễn dịch. 37 | Chấn thương mắt là nguyên nhân phổ biến của viêm màng bồ đào trước. 38 | Mặc dù hiếm gặp, một số loại thuốc (như pamidronate, rifabutin, kháng sinh sulfonamide, cidofovir) có thể gây viêm màng bồ đào. (2) 39 |

Triệu chứng mắt bị viêm màng bồ đào

Các triệu chứng ban đầu của viêm màng bồ đào có thể nhẹ hoặc nặng, tùy thuộc vào phần nào của màng bồ đào bị ảnh hưởng. 40 | Bệnh có thể gây suy giảm thị lực và nhìn thấy các đốm đen bất thường Viêm màng bồ đào trước 41 | : Đau dữ dội ở mắt, mắt đỏ, đau hơn khi tiếp xúc với ánh sáng chói và giảm thị lực là triệu chứng điển hình. Bác sĩ có thể nhìn thấy các mạch máu nổi rõ trên bề mặt của mắt gần rìa giác mạc, các tế bào trôi nổi ở phần trước của mắt (thủy dịch) và lắng đọng trên bề mặt bên trong của giác mạc. 42 | Viêm màng bồ đào trung gian 43 | thường không đau. Thị lực có thể bị giảm và người bệnh có thể nhìn thấy các đốm đen bất thường (ruồi bay). 44 | Viêm màng bồ đào sau 45 | thường gây giảm thị lực và có ruồi bay. Dây thần kinh thị giác có thể bị viêm, gây mất thị lực, có thể thay đổi từ một điểm mù nhỏ đến mù toàn bộ. 46 | Viêm toàn màng bồ đào 47 | có thể kết hợp các triệu chứng này. (3) 48 | Viêm màng bồ đào có thể nhanh chóng làm hỏng mắt. Nó có thể gây ra các biến chứng lâu dài, đe dọa đến thị lực, chẳng hạn như phù điểm vàng, tổn thương võng mạc, tăng nhãn áp và đục thủy tinh thể. Nhiều người chỉ bị một đợt viêm màng bồ đào, những người khác bị tái phát định kỳ trong nhiều tháng đến nhiều năm hoặc viêm mãn tính cần điều trị lâu dài. 49 |

Cách điều trị viêm màng bồ đào

Điều trị viêm màng bồ đào phải bắt đầu sớm để ngăn ngừa tổn thương vĩnh viễn. Điều trị hầu như luôn bao gồm corticosteroid, thường được dùng dưới dạng thuốc nhỏ mắt. Corticosteroid cũng có thể được dùng bằng đường uống hoặc tiêm vào hoặc xung quanh mắt. Thuốc làm giãn đồng tử, chẳng hạn như thuốc nhỏ homatropine hoặc cyclopentolate, cũng được sử dụng. 50 | Các loại thuốc khác có thể được sử dụng để điều trị các nguyên nhân cụ thể của viêm màng bồ đào. Ví dụ, nếu nguyên nhân là do nhiễm trùng, thì có thể dùng thuốc để loại bỏ sinh vật lây nhiễm. (4) 51 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội Hotline: 024 3872 3872 – 024 7106 6858 TP.HCM: 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh Hotline: 0287 102 6789 – 093 180 6858 Fanpage: https://www.facebook.com/benhvientamanh Website: https://tamanhhospital.vn Đôi khi, các phương pháp điều trị viêm màng bồ đào khác là cần thiết, chẳng hạn như phẫu thuật, sử dụng tia laser, hoặc các loại thuốc uống hoặc tiêm qua tĩnh mạch hoặc vào da làm ức chế hệ thống miễn dịch (thuốc ức chế miễn dịch). 52 | -------------------------------------------------------------------------------- /corpus/roi-loan-nhip-cham: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/roi-loan-nhip-cham/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Tim mạch > 6 | Rối loạn nhịp chậm: Nguyên nhân, triệu chứng, chẩn đoán và điều trị 7 |

Rối loạn nhịp chậm: Nguyên nhân, triệu chứng, chẩn đoán và điều trị

8 | Rối loạn nhịp chậm nếu không được can thiệp xử trí kịp thời và đúng cách có thể dẫn đến hoa mắt, chóng mặt… Trường hợp nặng có thể dẫn đến ngất xỉu do thiếu máu lên não, thậm chí gây tử vong. Tìm hiểu về tình trạng rối loạn nhịp tim chậm ngay trong bài viết dưới đây. Nhịp tim là số lần co bóp của tim trong 1 phút. Tốc độ này thay đổi tùy theo hoạt động, phản ứng cảm xúc của cơ thể. Một trái tim khỏe mạnh với nhịp tim phù hợp sẽ giúp cung cấp một lượng máu đầy đủ để nuôi các cơ quan trong cơ thể. 9 |

Mục lục

10 | Rối loạn nhịp tim chậm là gì? 11 | Nguyên nhân dẫn đến nhịp tim chậm 12 | Triệu chứng của rối loạn nhịp tim chậm 13 | Chẩn đoán rối loạn nhịp chậm 14 | Phương pháp điều trị rối loạn nhịp tim 15 | Chăm sóc bệnh nhân rối loạn nhịp chậm 16 |

Rối loạn nhịp tim chậm là gì?

Rối loạn nhịp chậm là tình trạng nhịp tim dưới 60 lần/phút lúc nghỉ ngơi. Trong khi đó,nhịp tim của người bình thường là nhịp xoang, nhịp tim này được chỉ huy bởi nút xoang vốn là nút tạo nhịp chính của tim. Nhịp tim của người bình thường dao động từ 60 – 100 lần/phút lúc nghỉ. (1)
Xem thêm: Rối loạn nhịp tim là gì? 17 |
18 |

Nguyên nhân dẫn đến nhịp tim chậm

BS.CKI Phạm Thanh Bình, Trung tâm Tim mạch, Bệnh viện Đa khoa Tâm Anh TP.HCM cho biết, tim sẽ đập chậm hơn trong các trường hợp sau: (2) Suy giảm chức năng nút tạo nhịp của tim (suy nút xoang). Sự dẫn truyền nhịp trong tim bị bất thường (nghẽn đường dẫn truyền). “Tuy nhiên, nhịp tim chậm không phải lúc nào cũng là vấn đề bất thường. Một số người có nhịp tim chậm nhưng không phải là bệnh lý, chẳng hạn như các vận động viên, hoặc nhịp tim người khi đang ngủ”, bác sĩ Bình cho biết thêm. Một số loại thuốc có thể gây ra nhịp tim chậm, đặc biệt là thuốc dùng để điều trị các bệnh lý khác của tim như thuốc điều trị tăng huyết áp, thuốc điều trị suy tim… Trong một số trường hợp, nhịp tim chậm cũng là bệnh lý. Nguyên nhân này có thể là do: Hệ thống tạo nhịp tim (nút xoang) bất thường. Lão hóa mô tim. Suy giảm hoặc tổn thương hệ thống đường dẫn truyền nhịp trong tim. Bệnh tim bẩm sinh. Bệnh mạch vành tim. Sau phẫu thuật tim. Nhiễm trùng nặng. Ngưng thở khi ngủ. Rối loạn điện giải. Suy giáp. Bệnh miễn dịch (bệnh Lupus ban đỏ hệ thống…). 19 |

Triệu chứng của rối loạn nhịp tim chậm

Thông thường, một số bệnh nhân rối loạn nhịp chậm có thể không có triệu chứng gì, hoặc các triệu chứng nhẹ, mơ hồ. Tuy nhiên, một số trường hợp khác bệnh nhân có thể có các triệu chứng như: Choáng váng hoặc chóng mặt; Ngất xỉu hoặc cảm giác sẽ sắp ngất; Cảm thấy mệt mỏi, yếu sức, giảm khả năng gắng sức; Nặng ngực, tức ngực, khó chịu vùng ngực; Khó thở; Suy giảm trí nhớ; Ăn ít hơn bình thường hoặc tỏ ra mệt mỏi (nhất là ở trẻ sơ sinh). 20 | Choáng váng và chóng mặt là một trong những triệu chứng của rối loạn nhịp chậm BS.CKI Phạm Thanh Bình khuyến cáo, khi bản thân bệnh nhân hoặc người thân có các dấu hiệu rối loạn nhịp chậm kể trên cần đến ngay cơ sở y tế để được kiểm tra, tìm ra nguyên nhân chính xác. Đây là việc làm hết sức cần thiết, góp phần tìm ra hướng điều trị an toàn, kịp thời và hiệu quả. 21 |

Chẩn đoán rối loạn nhịp chậm

Khi bác sĩ nghi ngờ bệnh nhân có dấu hiệu của rối loạn nhịp chậm, bác sĩ sẽ hỏi thăm bệnh sử, tìm các triệu chứng và tiến hành thăm khám, kiểm tra. Trong quá trình thăm khám, bác sĩ sẽ kiểm tra mạch và nghe nhịp tim của bệnh nhân. (3) Để biết được hoạt động điện cơ bản của tim bệnh nhân, bác sĩ sẽ chỉ định bệnh nhân đo điện tâm đồ (ECG). Tuy nhiên, việc đo ECG chỉ ghi được hoạt động điện tim trong thời gian ngắn. Để theo dõi nhịp tim của bệnh nhân trong thời gian dài hơn như một ngày hoặc nhiều ngày, bác sĩ sẽ chỉ định bệnh nhân đo điện tim liên tục trong thời gian dài (Holter ECG ). Khi bệnh nhân đeo Holter ECG, bệnh nhân vẫn có thể sinh hoạt như bình thường. Khuyến cáo bệnh nhân nên ghi lại các triệu chứng xảy ra trong suốt quá trình gắn Holter ECG, dựa vào đó bác sĩ sẽ có cơ sở giúp việc chẩn đoán bệnh chính xác, đưa ra hướng điều trị thích hợp và hiệu quả. 22 | Khi đeo Holter ECG bệnh nhân vẫn có thể hoạt động bình thường Sau khi bác sĩ biết chắc chắn bệnh nhân đã mắc chứng rối loạn nhịp chậm, bác sĩ có thể yêu cầu bệnh nhân làm thêm các cận lâm sàng để tìm nguyên nhân, bao gồm: Xét nghiệm máu; Siêu âm tim; Đo nồng độ thuốc làm ảnh hưởng đến nhịp tim (nếu có). Khảo sát điện sinh lý để đánh giá khả năng hoạt động của nút xoang, đường dẫn truyền… 23 |

Phương pháp điều trị rối loạn nhịp tim

BS.CKI Phạm Thanh Bình cho biết, việc điều trị rối loạn nhịp chậm sẽ tùy thuộc vào các triệu chứng và nguyên nhân gây ra bệnh. Nếu bệnh có nhịp chậm nhưng xuất phát từ thay đổi sinh lý bất thường (như vận động viên, nhịp chậm khi ngủ…) thì việc điều trị và can thiệp thường không cần thiết. (4) Nếu nhịp chậm do nguyên nhân từ việc dùng thuốc điều trị bệnh khác, bác sĩ có thể thay đổi, điều chỉnh lại liều lượng hoặc chỉ định bệnh nhân ngừng sử dụng một số loại thuốc gây ra tình trạng nhịp tim chậm. Một số bệnh nhân bị rối loạn nhịp chậm có triệu chứng, hoặc nhịp chậm do bệnh lý nặng không hồi phục được sẽ cần được điều trị bằng cách cấy một thiết bị gọi là “máy tạo nhịp tim”. Máy tạo nhịp tim được cấy nằm dưới da gần vùng tim của người bệnh. Máy tạo nhịp sẽ phát xung động, giúp nhịp tim bình thường trở lại. 24 | Máy tạo nhịp tim được cấy cố định vào thành tim để phát xung động cho tim hoạt động bình thường 25 |

Chăm sóc bệnh nhân rối loạn nhịp chậm

Để có thể khôi phục lại nhịp tim về mức bình thường, bên cạnh việc thăm khám định kỳ, tuân thủ đúng phác đồ điều trị của bác sĩ tim mạch, bệnh nhân rối loạn nhịp chậm cần chú ý kết hợp các biện pháp được khuyến cáo sau: Từ bỏ những thói quen xấu có hại cho sức khỏe tim mạch như thói quen rượu bia, hút thuốc lá thường xuyên… Có chế độ dinh dưỡng khoa học, bổ sung các loại thực phẩm tốt cho tim mạch như rau xanh, cá hồi, hạn chế mỡ động vật và các nguồn nhiều cholesterol như trứng, sữa béo,… Tăng cường các hoạt động thể chất, tập thể dục, chơi thể thao phù hợp. Chú ý cân bằng công việc, cũng như cân bằng cuộc sống, tránh áp lực, căng thẳng. Bên cạnh đó, việc thăm khám tầm soát sớm các bệnh lý tim mạch đóng vai trò rất quan trọng, giúp bệnh nhân phát hiện sớm các yếu tố nguy cơ bệnh lý, có biện pháp bảo vệ cơ thể tránh khỏi những biến chứng nặng nề cho sức khỏe. 26 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 27 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 28 | Hotline: 024 3872 3872 – 024 7106 6858 29 | TP.HCM: 30 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 31 | Hotline: 093 180 6858 – 0287 102 6789 32 | Fanpage: 33 | https://www.facebook.com/benhvientamanh Website: 34 | https://tamanhhospital.vn Rối loạn nhịp chậm có thể dẫn đến nhiều biến chứng nguy hiểm cho bệnh nhân, do đó BS.CKI Phạm Thanh Bình khuyến cáo bệnh nhân nên đến ngay cơ sở y tế khi có những dấu hiệu bất thường để được chẩn đoán chính xác và can thiệp kịp thời. 35 | -------------------------------------------------------------------------------- /corpus/ngoai-tam-thu-that: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/ngoai-tam-thu-that/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Tim mạch > 6 | Ngoại tâm thu thất: Nguyên nhân, triệu chứng, chẩn đoán, phòng ngừa 7 |

Ngoại tâm thu thất: Nguyên nhân, triệu chứng, chẩn đoán, phòng ngừa

8 | Ngoại tâm thu thất là một trong các nguyên nhân phổ biến nhất gây ra tình trạng nhịp tim không đều. Nếu bệnh nhân không có các bệnh lý tim mạch khác kèm theo, ngoại tâm thu thất thường không dẫn tới biến chứng nghiêm trọng. Ngược lại, cần điều trị bệnh triệt để nhằm phòng ngừa biến chứng loạn nhịp tim. 9 | Có nhiều nguyên nhân dẫn tới tình trạng loạn nhịp tim, trong đó có ngoại tâm thu thất 10 |

Mục lục

11 | Ngoại tâm thu thất là gì? 12 | Triệu chứng ngoại tâm thu thất 13 | Nguyên nhân gây ngoại tâm thu thất 14 | Ngoại tâm thu thất có nguy hiểm không? 15 | Phương pháp chẩn đoán 16 | Phương pháp điều trị ngoại tâm thu thất 17 | Phòng ngừa ngoại tâm thu thất 18 |

Ngoại tâm thu thất là gì?

Ngoại tâm thu thất là hiện tượng nhịp tim đập quá sớm do tâm thất tự động phát nhịp, làm rối loạn nhịp bình thường của tim. Trái tim bị ngoại tâm thu thất sẽ có một nhịp bình thường, một nhịp phụ, một khoảng dừng nhẹ, sau đó là một nhịp mạnh hơn bình thường. Tim phải nạp nhiều máu hơn trong thời gian tạm dừng, tạo thêm lực cho nhịp đập tiếp theo. Quy trình này có thể xảy ra ngẫu nhiên hoặc lặp lại với tần suất xác định. (1) 19 |

Triệu chứng ngoại tâm thu thất

Ở giai đoạn nhẹ, các cơn ngoại tâm thu thất thường ít biểu hiện triệu chứng hoặc không có triệu chứng. Khi bệnh tiến triển nặng hơn có thể gây ra cảm giác bất thường ở ngực, đánh trống ngực, cảm giác hụt nhịp, nghẹn cổ họng, thắt nghẹn vùng ngực, nhịp bị bỏ qua, rớt nhịp; kèm theo đó là tình trạng chóng mặt, đau và khó chịu ở ngực… Nếu bạn xuất hiện bất kỳ triệu chứng nào nêu trên, hãy đến gặp bác sĩ tim mạch để được tư vấn, thăm khám và thực hiện các kiểm tra chẩn đoán phù hợp. 20 |

Nguyên nhân gây ngoại tâm thu thất

Mọi người ở mọi lứa tuổi đều có thể gặp những cơn ngoại tâm thu thất. Trong hầu hết các trường hợp ngoại tâm thu thất không thường xuyên, nguyên nhân cơ bản không thể xác định được. Trong khi đó, với những cơn ngoại tâm thu thất lặp lại, nguyên nhân thường do: (2) Một số loại thuốc như thuốc thông mũi, thuốc kháng histamine… Lạm dụng rượu hoặc ma túy Chất kích thích như caffeine, thuốc lá Tăng mức adrenaline trong cơ thể do tập thể dục gắng sức hoặc lo lắng thái quá Cơ tim bị tổn thương do các bệnh lý như tim bẩm sinh, bệnh mạch vành, suy tim, bệnh cơ tim… Một số rối loạn nội tiết như cường giáp 21 | Lạm dụng rượu bia, caffein, thuốc lá làm tăng nguy cơ xuất hiện cơn ngoại tâm thu thất 22 |

Ngoại tâm thu thất có nguy hiểm không?

Bản thân các cơn ngoại tâm thu thất có thể là biểu hiện của các bệnh lý tim mạch nghiêm trọng như suy tim, bệnh mạch vành…, vốn là các bệnh lý có nguy cơ gây tử vong. Mặt khác, ngoại tâm thu thất quá nhiều, lâu ngày sẽ làm giảm chức năng tim dẫn đến suy tim. (3) 23 |

Phương pháp chẩn đoán

Để chẩn đoán ngoại tâm thu thất, bác sĩ sẽ cần hỏi các thông tin về triệu chứng, tiền sử bệnh, các loại thuốc người bệnh đang dùng cũng như lối sống. Quá trình thăm khám bao gồm hỏi bệnh sử và nghe tim. Sau đó, bác sĩ có thể chỉ định thực hiện thêm một số kiểm tra cận lâm sàng quan trọng để chẩn đoán ngoại tâm thu thất, bao gồm: (4) Điện tâm đồ (ECG hoặc EKG): Đây là kiểm tra cận lâm sàng giúp ghi lại hoạt động điện của tim, cho biết tim có đập quá nhanh hoặc quá chậm hay không. Quá trình ghi điện tâm đồ thường chỉ kéo dài vài phút và không gây đau đớn hay khó chịu cho bệnh nhân. Điện tâm đồ 24-48h: Một số bệnh nhân sẽ được chỉ định theo dõi điện tim liên tục tại nhà nhằm tăng khả năng phát hiện ngoại tâm thu thất, nhất là những trường hợp ngoại tâm thu xảy ra không thường xuyên. Bệnh nhân sẽ được đeo một thiết bị theo dõi điện tim liên tục trong vòng 24-48h hoặc dài ngày hơn. Thông tin sau đó sẽ được các bác sĩ tổng hợp và phân tích để đưa ra chẩn đoán chính xác nhất. Nghiệm pháp gắng sức điện tim: Bạn được yêu cầu đi bộ trên thảm lăn song song với đo điện tim liên tục. Nghiệm pháp này thường giúp phát hiện một số loạn nhịp tim liên quan đến gắng sức. 24 | Bệnh nhân tiến hành nghiệm pháp gắng sức điện tim khi có nghi ngờ ngoại tâm thu thất 25 |

Phương pháp điều trị ngoại tâm thu thất

Hầu hết bệnh nhân ngoại tâm thu thất thể nhẹ với triệu chứng ít thường không cần điều trị. Tuy nhiên, người bệnh cần được tái khám định kỳ để theo dõi diễn tiến của bệnh. Mặt khác, những bệnh nhân có ngoại tâm thu thất nhiều, triệu chứng nặng hoặc ngoại tâm thu thất do bệnh tim nặng sẽ cần được điều trị. Trong trường hợp này, bác sĩ có thể sử dụng một số thuốc làm chậm nhịp tim hoặc các thuốc chống loạn nhịp tim. Trong nhiều trường hợp khi người bệnh không đáp ứng với thuốc hoặc không muốn dùng thuốc, các bác sĩ có thể thực hiện can thiệp triệt tiêu ổ phát nhịp trong tâm thất thông qua sóng radio cao tần với tỷ lệ thành công khá cao. Trong mọi trường hợp, bệnh nhân đều được khuyến cáo thay đổi lối sống, nghỉ ngơi giảm stress, tránh xa thuốc lá, rượu bia và các chất kích thích. 26 |

Phòng ngừa ngoại tâm thu thất

Để phòng ngừa các cơn ngoại tâm thu thất và cải thiện sức khỏe tim mạch, bạn nên: Ghi nhật ký: Nếu bạn thường xuyên gặp phải cơn ngoại tâm thu thất, hãy ghi nhật ký trong ngày về thời điểm xuất hiện triệu chứng bệnh. Việc làm này giúp xác định những loại thực phẩm, đồ uống hoặc các hoạt động là tác nhân thúc đẩy gây ngoại tâm thu thất, từ đó phòng ngừa hiệu quả. Hạn chế sử dụng chất kích thích: Caffeine, rượu bia, thuốc lá và các chất kích thích khiến cơn ngoại tâm thu thất xảy đến nhiều hơn. Vì thế, hạn chế hoặc tránh sử dụng những chất này sẽ góp phần giảm bớt triệu chứng của ngoại tâm thu thất. Kiểm soát căng thẳng: Lo lắng, căng thẳng thường xuyên có thể kích hoạt nhịp tim không đều. Vì thế, bạn cần học cách cân bằng cảm xúc và loại bỏ stress khỏi cuộc sống. Chuyên khoa Loạn nhịp và Điện sinh lý tim, Trung tâm tim mạch Bệnh viện Đa khoa Tâm Anh chẩn đoán và điều trị các bệnh lý về rối loạn nhịp tim như rung nhĩ, rối loạn nhịp nhanh, rối loạn nhịp chậm, suy nút xoang, ngoại tâm thu thất… bằng các kỹ thuật hiện đại như cắt đốt qua catheter; đặt máy tạo nhịp (1 buồng, 2 buồng), máy phá rung cấy được (ICD), máy tái đồng bộ tim (CRT-P; CRT-D)… Trung tâm quy tụ đội ngũ y bác sĩ giàu kinh nghiệm và được trang bị hệ thống máy móc tân tiến, giúp chẩn đoán chính xác và hỗ trợ bác sĩ lựa chọn phương pháp điều trị phù hợp với từng bệnh nhân. 27 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 28 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 29 | Hotline: 024 3872 3872 – 024 7106 6858 30 | TP.HCM: 31 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 32 | Hotline: 093 180 6858 – 0287 102 6789 33 | Fanpage: 34 | https://www.facebook.com/benhvientamanh Website: 35 | https://tamanhhospital.vn Ngoại tâm thu thất nếu chỉ tồn tại riêng lẻ thì không phải bệnh lý nguy hiểm tính mạng. Nhưng khi có một bệnh tim mạch khác đi kèm, nó có thể gây ra biến chứng nghiêm trọng nếu không được kiểm soát tốt. Điều quan trọng là cần xác định nguyên nhân khiến các cơn ngoại tâm thu thất xuất hiện, từ đó có biện pháp điều trị và phòng ngừa hiệu quả. 36 | -------------------------------------------------------------------------------- /corpus/benh-tui-thua-dai-trang: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/benh-tui-thua-dai-trang/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Tiêu hóa - Gan mật > 6 | Bệnh túi thừa đại tràng: Nguyên nhân, phòng ngừa, điều trị 7 |

Bệnh túi thừa đại tràng: Nguyên nhân, phòng ngừa, điều trị

8 | Bệnh lý túi thừa đại tràng rất phổ biến và trở nên nghiêm trọng khi các túi thừa bị biến chứng như viêm, xuất huyết, thủng. Người bệnh sẽ gặp phải các triệu chứng đau bụng dữ dội, sốt, tiêu chảy, đi cầu máu – ThS.BS. Ngô Hoàng Kiến Tâm cho biết. 9 |

Mục lục

10 | Viêm túi thừa đại tràng 11 | Các triệu chứng viêm túi thừa 12 | Nguyên nhân của bệnh túi thừa và viêm túi thừa 13 | Các yếu tố làm tăng nguy cơ mắc bệnh viêm túi thừa 14 | Các biến chứng của bệnh viêm túi thừa 15 | Viêm túi thừa được chẩn đoán như thế nào? 16 | Phương pháp điều trị bệnh viêm túi thừa 17 | Chăm sóc tại nhà nếu viêm túi thừa 18 | Biện pháp phòng ngừa bệnh viêm túi thừa 19 |

Viêm túi thừa đại tràng 20 |

Túi thừa đại tràng là gì: Túi thừa là những túi nhỏ, phồng lồi ra bên ngoài thành đại tràng. Túi thừa có thể xảy ra bất cứ nơi nào ở đại tràng nhưng phổ biến nhất là ở gần cuối của đại tràng phía bên trái (đại tràng chậu hông). Bệnh túi thừa thường gặp, đặc biệt là sau 40 tuổi. Viêm túi thừa đại tràng là gì: Viêm túi thừa là tình trạng túi thừa bị viêm nhiễm và các mô xung quanh túi thừa sưng phù nề. Viêm túi thừa có thể diễn tiến gây các biến chứng như xuất xuất, thủng gây đau bụng dữ dội, sốt, buồn nôn, tiêu chảy, đi cầu máu. 21 | Viêm túi thừa thường xảy ra ở độ tuổi trên 40 Viêm túi thừa nhẹ có thể được điều trị bằng việc thay đổi chế độ ăn uống như ăn thực phẩm giàu chất xơ, dùng thuốc chống co thắt cơ hoặc thuốc kháng sinh. Trường hợp viêm túi thừa nặng gây biến chứng hoặc tái phát, người bệnh có thể phải phẫu thuật. 22 |

Các triệu chứng viêm túi thừa 23 |

Đa số bệnh nhân bị bệnh túi thừa đại tràng không có triệu chứng. Khoảng 20% ​​bệnh nhân có một số triệu chứng: Đau bụng nhiều kèm sốt (khi túi thừa bị thủng) Chướng bụng, đầy hơi Buồn nôn và ói mửa Táo bón hoặc tiêu chảy Đi cầu máu (khi túi thừa bị xuất huyết) Tiểu ra phân, khí (khi túi thừa bị viêm lâu ngày gây rò bàng quang – đại tràng) 24 |

Nguyên nhân của bệnh túi thừa và viêm túi thừa 25 |

Giả thuyết được phần lớn các chuyên gia chấp nhận tại sao hình thành túi thừa đó là do tăng áp lực trong lòng đại tràng, do chế độ ăn ít chất xơ làm những vùng yếu của thành đại tràng bị lồi ra và hình thành những túi thừa. 26 | Viêm túi thừa xảy ra khi túi thừa bị rách, dẫn đến viêm và trong một số trường hợp, nhiễm trùng. 27 |

Các yếu tố làm tăng nguy cơ mắc bệnh viêm túi thừa 28 |

Một số yếu tố có thể làm tăng nguy cơ phát triển bệnh viêm túi thừa như: Tuổi càng lớn Ít vận động Chế độ ăn ít chất xơ Một số loại thuốc như thuốc hạ huyết áp, thuốc lợi tiểu và thuốc giảm đau gây ngủ có thể làm tăng táo bón và làm tăng áp lực trong lòng đại tràng. Bất kỳ những yếu tố gây tăng áp lực đều có thể dẫn đến sự hình thành của đa túi thừa. 29 |

Các biến chứng của bệnh viêm túi thừa 30 |

Bác sĩ Kiến Tâm cho biết, biến chứng thường xảy ra khi viêm túi thừa cấp tính. Khoảng 25% những người bị viêm túi thừa cấp tính phát triển các biến chứng. Các biến chứng của túi thừa bao gồm chảy máu, hẹp lòng đại tràng làm cho phân khó đi qua, hình thành một đường nối với cơ quan khác hoặc ra da (gọi là rò). Nếu có rò thì thường là rò đại tràng với bàng quang hoặc cũng có thể rò đại tràng ra da, vòi tử cung, âm đạo hoặc phần khác của ruột. Ngoài ra, các biến chứng khác có thể xuất hiện như: Áp xe vùng chậu do vỡ túi thừa. Viêm phúc mạc có thể xảy ra nếu túi thừa bị viêm nặng, vỡ túi thừa, làm tràn dịch ruột, phân vào khoang bụng. Viêm phúc mạc thường cần phải phẫu thuật cấp cứu. 31 |

Viêm túi thừa được chẩn đoán như thế nào? 32 |

Túi thừa đại tràng thường không gây ra triệu chứng và thường được phát hiện trong quá trình nội soi đại tràng. Bệnh cũng có thể được chẩn đoán bằng CT scan bụng chậu hoặc X-quang đại tràng cản quang. Trong một đợt viêm túi thừa cấp, CT scan có thể được sử dụng để chẩn đoán mức độ nhiễm trùng. 33 |

Phương pháp điều trị bệnh viêm túi thừa 34 |

Những bệnh nhân mắc bệnh túi thừa không có triệu chứng được khuyên ăn chế độ nhiều chất xơ.
Hầu hết các trường hợp viêm túi thừa có thể được điều trị với kháng sinh. Viêm túi thừa với biến chứng áp xe có thể được điều trị với kháng sinh và dẫn lưu. Phẫu thuật cho bệnh túi thừa được chỉ định trong các tình huống sau: 35 | Viêm túi thừa vỡ dẫn đến mủ và phân chảy vào trong ổ bụng gây viêm phúc mạc. Bệnh thường nặng và cần phải mổ cấp cứu Áp xe dẫn lưu không hiệu quả. Trường hợp nặng của viêm túi thừa không đáp ứng điều trị nội khoa. Cần thiết điều trị tích cực ở bệnh nhân có cơ địa suy giảm miễn dịch như bệnh nhân sau ghép tạng hoặc hoá trị. Viêm túi thừa gây hẹp đại tràng hoặc rò. Bệnh nhân có nhiều đợt viêm tái phát có thể chỉ định phẫu thuật như một chiến lược để phòng ngừa tái phát.
Mục tiêu của phẫu thuật là giải quyết ổ nhiễm trùng: cắt túi thừa, cắt đoạn đại tràng, dẫn lưu áp xe, rửa bụng…
Xu hướng của thế giới hiện nay là phẫu thuật nội soi. Ưu điểm nổi bật của phẫu thuật nội soi so với mổ mở là ít đau, giảm tỷ lệ nhiễm trùng vết mổ, thời gian phục hồi nhanh hơn. 36 | Phẫu thuật nội soi là phương pháp điều trị phổ biến hiện nay 37 |

Chăm sóc tại nhà nếu viêm túi thừa 38 |

Người bệnh cần nghỉ ngơi, tĩnh dưỡng, ăn thức ăn lỏng, tránh vận động mạnh. Thường sau vài ngày các triệu chứng sẽ được cải thiện, người bệnh có thể ăn thêm nhiều loại thực phẩm giàu chất xơ như ngũ cốc nguyên hạt, rau quả, trái cây. 39 |

Biện pháp phòng ngừa bệnh viêm túi thừa 40 |

Khi túi thừa được hình thành nó sẽ tồn tại vĩnh viễn, do đó không có phương pháp điều trị nào để phòng ngừa bệnh túi thừa. Tuy nhiên, chúng ta có thể ngăn ngừa sự hình thành thêm túi thừa hoặc làm bệnh xấu hơn bằng các biện pháp bao gồm: Luyện tập thể dục đều đặn: Tập thể dục giúp thúc đẩy chức năng bình thường của ruột và giảm áp lực bên trong ruột kết. Do đó, bác sĩ khuyên, mỗi người nên cố gắng tập thể dục ít nhất 30 phút mỗi ngày để rèn luyện thể lực, phòng ngừa bệnh viêm túi thừa cũng như nhiều bệnh tật khác. Ăn nhiều chất xơ: Chế độ ăn nhiều chất xơ làm giảm nguy cơ viêm túi thừa. Do đó, bạn nên ăn nhiều thực phẩm giàu chất xơ như trái cây, rau tươi và ngũ cốc để làm mềm chất thải và giúp chất thải đi qua ruột già nhanh hơn. Uống nhiều nước: Góp phần ngừa tình trạng táo bón. Tránh hút thuốc: Nghiên cứu đã chỉ ra rằng, hút thuốc có liên quan đến tăng nguy cơ viêm túi thừa. Không được trì hoãn việc đi đại tiện: Việc nhịn đại tiện khiến phân bị khô, dồn tắc lại làm tăng áp lực trong ruột già gây ra nguy cơ mắc bệnh túi thừa. Bệnh viêm túi thừa có thể dẫn đến nhiều biến chứng nghiêm trọng đe dọa sức khỏe và tính mạng của người bệnh. Vì vậy chúng ta nên phòng ngừa và khám sức khỏe định kỳ chuyên khoa tiêu hóa nhằm phát hiện bệnh sớm và điều trị, tránh những rủi ro đáng tiếc – ThS.BS. Ngô Hoàng Kiến Tâm khuyên. 41 | Để tìm hiểu nguyên nhân cũng như điều trị bệnh túi thừa đại tràng, bạn hãy đến Hệ thống Bệnh viện Đa khoa Tâm Anh theo địa chỉ liên hệ:
– Hà Nội 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP. Hà Nội Hotline: 024 3872 3872 – 024 7106 6858 – TP.HCM 2B Phổ Quang, P.2, Q.Tân Bình, TP. Hồ Chí Minh Hotline: 0287 102 6789 – 093 180 6858 Fanpage: https://www.facebook.com/benhvientamanh 42 | -------------------------------------------------------------------------------- /corpus/benh-vong-mac-tieu-duong: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/benh-vong-mac-tieu-duong/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Mắt > 6 | Bệnh võng mạc tiểu đường: triệu chứng, chẩn đoán, phòng ngừa 7 |

Bệnh võng mạc tiểu đường: triệu chứng, chẩn đoán, phòng ngừa

8 | Đường huyết cao trong thời gian dài sẽ làm tổn thương các dây thần kinh, gây biến chứng lên tim, mắt, thận… Biến chứng thường gặp ở mắt là bệnh võng mạc tiểu đường. Vậy bệnh võng mạc tiểu đường là gì? Cách điều trị, chẩn đoán, phòng ngừa như thế nào? 9 |

Mục lục

10 | Võng mạc tiểu đường là gì? 11 | Nguyên nhân gây bệnh võng mạc tiểu đường 12 | Các giai đoạn của bệnh võng mạc đái tháo đường 13 | Triệu chứng võng mạc đái tháo đường 14 | Đối tượng nguy cơ mắc bệnh? 15 | Chẩn đoán bệnh như thế nào? 16 | Cách điều trị võng mạc đái tháo đường 17 | Phương pháp phòng ngừa chứng võng mạc tiểu đường 18 |

Võng mạc tiểu đường là gì?

Bệnh võng mạc tiểu đường là một biến chứng bệnh tiểu đường ảnh hưởng đến mắt. Bệnh xảy ra do tổn thương các mạch máu của võng mạc. Lúc đầu, bệnh võng mạc tiểu đường có thể không gây ra triệu chứng hoặc chỉ có dấu hiệu nhẹ về thị lực. Nhưng lâu dài bệnh có thể gây mù lòa. Người bị tiểu đường càng lâu năm càng có nguy cơ cao bị biến chứng mắt. (1) 19 |

Nguyên nhân gây bệnh võng mạc tiểu đường

Đường trong máu tăng cao trong thời gian dài dẫn đến tắc nghẽn các mạch máu nhỏ nuôi dưỡng võng mạc, cắt nguồn cung cấp máu cho võng mạc. Khi đó, mắt sẽ cố gắng phát triển các mạch máu mới. Nhưng những mạch máu mới không phát triển đúng cách và dễ dàng bị rò rỉ. Tổn thương mạch máu ở võng mạc gây ảnh hưởng đến thị lực, nếu không điều trị sớm sẽ gây biến chứng nguy hiểm ở mắt. 20 | Võng mạc bị tổn thương. 21 |

Các giai đoạn của bệnh võng mạc đái tháo đường

Bệnh võng mạc tiểu đường được chia ra 2 giai đoạn. (2) Bệnh lý võng mạc nền (không tăng sinh): đây là giai đoạn đầu của bệnh võng mạc tiểu đường, các mạch máu nhỏ bị rò rỉ, khiến võng mạc sưng lên gây bệnh phù hoàng điểm. Đây là lý do phổ biến nhất khiến người bệnh đái tháo đường mất thị lực. Ngoài ra, các mạch máu trong võng mạc có thể co hẹp gây thiếu máu cục bộ điểm vàng, hay các dịch tiết hình thành trong võng mạc. Những điều này ảnh hưởng đến thị lực của mắt. Bệnh võng mạc tăng sinh: là giai đoạn nặng hơn của bệnh võng mạc tiểu đường. Nó xảy ra khi võng mạc bắt đầu phát triển các mạch máu mới. Các mạch máu mới thường mỏng manh, dễ rỉ máu vào dịch kính. Nếu rò rỉ dịch nhiều sẽ gây mờ.. Những mạch máu mới có thể hình thành các mô sẹo ảnh hưởng tới điểm vàng dẫn đến bong võng mạc. 22 |

Triệu chứng võng mạc đái tháo đường

Người bị bệnh võng mạc tiểu đường thường không có dấu hiệu bất thường trong giai đoạn đầu. Khi bệnh tiến triển nguy hiểm hơn mới thấy rõ các triệu chứng của nó bao gồm: Nhìn mờ. Nhìn thấy những vùng sáng hoặc tối. Khó nhìn vào ban đêm. Thấy màu sắc mờ hoặc nhòe. Tầm nhìn bị thu hẹp. Nếu thấy các dấu hiệu bất thường ở mắt, người bệnh tiểu đường cần đến bệnh viện để được kiểm tra và điều trị kịp thời. 23 |

Đối tượng nguy cơ mắc bệnh?

Bất kỳ bệnh nhân tiểu đường nào cũng có nguy cơ mắc bệnh võng mạc tiểu đường, không ngoại trừ tiểu đường tuýp 1 hay đái tháo đường tuýp 2. Bệnh nhân tiểu đường có nguy cơ bị bệnh võng mạc tiểu đường cao hơn nếu có các yếu tố sau. (3) Người bị tiểu đường lâu năm. Tiểu đường thai kỳ. Lượng đường trong máu cao không kiểm soát tốt. Huyết áp cao. Cholesterol cao. 24 |

Chẩn đoán bệnh như thế nào?

Khi người bệnh tiểu đường nghi ngờ có vấn đề liên quan đến bệnh võng mạc tiểu đường sẽ được bác sĩ chỉ định kiểm tra mắt như sau: Soi đáy mắt: dùng thuốc nhỏ mắt làm giãn nở đồng tử, bác sĩ sẽ nhìn qua một thấu kính đặc biệt để kiểm tra mắt của bạn. Chụp cắt lớp quang học: bác sĩ có thể chụp cắt lớp mạch quang học để quan sát kỹ võng mạc. Hình ảnh chi tiết về độ dày của võng mạc giúp bác sĩ tìm và đo mức độ phù của điểm vàng. Chụp mạch OCT: giúp bác sĩ xem được mạch máu trong võng mạc có tổn thương hay không. Đây là phương pháp mới được thay thế cho phương pháp chụp mạch huỳnh quang, người bệnh không cần tiêm thuốc cản quang. 25 | Phẫu thuật điều trị võng mạc tiểu đường. 26 |

Cách điều trị võng mạc đái tháo đường

Tùy vào tình trạng sức khỏe của mắt, bác sĩ sẽ chọn phương pháp điều trị phù hợp cho từng cá nhân. Tuy nhiên, việc đầu tiên mỗi bệnh nhân tiểu đường cần làm là kiểm soát tốt lượng đường trong máu và huyết áp để ngăn chặn mất thị lực. Đến gặp bác sĩ tiểu đường để được hướng dẫn chế độ ăn uống và vận động phù hợp cho người bệnh tiểu đường. Kiểm soát đường huyết tốt giúp quá trình điều trị hiệu quả hơn. Ngoài ra người bệnh sẽ được bác sĩ mắt chỉ định một trong các phương pháp điều trị sau: (4) Tiêm thuốc vào mắt: thuốc giúp giảm phù điểm vàng, làm chậm quá trình mất thị lực và có thể cải thiện thị lực. Các loại thuốc được sử dụng phổ biến gồm: avastin, eylea, lucentis… Thuốc được tiêm vào mắt, người bệnh có thể tiêm nhiều mũi trong thời gian điều trị. Laser: để giảm sưng ở võng mạc, bác sĩ khoa Mắt sẽ sử dụng tia laser để làm cho các mạch máu co lại và ngừng rò rỉ. Phương pháp laser gọi là phẫu thuật bằng laser tán xạ (đôi khi gọi quang đông võng mạc). Trước khi làm laser bạn sẽ được nhỏ thuốc tê vào mắt, sử dụng một thấu kính đặc biệt và nhắm tia laser vào mắt. Phẫu thuật: cắt bỏ dịch kính được chỉ định với các trường hợp bong võng mạc nhằm sửa các lỗ hổng hoặc vết rách trên võng mạc. Giải quyết xuất huyết dịch kính và chữa các nguồn chảy máu ở võng mạc. Lưu ý: sau phẫu thuật, mắt có thể bị sưng và đỏ trong vài tuần. Khi mắt đang phục hồi, bạn có thể bị đau mắt, thị lực kém hơn trước phẫu thuật. Người bệnh cần tái khám kiểm tra thị lực thường xuyên để đảm bảo mắt đang tiến triển tốt. Sau phẫu thuật người bệnh cần đeo miếng che mắt, sử dụng thuốc nhỏ mắt giảm sưng và ngừa nhiễm trùng, tránh các hoạt động như lái xe, tập thể dục cường độ cao, nâng vật nặng, đi máy bay, du lịch… Nghỉ ngơi ở nhà từ 2 – 4 tuần. 27 |

Phương pháp phòng ngừa chứng võng mạc tiểu đường

Dưới đây là các phương pháp phòng tránh bệnh võng mạc tiểu đường mà nhiều người bệnh nên biết: Kiểm soát đường huyết: giúp duy trì đường huyết ở mức ổn định tránh gây tổn thương đến mạch máu. Thực hiện kiểm soát đường huyết bằng cách: có chế độ ăn uống lành mạnh, hoạt động thể chất phù hợp. Uống thuốc điều trị tiểu đường theo chỉ định của bác sĩ và tái khám thường xuyên. Kiểm tra đường huyết ghi lại lượng đường trong máu nhiều lần trong ngày. Khám mắt thường xuyên: giúp phát hiện sớm những bất thường ở mắt để được điều trị sớm, mang lại kết quả cao, tránh biến chứng nguy hiểm. Giữ huyết áp và cholesterol ở mức an toàn: ăn thực phẩm lành mạnh, tập thể dục thường xuyên. Không hút thuốc lá: hút thuốc lá làm tăng nguy cơ mắc các biến chứng tiểu đường bao gồm cả bệnh võng mạc. Chú ý đến mắt: nếu phát hiện các dấu hiệu bất thường ở mắt nên đến gặp bác sĩ Mắt đề được thăm khám sớm. 28 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 29 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 30 | Hotline: 024 3872 3872 – 024 7106 6858 31 | TP.HCM: 32 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 33 | Hotline: 093 180 6858 – 0287 102 6789 34 | Fanpage: 35 | https://www.facebook.com/benhvientamanh Website: 36 | https://tamanhhospital.vn Bệnh võng mạc tiểu đường là một trong những biến chứng do đường huyết tăng cao trong thời gian dài. Do đó, việc kiểm soát tốt đường huyết rất quan trọng để bảo vệ sức khỏe. Thăm khám mắt thường xuyên là một trong những cách giúp bảo vệ mắt khỏe. 37 | -------------------------------------------------------------------------------- /corpus/nhan-tuyen-giap: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/nhan-tuyen-giap/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Nội tiết > 6 | Bệnh nhân tuyến giáp: Dấu hiệu, nguyên nhân, chẩn đoán và điều trị 7 |

Bệnh nhân tuyến giáp: Dấu hiệu, nguyên nhân, chẩn đoán và điều trị

8 | Các tế bào nang tuyến giáp tăng sản tạo thành nhân tuyến giáp. Phần lớn, nhân tuyến giáp lành tính (90%), chỉ một tỷ lệ nhỏ nhân giáp là nhân ác tính. 9 |

Mục lục

10 | Tuyến giáp là gì? 11 | Tại sao bị nhân tuyến giáp? 12 | Nhân tuyến giáp nguy hiểm thế nào? 13 | Dấu hiệu người bị nhân tuyến giáp 14 | Cách phát hiện bệnh nhân giáp 15 | Điều trị nhân tuyến giáp 16 | Các đối tượng cần tầm soát ung thư tuyến giáp (nhân giáp ác tính): 17 |

Tuyến giáp là gì?

BS CKI Phan Thị Thùy Dung, khoa Nội tiết, BVĐK Tâm Anh TP.HCM cho biết: Tuyến giáp có dạng hình con bướm, gồm 2 thùy nối với nhau bởi eo tuyến giáp, nằm ở giữa và trước cổ. Đây là tuyến nội tiết quan trọng, có chức năng sản xuất hormon giáp, giúp cơ thể sử dụng năng lượng, giữ ấm, giúp não bộ, tim và nhiều cơ quan được hoạt động bình thường. Ngoài ra, tuyến giáp còn bài tiết hormon calcitonin tham gia điều hòa nồng độ calci trong máu. 18 |

Tại sao bị nhân tuyến giáp?

Nhân xuất hiện trong tuyến giáp ở bất cứ lứa tuổi nào, chủ yếu là phụ nữ. Đến tuổi 60, một nửa dân số bị nhân tuyến giáp, may mắn 90% trường hợp nhân giáp lành tính, không chuyển sang ung thư, chỉ 5% – 10% các trường hợp nhân giáp ác tính. 19 | Hầu hết các trường hợp bị nhân tuyến giáp đều không rõ nguyên nhân, riêng thiếu hụt iốt đã được xác định là yếu tố gây bệnh. Tần suất nhân giáp có thể sờ thấy được khi thăm khám bằng tay, với tỷ lệ khoảng 5% ở nữ và 1% ở nam, chủ yếu người bệnh sống ở những vùng thiếu iốt, nhưng trong thực tế đa phần nhân giáp nhỏ, không sờ thấy được. Do đó, khi thăm khám thông thường có thể bỏ sót nhân giáp. Tuy nhiên, với sự phát triển của siêu âm thì hiện nay tần suất phát hiện nhân giáp có thể lên đến 19% – 68%. 20 | Nhiều ý kiến 21 | cho rằng tuyến giáp có nhân là do cấu tạo giải phẫu của cơ thể nữ trải qua nhiều cột mốc thay đổi nội tiết tố: dậy thì, kinh nguyệt, mang thai và sinh con, cho con bú và mãn kinh. 22 |

Nhân tuyến giáp nguy hiểm thế nào?

Nhân tuyến giáp có thể là một nang giáp – nhân giáp lành tính, có thể nhân giáp ác tính. Hầu hết nhân giáp không làm thay đổi chức năng tuyến giáp. Tuy nhiên một vài nhân giáp có thể gia tăng hoạt động, sản xuất ra một lượng quá thừa hormon giáp gây cường giáp với biểu hiện sụt cân, hồi hộp đánh trống ngực, run tay, yếu cơ,… Một vài trường hợp có xuất huyết trong nang giáp sẽ gây triệu chứng đau vùng cổ, hàm, tai. 23 | Nhân tuyến giáp đủ lớn sẽ gây chèn ép đường thở hoặc thực quản, có thể gây khó khăn khi thở, nuốt hoặc ngứa họng, ho. Một số ít trường hợp, nhân giáp chèn ép thần kinh thanh quản gây khàn giọng nhưng thường liên quan đến 24 | ung thư tuyến giáp. 25 |

Dấu hiệu người bị nhân tuyến giáp

Theo bác sĩ Phan Thị Thùy Dung, người có nhân tuyến giáp hầu hết không có triệu chứng, tình cờ bệnh được phát hiện khi khám sức khỏe tổng quát, khám những bệnh khác không liên quan thông qua chụp chiếu phim như CT, siêu âm vùng cổ hoặc xét nghiệm chức năng tuyến giáp bất thường. 26 | Một số ít trường hợp khi bướu giáp lớn sẽ có các triệu chứng chèn ép như khó nuốt, khó thở, ho, khàn giọng hoặc đau khi có xuất huyết trong nang giáp,…. 27 | Một số người bệnh phát hiện do khi soi gương thấy vùng cổ có khối to hoặc khi cài cúc áo thấy chật chội. 28 |

Cách phát hiện bệnh nhân giáp

Cách tốt nhất để phát hiện nhân tuyến giáp là thăm khám vùng cổ bao gồm sờ tuyến giáp và siêu âm tuyến giáp giúp phát hiện các nhân giáp không sờ thấy được. Bác sĩ Phan Thị Thùy Dung chia sẻ, người bệnh còn được xét nghiệm hormon tuyến giáp (Thyroxine, hoặc T4) và hormon kích thích tuyến giáp (TSH) trong máu để xác định tuyến giáp có hoạt động bình thường hay không. 29 | Trong một số trường hợp không thể xác định nhân tuyến giáp là ung thư (tỷ lệ ác tính rất thấp) bằng khám lâm sàng và xét nghiệm máu thì cần đến các xét nghiệm đặc biệt như siêu âm và chọc tế bào tuyến giáp bằng kim nhỏ. 30 | Với siêu âm, người bệnh được siêu âm tuyến giáp với sóng âm có tần số cao giúp đánh giá nhân tuyến giáp. Bác sĩ sẽ xem tuyến giáp có một hay nhiều nhân, có tăng kích thước toàn bộ hay không, xác định được kích thước của nhân. Kết quả siêu âm còn xác định được nhân đặc hay nang và các đặc điểm nghi ngờ nhân giáp là ác tính hay lành tính. Nếu nhân giáp lành tính, bác sĩ thường không cần cắt bỏ, chỉ cần theo dõi theo thời gian, trừ khi chúng gây ra các triệu chứng nghẹn, khó nuốt. Siêu âm để theo dõi tiếp theo rất quan trọng. 31 | Sau khi hoàn thành đánh giá ban đầu, siêu âm tuyến giáp có thể được sử dụng để theo dõi các nhân tuyến giáp không cần phẫu thuật để xác định xem sự phát triển của nhân giáp theo thời gian và theo dõi nguy cơ chuyển sang ung thư của nhân giáp. 32 | Siêu âm còn giúp định vị hướng kim chính xác trực tiếp vào nhân khi chọc hút tế bào tuyến giáp bằng kim nhỏ đối với những nhân giáp có đặc điểm nghi ngờ ác tính trên siêu âm tuyến giáp. 33 | Chọc hút tế bào tuyến giáp bằng kim nhỏ (FNA) là thủ thuật giúp đánh giá bước đầu bản chất tế bào của nhân giáp là lành tính hay ác tính. Bác sĩ sẽ sử dụng một cây kim rất nhỏ, dưới hướng dẫn của siêu âm, đi vào đúng vị trí nhân giáp, hút các tế bào từ nhân tuyến giáp. Sau đó, mẫu phết tế bào được soi dưới kính hiển vi để bác sĩ giải phẫu bệnh tìm ra các tế bào ung thư. Nhân giáp ác tính chiếm khoảng 5%-10%, thường là do ung thư thể nhú, là loại ung thư tuyến giáp phổ biến nhất. Nếu phát hiện ung thư, cắt bỏ toàn bộ tuyến giáp bởi bác sĩ giàu kinh nghiệm. 34 |

Điều trị nhân tuyến giáp

Với nhân giáp – nang giáp lành tính thường được theo dõi mà không cần phẫu thuật. Tuy nhiên, người bệnh được theo dõi bằng siêu âm, giai đoạn đầu từ 12 – 24 tháng, sau đó tăng dần theo thời gian từ 2 – 5 năm. Nhưng nếu nhân tuyến giáp có những bất thường sau phải được kiểm tra đánh giá kỹ lưỡng, bao gồm: tăng trưởng đáng kể như thể tích thay đổi hơn 50% hoặc tăng 20% về đường kính với mức tăng tối thiểu ở hai hoặc nhiều chiều ít nhất là 2 mm, hoặc xuất hiện các dấu hiệu bất thường trên siêu âm, các triệu chứng chèn ép xâm lấn vùng cổ, hạch cổ nghi ngờ,… 35 | Với trường hợp ác tính, bao gồm ung thư thể nhú, ung thư tuyến giáp thể tủy, ung thư hạch tuyến giáp, ung thư bất sản và ung thư di căn đến tuyến giáp. Bệnh nhân có chẩn đoán tế bào học ác tính nên được phẫu thuật. 36 | Ngoài ra, tùy vào từng ca bệnh cụ thể, bác sĩ sẽ có phác đồ điều trị của bệnh nhân tuyến giáp khác nhau. 37 |

Các đối tượng cần tầm soát ung thư tuyến giáp (nhân giáp ác tính):

Cuối cùng các đối tượng sau đây cần thăm khám tuyến giáp để phát hiện sớm các trường hợp nhân giáp ác tính (ung thư tuyến giáp) bao gồm: tuổi trẻ <14 tuổi hoặc người già >70 tuổi phát hiện nhân giáp, nhân giáp phát triển nhanh kích thước, có các triệu chứng khàn giọng, tiền căn có xạ trị vùng đầu mặt cổ hoặc tiền sử gia đình có người bị ung thư tuyến giáp. 38 | Hầu hết các trường hợp ung thư tuyến giáp đều có thể chữa được và hiếm khi gây ra các vấn đề nguy hiểm đến tính mạng nếu được phát hiện sớm và điều trị kịp thời. 39 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 40 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 41 | Hotline: 024 3872 3872 – 024 7106 6858 42 | TP.HCM: 43 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 44 | Hotline: 0287 102 6789 – 093 180 6858 45 | Fanpage: 46 | https://www.facebook.com/benhvientamanh Website: 47 | https://tamanhhospital.vn 48 | -------------------------------------------------------------------------------- /corpus/benh-giac-mac-hinh-chop: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/benh-giac-mac-hinh-chop/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Mắt > 6 | Bệnh giác mạc hình chóp: Nguyên nhân, dấu hiệu và cách điều trị 7 |

Bệnh giác mạc hình chóp: Nguyên nhân, dấu hiệu và cách điều trị

8 | Giác mạc hình chóp là bệnh ở mắt tuy hiếm gặp nhưng lại gây biến chứng nguy hiểm nếu không điều trị kịp thời. Hơn nữa, nguyên nhân và biểu hiện bệnh cũng khá mờ nhạt khiến người bệnh dù đã khám ở nhiều nơi nhưng vẫn không “bắt” được bệnh, chỉ đến khi thăm khám ở các chuyên khoa mắt uy tín với hệ thống máy móc và bác sĩ chuyên môn cao, bệnh mới có thể được phát hiện. 9 |

Mục lục

10 | Bệnh giác mạc hình chóp là gì? 11 | Nguyên nhân gây bệnh giác mạc hình chóp 12 | Dấu hiệu bệnh giác mạc hình nón 13 | Biến chứng 14 | Phương pháp chẩn đoán 15 | Phương pháp điều trị 16 |

Bệnh giác mạc hình chóp là gì?

Bệnh giác mạc hình chóp là tình trạng lồi ra của giác mạc, tạo thành giác mạc hình chóp hay giác mạc hình nón. Căn bệnh này được các nhà khoa học giải thích là do 17 | các sợi protein nhỏ trong mắt (collagen) vốn làm nhiệm vụ giữ giác mạc ở đúng vị trí. Thế nhưng, khi những sợi protein này yếu đi, chúng không còn khả năng giữ cho giác mạc đúng hình dạng mà ngày càng biến dạng thành hình nón. (1) 18 | Một lý do khác được nhắc đến là do cơ thể không còn đủ chất chống oxy hóa để bảo vệ giác mạc. Khi ấy các tế bào tạo ra các chất gây hại, giống như cách một chiếc ô tô xả ra khí thải. Thông thường, các chất chống oxy hóa sẽ loại bỏ các chất gây hại và bảo vệ các sợi collagen. Thế nhưng khi hàm lượng các chất oxy hóa suy giảm, ở mức độ thấp sẽ khiến collagen yếu đi và giác mạc bị phồng lên. 19 | Em N.V.H. 14 tuổi được mẹ đưa đến khám mắt tại BVĐK Tâm Anh TP.HCM do mắt mờ kéo dài, đã đi khám nhiều nơi, đo, cắt kính và được chẩn đoán nhược thị nhưng tình trạng có xu hướng xấu hơn. 20 | Sau khi thăm khám, đo kính cho người bệnh, ThS.BS Phạm Huy Vũ Tùng, khoa Mắt, BVĐK Tâm Anh TP.HCM phát hiện em H. có những biểu hiện của bệnh giác mạc hình chóp. 21 | Vậy bệnh giác mạc hình chóp là gì? Bình thường, cấu tạo giác mạc của mắt có hình cầu nhưng với người bị giác mạc hình chóp thì giác mạc lại lồi ra ngoài tạo thành hình chóp. 22 | Giác mạc có biểu hiện lồi ra ngoài tạo thành hình nón (hình chóp) 23 |

Nguyên nhân gây bệnh giác mạc hình chóp

Nguyên nhân gây ra bệnh giác mạc hình chóp cho đến nay vẫn chưa được xác định cụ thể. Các bác sĩ nhãn khoa cho rằng di truyền, môi trường, thay đổi nội tiết (sau tuổi dậy thì)… là những yếu tố ảnh hưởng ít nhiều đến căn nguyên của bệnh. 24 | Theo đó, nếu gia đình có người từng mắc bệnh giác mạc hình chóp thì nguy cơ cao thế hệ sau cũng có thể mắc bệnh. Bệnh cũng có thể xảy ra nhiều hơn ở người mắc các bệnh dị ứng như hen suyễn, eczema… 25 | Những nguyên nhân khác bao gồm: 26 | Độ tuổi: Bệnh thường bắt đầu ở tuổi thiếu niên nhưng có thể xuất hiện sớm hơn trong thời thơ ấu hoặc không cho đến độ tuổi 30. Bệnh cũng có thể xảy ra với người từ 40 tuổi trở lên, nhưng ít phổ biến hơn. 27 | Một số rối loạn nhất định: Các nghiên cứu đã phát hiện ra mối liên hệ giữa bệnh giác mạc hình chóp và các loại bệnh toàn thân như hội chứng Down, hội chứng Ehlers-Danlos, khiếm khuyết tạo xương và viêm võng mạc sắc tố. 28 | Tình trạng viêm: Viêm do dị ứng, hen suyễn hoặc bệnh mắt dị ứng có thể phá vỡ mô giác mạc. 29 | Dụi mắt: Dụi mắt quá nhiều theo thời gian có thể làm tổn thương giác mạc, tạo 30 | cơ hội cho bệnh giác mạc hình chóp phát triển 31 | nặng hơn. 32 | Chủng tộc: Một nghiên cứu trên 16.000 người mắc bệnh giác mạc hình chóp cho thấy những người da đen hoặc La tinh có khả năng mắc bệnh cao hơn khoảng 50% so với những người da trắng. 33 |

Dấu hiệu bệnh giác mạc hình nón

Giác mạc hình nón có thể gây ra những biểu hiện đặc trưng như thị lực mờ, thay kính liên tục, nhạy cảm với ánh sáng… Bệnh thường ảnh hưởng đến cả hai mắt và bắt đầu xuất hiện từ 10 tuổi trở lên. 34 | Giác mạc chóp có thể làm thay đổi tầm nhìn theo hai cách sau: 35 | Khi giác mạc thay đổi hình dạng từ hình cầu sang hình nón, bề mặt nhẵn sẽ trở nên gợn sóng, được gọi là loạn thị không đều. 36 | Khi phía trước mở rộng, tình trạng cận thị càng tiến triển nặng hơn. Bạn chỉ có thể nhìn rõ các vật thể khi chúng ở gần. Nhìn ra xa hơn, bạn sẽ cảm thấy mọi thứ mờ ảo, méo mó. 37 | Thế nhưng, bác sĩ nhãn khoa có thể phát hiện những biểu hiện này trong khi khám mắt. Ngoài ra, bạn cũng nên chú ý đến các triệu chứng như: 38 | Tình trạng nhìn đôi (song thị), nhìn 1 vật thành 2 khi nhìn bằng một hay cả 2 mắt 39 | Nhìn mờ khi các vật thể ở gần và xa 40 | Cảm giác có quầng sáng xung quanh bóng đèn đang bật 41 | Vệt sáng 42 | Tầm nhìn mờ gây khó khăn khi điều khiển xe 43 |

Biến chứng

“Với trường hợp em H., nếu chỉ dựa theo chẩn đoán nhược thị và áp dụng các biện pháp điều trị theo hướng đó về lâu dài bệnh sẽ tiến triển nặng, thậm chí đối diện với nguy cơ mất hẳn thị lực”, bác sĩ Tùng nhận định. 44 | Do đó, bệnh nhân cần phải theo dõi thêm, nếu cần, phải làm bản đồ giác mạc, chỉnh kính áp tròng cứng cho phù hợp. Trường hợp nặng hơn, cần tiến hành ghép giác mạc để khắc phục tình trạng nhìn mờ ở người bệnh. 45 | Những biến chứng khác của bệnh giác mạc hình chóp bao gồm: giảm thị lực đột ngột, sẹo giác mạc do giác phồng lên nhanh, mù lòa… 46 |

Phương pháp chẩn đoán

Để chẩn đoán bệnh, bác sĩ sẽ tiến hành đo hình dạng giác mạc của bạn. Có nhiều cách khác nhau, nhưng phổ biến nhất được gọi là địa hình giác mạc. Bác sĩ chụp ảnh giác mạc của bạn và kiểm tra kỹ càng. (2) 47 | Đo địa hình giác mạc là một trong những phương pháp chẩn đoán giác mạc nón Một số yếu tố để bác sĩ chẩn đoán xem xét bao gồm: người bệnh có bị loạn thị, giác mạc có hình dạng thuôn dài giống quả bóng bầu dục hay hình cầu như quả bóng rổ; người bệnh có bị cận thị; người bệnh có biểu hiện cận thị kèm loạn thị; lập bản đồ giác mạc, đo địa hình giác mạc; kiểm tra giác mạc bằng kính hiển vi sinh học để kiểm tra có tình trạng nếp nhăn trong giác mạc… 48 | Nếu gia đình có bố mẹ mắc bệnh giác mạc chóp nên khám tầm soát bệnh này cho trẻ mỗi năm, bắt đầu từ 10 tuổi. 49 |

Phương pháp điều trị

Trường hợp nhẹ, bác sĩ có thể đề nghị người bệnh thay kính mới để khắc phục tình trạng nhìn mờ, hoặc đeo kính áp tròng cứng có tính thấm khí tốt. Tuy nhiên, theo thời gian, người bệnh có thể cần các phương pháp điều trị khác để củng cố giác mạc và cải thiện thị lực. (3) 50 | Sử dụng kính áp tròng cứng có tính thấm khí tốt giúp cải thiện vấn đề nhìn mờ ở người mắc giác mạc hình chóp Một phương pháp điều trị khác được gọi là liên kết chéo collagen giác mạc có thể ngăn bệnh tiến triển. Hoặc áp dụng phương pháp phân đoạn vòng trong giác mạc (INTACS) dưới bề mặt giác mạc để làm phẳng hình nón và cải thiện thị lực. 51 | Khi tất cả các phương pháp điều trị không giúp cải thiện thị lực, biện pháp cuối cùng sẽ là ghép giác mạc. Đây là một phẫu thuật an toàn và có tỷ lệ thành công cao. Bác sĩ sẽ thực hiện bằng cách thay thế tâm giác mạc bằng giác mạc từ người hiến tặng và khâu lại giác mạc mới vào đúng vị trí. Bạn có thể cần phải dùng kính áp tròng sau đó. 52 | Bác sĩ Tùng khuyến cáo, bệnh về mắt tuy tiến triển chậm nhưng hậu quả nghiêm trọng là mất thị lực vĩnh viễn. Do đó, khi phát hiện các dấu hiệu bất thường của mắt cần đến các chuyên khoa mắt uy tín, để được thăm khám, phát hiện và điều trị bệnh kịp thời. 53 | HỆ THỐNG BỆNH VIỆN ĐA KHOA TÂM ANH Hà Nội: 54 | 108 Hoàng Như Tiếp, P.Bồ Đề, Q.Long Biên, TP.Hà Nội 55 | Hotline: 024 3872 3872 – 024 7106 6858 56 | TP.HCM: 57 | 2B Phổ Quang, P.2, Q.Tân Bình, TP.Hồ Chí Minh 58 | Hotline: 0287 102 6789 – 093 180 6858 59 | Fanpage: 60 | https://www.facebook.com/benhvientamanh Website: 61 | https://tamanhhospital.vn 62 | -------------------------------------------------------------------------------- /corpus/xuat-tinh-nguoc-dong: -------------------------------------------------------------------------------- 1 | https://tamanhhospital.vn/xuat-tinh-nguoc-dong/ 2 | 3 | Trang chủ > 4 | CHUYÊN MỤC BỆNH HỌC > 5 | Nam Học > 6 | Xuất tinh ngược dòng: Tổng quan, nguyên nhân và phương pháp điều trị 7 |

Xuất tinh ngược dòng: Tổng quan, nguyên nhân và phương pháp điều trị

8 | Xuất tinh ngược dòng 9 | không ảnh hưởng đến khả năng cương dương hay đạt cực khoái của nam giới. Tình trạng này là một trong những nguyên nhân gây vô sinh, hiếm muộn, ảnh hưởng đến chất lượng cuộc sống và hạnh phúc gia đình. 10 | 11 |

Mục lục

12 | Xuất tinh ngược dòng là gì? 13 | Nguyên nhân gây xuất tinh ngược dòng 14 | Yếu tố bệnh lý 15 | Yếu tố bẩm sinh 16 | Sau phẫu thuật 17 | Do thuốc 18 | Triệu chứng xuất tinh ngược 19 | Phương pháp chẩn đoán 20 | Thăm khám lâm sàng 21 | Xét nghiệm nước tiểu 22 | Xuất tinh ngược dòng có chữa được không? 23 | Điều trị bằng thuốc 24 | Áp dụng các biện pháp hỗ trợ sinh sản 25 | Phòng ngừa xuất tinh ngược 26 |

Xuất tinh ngược dòng là gì?

Xuất tinh ngược dòng ( 27 | retrograde ejaculation) là không xuất tinh xuôi dòng ra ngoài toàn phần hoặc thỉnh thoảng một phần do tinh dịch di chuyển ngược vào trong qua cổ bàng quang vào bàng quang. Bệnh nhân có cảm giác đạt cực khoái bình thường hay giảm. (1) 28 | Nguyên nhân của xuất tinh ngược có thể bao gồm do: thần kinh, thuốc, niệu đạo hay mất trương lực của cổ bàng quang… khi tinh dịch không được xuất ra bên ngoài qua dương vật hoặc có xuất ra nhưng rất ít mà đi ngược vào trong bàng quang. 29 | Tuy xuất tinh ngược dòng không ảnh hưởng đến khả năng cương dương và cảm giác tình dục, không gây nguy hiểm đến tính mạng, nhưng nếu tình trạng này kéo dài có thể gây ra nhiều hệ lụy. Bệnh có thể gây vô sinh nam, đồng thời có thể ảnh hưởng đến tâm lý, chất lượng cuộc sống không những của họ mà cả người bạn tình 30 |

Nguyên nhân gây xuất tinh ngược dòng

Bình thường, cơ vòng gần cổ bàng quang và cơ niệu đạo sẽ có nhiệm vụ đóng và mở nhịp nhàng, khi người đàn ông đi vệ sinh hay quan hệ tình dục. Trong một số trường hợp các cơ này hoạt động kém hiệu quả khiến cho đường niệu đạo bị bít chặt, tinh dịch không thoát ra ngoài được sẽ theo nhánh còn lại chảy vào trong bàng quang. 31 | Nguyên nhân thường gặp là: 32 |

Yếu tố bệnh lý

Một số bệnh lý làm tổn thương thần kinh, khiến cho cơ vùng cổ bàng quang không thể đóng lại, gồm: 33 | Bệnh tiểu đường, bệnh đa xơ cứng, bệnh Parkinson 34 | Các biến chứng của bệnh lý thoái hóa cột sống, dị dạng cột sống 35 |

Yếu tố bẩm sinh

Người có những dị tật ở vùng niệu đạo và bàng quang cũng khiến cho các cơ khó hoạt động hiệu quả, khiến cho tinh dịch không xuất ra đúng hướng.(2) 36 |

Sau phẫu thuật

Các phẫu thuật vùng tiểu khung, tăng sinh lành tính tuyến tiền liệt, u đại tràng 37 |

Do thuốc

Tác dụng phụ của việc dùng thuốc chữa huyết áp, tăng sinh lành tính tuyến tiền liệt 38 |

Triệu chứng xuất tinh ngược

Triệu chứng chính của 39 | xuất tinh ngược dòng 40 | là có rất ít hoặc không có tinh dịch khi nam giới xuất tinh. 41 |

Phương pháp chẩn đoán

Để có được những kết luận chính xác về tình trạng xuất tinh ngược dòng, các chuyên gia Nam học sẽ thực hiện một số phương pháp chẩn đoán, chỉ định xét nghiệm dưới đây: 42 |

Thăm khám lâm sàng

Hỏi bệnh sử: Bác sĩ sẽ tiến hành hỏi về các triệu chứng, thời gian xuất hiện tình trạng hiện tại. Bạn cũng có thể được hỏi về tình trạng sức khỏe nói chung như: bệnh tật, các phẫu thuật từng thực hiện và những loại thuốc đang dùng để điều trị bệnh… 43 | Khám sức khỏe tổng thể 44 | Khám cơ quan sinh sản, bao gồm khám dương vật, tinh hoàn và khám trực tràng. 45 |

Xét nghiệm nước tiểu

Đây là cách tốt nhất giúp bác sĩ xác định chính xác tình trạng xuất tinh ngược, khi có tinh dịch tồn tại trong nước tiểu. Người bệnh có thể được yêu cầu thủ dâm trước khi cung cấp mẫu nước tiểu. Nếu nước tiểu có chứa tinh trùng, chẩn đoán có thể sẽ là xuất tinh ngược. 46 | Nếu nước tiểu sau khi đạt cực khoái của người bệnh không chứa tinh dịch, người bệnh có thể đang gặp một số vấn đề khác hoặc có liên quan đến việc sản xuất tinh dịch. Lúc này, các bác sĩ chuyên khoa khác sẽ hỗ trợ kiểm tra thêm để tìm ra nguyên nhân thật sự. 47 |

Xuất tinh ngược dòng có chữa được không?

Thông thường, 48 | xuất tinh ngược dòng 49 | không cần phải điều trị, nếu bệnh không ảnh hưởng đến khả năng sinh sản. 50 | Trong trường hợp cần phải điều trị, phương pháp như thế nào, có hiệu quả hay không phụ thuộc vào nguyên nhân gây bệnh. 51 |

Điều trị bằng thuốc

Dùng thuốc có thể mang đến hiệu quả nếu nguyên nhân gây xuất tinh ngược là do tổn thương dây thần kinh, ảnh hưởng từ các bệnh lý tiểu đường, bệnh đa xơ cứng, một số cuộc phẫu thuật vùng bàng quang… 52 | Những loại thuốc này có vai trò giữ cho cổ bàng quang đóng lại trong quá trình xuất tinh, nhưng có thể gây ra tác dụng phụ hoặc phản ứng bất lợi với các loại thuốc khác. Người bệnh nên báo với bác sĩ. Đặc biệt là khi bị cao huyết áp hay bệnh tim mạch. (3) 53 | Nếu người bệnh đang dùng các loại thuốc khác ảnh hưởng đến việc xuất tinh, việc này sẽ cần được trao đổi với bác sĩ để điều chỉnh sao cho phù hợp, tránh tác dụng phụ. 54 |

Áp dụng các biện pháp hỗ trợ sinh sản

Nếu điều trị nội thất bại và cặp đôi muốn có con, trong trường hợp này, người bệnh sẽ được chỉ định các biện pháp hỗ trợ sinh sản để đảm bảo khả năng mang thai cho người bạn đời. Cùng với sự tiến bộ của các công nghệ hỗ trợ sinh sản hiện nay, người bệnh hoàn toàn có thể làm cha, dù bị xuất tinh ngược dòng. 55 | Các bác sĩ sẽ tiến hành nhiều biện pháp bao gồm lấy tinh trùng từ trong tinh hoàn, mào tinh hay thậm chí là trong nước tiểu, xử lý trong phòng thí nghiệm để phục vụ cho việc thụ tinh ống nghiệm và đã được chứng minh là rất hiệu quả cho những trường hợp vô sinh do xuất tinh ngược dòng. 56 |

Phòng ngừa xuất tinh ngược

Để phòng ngừa nguy cơ bị 57 | xuất tinh ngược dòng 58 | , các chuyên gia Nam học khuyên nam giới nên: 59 | Chủ động trong việc chăm sóc sức khỏe bằng cách xây dựng lối sống lành mạnh, vận động điều độ, nghỉ ngơi hợp lý để phòng ngừa các bệnh lý như tiểu đường, trầm cảm, tim mạch, huyết áp… 60 | Nếu có bệnh và phải dùng thuốc điều trị, bạn nên trao đổi với bác sĩ về các tác dụng phụ, cụ thể là 61 | xuất tinh ngược dòng 62 | , để được đề xuất những phương án ít bị ảnh hưởng đến chức năng sinh sản hơn. 63 | Với các trường hợp phẫu thuật có thể ảnh hưởng đến cơ cổ bàng quang như phẫu thuật tuyến tiền liệt, bàng quang, hãy hỏi về nguy cơ xuất tinh ngược. Nếu bạn chưa có con hoặc có kế hoạch sinh con trong tương lai, hãy nói chuyện với bác sĩ về các lựa chọn trữ tinh trùng trước khi phẫu thuật. 64 | Với sứ mệnh mang đến hạnh phúc và niềm tin cho các đôi vợ chồng, Khoa Nam học, Hệ thống BVĐK Tâm Anh mang đến những dịch vụ cao cấp trong việc tư vấn, thăm khám, chẩn đoán, điều trị các bệnh phổ biến và chuyên sâu trong lĩnh vực Nam học. (4) 65 | Đội ngũ chuyên gia của Khoa thường xuyên cập nhật những nghiên cứu khoa học và các phác đồ tiên tiến trên thế giới trong tư vấn chăm sóc sức khỏe Nam giới với hiệu quả và tính an toàn cao. 66 | Bệnh viện Đa khoa Tâm Anh là một trong số ít bệnh viện có sự phối hợp chặt chẽ cả 3 khoa Hỗ trợ sinh sản, Khoa Phụ sản và Khoa Nam học. Bệnh viện có ngân hàng mô, giúp trữ đông mô phục vụ cho hỗ trợ sinh sản. Đặc biệt, bệnh viện còn sở hữu hệ thống máy móc, trang thiết bị chẩn đoán hình ảnh hiện đại như: máy chụp CT 768 lát cắt Somatom Drive, máy cộng hưởng từ thế hệ mới Magnetom Amira BioMatrix, máy siêu âm; hệ thống kính vi phẫu thuật Opmi Vario 700 Zeiss, bàn mổ Meera-Maquet; cơ sở vật chất khang trang, phòng nội trú tiện nghi và riêng tư… giúp 67 | điều trị thành công cho những trường hợp gặp phải các vấn đề về sức khỏe sinh sản, đem đến niềm vui và hạnh phúc cho các gia đình. 68 | -------------------------------------------------------------------------------- /streamlit_app.py: -------------------------------------------------------------------------------- 1 | import os 2 | from dotenv import load_dotenv 3 | import streamlit as st 4 | from langchain_core.messages import HumanMessage, SystemMessage, AIMessage 5 | from langchain_core.prompts.chat import ( 6 | ChatPromptTemplate, 7 | HumanMessagePromptTemplate, 8 | SystemMessagePromptTemplate, 9 | ) 10 | from openai import OpenAI 11 | import gradio as gr 12 | import os 13 | import pandas as pd 14 | import numpy as np 15 | from tqdm import tqdm 16 | from src.utils import * 17 | from src.llm import LLM 18 | from src.embedding import Embedding 19 | from src.search import Searching 20 | from langchain_openai import ChatOpenAI 21 | 22 | 23 | 24 | # embedding = Embedding(model_name="BAAI/bge-m3", device='cpu', cache_dir="cache/", persist_directory="chroma_db_bge_v4") 25 | # #embedding = Embedding(model_name="google", device='cpu', cache_dir="cache/", persist_directory="chroma_db_google") 26 | # #embedding = Embedding(model_name="openai", device='cpu', cache_dir="cache/", persist_directory="chroma_db_openai",openai_api_key=openai_api_key) 27 | # print(embedding.model_name) 28 | # vectordb = embedding.load_embedding() 29 | # print("Loaded embedding") 30 | # search = Searching(1,1,vectordb,splits) 31 | # print("Loaded search") 32 | # model = LLM(google_api_key=google_api_key) 33 | 34 | def preproces_context(context:list): 35 | """Preprocess context""" 36 | context = " ".join(context) 37 | context = context.replace("\n","") 38 | #replace ** with "" 39 | context = context.replace("*","") 40 | 41 | return context 42 | def RAG(question,search,docs,model): 43 | """RAG for human message 44 | Args: 45 | question (str): question 46 | search (Searching): searching object 47 | docs (list): list of docs 48 | model (LLM): LLM model""" 49 | docs = search.hybrid_search(question) 50 | context = search.get_context(docs) 51 | #print(context) 52 | context = preproces_context(context) 53 | 54 | question = preprocess_question(question) 55 | prompt = model.preprocess_prompt(question=question,context= context) 56 | answer = model.generate(prompt) 57 | respone = f"{answer} \n\n\n Tài liệu tham khảo:\n\n {context}" 58 | return respone 59 | def main(): 60 | load_dotenv(".env") 61 | corpus_path = 'corpus_summarize/' 62 | docs,texts = load_corpus(corpus_path) 63 | print("Loaded corpus") 64 | splits =texts 65 | load_dotenv() 66 | openai_api_key = os.getenv('OPENAI_API_KEY') 67 | google_api_key = os.getenv('GOOGLE_API_KEY') 68 | 69 | st.set_page_config(page_title="Medical Question Answering", page_icon=":books:") 70 | st.header("Chat with Medical Assistant Bot") 71 | embedding = Embedding(model_name="BAAI/bge-m3", device='cpu', cache_dir="cache/", persist_directory="chroma_db_bge_v4") 72 | vectordb = embedding.load_embedding() 73 | search = Searching(1,1,vectordb,splits) 74 | model = LLM(google_api_key=google_api_key) 75 | print(embedding, model, search) 76 | print("Loaded model") 77 | if "chat_history" not in st.session_state: 78 | st.session_state.chat_history = [ 79 | AIMessage(content="Hello, I'm a medical assistant. How can I help you today?"), 80 | ] 81 | print("Sao nó run lại ta") 82 | with st.sidebar: 83 | 84 | st.subheader("Selecting Embedding Model") 85 | embedding_model = st.selectbox("Select the Embedding Model", ["BAAI/bge-m3", "google", "openai"]) 86 | llm_model = st.selectbox("Select the Generation Model", ["google", "openai","ontocord/vistral"]) 87 | search_type = st.selectbox("Select the Search Type", ["hybrid", "vector", "bm25"]) 88 | process_button = st.button("Process") 89 | #uploaded = pdf_docs 90 | 91 | if process_button: 92 | print("Processing...") 93 | #loading 94 | 95 | embedding = Embedding(model_name=embedding_model, device='cpu', cache_dir="cache/", persist_directory="chroma_db_bge_v4") 96 | vectordb = embedding.load_embedding() 97 | search = Searching(1,1,vectordb,splits) 98 | model = LLM(google_api_key=google_api_key) 99 | print(embedding, model, search) 100 | print("Loaded model") 101 | #st 102 | #show loading embeding model 103 | 104 | # # if not uploaded: 105 | # # st.warning("Please upload PDFs first.") 106 | # # else: 107 | # # with st.spinner("Processing..."): 108 | # # st.session_state.vector_store, st.session_state.bm25_retriever = get_vectorstore_and_BM25(pdf_docs) 109 | 110 | # if st.button("Summarize"): 111 | 112 | # if "vector_store" in st.session_state: 113 | # with st.spinner("Summarizing"): 114 | 115 | # if "chunks" not in st.session_state: 116 | # st.session_state.chunks = get_text_chunks(get_pdf_text(pdf_docs)) 117 | 118 | # llm = OpenAI(api_key=openai_api_key) 119 | # results_queue = queue.Queue() 120 | 121 | # threads = [] 122 | # for chunk in st.session_state.chunks: 123 | # thread = threading.Thread(target=summarize_chunk, args=(chunk, results_queue, llm)) 124 | # thread.start() 125 | # threads.append(thread) 126 | 127 | # for thread in threads: 128 | # thread.join() 129 | 130 | # summarize_chunks = [] 131 | # while not results_queue.empty(): 132 | # summarize_chunks.append(results_queue.get()) 133 | 134 | # context = build_final_context(summarize_chunks) 135 | # message = [{"role": "user", "content": Prompts.final_ans_prompt(context)}] 136 | 137 | # final_response = llm.chat.completions.create(model='gpt-3.5-turbo', 138 | # messages= message, 139 | # temperature=0.1, 140 | # max_tokens=4096) 141 | 142 | # st.write(final_response.choices[0].message.content) 143 | 144 | # else: 145 | # if not uploaded: 146 | # st.warning("Please upload PDFs first.") 147 | # else: 148 | # st.warning("Please process the PDFs.") 149 | 150 | 151 | user_query = st.chat_input("Type your mesage here ...") 152 | 153 | if user_query is not None and user_query != "": 154 | # Check if embedding model,llm,search is loaded 155 | print(embedding, model, search) 156 | if embedding is None or model is None or search is None: 157 | st.warning("Please select the embedding model, llm model and search type first.") 158 | # Get response from the model based on user's message 159 | #response = get_response(user_query, st.session_state.bm25_retriever) 160 | # Append user's message and response to the chat history 161 | else: 162 | response = RAG(user_query,search,docs,model) 163 | st.session_state.chat_history.append(HumanMessage(content=user_query)) 164 | st.session_state.chat_history.append(AIMessage(content=response)) 165 | 166 | 167 | for message in st.session_state.chat_history: 168 | if isinstance(message, AIMessage): 169 | with st.chat_message("AI"): 170 | st.write(message.content) 171 | elif isinstance(message, HumanMessage): 172 | with st.chat_message("Human"): 173 | st.write(message.content) 174 | 175 | 176 | if __name__ == '__main__': 177 | 178 | main() --------------------------------------------------------------------------------