File size: 4,264 Bytes
1c4d298 566a40e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
---
license: openrail
---
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
from healthcare_nlp import Diseases, SNOMEDCT
from healthcare_nlp.preprocessing import de_identify_text
# Disease selection and model configuration
disease_name = input("Enter a disease name (e.g., 'diabetes'): ").lower()
disease_concept = SNOMEDCT.query_concept(disease_name)
model_name = "allenai/biobert-base-cased" # Clinically-tuned BioBERT model
# Prepare user profile and tokenizer
user_profile = {"age": int(input("Enter your age: "))}
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Access and process user message
user_message = input("Ask your question about " + disease_concept.preferred_term + ": ")
deidentified_message = de_identify_text(user_message) # Protect sensitive information
# Generate response with model and personalization
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
inputs = tokenizer(deidentified_message, truncation=True, padding="max_length", return_tensors="pt")
generated_ids = model.generate(**inputs, max_length=256)
response = tokenizer.decode(generated_ids.squeeze(), clean_up_tokenization=True)
# Enhance response with knowledge base and context
knowledge_base = Diseases.load_disease_info(disease_concept.concept_id)
response = personalize_response(response, disease_concept, user_message, user_profile, knowledge_base)
# Conclude with informative disclaimer
response += (
"\nFeel free to ask any further questions you might have. I am still under development, but I leverage "
"clinical knowledge and continuous learning to provide accurate and evidence-based information. "
"Remember, I am not a substitute for professional healthcare advice. Please consult your doctor "
"for diagnosis and treatment decisions."
)
print(response)
def personalize_response(response, disease_concept, user_message, user_profile, knowledge_base):
# Highlight relevant knowledge base sections
for key, value in knowledge_base.items():
if key.lower() in user_message.lower():
response += f"\nRegarding your query about {key}, here's some relevant information: {value}"
# Adapt response based on disease complexity and user age
response = personalize_with_disease_complexity(response, disease_concept)
response = personalize_with_user_age(response, user_profile)
# Add medical references and adjust communication style based on user preferences
if user_profile["age"] >= 18 and user_profile["preferred_communication_style"] == "informative":
response = add_informative_details(response, knowledge_base)
elif user_profile["age"] >= 18 and user_profile["preferred_communication_style"] == "empathetic":
# Implement empathetic communication style here (e.g., acknowledge feelings, offer support)
pass
else:
# Use simpler language and avoid overwhelming details for younger users or non-informative preferences
pass
# Re-identify anonymized terms for clinical context (optional)
# response = re_identify_text(response, knowledge_base)
return response
# Personalize response with disease complexity
def personalize_with_disease_complexity(response, disease_concept):
if "complex" in disease_concept.description.lower():
response += f"\nPlease note that {disease_concept.preferred_term} is a complex condition. My information offers a starting point, not a definitive explanation. Consult your doctor for a comprehensive understanding."
return response
# Personalize response with user age
def personalize_with_user_age(response, user_profile):
if user_profile["age"] < 18:
response += f"\nAs you're under 18, it's crucial to involve your parents or guardians in managing your health and seeking professional guidance."
return response
# Add medical references or implement different communication styles here based on user preferences
# Re-identify anonymized terms with caution, considering ethical implications and potential bias.
This version enhances professionalism with:
* **De-identification of user message:** Protects sensitive information while processing.
* **Clinically-informed responses:** Tailored to disease complexity and user age.
* **
|