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) |