Sujal Bhat commited on
Commit
0d0eac6
·
1 Parent(s): 374b451

deliverables

Browse files
app.py CHANGED
@@ -1,4 +1,5 @@
1
  # Required Libraries
 
2
  import fitz # PyMuPDF
3
  import os
4
  from langchain_openai import OpenAIEmbeddings
@@ -7,9 +8,13 @@ from dotenv import load_dotenv
7
  from qdrant_client import QdrantClient # Import Qdrant client
8
  import uuid # Add this import at the top of your file
9
  import json
 
 
10
 
11
  # Load environment variables from .env file
12
  load_dotenv()
 
 
13
 
14
  # Initialize Qdrant client
15
  qdrant_api_key = os.getenv("QDRANT_API_KEY") # Get the Qdrant API key from environment variables
@@ -115,12 +120,19 @@ def chunk_text(text, themes):
115
  return thematic_chunks
116
 
117
  # Step 4: Embed the Chunks
118
- def embed_chunks(thematic_chunks):
119
  openai_api_key = os.getenv("OPENAI_API_KEY") # Get the API key from environment variables
120
  embeddings = OpenAIEmbeddings(model="text-embedding-3-small",openai_api_key=openai_api_key)
121
  embedded_chunks = {theme: embeddings.embed_documents(chunks) for theme, chunks in thematic_chunks.items()}
122
  return embedded_chunks
123
 
 
 
 
 
 
 
 
124
  # Modified main execution block
125
  def main():
126
  resources_folder = "resources"
@@ -134,7 +146,7 @@ def main():
134
  pdf_path = os.path.join(resources_folder, filename)
135
  text = extract_text_from_pdf(pdf_path)
136
  thematic_chunks = chunk_text(text, themes)
137
- embedded_chunks = embed_chunks(thematic_chunks)
138
 
139
  # Ensure the collection exists
140
  if not new_docs_processed:
 
1
  # Required Libraries
2
+ from sentence_transformers import SentenceTransformer
3
  import fitz # PyMuPDF
4
  import os
5
  from langchain_openai import OpenAIEmbeddings
 
8
  from qdrant_client import QdrantClient # Import Qdrant client
9
  import uuid # Add this import at the top of your file
10
  import json
11
+ from huggingface_hub import login
12
+
13
 
14
  # Load environment variables from .env file
15
  load_dotenv()
16
+ login(token=os.getenv("HF_TOKEN"))
17
+
18
 
19
  # Initialize Qdrant client
20
  qdrant_api_key = os.getenv("QDRANT_API_KEY") # Get the Qdrant API key from environment variables
 
120
  return thematic_chunks
121
 
122
  # Step 4: Embed the Chunks
123
+ def embed_chunks_openai(thematic_chunks):
124
  openai_api_key = os.getenv("OPENAI_API_KEY") # Get the API key from environment variables
125
  embeddings = OpenAIEmbeddings(model="text-embedding-3-small",openai_api_key=openai_api_key)
126
  embedded_chunks = {theme: embeddings.embed_documents(chunks) for theme, chunks in thematic_chunks.items()}
127
  return embedded_chunks
128
 
129
+ def embed_chunks_fine_tuned(thematic_chunks):
130
+ model = SentenceTransformer("svb01/fine-tuned-embedding-model")
131
+ embedded_chunks = {theme: model.encode(chunks) for theme, chunks in thematic_chunks.items()}
132
+ return embedded_chunks
133
+
134
+ # The rest of app.py remains the same
135
+
136
  # Modified main execution block
137
  def main():
138
  resources_folder = "resources"
 
146
  pdf_path = os.path.join(resources_folder, filename)
147
  text = extract_text_from_pdf(pdf_path)
148
  thematic_chunks = chunk_text(text, themes)
149
+ embedded_chunks = embed_chunks_fine_tuned(thematic_chunks)
150
 
151
  # Ensure the collection exists
152
  if not new_docs_processed:
