File size: 7,090 Bytes
2ce88ed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9623556
2ce88ed
9623556
2ce88ed
 
 
 
 
 
 
 
 
 
 
 
31cc739
2ce88ed
 
 
 
 
 
31cc739
2ce88ed
 
 
 
 
 
8fbe228
2ce88ed
 
 
 
 
 
 
 
 
31cc739
2ce88ed
 
 
 
 
 
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
---
library_name: transformers
language:
- hy
tags:
- sentence-transformers
---

# ArmEmbed - Text Embedding Model for Armenian

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.


## Usage
Below is an example to encode queries and passages from the MS-MARCO passage ranking dataset.

## Sentence Transformers
```python
from sentence_transformers import SentenceTransformer

queries = [
    "Ի՞նչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում:",
    "Կարո՞ղ է արդյոք ոստիկանությունը հետախուզման թույլտվություն ստանալ այն բանից հետո, երբ նրանք տեսել են ապացույցներ:",
]

passages = [
    "Եվ․․․ Կիսալուսնաձև փականները կանխում են արյան հետհոսքը զարկերակներից դեպի փորոքներ։ Բացատրեք, թե ինչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում: Օրգանի հյուսվածքը սկսում է մահանալ։",
    "Ոստիկանությունը կտրամադրի իր սեփական ապացույցները հետախուզման թույլտվության համար, և կասկածյալը ներկա չէ, երբ թույլտվություն է տրվում: Երբ հետախուզման թույլտվություն է ստացվում, ոստիկանությունը կարող է խուզարկել միայն թույլտվության մեջ նշված վայրը, լինի դա տուն, մեքենա, թե որոշակի արտաքին վայր:",
]

prefixed_queries = ["query: " + query for query in queries]
prefixed_passages = [" passage: " + passage for passage in passages]

sentence_transformer = SentenceTransformer("alexshah/armembed", trust_remote_code=True)

query_embeddings = sentence_transformer.encode(
    prefixed_queries, normalize_embeddings=True
)
passage_embeddings = sentence_transformer.encode(
    prefixed_passages, normalize_embeddings=True
)

scores = (query_embeddings @ passage_embeddings.T) * 100
print(scores.tolist())
```

## Transformers
```python
import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoTokenizer


def last_token_pool(last_hidden_states, attention_mask):
    left_padding = attention_mask[:, -1].sum() == attention_mask.shape[0]
    if left_padding:
        return last_hidden_states[:, -1]
    else:
        sequence_lengths = attention_mask.sum(dim=1) - 1
        batch_size = last_hidden_states.shape[0]
        return last_hidden_states[
            torch.arange(batch_size, device=last_hidden_states.device), sequence_lengths
        ]


queries = [
    "Ի՞նչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում:",
    "Կարո՞ղ է արդյոք ոստիկանությունը հետախուզման թույլտվություն ստանալ այն բանից հետո, երբ նրանք տեսել են ապացույցներ:",
]

passages = [
    "Եվ․․․ Կիսալուսնաձև փականները կանխում են արյան հետհոսքը զարկերակներից դեպի փորոքներ։ Բացատրեք, թե ինչ է պատահում հյուսվածքներին, ինչպիսիք են սիրտը կամ ուղեղը, եթե թթվածնով հարուստ արյունը ժամանակին չի մատակարարվում: Օրգանի հյուսվածքը սկսում է մահանալ։",
    "Ոստիկանությունը կտրամադրի իր սեփական ապացույցները հետախուզման թույլտվության համար, և կասկածյալը ներկա չէ, երբ թույլտվություն է տրվում: Երբ հետախուզման թույլտվություն է ստացվում, ոստիկանությունը կարող է խուզարկել միայն թույլտվության մեջ նշված վայրը, լինի դա տուն, մեքենա, թե որոշակի արտաքին վայր:",
]

input_texts = ["query: " + query for query in queries] + [
    " passage: " + passage for passage in passages
]

model = AutoModel.from_pretrained("alexshah/armembed")
tokenizer = AutoTokenizer.from_pretrained("alexshah/armembed")

batch_dict = tokenizer(
    input_texts, max_length=512, padding=True, truncation=True, return_tensors="pt"
)
outputs = model(**batch_dict)
embeddings = last_token_pool(outputs.last_hidden_state, batch_dict["attention_mask"])

embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:2] @ embeddings[2:].T) * 100
print(scores.tolist())
```

## Intended Use
### Primary Intended Uses
- Retrieval-augmented generation (RAG)
- Semantic search in Armenian
- Document similarity computation
- Cross-lingual text understanding
- Text classification tasks
- Information retrieval

## Training Data
### Dataset Details
- **Source**: Reddit dataset with English-Armenian translations
- **Size**: 0.66M pairs of rows
- **Content Type**: Title and body text pairs
- **Split Ratio**: 98.5% train, 1.5% test

## Training Procedure
### Training Details
- **LoRA**: 16/32/0.1 on all linear layers
- **Training Duration**: \~15 hours
- **Hardware**: 4 × NVIDIA A100 (40GB) GPUs
- **Effective Batch Size**: 128 (2 per GPU × 4 GPUs, with gradient accumulation of 16)
- **Learning Rate**: 1e-4
- **Weight Decay**: 0.01
- **Warmup Steps**: 200
- **Max Sequence Length**: 512 tokens
- **FP16 Training**: Enabled 
- **Gradient Clipping**: 1.0

### Optimization Configuration
- **Framework**: DeepSpeed ZeRO Stage 3
- **Optimizer**: AdamW with auto learning rate and weight decay
- **Mixed Precision**: bfloat16 (`bf16`) enabled
- **ZeRO Optimization**: Stage 3 with:
  - No parameter offloading
  - Overlap communication enabled
  - Contiguous gradients enabled
  - Auto-tuned reduce and prefetch bucket sizes
  - Auto-tuned parameter persistence threshold

## Technical Specifications
- **Model Size**: ~1.24B parameters (based on a Llama-style architecture LLM pre-trained on Armenian data)
- **Embedding Dimension**: 2048
- **Max Sequence Length**: 512 tokens
- **Framework Compatibility**: 
  - PyTorch
  - Hugging Face Transformers
  - DeepSpeed

## Model Details
- **Model Name**: ArmEmbed
- **Model Type**: Text Embeddings for the Armenian Language
- **Version**: 1.0.0
- **License**: Apache 2.0
- **Last Updated**: May 2025
- **Model Architecture**: Transformer-based embeddings model
- **Input**: Armenian text
- **Output**: Dense vector embeddings (size=2048)