alexshah commited on
Commit
2ce88ed
·
verified ·
1 Parent(s): 0584a9f

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +158 -1
README.md CHANGED
@@ -1 +1,158 @@
1
- ## ArmEmbed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: transformers
3
+ language:
4
+ - hy
5
+ tags:
6
+ - sentence-transformers
7
+ ---
8
+
9
+ # ArmEmbed - Text Embedding Model for Armenian
10
+
11
+ This embedding model is built on a Llama-based language model pre-trained on Armenian text and further adapted using LoRA on additional Armenian data. It produces 2048-dimensional embeddings.
12
+
13
+
14
+ ## Usage
15
+ Below is an example to encode queries and passages from the MS-MARCO passage ranking dataset.
16
+
17
+ ## Sentence Transformers
18
+ ```python
19
+ from sentence_transformers import SentenceTransformer
20
+
21
+ queries = [
22
+ "Ի՞նչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում:",
23
+ "Կարո՞ղ է արդյոք ոստիկանությունը հետախուզման թույլտվություն ստանալ այն բանից հետո, երբ նրանք տեսել են ապացույցներ:",
24
+ ]
25
+
26
+ passages = [
27
+ "Եվ․․․ Կիսալուսնաձև փականները կանխում են արյան հետհոսքը զարկերակներից դեպի փորոքներ։ Բացատրեք, թե ինչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում: Օրգանի հյուսվածքը սկսում է մահանալ։",
28
+ "Ոստիկանությունը կտրամադրի իր սեփական ապացույցները հետախուզման թույլտվության համար, և կասկածյալը ներկա չէ, երբ թույլտվություն է տրվում: Երբ հետախուզման թույլտվություն է ստացվում, ոստիկանությունը կարող է խուզարկել միայն թույլտվության մեջ նշված վայրը, լինի դա տուն, մեքենա, թե որոշակի արտաքին վայր:",
29
+ ]
30
+
31
+ prefixed_queries = ["query: " + query for query in queries]
32
+ prefixed_passages = [" passage: " + passage for passage in passages]
33
+
34
+ sentence_transformer = SentenceTransformer("alexshah/armembed", trust_remote_code=True)
35
+
36
+ query_embeddings = sentence_transformer.encode(
37
+ prefixed_queries, normalize_embeddings=True
38
+ )
39
+ passage_embeddings = sentence_transformer.encode(
40
+ prefixed_passages, normalize_embeddings=True
41
+ )
42
+
43
+ scores = (query_embeddings @ passage_embeddings.T) * 100
44
+ print(scores.tolist())
45
+ ```
46
+
47
+ ## Transformers
48
+ ```python
49
+ import torch
50
+ import torch.nn.functional as F
51
+ from transformers import AutoModel, AutoTokenizer
52
+
53
+
54
+ def last_token_pool(last_hidden_states, attention_mask):
55
+ left_padding = attention_mask[:, -1].sum() == attention_mask.shape[0]
56
+ if left_padding:
57
+ return last_hidden_states[:, -1]
58
+ else:
59
+ sequence_lengths = attention_mask.sum(dim=1) - 1
60
+ batch_size = last_hidden_states.shape[0]
61
+ return last_hidden_states[
62
+ torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths
63
+ ]
64
+
65
+
66
+ queries = [
67
+ "Ի՞նչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում:",
68
+ "Կարո՞ղ է արդյոք ոստիկանությունը հետախուզման թույլտվություն ստանալ այն բանից հետո, երբ նրանք տեսել են ապացույցներ:",
69
+ ]
70
+
71
+ passages = [
72
+ "Եվ․․․ Կիսալուսնաձև փականները կանխում են արյան հետհոսքը զարկերակներից դեպի փորոքներ։ Բացատրեք, թե ինչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում: Օրգանի հյուսվածքը սկսում է մահանալ։",
73
+ "Ոստիկանությունը կտրամադրի իր սեփական ապացույցները հետախուզման թույլտվության համար, և կասկածյալը ներկա չէ, երբ թույլտվություն է տրվում: Երբ հետախուզման թույլտվություն է ստացվում, ոստիկանությունը կարող է խուզարկել միայն թույլտվության մեջ նշված վայրը, լինի դա տուն, մեքենա, թե որոշակի արտաքին վայր:",
74
+ ]
75
+
76
+ input_texts = ["query: " + query for query in queries] + [
77
+ " passage: " + passage for passage in passages
78
+ ]
79
+
80
+ model = AutoModel.from_pretrained("alexshah/armembed")
81
+ tokenizer = AutoTokenizer.from_pretrained("alexshah/armembed")
82
+
83
+ batch_dict = tokenizer(
84
+ input_texts, max_length=512, padding=True, truncation=True, return_tensors="pt"
85
+ )
86
+ outputs = model(**batch_dict)
87
+ embeddings = last_token_pool(outputs.last_hidden_state, batch_dict["attention_mask"])
88
+
89
+ embeddings = F.normalize(embeddings, p=2, dim=1)
90
+ scores = (embeddings[:2] @ embeddings[2:].T) * 100
91
+ print(scores.tolist())
92
+ ```
93
+
94
+ ## Intended Use
95
+ ### Primary Intended Uses
96
+ - Retrieval-augmented generation (RAG)
97
+ - Semantic search in Armenian
98
+ - Document similarity computation
99
+ - Cross-lingual text understanding
100
+ - Text classification tasks
101
+ - Information retrieval
102
+
103
+ ## Training Data
104
+ ### Dataset Details
105
+ - **Source**: Reddit dataset with English-Armenian translations
106
+ - **Size**: 1.08M pairs of rows
107
+ - **Content Type**: Title and body text pairs
108
+ - **Token Statistics**:
109
+ - Training Set:
110
+ - Translated Title Tokens: 23,921,393
111
+ - Translated Body Tokens: 194,200,654
112
+ - Test Set:
113
+ - Translated Title Tokens: 242,443
114
+ - Translated Body Tokens: 1,946,164
115
+ - **Split Ratio**: 99% train, 1% test
116
+
117
+ ## Training Procedure
118
+ ### Training Details
119
+ - **LoRA**: 16/32/0.1 on all linear layers
120
+ - **Training Duration**: \~15 hours
121
+ - **Hardware**: 4 × NVIDIA A100 (40GB) GPUs
122
+ - **Effective Batch Size**: 128 (2 per GPU × 4 GPUs, with gradient accumulation of 16)
123
+ - **Learning Rate**: 1e-4
124
+ - **Weight Decay**: 0.01
125
+ - **Warmup Steps**: 200
126
+ - **Max Sequence Length**: 512 tokens
127
+ - **FP16 Training**: Enabled
128
+ - **Gradient Clipping**: Likely 1.0
129
+
130
+ ### Optimization Configuration
131
+ - **Framework**: DeepSpeed ZeRO Stage 3
132
+ - **Optimizer**: AdamW with auto learning rate and weight decay
133
+ - **Mixed Precision**: bfloat16 (`bf16`) enabled
134
+ - **ZeRO Optimization**: Stage 3 with:
135
+ - No parameter offloading (`device: none`)
136
+ - Overlap communication enabled
137
+ - Contiguous gradients enabled
138
+ - Auto-tuned reduce and prefetch bucket sizes
139
+ - Auto-tuned parameter persistence threshold
140
+
141
+ ## Technical Specifications
142
+ - **Model Size**: ~1B parameters (based on a Llama-based LLM pre-trained on Armenian data)
143
+ - **Embedding Dimension**: 2048
144
+ - **Max Sequence Length**: 512 tokens
145
+ - **Framework Compatibility**:
146
+ - PyTorch
147
+ - Hugging Face Transformers
148
+ - DeepSpeed
149
+
150
+ ## Model Details
151
+ - **Model Name**: ArmEmbed
152
+ - **Model Type**: Text Embeddings for Armenian Language
153
+ - **Version**: 1.0.0
154
+ - **License**: Apache 2.0
155
+ - **Last Updated**: May 2025
156
+ - **Model Architecture**: Transformer-based embeddings model
157
+ - **Input**: Armenian text
158
+ - **Output**: Dense vector embeddings (size=2048)