deliverables/Task1.md ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ **Task 1: Dealing with the Data**
2
+
3
+ You identify the following important documents that, if used for context, you believe will help people understand what’s happening now:
4
+ 1. 2022: Blueprint for an AI Bill of Rights: Making Automated Systems Work for the American People (PDF)
5
+ 2. 2024: National Institute of Standards and Technology (NIST) Artificial Intelligent Risk Management Framework (PDF)
6
+
7
+ Your boss, the SVP of Technology, green-lighted this project to drive the adoption of AI throughout the enterprise. It will be a nice showpiece for the upcoming conference and the big AI initiative announcement the CEO is planning.
8
+
9
+
10
+ Task 1: Review the two PDFs and decide how best to chunk up the data with a single strategy to optimally answer the variety of questions you expect to receive from people.
11
+ Hint: Create a list of potential questions that people are likely to ask!
12
+
13
+
14
+
15
+
16
+ ✅ Deliverables:
17
+
18
+ 1. Describe the default chunking strategy that you will use.
19
+
20
+ The default chunking strategy used is a combination of size-based splitting and thematic categorization.
21
+ This strategy uses RecursiveCharacterTextSplitter with a chunk size of 1000 characters and an overlap of 200 characters. It then categorizes these chunks based on predefined themes.
22
+
23
+ 2. Articulate a chunking strategy that you would also like to test out.
24
+
25
+ A pure size-based chunking strategy without thematic categorization. This would involve splitting the text into fixed-size chunks without attempting to categorize them based on themes.
26
+
27
+
28
+
29
+ 3. Describe how and why you made these decisions
30
+
31
+ The default strategy was chosen for its simplicity and efficiency:
32
+
33
+ * Size-based splitting (1000 characters) ensures manageable chunk sizes for processing and embedding.
34
+ * The 200-character overlap helps maintain context between chunks.
35
+ * Thematic categorization allows for organized retrieval based on specific topics of interest.
36
+
37
+ This approach balances processing efficiency with maintaining semantic coherence within chunks.
38
+
39
+ The alternative pure size-based strategy:
40
+ * Ensures consistent chunk sizes, which can be beneficial for processing and embedding.
41
+ * Is simpler to implement and doesn't rely on predefined themes.
42
+ * May split semantic units, potentially affecting the coherence of individual chunks.'
43
+ * Could be more comprehensive, including all parts of the document regardless of theme.
44
+
45
+
46
+
47
+
48
+
49
+
fine_tune_model.py ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from sentence_transformers import SentenceTransformer, InputExample, losses
3
+ from torch.utils.data import DataLoader
4
+ import random
5
+ from langchain_openai import OpenAIEmbeddings
6
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
7
+ import fitz # PyMuPDF
8
+ from dotenv import load_dotenv
9
+ from huggingface_hub import login, HfApi
10
+ import traceback
11
+
12
+ # Add this near the top of your file, after the imports
13
+
14
+
15
+ load_dotenv()
16
+ login(token=os.getenv("HF_TOKEN"), add_to_git_credential=True)
17
+
18
+ # Step 1: Extract Text from PDFs
19
+ def extract_text_from_pdf(pdf_path):
20
+ doc = fitz.open(pdf_path)
21
+ text = ""
22
+ for page in doc:
23
+ text += page.get_text()
24
+ return text
25
+
26
+ def chunk_text(text, themes):
27
+ text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
28
+ chunks = text_splitter.split_text(text)
29
+ thematic_chunks = {theme: [] for theme in themes}
30
+ thematic_chunks["Unclassified"] = [] # Add an "Unclassified" category
31
+
32
+ for chunk in chunks:
33
+ theme_found = False
34
+ for theme in themes:
35
+ if theme.lower() in chunk.lower():
36
+ thematic_chunks[theme].append(chunk)
37
+ theme_found = True
38
+ break
39
+ if not theme_found:
40
+ thematic_chunks["Unclassified"].append(chunk)
41
+
42
+ print("Chunks per theme:")
43
+ for theme, theme_chunks in thematic_chunks.items():
44
+ print(f" {theme}: {len(theme_chunks)}")
45
+
46
+ return thematic_chunks
47
+ # ... (same as in app.py)
48
+
49
+ # Function to generate synthetic fine-tuning data
50
+ def generate_synthetic_data(thematic_chunks, n_samples=1000):
51
+ examples = []
52
+ print(f"Total themes: {len(thematic_chunks)}")
53
+ for theme, chunks in thematic_chunks.items():
54
+ print(f"Theme: {theme}, Number of chunks: {len(chunks)}")
55
+ if not chunks:
56
+ print(f"Warning: No chunks for theme '{theme}'. Skipping this theme.")
57
+ continue
58
+ samples_per_theme = max(1, n_samples // len(thematic_chunks))
59
+ for _ in range(samples_per_theme):
60
+ chunk = random.choice(chunks)
61
+ question = f"What does this text say about {theme.lower()}?"
62
+ examples.append(InputExample(texts=[question, chunk]))
63
+ print(f"Total examples generated: {len(examples)}")
64
+ return examples
65
+
66
+ # Function to fine-tune the model
67
+ def fine_tune_model(model, train_examples, output_path):
68
+ train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16)
69
+ train_loss = losses.MultipleNegativesRankingLoss(model)
70
+
71
+ model.fit(train_objectives=[(train_dataloader, train_loss)], epochs=3, warmup_steps=100, output_path=output_path)
72
+ return model
73
+
74
+ def main():
75
+ resources_folder = "resources"
76
+ themes = [
77
+ "Safe and Effective Systems",
78
+ "Algorithmic Discrimination Protections",
79
+ "Data Privacy",
80
+ "Notice and Explanation",
81
+ "Human Alternatives",
82
+ "Risk Management",
83
+ "Governance",
84
+ "Trustworthiness",
85
+ "Unclassified"
86
+ ]
87
+
88
+ all_thematic_chunks = {}
89
+
90
+ for filename in os.listdir(resources_folder):
91
+ if filename.endswith(".pdf"):
92
+ pdf_path = os.path.join(resources_folder, filename)
93
+ text = extract_text_from_pdf(pdf_path)
94
+ thematic_chunks = chunk_text(text, themes)
95
+ all_thematic_chunks.update(thematic_chunks)
96
+ print(f"Processed {filename}")
97
+
98
+ # Fine-tune the model
99
+ base_model = "sentence-transformers/all-MiniLM-L6-v2"
100
+ model = SentenceTransformer(base_model)
101
+ train_examples = generate_synthetic_data(all_thematic_chunks)
102
+ fine_tuned_model_path = "fine_tuned_embedding_model"
103
+ fine_tune_model(model, train_examples, fine_tuned_model_path)
104
+
105
+ print("Fine-tuning completed. Model saved locally.")
106
+
107
+ def upload_model_to_hub():
108
+ try:
109
+ # Load the fine-tuned model
110
+ fine_tuned_model_path = "fine_tuned_embedding_model"
111
+ model = SentenceTransformer(fine_tuned_model_path)
112
+
113
+ # Upload the fine-tuned model to Hugging Face Hub
114
+ repo_id = "svb01/fine-tuned-embedding-model"
115
+
116
+ print(f"Uploading model to existing repository: {repo_id}")
117
+
118
+ # Use HfApi to upload files directly
119
+ api = HfApi()
120
+
121
+ # Upload each file in the model directory
122
+ for root, _, files in os.walk(fine_tuned_model_path):
123
+ for file in files:
124
+ file_path = os.path.join(root, file)
125
+ api.upload_file(
126
+ path_or_fileobj=file_path,
127
+ path_in_repo=file,
128
+ repo_id=repo_id,
129
+ commit_message=f"Upload {file}"
130
+ )
131
+
132
+ print("Fine-tuned model uploaded to Hugging Face Hub.")
133
+ except Exception as e:
134
+ print(f"Error uploading model to Hugging Face Hub: {str(e)}")
135
+ print("Detailed error information:")
136
+ print(traceback.format_exc())
137
+
138
+ if __name__ == "__main__":
139
+ # Uncomment the function you want to run
140
+ # main() # Run this for fine-tuning
141
+ upload_model_to_hub() # Run this to upload the model
fine_tuned_embedding_model/1_Pooling/config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "word_embedding_dimension": 384,
3
+ "pooling_mode_cls_token": false,
4
+ "pooling_mode_mean_tokens": true,
5
+ "pooling_mode_max_tokens": false,
6
+ "pooling_mode_mean_sqrt_len_tokens": false,
7
+ "pooling_mode_weightedmean_tokens": false,
8
+ "pooling_mode_lasttoken": false,
9
+ "include_prompt": true
10
+ }
fine_tuned_embedding_model/README.md ADDED
@@ -0,0 +1,520 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: sentence-transformers/all-MiniLM-L6-v2
3
+ library_name: sentence-transformers
4
+ pipeline_tag: sentence-similarity
5
+ tags:
6
+ - sentence-transformers
7
+ - sentence-similarity
8
+ - feature-extraction
9
+ - generated_from_trainer
10
+ - dataset_size:555
11
+ - loss:MultipleNegativesRankingLoss
12
+ widget:
13
+ - source_sentence: What does this text say about unclassified?
14
+ sentences:
15
+ - "these sources. \nErrors in third-party GAI components can also have downstream\
16
+ \ impacts on accuracy and robustness. \nFor example, test datasets commonly used\
17
+ \ to benchmark or validate models can contain label errors. \nInaccuracies in\
18
+ \ these labels can impact the “stability” or robustness of these benchmarks, which\
19
+ \ many \nGAI practitioners consider during the model selection process. \nTrustworthy\
20
+ \ AI Characteristics: Accountable and Transparent, Explainable and Interpretable,\
21
+ \ Fair with \nHarmful Bias Managed, Privacy Enhanced, Safe, Secure and Resilient,\
22
+ \ Valid and Reliable \n3. \nSuggested Actions to Manage GAI Risks \nThe following\
23
+ \ suggested actions target risks unique to or exacerbated by GAI. \nIn addition\
24
+ \ to the suggested actions below, AI risk management activities and actions set\
25
+ \ forth in the AI \nRMF 1.0 and Playbook are already applicable for managing GAI\
26
+ \ risks. Organizations are encouraged to"
27
+ - "and hardware vulnerabilities; labor practices; data privacy and localization\
28
+ \ \ncompliance; geopolitical alignment). \nData Privacy; Information Security;\
29
+ \ \nValue Chain and Component \nIntegration; Harmful Bias and \nHomogenization\
30
+ \ \nMG-3.1-003 \nRe-assess model risks after fine-tuning or retrieval-augmented\
31
+ \ generation \nimplementation and for any third-party GAI models deployed for\
32
+ \ applications \nand/or use cases that were not evaluated in initial testing.\
33
+ \ \nValue Chain and Component \nIntegration \nMG-3.1-004 \nTake reasonable measures\
34
+ \ to review training data for CBRN information, and \nintellectual property, and\
35
+ \ where appropriate, remove it. Implement reasonable \nmeasures to prevent, flag,\
36
+ \ or take other action in response to outputs that \nreproduce particular training\
37
+ \ data (e.g., plagiarized, trademarked, patented, \nlicensed content or trade\
38
+ \ secret material). \nIntellectual Property; CBRN \nInformation or Capabilities\
39
+ \ \n \n43"
40
+ - "• \nStage of the AI lifecycle: Risks can arise during design, development, deployment,\
41
+ \ operation, \nand/or decommissioning. \n• \nScope: Risks may exist at individual\
42
+ \ model or system levels, at the application or implementation \nlevels (i.e.,\
43
+ \ for a specific use case), or at the ecosystem level – that is, beyond a single\
44
+ \ system or \norganizational context. Examples of the latter include the expansion\
45
+ \ of “algorithmic \nmonocultures,3” resulting from repeated use of the same model,\
46
+ \ or impacts on access to \nopportunity, labor markets, and the creative economies.4\
47
+ \ \n• \nSource of risk: Risks may emerge from factors related to the design, training,\
48
+ \ or operation of the \nGAI model itself, stemming in some cases from GAI model\
49
+ \ or system inputs, and in other cases, \nfrom GAI system outputs. Many GAI risks,\
50
+ \ however, originate from human behavior, including \n \n \n3 “Algorithmic monocultures”\
51
+ \ refers to the phenomenon in which repeated use of the same model or algorithm\
52
+ \ in"
53
+ - source_sentence: What does this text say about unclassified?
54
+ sentences:
55
+ - "Security; Dangerous, Violent, or \nHateful Content \n \n34 \nMS-2.7-009 Regularly\
56
+ \ assess and verify that security measures remain effective and have not \nbeen\
57
+ \ compromised. \nInformation Security \nAI Actor Tasks: AI Deployment, AI Impact\
58
+ \ Assessment, Domain Experts, Operation and Monitoring, TEVV \n \nMEASURE 2.8:\
59
+ \ Risks associated with transparency and accountability – as identified in the\
60
+ \ MAP function – are examined and \ndocumented. \nAction ID \nSuggested Action\
61
+ \ \nGAI Risks \nMS-2.8-001 \nCompile statistics on actual policy violations, take-down\
62
+ \ requests, and intellectual \nproperty infringement for organizational GAI systems:\
63
+ \ Analyze transparency \nreports across demographic groups, languages groups.\
64
+ \ \nIntellectual Property; Harmful Bias \nand Homogenization \nMS-2.8-002 Document\
65
+ \ the instructions given to data annotators or AI red-teamers. \nHuman-AI Configuration\
66
+ \ \nMS-2.8-003 \nUse digital content transparency solutions to enable the documentation\
67
+ \ of each"
68
+ - "information during GAI training and maintenance. \nHuman-AI Configuration; Obscene,\
69
+ \ \nDegrading, and/or Abusive \nContent; Value Chain and \nComponent Integration;\
70
+ \ \nDangerous, Violent, or Hateful \nContent \nMS-2.6-002 \nAssess existence or\
71
+ \ levels of harmful bias, intellectual property infringement, \ndata privacy violations,\
72
+ \ obscenity, extremism, violence, or CBRN information in \nsystem training data.\
73
+ \ \nData Privacy; Intellectual Property; \nObscene, Degrading, and/or \nAbusive\
74
+ \ Content; Harmful Bias and \nHomogenization; Dangerous, \nViolent, or Hateful\
75
+ \ Content; CBRN \nInformation or Capabilities \nMS-2.6-003 Re-evaluate safety\
76
+ \ features of fine-tuned models when the negative risk exceeds \norganizational\
77
+ \ risk tolerance. \nDangerous, Violent, or Hateful \nContent \nMS-2.6-004 Review\
78
+ \ GAI system outputs for validity and safety: Review generated code to \nassess\
79
+ \ risks that may arise from unreliable downstream decision-making. \nValue Chain\
80
+ \ and Component \nIntegration; Dangerous, Violent, or \nHateful Content"
81
+ - "Information Integrity; Harmful Bias \nand Homogenization \nAI Actor Tasks: AI\
82
+ \ Deployment, AI Impact Assessment, Domain Experts, End-Users, Operation and Monitoring,\
83
+ \ TEVV \n \nMEASURE 2.10: Privacy risk of the AI system – as identified in the\
84
+ \ MAP function – is examined and documented. \nAction ID \nSuggested Action \n\
85
+ GAI Risks \nMS-2.10-001 \nConduct AI red-teaming to assess issues such as: Outputting\
86
+ \ of training data \nsamples, and subsequent reverse engineering, model extraction,\
87
+ \ and \nmembership inference risks; Revealing biometric, confidential, copyrighted,\
88
+ \ \nlicensed, patented, personal, proprietary, sensitive, or trade-marked information;\
89
+ \ \nTracking or revealing location information of users or members of training\
90
+ \ \ndatasets. \nHuman-AI Configuration; \nInformation Integrity; Intellectual \n\
91
+ Property \nMS-2.10-002 \nEngage directly with end-users and other stakeholders\
92
+ \ to understand their \nexpectations and concerns regarding content provenance.\
93
+ \ Use this feedback to"
94
+ - source_sentence: What does this text say about risk management?
95
+ sentences:
96
+ - "robust watermarking techniques and corresponding detectors to identify the source\
97
+ \ of content or \nmetadata recording techniques and metadata management tools\
98
+ \ and repositories to trace content \norigins and modifications. Further narrowing\
99
+ \ of GAI task definitions to include provenance data can \nenable organizations\
100
+ \ to maximize the utility of provenance data and risk management efforts. \nA.1.7.\
101
+ \ Enhancing Content Provenance through Structured Public Feedback \nWhile indirect\
102
+ \ feedback methods such as automated error collection systems are useful, they\
103
+ \ often lack \nthe context and depth that direct input from end users can provide.\
104
+ \ Organizations can leverage feedback \napproaches described in the Pre-Deployment\
105
+ \ Testing section to capture input from external sources such \nas through AI\
106
+ \ red-teaming. \nIntegrating pre- and post-deployment external feedback into\
107
+ \ the monitoring process for GAI models and"
108
+ - "tools for monitoring third-party GAI risks; Consider policy adjustments across\
109
+ \ GAI \nmodeling libraries, tools and APIs, fine-tuned models, and embedded tools;\
110
+ \ \nAssess GAI vendors, open-source or proprietary GAI tools, or GAI service \n\
111
+ providers against incident or vulnerability databases. \nData Privacy; Human-AI\
112
+ \ \nConfiguration; Information \nSecurity; Intellectual Property; \nValue Chain\
113
+ \ and Component \nIntegration; Harmful Bias and \nHomogenization \nGV-6.1-010\
114
+ \ \nUpdate GAI acceptable use policies to address proprietary and open-source\
115
+ \ GAI \ntechnologies and data, and contractors, consultants, and other third-party\
116
+ \ \npersonnel. \nIntellectual Property; Value Chain \nand Component Integration\
117
+ \ \nAI Actor Tasks: Operation and Monitoring, Procurement, Third-party entities\
118
+ \ \n \nGOVERN 6.2: Contingency processes are in place to handle failures or incidents\
119
+ \ in third-party data or AI systems deemed to be \nhigh-risk. \nAction ID \nSuggested\
120
+ \ Action \nGAI Risks \nGV-6.2-001"
121
+ - "MEASURE 2.3: AI system performance or assurance criteria are measured qualitatively\
122
+ \ or quantitatively and demonstrated for \nconditions similar to deployment setting(s).\
123
+ \ Measures are documented. \nAction ID \nSuggested Action \nGAI Risks \nMS-2.3-001\
124
+ \ Consider baseline model performance on suites of benchmarks when selecting a\
125
+ \ \nmodel for fine tuning or enhancement with retrieval-augmented generation. \n\
126
+ Information Security; \nConfabulation \nMS-2.3-002 Evaluate claims of model capabilities\
127
+ \ using empirically validated methods. \nConfabulation; Information \nSecurity\
128
+ \ \nMS-2.3-003 Share results of pre-deployment testing with relevant GAI Actors,\
129
+ \ such as those \nwith system release approval authority. \nHuman-AI Configuration\
130
+ \ \n \n31 \nMS-2.3-004 \nUtilize a purpose-built testing environment such as NIST\
131
+ \ Dioptra to empirically \nevaluate GAI trustworthy characteristics. \nCBRN Information\
132
+ \ or Capabilities; \nData Privacy; Confabulation; \nInformation Integrity; Information\
133
+ \ \nSecurity; Dangerous, Violent, or"
134
+ - source_sentence: What does this text say about unclassified?
135
+ sentences:
136
+ - "techniques such as re-sampling, re-ranking, or adversarial training to mitigate\
137
+ \ \nbiases in the generated content. \nInformation Security; Harmful Bias \nand\
138
+ \ Homogenization \nMG-2.2-005 \nEngage in due diligence to analyze GAI output\
139
+ \ for harmful content, potential \nmisinformation, and CBRN-related or NCII content.\
140
+ \ \nCBRN Information or Capabilities; \nObscene, Degrading, and/or \nAbusive Content;\
141
+ \ Harmful Bias and \nHomogenization; Dangerous, \nViolent, or Hateful Content\
142
+ \ \n \n41 \nMG-2.2-006 \nUse feedback from internal and external AI Actors, users,\
143
+ \ individuals, and \ncommunities, to assess impact of AI-generated content. \n\
144
+ Human-AI Configuration \nMG-2.2-007 \nUse real-time auditing tools where they can\
145
+ \ be demonstrated to aid in the \ntracking and validation of the lineage and authenticity\
146
+ \ of AI-generated data. \nInformation Integrity \nMG-2.2-008 \nUse structured\
147
+ \ feedback mechanisms to solicit and capture user input about AI-\ngenerated content\
148
+ \ to detect subtle shifts in quality or alignment with"
149
+ - "Human-AI Configuration; Value \nChain and Component Integration \nMP-5.2-002 \n\
150
+ Plan regular engagements with AI Actors responsible for inputs to GAI systems,\
151
+ \ \nincluding third-party data and algorithms, to review and evaluate unanticipated\
152
+ \ \nimpacts. \nHuman-AI Configuration; Value \nChain and Component Integration\
153
+ \ \nAI Actor Tasks: AI Deployment, AI Design, AI Impact Assessment, Affected Individuals\
154
+ \ and Communities, Domain Experts, End-\nUsers, Human Factors, Operation and Monitoring\
155
+ \ \n \nMEASURE 1.1: Approaches and metrics for measurement of AI risks enumerated\
156
+ \ during the MAP function are selected for \nimplementation starting with the\
157
+ \ most significant AI risks. The risks or trustworthiness characteristics that\
158
+ \ will not – or cannot – be \nmeasured are properly documented. \nAction ID \n\
159
+ Suggested Action \nGAI Risks \nMS-1.1-001 Employ methods to trace the origin and\
160
+ \ modifications of digital content. \nInformation Integrity \nMS-1.1-002"
161
+ - "input them directly to a GAI system, with a variety of downstream negative consequences\
162
+ \ to \ninterconnected systems. Indirect prompt injection attacks occur when adversaries\
163
+ \ remotely (i.e., without \na direct interface) exploit LLM-integrated applications\
164
+ \ by injecting prompts into data likely to be \nretrieved. Security researchers\
165
+ \ have already demonstrated how indirect prompt injections can exploit \nvulnerabilities\
166
+ \ by stealing proprietary data or running malicious code remotely on a machine.\
167
+ \ Merely \nquerying a closed production model can elicit previously undisclosed\
168
+ \ information about that model. \nAnother cybersecurity risk to GAI is data poisoning,\
169
+ \ in which an adversary compromises a training \ndataset used by a model to manipulate\
170
+ \ its outputs or operation. Malicious tampering with data or parts \nof the model\
171
+ \ could exacerbate risks associated with GAI system outputs. \nTrustworthy AI\
172
+ \ Characteristics: Privacy Enhanced, Safe, Secure and Resilient, Valid and Reliable\
173
+ \ \n2.10."
174
+ - source_sentence: What does this text say about data privacy?
175
+ sentences:
176
+ - "Property. We also note that some risks are cross-cutting between these categories.\
177
+ \ \n \n4 \n1. CBRN Information or Capabilities: Eased access to or synthesis\
178
+ \ of materially nefarious \ninformation or design capabilities related to chemical,\
179
+ \ biological, radiological, or nuclear (CBRN) \nweapons or other dangerous materials\
180
+ \ or agents. \n2. Confabulation: The production of confidently stated but erroneous\
181
+ \ or false content (known \ncolloquially as “hallucinations” or “fabrications”)\
182
+ \ by which users may be misled or deceived.6 \n3. Dangerous, Violent, or Hateful\
183
+ \ Content: Eased production of and access to violent, inciting, \nradicalizing,\
184
+ \ or threatening content as well as recommendations to carry out self-harm or\
185
+ \ \nconduct illegal activities. Includes difficulty controlling public exposure\
186
+ \ to hateful and disparaging \nor stereotyping content. \n4. Data Privacy: Impacts\
187
+ \ due to leakage and unauthorized use, disclosure, or de-anonymization of"
188
+ - "information during GAI training and maintenance. \nHuman-AI Configuration; Obscene,\
189
+ \ \nDegrading, and/or Abusive \nContent; Value Chain and \nComponent Integration;\
190
+ \ \nDangerous, Violent, or Hateful \nContent \nMS-2.6-002 \nAssess existence or\
191
+ \ levels of harmful bias, intellectual property infringement, \ndata privacy violations,\
192
+ \ obscenity, extremism, violence, or CBRN information in \nsystem training data.\
193
+ \ \nData Privacy; Intellectual Property; \nObscene, Degrading, and/or \nAbusive\
194
+ \ Content; Harmful Bias and \nHomogenization; Dangerous, \nViolent, or Hateful\
195
+ \ Content; CBRN \nInformation or Capabilities \nMS-2.6-003 Re-evaluate safety\
196
+ \ features of fine-tuned models when the negative risk exceeds \norganizational\
197
+ \ risk tolerance. \nDangerous, Violent, or Hateful \nContent \nMS-2.6-004 Review\
198
+ \ GAI system outputs for validity and safety: Review generated code to \nassess\
199
+ \ risks that may arise from unreliable downstream decision-making. \nValue Chain\
200
+ \ and Component \nIntegration; Dangerous, Violent, or \nHateful Content"
201
+ - "Scheurer, J. et al. (2023) Technical report: Large language models can strategically\
202
+ \ deceive their users \nwhen put under pressure. arXiv. https://arxiv.org/abs/2311.07590\
203
+ \ \nShelby, R. et al. (2023) Sociotechnical Harms of Algorithmic Systems: Scoping\
204
+ \ a Taxonomy for Harm \nReduction. arXiv. https://arxiv.org/pdf/2210.05791 \n\
205
+ Shevlane, T. et al. (2023) Model evaluation for extreme risks. arXiv. https://arxiv.org/pdf/2305.15324\
206
+ \ \nShumailov, I. et al. (2023) The curse of recursion: training on generated\
207
+ \ data makes models forget. arXiv. \nhttps://arxiv.org/pdf/2305.17493v2 \nSmith,\
208
+ \ A. et al. (2023) Hallucination or Confabulation? Neuroanatomy as metaphor in\
209
+ \ Large Language \nModels. PLOS Digital Health. \nhttps://journals.plos.org/digitalhealth/article?id=10.1371/journal.pdig.0000388\
210
+ \ \nSoice, E. et al. (2023) Can large language models democratize access to dual-use\
211
+ \ biotechnology? arXiv. \nhttps://arxiv.org/abs/2306.03809"
212
+ ---
213
+
214
+ # SentenceTransformer based on sentence-transformers/all-MiniLM-L6-v2
215
+
216
+ This is a [sentence-transformers](https://www.SBERT.net) model finetuned from [sentence-transformers/all-MiniLM-L6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2). It maps sentences & paragraphs to a 384-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.
217
+
218
+ ## Model Details
219
+
220
+ ### Model Description
221
+ - **Model Type:** Sentence Transformer
222
+ - **Base model:** [sentence-transformers/all-MiniLM-L6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) <!-- at revision 8b3219a92973c328a8e22fadcfa821b5dc75636a -->
223
+ - **Maximum Sequence Length:** 256 tokens
224
+ - **Output Dimensionality:** 384 tokens
225
+ - **Similarity Function:** Cosine Similarity
226
+ <!-- - **Training Dataset:** Unknown -->
227
+ <!-- - **Language:** Unknown -->
228
+ <!-- - **License:** Unknown -->
229
+
230
+ ### Model Sources
231
+
232
+ - **Documentation:** [Sentence Transformers Documentation](https://sbert.net)
233
+ - **Repository:** [Sentence Transformers on GitHub](https://github.com/UKPLab/sentence-transformers)
234
+ - **Hugging Face:** [Sentence Transformers on Hugging Face](https://huggingface.co/models?library=sentence-transformers)
235
+
236
+ ### Full Model Architecture
237
+
238
+ ```
239
+ SentenceTransformer(
240
+ (0): Transformer({'max_seq_length': 256, 'do_lower_case': False}) with Transformer model: BertModel
241
+ (1): Pooling({'word_embedding_dimension': 384, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
242
+ (2): Normalize()
243
+ )
244
+ ```
245
+
246
+ ## Usage
247
+
248
+ ### Direct Usage (Sentence Transformers)
249
+
250
+ First install the Sentence Transformers library:
251
+
252
+ ```bash
253
+ pip install -U sentence-transformers
254
+ ```
255
+
256
+ Then you can load this model and run inference.
257
+ ```python
258
+ from sentence_transformers import SentenceTransformer
259
+
260
+ # Download from the 🤗 Hub
261
+ model = SentenceTransformer("sentence_transformers_model_id")
262
+ # Run inference
263
+ sentences = [
264
+ 'What does this text say about data privacy?',
265
+ 'information during GAI training and maintenance. \nHuman-AI Configuration; Obscene, \nDegrading, and/or Abusive \nContent; Value Chain and \nComponent Integration; \nDangerous, Violent, or Hateful \nContent \nMS-2.6-002 \nAssess existence or levels of harmful bias, intellectual property infringement, \ndata privacy violations, obscenity, extremism, violence, or CBRN information in \nsystem training data. \nData Privacy; Intellectual Property; \nObscene, Degrading, and/or \nAbusive Content; Harmful Bias and \nHomogenization; Dangerous, \nViolent, or Hateful Content; CBRN \nInformation or Capabilities \nMS-2.6-003 Re-evaluate safety features of fine-tuned models when the negative risk exceeds \norganizational risk tolerance. \nDangerous, Violent, or Hateful \nContent \nMS-2.6-004 Review GAI system outputs for validity and safety: Review generated code to \nassess risks that may arise from unreliable downstream decision-making. \nValue Chain and Component \nIntegration; Dangerous, Violent, or \nHateful Content',
266
+ 'Scheurer, J. et al. (2023) Technical report: Large language models can strategically deceive their users \nwhen put under pressure. arXiv. https://arxiv.org/abs/2311.07590 \nShelby, R. et al. (2023) Sociotechnical Harms of Algorithmic Systems: Scoping a Taxonomy for Harm \nReduction. arXiv. https://arxiv.org/pdf/2210.05791 \nShevlane, T. et al. (2023) Model evaluation for extreme risks. arXiv. https://arxiv.org/pdf/2305.15324 \nShumailov, I. et al. (2023) The curse of recursion: training on generated data makes models forget. arXiv. \nhttps://arxiv.org/pdf/2305.17493v2 \nSmith, A. et al. (2023) Hallucination or Confabulation? Neuroanatomy as metaphor in Large Language \nModels. PLOS Digital Health. \nhttps://journals.plos.org/digitalhealth/article?id=10.1371/journal.pdig.0000388 \nSoice, E. et al. (2023) Can large language models democratize access to dual-use biotechnology? arXiv. \nhttps://arxiv.org/abs/2306.03809',
267
+ ]
268
+ embeddings = model.encode(sentences)
269
+ print(embeddings.shape)
270
+ # [3, 384]
271
+
272
+ # Get the similarity scores for the embeddings
273
+ similarities = model.similarity(embeddings, embeddings)
274
+ print(similarities.shape)
275
+ # [3, 3]
276
+ ```
277
+
278
+ <!--
279
+ ### Direct Usage (Transformers)
280
+
281
+ <details><summary>Click to see the direct usage in Transformers</summary>
282
+
283
+ </details>
284
+ -->
285
+
286
+ <!--
287
+ ### Downstream Usage (Sentence Transformers)
288
+
289
+ You can finetune this model on your own dataset.
290
+
291
+ <details><summary>Click to expand</summary>
292
+
293
+ </details>
294
+ -->
295
+
296
+ <!--
297
+ ### Out-of-Scope Use
298
+
299
+ *List how the model may foreseeably be misused and address what users ought not to do with the model.*
300
+ -->
301
+
302
+ <!--
303
+ ## Bias, Risks and Limitations
304
+
305
+ *What are the known or foreseeable issues stemming from this model? You could also flag here known failure cases or weaknesses of the model.*
306
+ -->
307
+
308
+ <!--
309
+ ### Recommendations
310
+
311
+ *What are recommendations with respect to the foreseeable issues? For example, filtering explicit content.*
312
+ -->
313
+
314
+ ## Training Details
315
+
316
+ ### Training Dataset
317
+
318
+ #### Unnamed Dataset
319
+
320
+
321
+ * Size: 555 training samples
322
+ * Columns: <code>sentence_0</code> and <code>sentence_1</code>
323
+ * Approximate statistics based on the first 555 samples:
324
+ | | sentence_0 | sentence_1 |
325
+ |:--------|:----------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------|
326
+ | type | string | string |
327
+ | details | <ul><li>min: 10 tokens</li><li>mean: 11.2 tokens</li><li>max: 12 tokens</li></ul> | <ul><li>min: 156 tokens</li><li>mean: 199.37 tokens</li><li>max: 256 tokens</li></ul> |
328
+ * Samples:
329
+ | sentence_0 | sentence_1 |
330
+ |:------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
331
+ | <code>What does this text say about trustworthiness?</code> | <code>other systems. <br>Information Integrity; Value Chain <br>and Component Integration <br>MP-2.2-002 <br>Observe and analyze how the GAI system interacts with external networks, and <br>identify any potential for negative externalities, particularly where content <br>provenance might be compromised. <br>Information Integrity <br>AI Actor Tasks: End Users <br> <br>MAP 2.3: Scientific integrity and TEVV considerations are identified and documented, including those related to experimental <br>design, data collection and selection (e.g., availability, representativeness, suitability), system trustworthiness, and construct <br>validation <br>Action ID <br>Suggested Action <br>GAI Risks <br>MP-2.3-001 <br>Assess the accuracy, quality, reliability, and authenticity of GAI output by <br>comparing it to a set of known ground truth data and by using a variety of <br>evaluation methods (e.g., human oversight and automated evaluation, proven <br>cryptographic techniques, review of content inputs). <br>Information Integrity <br> <br>25</code> |
332
+ | <code>What does this text say about unclassified?</code> | <code>training and TEVV data; Filtering of hate speech or content in GAI system <br>training data; Prevalence of GAI-generated data in GAI system training data. <br>Harmful Bias and Homogenization <br> <br> <br>15 Winogender Schemas is a sample set of paired sentences which differ only by gender of the pronouns used, <br>which can be used to evaluate gender bias in natural language processing coreference resolution systems. <br> <br>37 <br>MS-2.11-005 <br>Assess the proportion of synthetic to non-synthetic training data and verify <br>training data is not overly homogenous or GAI-produced to mitigate concerns of <br>model collapse. <br>Harmful Bias and Homogenization <br>AI Actor Tasks: AI Deployment, AI Impact Assessment, Affected Individuals and Communities, Domain Experts, End-Users, <br>Operation and Monitoring, TEVV <br> <br>MEASURE 2.12: Environmental impact and sustainability of AI model training and management activities – as identified in the MAP <br>function – are assessed and documented. <br>Action ID <br>Suggested Action <br>GAI Risks</code> |
333
+ | <code>What does this text say about unclassified?</code> | <code>Padmakumar, V. et al. (2024) Does writing with language models reduce content diversity? ICLR. <br>https://arxiv.org/pdf/2309.05196 <br>Park, P. et. al. (2024) AI deception: A survey of examples, risks, and potential solutions. Patterns, 5(5). <br>arXiv. https://arxiv.org/pdf/2308.14752 <br>Partnership on AI (2023) Building a Glossary for Synthetic Media Transparency Methods, Part 1: Indirect <br>Disclosure. https://partnershiponai.org/glossary-for-synthetic-media-transparency-methods-part-1-<br>indirect-disclosure/ <br>Qu, Y. et al. (2023) Unsafe Diffusion: On the Generation of Unsafe Images and Hateful Memes From Text-<br>To-Image Models. arXiv. https://arxiv.org/pdf/2305.13873 <br>Rafat, K. et al. (2023) Mitigating carbon footprint for knowledge distillation based deep learning model <br>compression. PLOS One. https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0285668 <br>Said, I. et al. (2022) Nonconsensual Distribution of Intimate Images: Exploring the Role of Legal Attitudes</code> |
334
+ * Loss: [<code>MultipleNegativesRankingLoss</code>](https://sbert.net/docs/package_reference/sentence_transformer/losses.html#multiplenegativesrankingloss) with these parameters:
335
+ ```json
336
+ {
337
+ "scale": 20.0,
338
+ "similarity_fct": "cos_sim"
339
+ }
340
+ ```
341
+
342
+ ### Training Hyperparameters
343
+ #### Non-Default Hyperparameters
344
+
345
+ - `per_device_train_batch_size`: 16
346
+ - `per_device_eval_batch_size`: 16
347
+ - `multi_dataset_batch_sampler`: round_robin
348
+
349
+ #### All Hyperparameters
350
+ <details><summary>Click to expand</summary>
351
+
352
+ - `overwrite_output_dir`: False
353
+ - `do_predict`: False
354
+ - `eval_strategy`: no
355
+ - `prediction_loss_only`: True
356
+ - `per_device_train_batch_size`: 16
357
+ - `per_device_eval_batch_size`: 16
358
+ - `per_gpu_train_batch_size`: None
359
+ - `per_gpu_eval_batch_size`: None
360
+ - `gradient_accumulation_steps`: 1
361
+ - `eval_accumulation_steps`: None
362
+ - `torch_empty_cache_steps`: None
363
+ - `learning_rate`: 5e-05
364
+ - `weight_decay`: 0.0
365
+ - `adam_beta1`: 0.9
366
+ - `adam_beta2`: 0.999
367
+ - `adam_epsilon`: 1e-08
368
+ - `max_grad_norm`: 1
369
+ - `num_train_epochs`: 3
370
+ - `max_steps`: -1
371
+ - `lr_scheduler_type`: linear
372
+ - `lr_scheduler_kwargs`: {}
373
+ - `warmup_ratio`: 0.0
374
+ - `warmup_steps`: 0
375
+ - `log_level`: passive
376
+ - `log_level_replica`: warning
377
+ - `log_on_each_node`: True
378
+ - `logging_nan_inf_filter`: True
379
+ - `save_safetensors`: True
380
+ - `save_on_each_node`: False
381
+ - `save_only_model`: False
382
+ - `restore_callback_states_from_checkpoint`: False
383
+ - `no_cuda`: False
384
+ - `use_cpu`: False
385
+ - `use_mps_device`: False
386
+ - `seed`: 42
387
+ - `data_seed`: None
388
+ - `jit_mode_eval`: False
389
+ - `use_ipex`: False
390
+ - `bf16`: False
391
+ - `fp16`: False
392
+ - `fp16_opt_level`: O1
393
+ - `half_precision_backend`: auto
394
+ - `bf16_full_eval`: False
395
+ - `fp16_full_eval`: False
396
+ - `tf32`: None
397
+ - `local_rank`: 0
398
+ - `ddp_backend`: None
399
+ - `tpu_num_cores`: None
400
+ - `tpu_metrics_debug`: False
401
+ - `debug`: []
402
+ - `dataloader_drop_last`: False
403
+ - `dataloader_num_workers`: 0
404
+ - `dataloader_prefetch_factor`: None
405
+ - `past_index`: -1
406
+ - `disable_tqdm`: False
407
+ - `remove_unused_columns`: True
408
+ - `label_names`: None
409
+ - `load_best_model_at_end`: False
410
+ - `ignore_data_skip`: False
411
+ - `fsdp`: []
412
+ - `fsdp_min_num_params`: 0
413
+ - `fsdp_config`: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
414
+ - `fsdp_transformer_layer_cls_to_wrap`: None
415
+ - `accelerator_config`: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
416
+ - `deepspeed`: None
417
+ - `label_smoothing_factor`: 0.0
418
+ - `optim`: adamw_torch
419
+ - `optim_args`: None
420
+ - `adafactor`: False
421
+ - `group_by_length`: False
422
+ - `length_column_name`: length
423
+ - `ddp_find_unused_parameters`: None
424
+ - `ddp_bucket_cap_mb`: None
425
+ - `ddp_broadcast_buffers`: False
426
+ - `dataloader_pin_memory`: True
427
+ - `dataloader_persistent_workers`: False
428
+ - `skip_memory_metrics`: True
429
+ - `use_legacy_prediction_loop`: False
430
+ - `push_to_hub`: False
431
+ - `resume_from_checkpoint`: None
432
+ - `hub_model_id`: None
433
+ - `hub_strategy`: every_save
434
+ - `hub_private_repo`: False
435
+ - `hub_always_push`: False
436
+ - `gradient_checkpointing`: False
437
+ - `gradient_checkpointing_kwargs`: None
438
+ - `include_inputs_for_metrics`: False
439
+ - `eval_do_concat_batches`: True
440
+ - `fp16_backend`: auto
441
+ - `push_to_hub_model_id`: None
442
+ - `push_to_hub_organization`: None
443
+ - `mp_parameters`:
444
+ - `auto_find_batch_size`: False
445
+ - `full_determinism`: False
446
+ - `torchdynamo`: None
447
+ - `ray_scope`: last
448
+ - `ddp_timeout`: 1800
449
+ - `torch_compile`: False
450
+ - `torch_compile_backend`: None
451
+ - `torch_compile_mode`: None
452
+ - `dispatch_batches`: None
453
+ - `split_batches`: None
454
+ - `include_tokens_per_second`: False
455
+ - `include_num_input_tokens_seen`: False
456
+ - `neftune_noise_alpha`: None
457
+ - `optim_target_modules`: None
458
+ - `batch_eval_metrics`: False
459
+ - `eval_on_start`: False
460
+ - `eval_use_gather_object`: False
461
+ - `batch_sampler`: batch_sampler
462
+ - `multi_dataset_batch_sampler`: round_robin
463
+
464
+ </details>
465
+
466
+ ### Framework Versions
467
+ - Python: 3.11.5
468
+ - Sentence Transformers: 3.1.1
469
+ - Transformers: 4.44.2
470
+ - PyTorch: 2.4.1+cpu
471
+ - Accelerate: 0.34.2
472
+ - Datasets: 3.0.0
473
+ - Tokenizers: 0.19.1
474
+
475
+ ## Citation
476
+
477
+ ### BibTeX
478
+
479
+ #### Sentence Transformers
480
+ ```bibtex
481
+ @inproceedings{reimers-2019-sentence-bert,
482
+ title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
483
+ author = "Reimers, Nils and Gurevych, Iryna",
484
+ booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
485
+ month = "11",
486
+ year = "2019",
487
+ publisher = "Association for Computational Linguistics",
488
+ url = "https://arxiv.org/abs/1908.10084",
489
+ }
490
+ ```
491
+
492
+ #### MultipleNegativesRankingLoss
493
+ ```bibtex
494
+ @misc{henderson2017efficient,
495
+ title={Efficient Natural Language Response Suggestion for Smart Reply},
496
+ author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
497
+ year={2017},
498
+ eprint={1705.00652},
499
+ archivePrefix={arXiv},
500
+ primaryClass={cs.CL}
501
+ }
502
+ ```
503
+
504
+ <!--
505
+ ## Glossary
506
+
507
+ *Clearly define terms in order to be accessible across audiences.*
508
+ -->
509
+
510
+ <!--
511
+ ## Model Card Authors
512
+
513
+ *Lists the people who create the model card, providing recognition and accountability for the detailed work that goes into its construction.*
514
+ -->
515
+
516
+ <!--
517
+ ## Model Card Contact
518
+
519
+ *Provides a way for people who have updates to the Model Card, suggestions, or questions, to contact the Model Card authors.*
520
+ -->
fine_tuned_embedding_model/config.json ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "sentence-transformers/all-MiniLM-L6-v2",
3
+ "architectures": [
4
+ "BertModel"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "classifier_dropout": null,
8
+ "gradient_checkpointing": false,
9
+ "hidden_act": "gelu",
10
+ "hidden_dropout_prob": 0.1,
11
+ "hidden_size": 384,
12
+ "initializer_range": 0.02,
13
+ "intermediate_size": 1536,
14
+ "layer_norm_eps": 1e-12,
15
+ "max_position_embeddings": 512,
16
+ "model_type": "bert",
17
+ "num_attention_heads": 12,
18
+ "num_hidden_layers": 6,
19
+ "pad_token_id": 0,
20
+ "position_embedding_type": "absolute",
21
+ "torch_dtype": "float32",
22
+ "transformers_version": "4.44.2",
23
+ "type_vocab_size": 2,
24
+ "use_cache": true,
25
+ "vocab_size": 30522
26
+ }
fine_tuned_embedding_model/config_sentence_transformers.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "__version__": {
3
+ "sentence_transformers": "3.1.1",
4
+ "transformers": "4.44.2",
5
+ "pytorch": "2.4.1+cpu"
6
+ },
7
+ "prompts": {},
8
+ "default_prompt_name": null,
9
+ "similarity_fn_name": null
10
+ }
fine_tuned_embedding_model/modules.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "idx": 0,
4
+ "name": "0",
5
+ "path": "",
6
+ "type": "sentence_transformers.models.Transformer"
7
+ },
8
+ {
9
+ "idx": 1,
10
+ "name": "1",
11
+ "path": "1_Pooling",
12
+ "type": "sentence_transformers.models.Pooling"
13
+ },
14
+ {
15
+ "idx": 2,
16
+ "name": "2",
17
+ "path": "2_Normalize",
18
+ "type": "sentence_transformers.models.Normalize"
19
+ }
20
+ ]
fine_tuned_embedding_model/sentence_bert_config.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "max_seq_length": 256,
3
+ "do_lower_case": false
4
+ }
fine_tuned_embedding_model/special_tokens_map.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cls_token": {
3
+ "content": "[CLS]",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "mask_token": {
10
+ "content": "[MASK]",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "pad_token": {
17
+ "content": "[PAD]",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "sep_token": {
24
+ "content": "[SEP]",
25
+ "lstrip": false,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ },
30
+ "unk_token": {
31
+ "content": "[UNK]",
32
+ "lstrip": false,
33
+ "normalized": false,
34
+ "rstrip": false,
35
+ "single_word": false
36
+ }
37
+ }
fine_tuned_embedding_model/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
fine_tuned_embedding_model/tokenizer_config.json ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "[PAD]",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "100": {
12
+ "content": "[UNK]",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "101": {
20
+ "content": "[CLS]",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "102": {
28
+ "content": "[SEP]",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "103": {
36
+ "content": "[MASK]",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ }
43
+ },
44
+ "clean_up_tokenization_spaces": true,
45
+ "cls_token": "[CLS]",
46
+ "do_basic_tokenize": true,
47
+ "do_lower_case": true,
48
+ "mask_token": "[MASK]",
49
+ "max_length": 128,
50
+ "model_max_length": 256,
51
+ "never_split": null,
52
+ "pad_to_multiple_of": null,
53
+ "pad_token": "[PAD]",
54
+ "pad_token_type_id": 0,
55
+ "padding_side": "right",
56
+ "sep_token": "[SEP]",
57
+ "stride": 0,
58
+ "strip_accents": null,
59
+ "tokenize_chinese_chars": true,
60
+ "tokenizer_class": "BertTokenizer",
61
+ "truncation_side": "right",
62
+ "truncation_strategy": "longest_first",
63
+ "unk_token": "[UNK]"
64
+ }
fine_tuned_embedding_model/vocab.txt ADDED
The diff for this file is too large to render. See raw diff
 
ragas_finetune_eval/eval_config.py ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from pathlib import Path
3
+
4
+ # Path to .env file
5
+ ENV_PATH = Path(__file__).parent.parent / '.env'
6
+
7
+ # Configuration settings for evaluation
8
+
9
+ # Model and data paths
10
+ FINE_TUNED_MODEL_PATH = "svb01/fine-tuned-embedding-model"
11
+ TRAINING_DATA_PATH = "../resources/NIST.AI.600-1.pdf" # Adjust this path if needed
12
+
13
+ # RAG settings
14
+ RETRIEVER_K = 6
15
+ LLM_MODEL = "gpt-3.5-turbo"
16
+ LLM_TEMPERATURE = 0
17
+
18
+ # Evaluation settings
19
+ SAMPLE_QUESTIONS = [
20
+ "What are the main objectives of the EU AI Act?",
21
+ "How does the Act define high-risk AI systems?",
22
+ "What are the transparency requirements for AI systems?",
23
+ "How does the Act address AI in the workplace?"
24
+ ]
25
+
26
+ # RAGAS metrics
27
+ RAGAS_METRICS = ["context_precision", "faithfulness", "answer_relevancy"]
28
+
29
+ # Chunk size for text splitting
30
+ CHUNK_SIZE = 750
31
+ CHUNK_OVERLAP = 20
32
+
33
+ BASE_MODEL_NAME = "sentence-transformers/all-MiniLM-L6-v2"
ragas_finetune_eval/eval_data_loader.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain_community.document_loaders import PyPDFLoader
2
+ from langchain_text_splitters import RecursiveCharacterTextSplitter
3
+ from eval_config import CHUNK_SIZE, CHUNK_OVERLAP
4
+
5
+ def load_training_documents(file_path):
6
+ loader = PyPDFLoader(file_path)
7
+ data = loader.load()
8
+
9
+ text_splitter = RecursiveCharacterTextSplitter(
10
+ chunk_size=CHUNK_SIZE,
11
+ chunk_overlap=CHUNK_OVERLAP,
12
+ length_function=len
13
+ )
14
+
15
+ return text_splitter.split_documents(data)
16
+
17
+ def load_sample_questions(questions):
18
+ return questions
ragas_finetune_eval/eval_env_setup.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from dotenv import load_dotenv
3
+ from eval_config import ENV_PATH
4
+
5
+ def load_env_variables():
6
+ if os.path.exists(ENV_PATH):
7
+ load_dotenv(dotenv_path=ENV_PATH)
8
+ if os.getenv("OPENAI_API_KEY"):
9
+ print("OpenAI API key loaded successfully.")
10
+ else:
11
+ print("OpenAI API key not found in .env file.")
12
+ else:
13
+ print(f".env file not found at {ENV_PATH}")
14
+
15
+ # You can add more environment variable checks here if needed
ragas_finetune_eval/eval_main.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from eval_config import *
2
+ from eval_env_setup import load_env_variables
3
+ from eval_data_loader import load_training_documents, load_sample_questions
4
+ from eval_rag_setup import setup_rag_pipeline
5
+ from eval_rag_tester import test_rag_pipeline
6
+ from eval_ragas import run_ragas_evaluation, prepare_ragas_data
7
+
8
+ def main():
9
+ # Load environment variables
10
+ load_env_variables()
11
+
12
+ # Load data
13
+ training_documents = load_training_documents(TRAINING_DATA_PATH)
14
+ sample_questions = load_sample_questions(SAMPLE_QUESTIONS)
15
+
16
+ # Setup RAG pipeline
17
+ rag_chain, retriever = setup_rag_pipeline(
18
+ training_documents,
19
+ FINE_TUNED_MODEL_PATH,
20
+ BASE_MODEL_NAME,
21
+ RETRIEVER_K,
22
+ LLM_MODEL,
23
+ LLM_TEMPERATURE
24
+ )
25
+
26
+ # Test RAG pipeline
27
+ test_results = test_rag_pipeline(rag_chain, sample_questions)
28
+
29
+ # Prepare and run RAGAS evaluation
30
+ ragas_data = prepare_ragas_data(sample_questions, retriever, rag_chain)
31
+ ragas_results = run_ragas_evaluation(ragas_data, RAGAS_METRICS)
32
+
33
+ print("RAGAS Evaluation Results:")
34
+ print(ragas_results)
35
+
36
+ if __name__ == "__main__":
37
+ main()
ragas_finetune_eval/eval_rag_setup.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from langchain_community.vectorstores import FAISS
3
+ from langchain_core.prompts import ChatPromptTemplate
4
+ from langchain_openai import ChatOpenAI
5
+ from sentence_transformers import SentenceTransformer
6
+ from langchain_huggingface import HuggingFaceEmbeddings
7
+ from operator import itemgetter
8
+ from langchain_core.output_parsers import StrOutputParser
9
+ from langchain_core.runnables import RunnablePassthrough
10
+ from huggingface_hub import hf_hub_download, list_repo_files
11
+ import os
12
+ from dotenv import load_dotenv
13
+ from safetensors import safe_open
14
+
15
+ def setup_rag_pipeline(training_documents, model_path, base_model_name, retriever_k, llm_model, llm_temperature):
16
+ # Load environment variables
17
+ load_dotenv()
18
+ hf_token = os.getenv('HF_TOKEN')
19
+
20
+ # Load the fine-tuned model directly
21
+ fine_tuned_model = SentenceTransformer(model_path, use_auth_token=hf_token)
22
+
23
+ # Create embeddings using the fine-tuned model
24
+ fine_tuned_embeddings = HuggingFaceEmbeddings(model_name=model_path, model_kwargs={'device': 'cpu'})
25
+
26
+ vectorstore = FAISS.from_documents(training_documents, fine_tuned_embeddings)
27
+ retriever = vectorstore.as_retriever(search_kwargs={"k": retriever_k})
28
+
29
+ RAG_PROMPT = """
30
+ You are an AI assistant specializing in the EU AI Act. Given the context and question below, provide a concise and accurate answer. If the information is not in the context, state that you don't have enough information to answer.
31
+
32
+ Context:
33
+ {context}
34
+
35
+ Question:
36
+ {question}
37
+
38
+ Answer:
39
+ """
40
+ rag_prompt_template = ChatPromptTemplate.from_template(RAG_PROMPT)
41
+
42
+ rag_llm = ChatOpenAI(model=llm_model, temperature=llm_temperature)
43
+
44
+ rag_chain = (
45
+ {"context": itemgetter("question") | retriever, "question": itemgetter("question")}
46
+ | RunnablePassthrough.assign(context=itemgetter("context"))
47
+ | {"response": rag_prompt_template | rag_llm | StrOutputParser(), "context": itemgetter("context")}
48
+ )
49
+
50
+ return rag_chain, retriever
ragas_finetune_eval/eval_rag_tester.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ def test_rag_pipeline(rag_chain, questions):
2
+ results = []
3
+ for question in questions:
4
+ response = rag_chain.invoke({"question": question})
5
+ results.append({
6
+ "question": question,
7
+ "answer": response['response']
8
+ })
9
+ print(f"Question: {question}")
10
+ print(f"Answer: {response['response']}\n")
11
+ return results
ragas_finetune_eval/eval_ragas.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from ragas import evaluate
2
+ from datasets import Dataset
3
+
4
+ def run_ragas_evaluation(test_data, metrics):
5
+ test_dataset = Dataset.from_list(test_data)
6
+ result = evaluate(test_dataset, metrics=metrics)
7
+ return result
8
+
9
+ def prepare_ragas_data(questions, retriever, rag_chain):
10
+ test_data = [
11
+ {
12
+ "question": q,
13
+ "contexts": [c.page_content for c in retriever.get_relevant_documents(q)],
14
+ "answer": rag_chain.invoke({"question": q})["response"]
15
+ }
16
+ for q in questions
17
+ ]
18
+ return test_data