Spaces:
Runtime error
Runtime error
# Part 3 - Modeling of Free Doctor with AI | |
[back](../README.md) | |
To provide a more accurate diagnosis for each patient, it is necessary to analyze the data flow. The standard procedure for a doctor is as follows: | |
1. Generating the comprehensive clinical history, including anamnesis. | |
2. Classifying the health problem based on the relevant medical area. If needed, a customized clinical history can be developed in greater detail. | |
3. Providing a complete patient description, including their symptoms and specific concerns. | |
4. Based on the patient's situation and the gathered information, a general medical diagnosis can be made. | |
5. If necessary, further evaluation for specific cases can be conducted, repeating step 4. | |
It is strongly recommended to maintain a clinical history for every patient treated within this program. | |
## Modeling of Doctor AI | |
The first step is the preprocessing of the data | |
### [3_1-Preproces.ipynb](https://github.com/ruslanmv/Free-Doctor-with-Artificial-Intelligence/blob/master/3-Modeling/3_1-Preproces.ipynb) | |
The second step is the clustering of the cases. Can be useful to understand better our data. | |
### [3_2-Clustering.ipynb](https://github.com/ruslanmv/Free-Doctor-with-Artificial-Intelligence/blob/master/3-Modeling/3_2-Clustering.ipynb) | |
The third step is classical feature engineering, here we should create a syntenic clinical history for each visit of with the AI doctor. | |
For future releases our raw data must be included as a part of the model. | |
Due to lack of data we create a synthetic clinical history based on the description of the patient. | |
### [3_3-Features.ipynb](https://github.com/ruslanmv/Free-Doctor-with-Artificial-Intelligence/blob/master/3-Modeling/3_3-Features.ipynb) | |
Having the data well built. | |
Features + Description + Patient + Answer | |
Is simply build a model to answer custom questions. | |
### [3_4-Generative.ipynb](https://github.com/ruslanmv/Free-Doctor-with-Artificial-Intelligence/blob/master/3-Modeling/3_4-Generative.ipynb) | |
# Additional Notes | |
## General clinical history | |
A clinical history is an essential component of a patient's medical record and provides a concise overview of the patient's medical background, including their past illnesses, surgeries, medications, allergies, and family medical history. Here's a sample format for a clinical history: | |
``` | |
[Patient Information] | |
- Full Name: [Patient's Full Name] | |
- Date of Birth: [Patient's Date of Birth] | |
- Gender: [Patient's Gender] | |
- Address: [Patient's Address] | |
- Phone Number: [Patient's Contact Number] | |
[Chief Complaint] | |
- [Description of the patient's main reason for seeking medical attention] | |
[Present Illness] | |
- [Detailed description of the current illness or symptoms, including their onset, duration, severity, and any relevant factors] | |
[Medical History] | |
- Past Medical Conditions: | |
- [List any significant medical conditions the patient has had, including dates of diagnosis] | |
- Surgeries/Procedures: | |
- [List any surgeries or medical procedures the patient has undergone, including dates] | |
- Medications: | |
- [List current medications, dosages, and frequency] | |
- Allergies: | |
- [List any allergies the patient has, including medication, food, or environmental allergies] | |
- Immunizations: | |
- [Include information on relevant vaccinations and their dates] | |
[Family Medical History] | |
- [List any significant medical conditions that run in the patient's family, such as heart disease, diabetes, cancer, etc.] | |
[Social History] | |
- Occupation: [Patient's occupation] | |
- Tobacco Use: [Specify if the patient smokes or uses tobacco products] | |
- Alcohol Use: [Specify if the patient consumes alcohol and if so, how often and in what quantities] | |
- Drug Use: [Specify if the patient uses recreational drugs or has a history of drug use] | |
- Diet: [Provide information about the patient's dietary habits, including any special diets] | |
- Exercise: [Describe the patient's level of physical activity] | |
[Review of Systems] | |
- [List and briefly describe the patient's symptoms or concerns related to various body systems, including cardiovascular, respiratory, gastrointestinal, musculoskeletal, etc.] | |
[Social and Environmental History] | |
- [Include information about the patient's living situation, relationships, and any environmental factors that may be relevant to their health] | |
[Psychosocial History] | |
- [Note any significant mental health history or psychosocial stressors] | |
[Sexual History] | |
- [Include relevant sexual history information if applicable] | |
[Substance Use History] | |
- [Detail any history of alcohol or substance abuse, if applicable] | |
[Physical Examination Findings] | |
- [Summarize any relevant physical examination findings, including vital signs, general appearance, and specific organ system assessments] | |
[Assessment and Plan] | |
- [Provide a brief assessment of the patient's current medical condition and a plan for further evaluation and treatment] | |
[Provider's Name and Credentials] | |
- [Name of the healthcare provider] | |
- [Credentials, such as MD, DO, NP, PA] | |
[Date] | |
- [Date of the clinical history] | |
[Signature] | |
- [Signature of the healthcare provider] | |
``` | |
This format can be customized to fit the specific requirements of a healthcare facility or the preferences of the healthcare provider. It should be thorough and comprehensive to ensure that all relevant information is documented accurately. | |
## How to use Bert | |
We can install Sentence BERT using: | |
``` | |
!pip install sentence-transformers | |
``` | |
#### Step 1: | |
We will then load the pre-trained BERT model. There are many other pre-trained models available. You can find the full list of models [here.](https://github.com/UKPLab/sentence-transformers/blob/master/docs/pretrained-models/sts-models.md) | |
```python | |
from sentence_transformers import SentenceTransformer | |
sbert_model = SentenceTransformer('bert-base-nli-mean-tokens') | |
``` | |
#### Step 2: | |
We will then encode the provided sentences. We can also display the sentence vectors(just uncomment the code below) | |
```python | |
sentence_embeddings = model.encode(sentences) | |
#print('Sample BERT embedding vector - length', len(sentence_embeddings[0])) | |
#print('Sample BERT embedding vector - note includes negative values', sentence_embeddings[0]) | |
``` | |
#### | |
#### Step 3: | |
Then we will define a test query and encode it as well: | |
```python | |
query = "I had pizza and pasta" | |
query_vec = model.encode([query])[0] | |
``` | |
#### Step 4: | |
We will then compute the cosine similarity using scipy. We will retrieve the similarity values between the sentences and our test query: | |
```python | |
for sent in sentences: | |
sim = cosine(query_vec, model.encode([sent])[0]) | |
print("Sentence = ", sent, "; similarity = ", sim) | |
``` | |
There you go, we have obtained the similarity between the sentences in our text and our test sentence. A crucial point to note is that SentenceBERT is pretty slow if you want to train it from scratch. |